CharacterArray.st
author Claus Gittinger <cg@exept.de>
Sun, 14 Dec 2014 12:20:23 +0100
changeset 17213 1031d5018042
parent 17205 b266cb703584
child 17215 0906efa5645d
permissions -rw-r--r--
class: CharacterArray comment/format in: #writeStreamClass
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     1
"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1994 by Claus Gittinger
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
     3
              All Rights Reserved
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     4
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
af7aeb79b25e Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    11
"
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
    12
"{ Package: 'stx:libbasic' }"
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
    13
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
    14
UninterpretedBytes variableByteSubclass:#CharacterArray
17205
b266cb703584 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17192
diff changeset
    15
	instanceVariableNames:''
b266cb703584 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17192
diff changeset
    16
	classVariableNames:'PreviousMatch DecoderTables EncoderTables DecodingFailedSignal
b266cb703584 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17192
diff changeset
    17
		EncodingFailedSignal'
b266cb703584 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17192
diff changeset
    18
	poolDictionaries:''
b266cb703584 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17192
diff changeset
    19
	category:'Collections-Text'
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    20
!
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    21
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
    22
!CharacterArray class methodsFor:'documentation'!
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    23
82
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    24
copyright
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    25
"
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    26
 COPYRIGHT (c) 1994 by Claus Gittinger
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    27
              All Rights Reserved
82
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    28
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    29
 This software is furnished under a license and may be used
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    30
 only in accordance with the terms of that license and with the
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    31
 inclusion of the above copyright notice.   This software may not
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    32
 be provided or otherwise made available to, or used by, any
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    33
 other person.  No title to or ownership of the software is
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    34
 hereby transferred.
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    35
"
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    36
!
0147b4f725ae *** empty log message ***
claus
parents: 77
diff changeset
    37
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    38
documentation
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    39
"
255
2b2c5c0facab *** empty log message ***
claus
parents: 247
diff changeset
    40
    CharacterArray is a superclass for all kinds of Strings (i.e.
68
59faa75185ba *** empty log message ***
claus
parents: 64
diff changeset
    41
    (singleByte-)Strings, TwoByteStrings and whatever comes in the future.
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
    42
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
    43
    This class is abstract, meaning that there are no instances of it.
2537
9398b135cec4 comment
Claus Gittinger <cg@exept.de>
parents: 2520
diff changeset
    44
    All this class does is provide common protocol for concrete subclasses.
1290
15ba3221b89b documentation
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
    45
15ba3221b89b documentation
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
    46
    [author:]
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    47
        Claus Gittinger
1290
15ba3221b89b documentation
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
    48
15ba3221b89b documentation
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
    49
    [see also:]
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    50
        String TwoByteString
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    51
        StringCollection
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    52
"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    53
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    54
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    55
!CharacterArray class methodsFor:'initialization'!
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    56
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    57
initialize
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
    58
    DecodingFailedSignal isNil ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    59
        DecodingFailedSignal := DecodingError.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    60
        DecodingFailedSignal notifierString:'error during decode'.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    61
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    62
        EncodingFailedSignal :=EncodingError.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    63
        EncodingFailedSignal notifierString:'error during encode'.
5440
ba9207f592c9 only init once
Claus Gittinger <cg@exept.de>
parents: 5352
diff changeset
    64
    ]
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    65
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    66
    "
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    67
     CharacterArray initialize
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    68
    "
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    69
2833
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
    70
    "Modified: 3.8.1997 / 18:15:59 / cg"
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    71
! !
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
    72
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
    73
!CharacterArray class methodsFor:'instance creation'!
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    74
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    75
basicNew
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    76
    "return a new empty string"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    77
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    78
    ^ self basicNew:0
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    79
!
af7aeb79b25e Initial revision
claus
parents:
diff changeset
    80
2734
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    81
fromBytes:aByteCollection
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    82
    "return an instance of the receiver class,
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    83
     taking untranslated bytes from the argument, aByteCollection.
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    84
     Only useful, when reading twoByteStrings from external sources."
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    85
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    86
    |mySize nBytes newString dstIdx|
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    87
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    88
    nBytes := aByteCollection size.
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    89
    mySize := self basicNew bitsPerCharacter.
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    90
    mySize == 16 ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    91
        newString := self basicNew:(nBytes // 2).
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    92
        dstIdx := 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    93
        aByteCollection pairWiseDo:[:hi :lo |
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    94
            newString at:dstIdx put:(Character value:(hi bitShift:8)+lo).
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    95
            dstIdx := dstIdx + 1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    96
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
    97
        ^ newString.
2734
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    98
    ].
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
    99
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   100
    ^ (self basicNew:nBytes) replaceFrom:1 with:aByteCollection
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   101
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   102
    "
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   103
     TwoByteString fromBytes:#[16r21 16r21]
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   104
    "
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   105
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   106
    "Modified: 30.6.1997 / 20:08:37 / cg"
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   107
!
ab167dc4c5db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2733
diff changeset
   108
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   109
fromString:aString
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   110
    "return a copy of the argument, aString"
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   111
68
59faa75185ba *** empty log message ***
claus
parents: 64
diff changeset
   112
    ^ (self basicNew:(aString size)) replaceFrom:1 with:aString
59faa75185ba *** empty log message ***
claus
parents: 64
diff changeset
   113
59faa75185ba *** empty log message ***
claus
parents: 64
diff changeset
   114
    "TwoByteString fromString:'hello'"
581
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   115
!
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   116
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   117
fromStringCollection:aCollectionOfStrings
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   118
    "return new string formed by concatenating a copy of the argument, aString"
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   119
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   120
    ^ self fromStringCollection:aCollectionOfStrings separatedBy:''
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   121
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   122
    "
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   123
     String fromStringCollection:#('hello' 'world' 'how' 'about' 'this')
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   124
    "
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   125
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   126
    "Created: 20.11.1995 / 15:26:59 / cg"
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   127
!
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   128
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   129
fromStringCollection:aCollectionOfStrings separatedBy:aSeparatorString
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   130
    "return new string formed by concatenating a copy of the argument, aString"
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   131
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   132
    |newString first|
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   133
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   134
    newString := ''.
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   135
    first := true.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   136
    aCollectionOfStrings do:[:s |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   137
        first ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   138
            newString := newString , aSeparatorString
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   139
        ] ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   140
            first := false
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   141
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   142
        newString := newString , s
581
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   143
    ].
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   144
    ^ newString
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   145
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   146
    "
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   147
     String fromStringCollection:#('hello' 'world' 'how' 'about' 'this') separatedBy:' '
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   148
    "
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   149
8a991a4cb738 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   150
    "Created: 20.11.1995 / 15:32:17 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   151
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   152
5757
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   153
fromUTF8Bytes:aByteCollection
5758
30e0cc2213ac utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5757
diff changeset
   154
    "return a new string which represents the characters as decoded
30e0cc2213ac utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5757
diff changeset
   155
     from the utf8 encoded bytes, aByteCollection.
30e0cc2213ac utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5757
diff changeset
   156
     Returns either a normal String, or a TwoByteString instance.
6810
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   157
     Only useful, when reading twoByteStrings from external sources.
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   158
     This only handles up-to 16bit characters"
5757
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   159
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   160
    ^ self decodeFromUTF8:aByteCollection.
5757
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   161
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   162
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   163
     CharacterArray fromUTF8Bytes:#[ 16r41 16r42 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   164
     CharacterArray fromUTF8Bytes:#[ 16rC1 16r02 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   165
     CharacterArray fromUTF8Bytes:#[ 16rE0 16r81 16r02 ]
6810
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   166
     CharacterArray fromUTF8Bytes:#[ 16rEF 16rBF 16rBF ]
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   167
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   168
   rfc2279 examples:
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   169
     CharacterArray fromUTF8Bytes:#[ 16r41 16rE2 16r89 16rA2 16rCE 16r91 16r2E ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   170
     CharacterArray fromUTF8Bytes:#[ 16rED 16r95 16r9C 16rEA 16rB5 16rAD 16rEC 16r96 16rB4 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   171
     CharacterArray fromUTF8Bytes:#[ 16rE6 16r97 16rA5 16rE6 16r9C 16rAC 16rE8 16rAA 16r9E ]
6810
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   172
a055eb19e9d3 caych invalid encodings
Claus Gittinger <cg@exept.de>
parents: 6809
diff changeset
   173
   invalid:
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   174
     CharacterArray fromUTF8Bytes:#[ 16rC0 16r80 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   175
     CharacterArray fromUTF8Bytes:#[ 16rE0 16r80 16r80 ]
5757
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   176
    "
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   177
!
2511dcddce73 utf8 string decoding
Claus Gittinger <cg@exept.de>
parents: 5741
diff changeset
   178
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   179
new
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   180
    "return a new empty string"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   181
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   182
    ^ self basicNew:0
9425
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   183
!
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   184
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   185
readSmalltalkStringFrom:aStreamOrString onError:exceptionBlock
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   186
    "read & return the next String from the (character-)stream aStream;
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   187
     skipping all whitespace first; return the value of exceptionBlock,
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   188
     if no string can be read. The sequence of characters as read from the
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   189
     stream must be one as stored via storeOn: or storeString."
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   190
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   191
    |str collected char|
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   192
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   193
    str := aStreamOrString readStream.
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   194
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   195
    "skip whiteSpace"
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   196
    str skipSeparators.
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
   197
14452
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   198
    (str peekOrNil == $') ifTrue:[
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   199
        str next.
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   200
        collected := self writeStream.
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   201
        [str atEnd] whileFalse:[
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   202
            char := str next.
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   203
            char == $' ifTrue:[
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   204
                "/ look for another quote
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   205
                str peekOrNil ~~ $' ifTrue:[
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   206
                    "end of string reached"
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   207
                    ^ collected contents.
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   208
                ].
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   209
                "eat doubled quote"
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   210
                str next.
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   211
            ].
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   212
            ((char ~~ Character return) or:[str peekOrNil ~~ Character lf]) ifTrue:[
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   213
                "compress CRLF to LF, but keep a single CR"
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   214
                collected nextPut:char.
ef3591302afa changed: #readSmalltalkStringFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 14451
diff changeset
   215
            ].
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
        "if we come here, we reached the end without finding a closing $'"
9425
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   218
    ].
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   219
    ^ exceptionBlock value
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   220
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   221
    "
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   222
     String readFrom:('''hello world''' readStream)
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   223
     String readFrom:('''hello '''' world''' readStream)
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   224
     String readFrom:('1 ''hello'' ' readStream)
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   225
     String readFrom:('1 ''hello'' ' readStream) onError:['foobar']
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   226
    "
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   227
e5a6bf5ad36e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9403
diff changeset
   228
    "Created: / 05-07-2006 / 16:41:04 / cg"
10045
bbd328940fb4 care for cr-lf when reading a smalltalk string
Claus Gittinger <cg@exept.de>
parents: 9845
diff changeset
   229
    "Modified: / 06-10-2006 / 14:05:32 / cg"
11243
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   230
!
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   231
13201
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   232
writeStreamClass
17213
1031d5018042 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17205
diff changeset
   233
    "the class used by writeStream.
1031d5018042 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17205
diff changeset
   234
     Here, we return CharacterWriteStream, which automatically changes
1031d5018042 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17205
diff changeset
   235
     the underlying collection to a multiByte string (i.e. UnicodeString).
1031d5018042 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17205
diff changeset
   236
     So you can stream wide characters into it."
13201
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   237
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   238
    ^ CharacterWriteStream
11243
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   239
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   240
    "
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   241
     String writeStream
4bf099f5bb56 CharacterArray class>>#writeStream - answer a CharacterWriteStrem
Stefan Vogel <sv@exept.de>
parents: 11229
diff changeset
   242
    "
13201
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   243
848ccc41fc90 added: #writeStreamClass
Claus Gittinger <cg@exept.de>
parents: 13170
diff changeset
   244
    "Created: / 09-01-2011 / 10:37:57 / cg"
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   245
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   246
9265
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   247
!CharacterArray class methodsFor:'Compatibility-VW'!
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   248
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   249
fromIntegerArray: anArray
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   250
    "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
   251
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   252
    | new |
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   253
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   254
    new := self new: anArray size.
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   255
    1 to: anArray size do:[:index |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   256
        new at: index put: (anArray at: index) asCharacter
9265
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   257
    ].
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   258
    ^new
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   259
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   260
    "
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   261
     String fromIntegerArray: #[8 127]
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   262
    "
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   263
! !
6221befad9c5 compatibility
Claus Gittinger <cg@exept.de>
parents: 9230
diff changeset
   264
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   265
!CharacterArray class methodsFor:'Signal constants'!
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   266
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   267
decodingFailedSignal
2833
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   268
    "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
   269
     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
   270
     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
   271
     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
   272
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   273
    ^ DecodingFailedSignal
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   274
2833
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   275
    "Created: 28.6.1997 / 20:09:55 / cg"
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   276
    "Modified: 3.8.1997 / 18:16:47 / cg"
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   277
!
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   278
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   279
encodingFailedSignal
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   280
    "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
   281
     due to invalid characters contained in the source."
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   282
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   283
    ^ EncodingFailedSignal
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   284
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   285
    "Modified: 28.6.1997 / 20:09:35 / cg"
2833
f8600b7cb86d provide access to signals
Claus Gittinger <cg@exept.de>
parents: 2813
diff changeset
   286
    "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
   287
! !
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
   288
17165
1e2822c3c74c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17158
diff changeset
   289
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   290
!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
   291
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   292
lowSpaceCleanup
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   293
    "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
   294
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   295
    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
   296
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   297
    "
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   298
     CharacterArray lowSpaceCleanup
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
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   301
    "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
   302
    "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
   303
! !
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
   304
7421
4e6c6edb90d9 category rename
Claus Gittinger <cg@exept.de>
parents: 7349
diff changeset
   305
!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
   306
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   307
decodeFromUTF8:aStringOrByteCollection
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   308
    "return a string which represents the characters as decoded
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   309
     from the utf8 encoded bytes, aByteCollection.
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   310
     Returns either a normal String, or a TwoByteString instance.
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   311
     Only useful, when reading twoByteStrings from external sources.
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   312
     This only handles up-to 16bit characters."
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   313
8124
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
   314
    ^ CharacterEncoderImplementations::ISO10646_to_UTF8 decodeString:aStringOrByteCollection
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   315
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   316
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   317
     CharacterArray fromUTF8Bytes:#[ 16r41 16r42 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   318
     CharacterArray fromUTF8Bytes:#[ 16rC1 16r02 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   319
     CharacterArray fromUTF8Bytes:#[ 16rE0 16r81 16r02 ]
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   320
     CharacterArray fromUTF8Bytes:#[ 16rEF 16rBF 16rBF ]
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   321
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   322
   rfc2279 examples:
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   323
     CharacterArray fromUTF8Bytes:#[ 16r41 16rE2 16r89 16rA2 16rCE 16r91 16r2E ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   324
     CharacterArray fromUTF8Bytes:#[ 16rED 16r95 16r9C 16rEA 16rB5 16rAD 16rEC 16r96 16rB4 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   325
     CharacterArray fromUTF8Bytes:#[ 16rE6 16r97 16rA5 16rE6 16r9C 16rAC 16rE8 16rAA 16r9E ]
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   326
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   327
   invalid:
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   328
     CharacterArray fromUTF8Bytes:#[ 16rC0 16r80 ]
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   329
     CharacterArray fromUTF8Bytes:#[ 16rE0 16r80 16r80 ]
7876
56ab739f1843 +decodeUTF8
Claus Gittinger <cg@exept.de>
parents: 7797
diff changeset
   330
    "
443
Claus Gittinger <cg@exept.de>
parents: 428
diff changeset
   331
! !
Claus Gittinger <cg@exept.de>
parents: 428
diff changeset
   332
17061
c1de9e428073 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17043
diff changeset
   333
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
   334
!CharacterArray class methodsFor:'pattern matching'!
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
   335
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   336
matchEscapeCharacter
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   337
    "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
   338
     (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
   339
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   340
    ^ $\
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   341
!
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   342
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   343
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
   344
    "helper for match; return true if the characters from start to stop in
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   345
     aString are matching the scan in matchScan from matchStart to matchStop.
328
claus
parents: 327
diff changeset
   346
     The matchScan is as created by asMatchScanArray.
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   347
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   348
     This algorithm is not at all the most efficient;
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   349
     for heavy duty pattern matching, an interface (primitive) to the regex
328
claus
parents: 327
diff changeset
   350
     pattern matching package should be added."
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   351
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   352
    |matchEntry
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   353
     mStart "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   354
     mStop  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   355
     sStart "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   356
     sStop  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   357
     mSize  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   358
     sSize  "{ Class: SmallInteger }"
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   359
     index  "{ Class: SmallInteger }"
2561
205ee33decf9 removed unused var
Claus Gittinger <cg@exept.de>
parents: 2554
diff changeset
   360
     quickCheck matchLast nextMatchEntry
986
c3a9f590146d removed unused locals
Claus Gittinger <cg@exept.de>
parents: 915
diff changeset
   361
     checkChar included|
327
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   362
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   363
    mStart := matchStart.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   364
    mStop := matchStop.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   365
    sStart := start.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   366
    sStop := stop.
183f094cfd72 last with old match code
claus
parents: 326
diff changeset
   367
16245
d16f9c7d9428 [true] whileTrue: -> #loop
Stefan Vogel <sv@exept.de>
parents: 16212
diff changeset
   368
    [
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   369
"/ Transcript showCR:('match: ''' , (aString copyFrom:sStart to:sStop) ,
3537
916534e86f0c fixed match
Claus Gittinger <cg@exept.de>
parents: 3527
diff changeset
   370
"/                    ''' against:' , (matchScanArray copyFrom:mStart to:mStop) printString).
916534e86f0c fixed match
Claus Gittinger <cg@exept.de>
parents: 3527
diff changeset
   371
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   372
        mSize := mStop - mStart + 1.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   373
        sSize := sStop - sStart + 1.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   374
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   375
        "empty strings match"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   376
        (mSize == 0) ifTrue:[^ (sSize == 0)].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   377
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   378
        matchEntry := matchScanArray at:mStart.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   379
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   380
        "/ the most common case first:
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   381
        (sSize ~~ 0
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   382
        and:[(checkChar := (aString at:sStart)) = matchEntry]) ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   383
            "advance by one and continue"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   384
            mStart := mStart + 1.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   385
            sStart := sStart + 1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   386
        ] ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   387
            (matchEntry == #any) ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   388
                "restString empty -> no match"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   389
                (sSize == 0) ifTrue:[^ false].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   390
                "# matches single character"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   391
                ((sSize == 1) and:[mSize == 1]) ifTrue:[^ true].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   392
                "advance by one and continue"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   393
                mStart := mStart + 1.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   394
                sStart := sStart + 1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   395
            ] ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   396
                (matchEntry == #anyString) ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   397
                    "* alone matches anything"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   398
                    (mSize == 1) ifTrue:[^ true].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   399
                    "restString empty & matchString not empty -> no match"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   400
                    (sSize == 0) ifTrue:[^ false].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   401
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   402
                    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   403
                     try to avoid some of the recursion by checking last
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   404
                     character and continue with shortened strings if possible
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   405
                    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   406
                    quickCheck := false.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   407
                    (mStop >= mStart) ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   408
                        matchLast := matchScanArray at:mStop.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   409
                        (matchLast ~~ #anyString) ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   410
                            (matchLast == #any) ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   411
                                quickCheck := true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   412
                            ] ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   413
                                matchLast == (aString at:sStop) ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   414
                                    quickCheck := true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   415
                                ] ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   416
                                    matchLast isString ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   417
                                        quickCheck := matchLast includes:(aString at:sStop)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   418
                                    ]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   419
                                ]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   420
                            ]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   421
                        ]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   422
                    ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   423
                    quickCheck ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   424
                        "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   425
                         quickCheck ok, advance from the right
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
                        mStop := mStop - 1.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   428
                        sStop := sStop - 1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   429
                    ] ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   430
                        "/ no quick check;
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   431
                        "/ look for the next character(s)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   432
                        "/ and try matching there
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   433
                        "/ (to avoid recursion)
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
                        mStart < mStop ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   436
                            nextMatchEntry := matchScanArray at:mStart+1.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   437
                            nextMatchEntry isCharacter ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   438
                                sStart <= sStop ifTrue:[
16245
d16f9c7d9428 [true] whileTrue: -> #loop
Stefan Vogel <sv@exept.de>
parents: 16212
diff changeset
   439
                                    [
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   440
                                        caseSensitive ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   441
                                            index := aString indexOf:nextMatchEntry startingAt:sStart
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   442
                                        ] ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   443
                                            index := aString findFirst:[:c | c asLowercase = nextMatchEntry asLowercase]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   444
                                                             startingAt:sStart.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   445
                                        ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   446
                                        (index == 0 or:[index > sStop]) ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   447
                                            ^ false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   448
                                        ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   449
                                        (self matchScan:matchScanArray
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   450
                                              from:(mStart + 1)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   451
                                              to:mStop
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   452
                                              with:aString
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   453
                                              from:index
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   454
                                              to:sStop
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   455
                                              caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   456
                                        ) ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   457
                                            ^ true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   458
                                        ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   459
                                        sStart := index + 1.
16245
d16f9c7d9428 [true] whileTrue: -> #loop
Stefan Vogel <sv@exept.de>
parents: 16212
diff changeset
   460
                                    ] loop.
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   461
                                ]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   462
                            ]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   463
                        ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   464
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   465
                        "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   466
                         no quick check possible;
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   467
                         loop over all possible substrings
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   468
                        "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   469
                        index := sStart.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   470
                        [index <= sStop] whileTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   471
                            (self matchScan:matchScanArray
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   472
                                  from:(mStart + 1)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   473
                                  to:mStop
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   474
                                  with:aString
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   475
                                  from:index
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   476
                                  to:sStop
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   477
                                  caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   478
                            ) ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   479
                                ^ true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   480
                            ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   481
                            index := index + 1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   482
                        ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   483
                        ^ false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   484
                    ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   485
                ] ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   486
                    (matchEntry isString) ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   487
                        "testString empty -> no match"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   488
                        (sSize == 0) ifTrue:[^ false].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   489
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   490
                        included := false.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   491
                        "/ checkChar := aString at:sStart.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   492
                        included := matchEntry includes:checkChar.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   493
                        included ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   494
                            caseSensitive ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   495
                                checkChar isUppercase ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   496
                                    included := matchEntry includes:checkChar asLowercase.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   497
                                ] ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   498
                                    included := matchEntry includes:checkChar asUppercase.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   499
                                ]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   500
                            ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   501
                        ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   502
                        mStart := mStart + 1.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   503
                        mSize := mSize - 1.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   504
                        included ifFalse:[^ false].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   505
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   506
                        ((sSize == 1) and:[mSize == 0]) ifTrue:[^ true].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   507
                    ] ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   508
                        "/ must be single character
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
                        "testString empty ?"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   511
                        (sSize == 0) ifTrue:[^ false].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   512
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   513
                        "first characters equal ?"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   514
                        "/ checkChar := aString at:sStart.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   515
                        caseSensitive ifTrue:[^ false].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   516
                        (checkChar asUppercase ~= matchEntry asUppercase) ifTrue:[^ false].
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
                        "advance and continue"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   519
                        mStart := mStart + 1.
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
                    "cut off 1st char and continue"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   522
                    sStart := sStart + 1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   523
                ]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   524
            ]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   525
        ]
16245
d16f9c7d9428 [true] whileTrue: -> #loop
Stefan Vogel <sv@exept.de>
parents: 16212
diff changeset
   526
    ] loop.
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   527
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   528
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   529
     |scanArray s|
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   530
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   531
     scanArray := self matchScanArrayFrom:'*hello'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   532
     s := 'foo bar hello world'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   533
     CharacterArray
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   534
         matchScan:scanArray
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   535
         from:1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   536
         to:scanArray size
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   537
         with:s
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   538
         from:1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   539
         to:s size
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   540
         caseSensitive:true
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   541
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   542
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   543
     |scanArray s|
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   544
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   545
     scanArray := self matchScanArrayFrom:'*hello*'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   546
     s := 'foo bar hello world'.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   547
     CharacterArray
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   548
         matchScan:scanArray
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   549
         from:1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   550
         to:scanArray size
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   551
         with:s
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   552
         from:1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   553
         to:s size
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   554
         caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   555
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   556
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   557
    "Modified: / 24-07-2011 / 07:17:03 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   558
    "Modified (comment): / 24-07-2011 / 08:55:14 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   559
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   560
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   561
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
   562
    <resource: #obsolete>
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   563
    "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
   564
     aString are matching the scan in matchScan from matchStart to matchStop.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   565
     The matchScan is as created by asMatchScanArray.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   566
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   567
     This algorithm is not at all the most efficient;
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   568
     for heavy duty pattern matching, an interface (primitive) to the regex
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   569
     pattern matching package should be added."
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   570
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   571
    ^ self
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   572
        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
   573
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
     |scanArray s|
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   576
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   577
     scanArray := self matchScanArrayFrom:'*hello'.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   578
     s := 'foo bar hello world'.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   579
     CharacterArray
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   580
         matchScan:scanArray
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   581
         from:1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   582
         to:scanArray size
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   583
         with:s
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   584
         from:1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   585
         to:s size
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   586
         ignoreCase:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   587
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   588
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   589
     |scanArray s|
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   590
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   591
     scanArray := self matchScanArrayFrom:'*hello*'.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   592
     s := 'foo bar hello world'.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   593
     CharacterArray
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   594
         matchScan:scanArray
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   595
         from:1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   596
         to:scanArray size
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   597
         with:s
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   598
         from:1
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   599
         to:s size
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
   600
         ignoreCase:false
13520
52597f7f6ff8 changed:
Claus Gittinger <cg@exept.de>
parents: 13511
diff changeset
   601
    "
52597f7f6ff8 changed:
Claus Gittinger <cg@exept.de>
parents: 13511
diff changeset
   602
52597f7f6ff8 changed:
Claus Gittinger <cg@exept.de>
parents: 13511
diff changeset
   603
    "Modified: / 24-07-2011 / 07:17:03 / cg"
52597f7f6ff8 changed:
Claus Gittinger <cg@exept.de>
parents: 13511
diff changeset
   604
    "Modified (comment): / 24-07-2011 / 08:55:14 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   605
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   606
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   607
matchScanArrayFrom:aString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   608
    "scan a pattern string and decompose it into a scanArray.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   609
     This is processed faster (especially with character ranges), and
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   610
     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
   611
9282
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   612
    ^ self matchScanArrayFrom:aString escapeCharacter:(self matchEscapeCharacter)
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   613
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   614
    "
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   615
     String matchScanArrayFrom:'*ute*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   616
     String matchScanArrayFrom:'**ute**'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   617
     String matchScanArrayFrom:'*uter'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   618
     String matchScanArrayFrom:'\*uter'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   619
     String matchScanArrayFrom:'[cC]#mpute[rR]'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   620
     String matchScanArrayFrom:'[abcd]*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   621
     String matchScanArrayFrom:'[a-k]*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   622
     String matchScanArrayFrom:'*some*compl*ern*'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   623
     String matchScanArrayFrom:'[a-'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   624
     String matchScanArrayFrom:'[a-zA-Z]'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   625
     String matchScanArrayFrom:'[a-z01234A-Z]'
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   626
    "
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   627
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   628
    "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
   629
!
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   630
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   631
matchScanArrayFrom:aString escapeCharacter:escape
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   632
    "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
   633
     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
   634
     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
   635
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   636
    |coll
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   637
     idx "{ Class: SmallInteger }"
9282
f6d9d4129919 allow for different escape cahracter in matches
Claus Gittinger <cg@exept.de>
parents: 9275
diff changeset
   638
     end c1 c2 matchSet previous|
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
   639
5487
cb4c5ae75c63 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5469
diff changeset
   640
    previous := nil.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   641
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   642
    coll := OrderedCollection new.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   643
    idx := 1. end := aString size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   644
    [idx <= end] whileTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   645
        |char this|
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   646
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   647
        char := aString at:idx.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   648
        char == $* ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   649
            previous ~~ #anyString ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   650
                this := #anyString
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   651
            ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   652
        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   653
            char == $# ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   654
                previous ~~ #anyString ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   655
                    this := #any
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   656
                ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   657
            ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   658
                char == $[ ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   659
                    matchSet := IdentitySet new.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   660
                    idx := idx + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   661
                    idx > end ifTrue:[^ nil].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   662
                    char := aString at:idx.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   663
                    c1 := nil.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   664
                    [char ~~ $]] whileTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   665
                        ((char == $-) and:[c1 notNil]) ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   666
                            idx := idx + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   667
                            idx > end ifTrue:[^ nil].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   668
                            c2 := aString at:idx.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   669
                            c1 to:c2 do:[:c | matchSet add:c].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   670
                            c1 := nil.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   671
                            idx := idx + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   672
                        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   673
                            (char ~~ $]) ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   674
                                matchSet add:char.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   675
                                c1 := char.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   676
                                idx := idx + 1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   677
                            ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   678
                        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   679
                        idx > end ifTrue:[^ nil].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   680
                        char := aString at:idx
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   681
                    ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   682
                    this := matchSet asString
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   683
                ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   684
                    char == escape ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   685
                        idx := idx + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   686
                        idx > end ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   687
                            "/ mhmh - what should we do here ?
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   688
                            this := char
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   689
                        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   690
                            this := aString at:idx.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   691
                        ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   692
                    ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   693
                        this := char
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   694
                    ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   695
                ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   696
            ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   697
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   698
        this notNil ifTrue:[coll add:this. previous := this].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   699
        idx := idx + 1
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   700
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   701
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   702
    ^ coll asArray
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   703
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   704
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   705
     String matchScanArrayFrom:'*ute*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   706
     String matchScanArrayFrom:'**ute**'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   707
     String matchScanArrayFrom:'*uter'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   708
     String matchScanArrayFrom:'\*uter'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   709
     String matchScanArrayFrom:'[cC]#mpute[rR]'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   710
     String matchScanArrayFrom:'[abcd]*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   711
     String matchScanArrayFrom:'[a-k]*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   712
     String matchScanArrayFrom:'*some*compl*ern*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   713
     String matchScanArrayFrom:'[a-'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   714
     String matchScanArrayFrom:'[a-zA-Z]'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   715
     String matchScanArrayFrom:'[a-z01234A-Z]'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   716
    "
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   717
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
   718
    "Modified: 2.4.1997 / 16:20:29 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   719
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   720
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   721
!CharacterArray class methodsFor:'queries'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   722
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   723
isAbstract
11229
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   724
    "Return if this class is an abstract class.
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   725
     True is returned for CharacterArray here; false for subclasses.
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   726
     Abstract subclasses must redefine again."
4fa83d5e806d comment
Claus Gittinger <cg@exept.de>
parents: 11179
diff changeset
   727
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   728
    ^ self == CharacterArray
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   729
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   730
17191
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
   731
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   732
!CharacterArray methodsFor:'Compatibility-ANSI'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   733
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   734
addLineDelimiters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   735
    "Ansi compatibility - same as withCRs"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   736
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   737
    ^ self withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   738
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   739
    "Modified: / 13.11.2001 / 19:16:25 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   740
! !
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
!CharacterArray methodsFor:'Compatibility-Dolphin'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   743
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   744
argumentCount
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   745
    "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
   746
     as selector would take."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   747
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   748
    ^  self numArgs
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   751
copyExpanding:expandTable
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   752
    "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
   753
     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
   754
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   755
    |ds|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   756
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   757
    ds := WriteStream on:(self species new).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   758
    self do:[:eachChar |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   759
        |repl|
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   760
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   761
        repl := expandTable at:eachChar ifAbsent:nil.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   762
        repl isNil ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   763
            ds nextPut:eachChar
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   764
        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   765
            repl size == 0 ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   766
                ds nextPut:repl
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   767
            ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   768
                ds nextPutAll:repl
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   769
            ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   770
        ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   771
    ].
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   772
    ^ ds contents.
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   773
!
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   774
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   775
formatWith:aString
11955
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   776
    "Compatibility method - do not use in new code.
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   777
     same as #bindWith: for dolphin compatibility"
6870
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   778
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   779
    ^ self bindWith:aString
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   780
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
     'hello%1world' formatWith:'123'
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   783
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   784
!
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   785
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   786
formatWith:arg1 with:arg2
11955
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   787
    "Compatibility method - do not use in new code.
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   788
     same as #bindWith: for dolphin compatibility"
6870
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
    ^ self bindWith:arg1 with:arg2
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
     'hello%1 %2world' formatWith:'123' with:234
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   794
    "
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   795
!
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   796
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   797
formatWith:arg1 with:arg2 with:arg3
11955
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   798
    "Compatibility method - do not use in new code.
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
   799
     same as #bindWith: for dolphin compatibility"
6870
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
    ^ self bindWith:arg1 with:arg2 with:arg3
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
     'hello%1 %2 %3world' formatWith:'123' with:234 with:345
d71264ee7a9a dolphin compatibility
Claus Gittinger <cg@exept.de>
parents: 6835
diff changeset
   805
    "
6391
ff9f6df9ec4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6228
diff changeset
   806
! !
ff9f6df9ec4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6228
diff changeset
   807
14681
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   808
!CharacterArray methodsFor:'Compatibility-GNU'!
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   809
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   810
% anArrayOfOperands
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   811
    "return a copy of the receiver, where a '%i' escape
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   812
     is replaced by the coresponding string from the argument array.
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   813
     '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
   814
     Added for GNU-ST compatibility."
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   815
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   816
    ^ self expandPlaceholdersWith:anArrayOfOperands
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
    "
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   819
     'do you prefer %1 or rather %2 (not talking about %3) ?'
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   820
        % #('smalltalk' 'c++' 'c')
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   821
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   822
     'do you %(what) ?'
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   823
        % (Dictionary new at:#'what' put:'understand'; yourself)
35b3d29d3b46 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14660
diff changeset
   824
    "
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
7261
f35fc9cee675 method category rename
Claus Gittinger <cg@exept.de>
parents: 7247
diff changeset
   827
!CharacterArray methodsFor:'Compatibility-ST/V'!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   828
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   829
byteAt:index put:aByte
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   830
    "store a byte at given index.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   831
     This is an ST/V compatibility method."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   832
1333
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   833
"/    (aByte == 0) ifTrue:[
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   834
"/        "store a space instead"
d3fdca956f0d allow storing of 0-bytes (be careful with printing then ...)
Claus Gittinger <cg@exept.de>
parents: 1312
diff changeset
   835
"/        ^ 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
   836
"/    ].
11754
5132248cfd6e common definition of #byteAt:put between CharacterArray and Symbol
Stefan Vogel <sv@exept.de>
parents: 11632
diff changeset
   837
    ^ self basicAt:index put:(Character value:aByte)
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   838
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   839
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   840
     'hello' copy at:1 put:$H asciiValue; yourself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   841
     'hello' copy byteAt:1 put:72; yourself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   842
     'hello' copy byteAt:1 put:0; yourself
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   843
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   844
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   845
    "Modified: 6.5.1996 / 10:35:26 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   846
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   847
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   848
replChar:oldChar with:newChar
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   849
    "return a copy of the receiver, with all oldChars replaced
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   850
     by newChar.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   851
     This is an ST/V compatibility method."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   852
3656
347ea0413b68 use #copyReplaceAll:with:
Claus Gittinger <cg@exept.de>
parents: 3630
diff changeset
   853
    ^ self copyReplaceAll:oldChar with:newChar
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   854
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   855
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   856
     '12345678901234567890' replChar:$0 with:$*
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   857
    "
3656
347ea0413b68 use #copyReplaceAll:with:
Claus Gittinger <cg@exept.de>
parents: 3630
diff changeset
   858
347ea0413b68 use #copyReplaceAll:with:
Claus Gittinger <cg@exept.de>
parents: 3630
diff changeset
   859
    "Modified: / 18.7.1998 / 22:52:57 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   860
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   861
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   862
replChar:oldChar withString:newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   863
    "return a copy of the receiver, with all oldChars replaced
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   864
     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
   865
     This is an ST/V compatibility method."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   866
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   867
    |tmpStream|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   868
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
   869
    tmpStream := self species writeStream.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   870
    self do:[:element |
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
   871
        element = oldChar ifTrue:[
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
   872
            tmpStream nextPutAll:newString
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
   873
        ] ifFalse:[
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
   874
            tmpStream nextPut:element
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
   875
        ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   876
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   877
    ^ tmpStream contents
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   878
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   879
   "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   880
     '12345678901234567890' replChar:$0 withString:'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   881
     'a string with spaces' replChar:$  withString:' foo '
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
   882
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   883
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   884
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   885
replString:subString withString:newString
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   886
    "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
   887
     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
   888
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
   889
    ^ self copyReplaceString:subString withString:newString
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   890
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   891
   "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   892
     '12345678901234567890' replString:'123' withString:'OneTwoThree'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   893
     '12345678901234567890' replString:'123' withString:'*'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   894
     '12345678901234567890' replString:'234' withString:'foo'
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   895
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   896
     ('a string with spaces' replChar:$  withString:' foo ')
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
   897
        replString:'foo' withString:'bar'
4244
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   898
    "
5deefa3144fb added #replString:withString:
Claus Gittinger <cg@exept.de>
parents: 4156
diff changeset
   899
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
   900
    "Modified: / 12-05-2004 / 12:00:27 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   901
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   902
9275
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   903
subString:start to:end
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   904
    ^ self copyFrom:start to:end
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   905
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   906
   "
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   907
     '12345678901234567890' subString:3 to:8
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   908
    "
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   909
!
556e8b67ad2d st/v compat.
Claus Gittinger <cg@exept.de>
parents: 9265
diff changeset
   910
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   911
trimBlanks
14992
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
   912
    "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
   913
     This is an ST/V compatibility method."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   914
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   915
    ^ self withoutSpaces
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   916
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   917
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   918
     '    spaces at beginning' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   919
     'spaces at end    ' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   920
     '    spaces at beginning and end     ' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   921
     'no spaces' trimBlanks
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   922
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   923
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   924
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
   925
!CharacterArray methodsFor:'Compatibility-Squeak'!
4409
86e049b21f8d added #includesSubstring:caseSensitive:
Claus Gittinger <cg@exept.de>
parents: 4389
diff changeset
   926
6148
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   927
asDate
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   928
    "Many allowed forms, see Date.readFrom:"
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   929
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   930
    ^ Date readFrom: (ReadStream on: self)
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   931
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   932
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
   933
     '30 Apr 1999' asDate dayName capitalized
6148
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   934
    "
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   935
!
3230f949237c asDate (for squeak)
james
parents: 6139
diff changeset
   936
16051
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
   937
asOneByteString
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
   938
    "return the receiver converted to a 'normal' string.
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
   939
     Same as asSingleByteString - for compatibility."
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
   940
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
   941
    ^ self asSingleByteString
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
   942
!
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
   943
8971
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   944
asUrl
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   945
    ^ self asURL
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   946
!
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
   947
10840
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   948
asWideString
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
   949
    "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
   950
10840
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   951
    ^ self asTwoByteString
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   952
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   953
    "
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   954
     'abc' asWideString
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   955
    "
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   956
!
47bf2d2cf941 +asWideString
Claus Gittinger <cg@exept.de>
parents: 10721
diff changeset
   957
4989
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   958
capitalized
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
   959
    "same as asUppercaseFirst for Squeak compatibility"
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
   960
4989
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   961
    ^ self asUppercaseFirst
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   962
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   963
    "
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   964
     'hello' capitalized
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   965
    "
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   966
!
d35f323b446c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4981
diff changeset
   967
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   968
caseInsensitiveLessOrEqual:aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   969
    ^ (self compareCaselessWith:aString) <= 0
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   970
!
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   971
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   972
caseSensitiveLessOrEqual:aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   973
    ^ self <= aString
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   974
!
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   975
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   976
charactersExactlyMatching:aString
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
   977
    "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
   978
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   979
    |idx nMax|
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   980
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   981
    nMax :=(self size) min:(aString size).
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   982
    idx := 1.
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   983
    [idx <= nMax] whileTrue:[
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
   984
        (self at:idx) = (aString at:idx) ifFalse:[
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
   985
            ^ idx - 1
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
   986
        ].
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
   987
        idx := idx + 1.
10841
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   988
    ].
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   989
    ^ nMax
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   990
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   991
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   992
     'abc' charactersExactlyMatching:'abc'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   993
     'abc' charactersExactlyMatching:'abcd'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   994
     'abcd' charactersExactlyMatching:'abc'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   995
     'abc' charactersExactlyMatching:'abd'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
   996
     'abc' charactersExactlyMatching:'xxx'
10841
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
!
00baa320d8ad squeak compat.
Claus Gittinger <cg@exept.de>
parents: 10840
diff changeset
   999
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1000
endsWithDigit
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1001
    "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
  1002
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1003
    ^ self size > 0 and: [self last isDigit]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1004
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1005
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  1006
findDelimiters:delimiters startingAt:start
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1007
    "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
  1008
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1009
    |idx|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1010
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1011
    idx := self indexOfAny:delimiters startingAt:start.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1012
    idx == 0 ifTrue:[^ self size + 1].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1013
    ^ idx.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1014
"/start to: self size do: [:i |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1015
"/        |char|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1016
"/
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1017
"/        char := self at: i.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1018
"/        delimiters do: [:delim | delim = char ifTrue: [^ i]]
8971
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
  1019
"/    ].
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
  1020
"/    ^ self size + 1
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
  1021
!
0b86229f3ed9 Squeak compat.
Claus Gittinger <cg@exept.de>
parents: 8954
diff changeset
  1022
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1023
findTokens:delimiterOrDelimiters
7270
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
  1024
    "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
  1025
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1026
    delimiterOrDelimiters size == 0 ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1027
        ^ self asCollectionOfSubstringsSeparatedBy:delimiterOrDelimiters
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1028
    ] ifFalse:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1029
        ^ self asCollectionOfSubstringsSeparatedByAny:delimiterOrDelimiters
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1030
    ].
7270
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
  1031
37248a67718a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7265
diff changeset
  1032
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1033
     'a|b#c||e' findTokens:#($# $|)
13624
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1034
     'a|b#c||e' findTokens:$|
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1035
    "
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1036
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1037
    "Modified: / 04-09-2011 / 20:31:21 / cg"
5670d4c4b06a changed: #findTokens:
Claus Gittinger <cg@exept.de>
parents: 13611
diff changeset
  1038
    "Modified (comment): / 05-09-2011 / 04:25:28 / cg"
4981
2ee8cd2c4c8e squeak compatibility
ps
parents: 4974
diff changeset
  1039
!
2ee8cd2c4c8e squeak compatibility
ps
parents: 4974
diff changeset
  1040
4974
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1041
includesSubString:aString
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1042
    "return true, if a substring is contained in the receiver.
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1043
     The compare is case sensitive."
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1044
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1045
    ^ self includesString:aString
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1046
cde2ee5adeb0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4890
diff changeset
  1047
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1048
     'hello world' includesSubString:'Hel'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1049
     'hello world' includesSubString:'hel'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1050
     'hello world' includesSubString:'llo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1051
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1052
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1053
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1054
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1055
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1056
11178
668d5d9a4d5d added #includesSubString:caseSensitive:
sr
parents: 11062
diff changeset
  1057
includesSubString:aString caseSensitive:caseSensitive
11179
178086a92325 *** empty log message ***
sr
parents: 11178
diff changeset
  1058
    ^ self includesSubstring:aString caseSensitive:caseSensitive
11178
668d5d9a4d5d added #includesSubString:caseSensitive:
sr
parents: 11062
diff changeset
  1059
!
668d5d9a4d5d added #includesSubString:caseSensitive:
sr
parents: 11062
diff changeset
  1060
16875
32e61bb3a742 class: CharacterArray>>#includesSubstring: (for Squeak compatibility)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16863
diff changeset
  1061
includesSubstring: aString
32e61bb3a742 class: CharacterArray>>#includesSubstring: (for Squeak compatibility)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16863
diff changeset
  1062
    ^ self includesSubString: aString
32e61bb3a742 class: CharacterArray>>#includesSubstring: (for Squeak compatibility)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16863
diff changeset
  1063
32e61bb3a742 class: CharacterArray>>#includesSubstring: (for Squeak compatibility)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16863
diff changeset
  1064
    "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
  1065
!
32e61bb3a742 class: CharacterArray>>#includesSubstring: (for Squeak compatibility)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16863
diff changeset
  1066
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1067
includesSubstring:aString caseSensitive:caseSensitive
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1068
    "return true, if a substring is contained in the receiver.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1069
     The argument, caseSensitive controls if case is ignored in the compare."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1070
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1071
    "/ for now,  a q&d hack ...
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1072
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1073
    caseSensitive ifFalse:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1074
        ^ self asLowercase includesString:aString asLowercase
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1075
    ].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1076
    ^ self includesString:aString
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1077
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1078
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1079
     'hello world' includesSubstring:'Hel' caseSensitive:true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1080
     'hello world' includesSubstring:'Hel' caseSensitive:false
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1083
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1084
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1085
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1086
6979
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1087
isAllDigits
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1088
    "Answer whether the receiver's characters are all digits"
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1089
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1090
    ^ self conform:[:eachChar | eachChar isDigit]
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1091
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1092
    "
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1093
     'hello world' isAllDigits
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1094
     '12344' isAllDigits
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1095
    "
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1096
!
128a928d5dac isAllDigits - Squeak compatibility
penk
parents: 6969
diff changeset
  1097
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1098
lastSpacePosition
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  1099
    "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
  1100
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1101
    ^ self lastIndexOfSeparator
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1102
!
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1103
7022
0c3c73f83b7f padded:to:with: - for squeak
penk
parents: 7020
diff changeset
  1104
padded:leftOrRight to:paddedSize with:padCharacter
14053
acbb97913c30 comment/format in: #padded:to:with:
Claus Gittinger <cg@exept.de>
parents: 14050
diff changeset
  1105
    "pad left (leftOrRight==#left) or right"
acbb97913c30 comment/format in: #padded:to:with:
Claus Gittinger <cg@exept.de>
parents: 14050
diff changeset
  1106
7022
0c3c73f83b7f padded:to:with: - for squeak
penk
parents: 7020
diff changeset
  1107
    leftOrRight == #left ifTrue:[
14053
acbb97913c30 comment/format in: #padded:to:with:
Claus Gittinger <cg@exept.de>
parents: 14050
diff changeset
  1108
        ^ self leftPaddedTo:paddedSize with:padCharacter
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1109
    ].
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1110
    ^ self paddedTo:paddedSize with:padCharacter
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1111
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1112
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1113
     'hello' padded:#right to:10 with:$.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1114
     'hello' padded:#left to:10 with:$.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1115
    "
14053
acbb97913c30 comment/format in: #padded:to:with:
Claus Gittinger <cg@exept.de>
parents: 14050
diff changeset
  1116
acbb97913c30 comment/format in: #padded:to:with:
Claus Gittinger <cg@exept.de>
parents: 14050
diff changeset
  1117
    "Modified (comment): / 07-03-2012 / 16:31:33 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1118
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1119
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1120
skipDelimiters:delimiters startingAt:start
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1121
    "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
  1122
     that does NOT match one of the delimiters.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1123
     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
  1124
     Assumes the delimiters to be a non-empty string."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1125
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1126
    start to:self size do:[:i |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1127
        delimiters detect:[:delim | delim = (self at:i) ] ifNone:[ ^ i ]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1128
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1129
    ^ self size + 1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1130
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1131
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1132
     '123***7890' skipDelimiters:'*' startingAt:4
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1133
     '123***7890' skipDelimiters:'*' startingAt:3
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1134
     '123***7890' skipDelimiters:'*' startingAt:10
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1135
     '123*******' skipDelimiters:'*' startingAt:10
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1136
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1137
!
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1138
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1139
substrings
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1140
    ^ self asCollectionOfWords
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1141
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1142
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1143
     'foo bar baz' substrings
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1144
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1145
!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1146
12665
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1147
substringsSeparatedBy:separatorCharacter
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1148
    ^ self asCollectionOfSubstringsSeparatedBy:separatorCharacter
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1149
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1150
    "
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1151
     'foo bar, baz' substringsSeparatedBy:$,
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1152
    "
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1153
!
b027fc5aec4e added: #substringsSeparatedBy:
Claus Gittinger <cg@exept.de>
parents: 12664
diff changeset
  1154
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1155
truncateTo:smallSize
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1156
    "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
  1157
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1158
    self size <= smallSize ifTrue:[^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1159
    ^ self copyFrom: 1 to: smallSize
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1160
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1161
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1162
     'hello world' truncateTo:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1163
     'hello' truncateTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1164
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1165
     'hello world' copyTo:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1166
     'hello' copyTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1167
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1168
!
5795
d67a8ff4d98e added #truncateTo:
Claus Gittinger <cg@exept.de>
parents: 5794
diff changeset
  1169
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1170
withBlanksTrimmed
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1171
    "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
  1172
14865
8d6cc362aff7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14768
diff changeset
  1173
    ^ 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
  1174
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1175
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1176
     '  hello    world    ' withBlanksTrimmed
4890
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1177
    "
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1178
!
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1179
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1180
withNoLineLongerThan: aNumber
fa9abaa225ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4842
diff changeset
  1181
    "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
  1182
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1183
    | listOfLines currentLast currentStart resultString putativeLast putativeLine crPosition |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1184
14451
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1185
    (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
  1186
    listOfLines _ OrderedCollection new.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1187
    currentLast _ 0.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1188
    [currentLast < self size] whileTrue:
14451
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1189
            [currentStart _ currentLast + 1.
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1190
            putativeLast _ (currentStart + aNumber - 1) min: self size.
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1191
            putativeLine _ self copyFrom: currentStart to: putativeLast.
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1192
            (crPosition _ putativeLine indexOf: Character cr) > 0 ifTrue:
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1193
                    [putativeLast _ currentStart + crPosition - 1.
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1194
                    putativeLine _ self copyFrom: currentStart to: putativeLast].
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1195
            currentLast _ putativeLast == self size
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1196
                    ifTrue:
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1197
                            [putativeLast]
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1198
                    ifFalse:
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1199
                            [currentStart + putativeLine lastSpacePosition - 1].
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1200
            currentLast <= currentStart ifTrue:
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1201
                    ["line has NO spaces; baleout!!"
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1202
                    currentLast _ putativeLast].
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1203
            listOfLines add: (self copyFrom: currentStart to: currentLast) withBlanksTrimmed].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1204
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1205
    listOfLines size > 0 ifFalse: [^ ''].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1206
    resultString _ listOfLines first.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1207
    2 to: listOfLines size do:
14451
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1208
            [:i | resultString _ resultString, Character cr asString, (listOfLines at: i)].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1209
    ^ resultString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1210
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1211
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1212
     #(5 7 20) collect:
14451
c06e7885b675 changed: #withNoLineLongerThan:
Claus Gittinger <cg@exept.de>
parents: 14420
diff changeset
  1213
        [: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
  1214
    "
10883
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1215
!
34881021d5ba +withoutTrailingBlanks
Claus Gittinger <cg@exept.de>
parents: 10862
diff changeset
  1216
12343
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1217
withSqueakLineEndings
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1218
    "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
  1219
    valid line endings.  Replace each occurence with a single CR"
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1220
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1221
    ^ self asStringCollection asStringWith:Character cr.
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1222
!
0a93eee37d65 added: #withSqueakLineEndings
Claus Gittinger <cg@exept.de>
parents: 12330
diff changeset
  1223
12188
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1224
withoutLeading: char
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1225
    "return a copy of myself without leading a char.
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1226
     Returns an empty string, if the receiver consist only of a char."
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1227
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1228
    ^ self withoutLeadingForWhich:[:ch | ch = char]
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1229
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1230
    "
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1231
     '****foo****' withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1232
     'foo****'     withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1233
     '*'           withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1234
     ''            withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1235
     '****foo'     withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1236
     '*******'     withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1237
     'foo'         withoutLeading: $*
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1238
     'f***o***o'   withoutLeading: $*
12188
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1239
     ('**' , Character tab asString , '*foo***') withoutLeading: $* inspect
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1240
    "
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1241
!
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1242
11565
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1243
withoutTrailing:char
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1244
    "return a copy of myself without trailing char.
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1245
     Returns an empty string, if the receiver consist only of char."
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1246
12188
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1247
    ^ self withoutTrailingForWhich:[:ch | ch = char]
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1248
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  1249
    "
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1250
     '    foo....' withoutTrailing:$.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1251
     'foo....'     withoutTrailing:$.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1252
     '    foo'     withoutTrailing:$.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1253
     '.......'     withoutTrailing:$.
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  1254
     'foo'         withoutTrailing:$.
11565
71a4edaa21e9 +withoutTrailing:
Claus Gittinger <cg@exept.de>
parents: 11525
diff changeset
  1255
    "
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1256
! !
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1257
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1258
!CharacterArray methodsFor:'Compatibility-V''Age'!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1259
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1260
addLineDelimiter
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1261
    "replace all '\'-characters by line delimiter (cr) - characters.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1262
     This has been added for VisualAge compatibility."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1263
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1264
    ^ self withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1265
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1266
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1267
bindWith:aString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1268
    "return a copy of the receiver, where a '%1' escape is
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1269
     replaced by aString.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1270
     This has been added for VisualAge compatibility."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1271
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1272
    ^ self expandPlaceholdersWith:(Array with:aString)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1273
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1274
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1275
     'do you like %1 ?' bindWith:'smalltalk'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1276
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1277
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1278
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1279
bindWith:string1 with:string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1280
    "return a copy of the receiver, where a '%1' escape is
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1281
     replaced by string1 and '%2' is replaced by string2.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1282
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1283
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1284
    ^ self expandPlaceholdersWith:(Array with:string1 with:string2)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1285
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1286
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1287
     'do you prefer %1 or rather %2 ?'
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1288
        bindWith:'smalltalk' with:'c++'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1289
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1290
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1291
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  1292
bindWith:str1 with:str2 with:str3
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1293
    "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
  1294
     are replaced by str1, str2 and str3 respectively.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1295
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1296
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1297
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2 with:str3)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1298
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1299
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1300
     'do you prefer %1 or rather %2 (not talking about %3) ?'
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1301
        bindWith:'smalltalk' with:'c++' with:'c'
9192
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
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1304
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1305
bindWith:str1 with:str2 with:str3 with:str4
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1306
    "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
  1307
     are replaced by str1, str2, str3 and str4 respectively.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1308
     This has been added for VisualAge compatibility."
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
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2 with:str3 with:str4)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1311
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1312
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1313
     '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
  1314
        bindWith:'smalltalk' with:'c++' with:'c' with:'assembler'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1315
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1316
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1317
2344
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1318
bindWith:str1 with:str2 with:str3 with:str4 with:str5
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1319
    "return a copy of the receiver, where a '%1' .. '%5' escapes
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1320
     are replaced by str1 .. str5 respectively.
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1321
     This has been added for VisualAge compatibility."
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1322
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1323
    ^ 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
  1324
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1325
    "Created: 31.1.1997 / 16:25:42 / cg"
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1326
!
b3788119533f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2250
diff changeset
  1327
5343
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1328
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
  1329
    "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
  1330
     are replaced by str1 .. str6 respectively.
5343
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1331
     This has been added for VisualAge compatibility."
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1332
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1333
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1334
                                         with:str3 with:str4
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1335
                                         with:str5 with:str6)
11524
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1336
!
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1337
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1338
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
  1339
    "return a copy of the receiver, where a '%1' .. '%7' escapes
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1340
     are replaced by str1 .. str7 respectively.
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1341
     This has been added for VisualAge compatibility."
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1342
8742d67d9296 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11483
diff changeset
  1343
    ^ self expandPlaceholdersWith:(Array with:str1 with:str2
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1344
                                         with:str3 with:str4
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1345
                                         with:str5 with:str6
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1346
                                         with:str7)
5343
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1347
!
bac9bc59a698 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5342
diff changeset
  1348
13996
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1349
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
  1350
    "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
  1351
     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
  1352
     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
  1353
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1354
    ^ 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
  1355
                                         with:str3 with:str4
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1356
                                         with:str5 with:str6
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1357
                                         with:str7 with:str8)
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1358
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1359
    "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
  1360
!
a86faa4f17b8 added: #bindWith:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13987
diff changeset
  1361
14014
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1362
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
  1363
    "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
  1364
     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
  1365
     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
  1366
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1367
    ^ 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
  1368
                                         with:str3 with:str4
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1369
                                         with:str5 with:str6
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1370
                                         with:str7 with:str8
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1371
                                         with:str9)
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1372
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1373
    "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
  1374
!
3aff2d7c41c8 added: #bindWith:with:with:with:with:with:with:with:with:
Claus Gittinger <cg@exept.de>
parents: 13996
diff changeset
  1375
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1376
bindWithArguments:anArrayOfStrings
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1377
    "return a copy of the receiver, where a '%i' escape
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1378
     is replaced by the coresponding string from the argument array.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1379
     '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
  1380
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1381
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1382
    ^ self expandPlaceholdersWith:anArrayOfStrings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1383
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1384
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1385
     'do you prefer %1 or rather %2 (not talking about %3) ?'
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1386
        bindWithArguments:#('smalltalk' 'c++' 'c')
12196
5718ecf81f37 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 12188
diff changeset
  1387
5718ecf81f37 comment/format in:
Claus Gittinger <cg@exept.de>
parents: 12188
diff changeset
  1388
     'do you %(what) ?'
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1389
        bindWithArguments:(Dictionary new at:#'what' put:'understand'; yourself)
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1390
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1391
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1392
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1393
subStrings
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1394
    "return an array consisting of all words contained in the receiver.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1395
     Words are separated by whitespace.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1396
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1397
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1398
    ^ self asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1399
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1400
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1401
     'hello world, this is smalltalk' subStrings
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1402
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1403
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1404
16181
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1405
subStrings:separatorCharacterOrString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1406
    "return an array consisting of all words contained in the receiver.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1407
     Words are separated by separatorCharacter.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1408
     This has been added for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1409
16181
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1410
    separatorCharacterOrString isCharacter ifTrue:[
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1411
        ^ self asCollectionOfSubstringsSeparatedBy:separatorCharacterOrString
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1412
    ].
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1413
    ^ self asCollectionOfSubstringsSeparatedByAny:separatorCharacterOrString
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1414
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1415
    "
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1416
     'foo:bar:baz:smalltalk' subStrings:$: 
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1417
     'foo:bar:baz:smalltalk' subStrings:':'
14e0c2a81b72 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16175
diff changeset
  1418
     'foo.bar,baz-smalltalk' subStrings:'.,-'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1419
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1420
!
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
trimSeparators
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1423
    "return a copy of the receiver without leading and trailing whiteSpace"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1424
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1425
    ^ self withoutSeparators
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1426
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1427
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1428
!CharacterArray methodsFor:'Compatibility-VW'!
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1429
16051
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  1430
asComposedText
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  1431
    "ST-80 compatibility
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  1432
     - ST/X does not (as today) support composedTexts."
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  1433
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  1434
    ^ ComposedText fromString:self string
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  1435
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  1436
    "Modified: 27.4.1996 / 13:30:30 / cg"
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  1437
!
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  1438
6139
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1439
asLogicalFileSpecification
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1440
    ^ self asFilename
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1441
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1442
    "Created: / 30.10.2001 / 17:29:53 / cg"
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1443
!
1b86d43f8eb7 VW compatibility
Claus Gittinger <cg@exept.de>
parents: 6122
diff changeset
  1444
6119
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1445
asQualifiedReference
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1446
    ^ BindingReference pathString:(self string)
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1447
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1448
!
b6cee2c2b2ea +asQualifiedReference
Claus Gittinger <cg@exept.de>
parents: 5964
diff changeset
  1449
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1450
expandMacros
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1451
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1452
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1453
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1454
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1455
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1456
    ^ self expandMacrosWithArguments:#()
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1457
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1458
    "
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1459
     'hello<n>foo' expandMacros
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1460
    "
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1461
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1462
    "Modified: / 18.6.1998 / 16:03:02 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1463
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1464
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1465
expandMacrosWith:arg
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1466
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1467
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1468
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1469
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1470
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1471
    ^ self expandMacrosWithArguments:(Array with:arg)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1472
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1473
    "Created: / 1.11.1997 / 13:01:28 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1474
    "Modified: / 1.11.1997 / 13:30:50 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1475
!
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1476
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1477
expandMacrosWith:arg1 with:arg2
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1478
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1479
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1480
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1481
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1482
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1483
    ^ self expandMacrosWithArguments:(Array with:arg1 with:arg2)
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1484
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1485
    "Modified: / 6.7.1998 / 21:58:14 / cg"
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1486
!
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
expandMacrosWith:arg1 with:arg2 with:arg3
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1489
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1490
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1491
     Read the comment in #expandMacrosWithArguments: about
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1492
     limited compatibility issues."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1493
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1494
    ^ self expandMacrosWithArguments:(Array with:arg1 with:arg2 with:arg3)
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1495
!
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1496
10353
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1497
expandMacrosWith:arg1 with:arg2 with:arg3 with:arg4
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1498
    "ST80 compatibility - expand '<..>' macros with
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1499
     argument strings. Similar to #bindWith:.
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1500
     Read the comment in #expandMacrosWithArguments: about
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1501
     limited compatibility issues."
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1502
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1503
    ^ 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
  1504
!
65fb7aa2c6c2 added #expandMacrosWith:with:with:with:
Stefan Vogel <sv@exept.de>
parents: 10134
diff changeset
  1505
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1506
expandMacrosWithArguments:argArray
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1507
    "ST80 compatibility - expand '<..>' macros with
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1508
     argument strings. Similar to #bindWith:.
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1509
     WARNING: possibly not all ST80 expansions are supported here."
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1510
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1511
    "/ supported expansions:
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1512
    "/
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1513
    "/   <#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
  1514
    "/   <#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
  1515
    "/   <#?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
  1516
    "/              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
  1517
    "/   <n>        replace by a newLine character
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1518
    "/   <t>        replace by a tab character
6834
eba4b58b8692 fixed expandMacros (%-escape)
Claus Gittinger <cg@exept.de>
parents: 6810
diff changeset
  1519
    "/   %X         the X character itself
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1520
8999
f3fda66ea51e #expandMacrosWithArguments: - be mor friendly to xml strings.
Stefan Vogel <sv@exept.de>
parents: 8971
diff changeset
  1521
    |in out c fmt nr arg s1 s2 peekc|
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1522
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1523
    in := self readStream.
10721
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1524
    out := CharacterWriteStream on:(self species uninitializedNew:self size).
5964
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
    [in atEnd] whileFalse:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1527
        c := in next.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1528
        c == $% ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1529
            c := in next.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1530
            out nextPut:c
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1531
        ] ifFalse:[c ~~ $< ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1532
            out nextPut:c.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1533
        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1534
            peekc := in peek.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1535
            [peekc == $<] whileTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1536
                out nextPut:$<.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1537
                peekc := in nextPeek.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1538
            ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1539
            peekc == $n ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1540
                peekc := in nextPeek.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1541
                peekc == $> ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1542
                    in next.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1543
                    out cr.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1544
                ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1545
                    out nextPutAll:'<n'.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1546
                ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1547
            ] ifFalse:[peekc == $t ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1548
                peekc := in nextPeek.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1549
                peekc == $> ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1550
                    in next.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1551
                    out tab.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1552
                ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1553
                    out nextPutAll:'<t'.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1554
                ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1555
            ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1556
                peekc isDigit ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1557
                    "start an argument expansion ..."
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1558
                    nr := Integer readFrom:in onError:nil.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1559
                    nr isNil ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1560
                        "this cannot happen (there is at least one digit)"
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1561
                        self error:'invalid format' mayProceed:true.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1562
                        ^ self
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1563
                    ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1564
                    fmt := in next.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1565
                    (fmt ~~ $? and:[in peek ~~ $>]) ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1566
                        out nextPut:$<.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1567
                        nr printOn:out.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1568
                        out nextPut:fmt.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1569
                    ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1570
                        (nr between:1 and:argArray size) ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1571
                            arg := argArray at:nr.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1572
                        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1573
                            arg := ''
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1574
                        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1575
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1576
                        fmt == $p ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1577
                            "expand with args printString"
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1578
                            arg printOn:out.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1579
                        ] ifFalse:[fmt == $s ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1580
                            "expand with arg itself"
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1581
                            arg isText ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1582
                                out contentsSpecies isText ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1583
                                    out := (WriteStream on:Text new) nextPutAll:out contents; yourself.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1584
                                ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1585
                                out nextPutAll:arg.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1586
                            ] ifFalse:[
16473
91d81c18c2ad class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 16452
diff changeset
  1587
                                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
  1588
                            ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1589
                        ] ifFalse:[fmt == $? ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1590
                            s1 := in upTo:$:.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1591
                            s2 := in nextUpTo:$>.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1592
                            arg == true ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1593
                                out nextPutAll:s1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1594
                            ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1595
                                out nextPutAll:s2
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1596
                            ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1597
                        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1598
                            "what does VW do here ?"
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1599
                            self error:'invalid format' mayProceed:true.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1600
                            ^ self
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1601
                        ]]].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1602
                        c := in next.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1603
                        c ~~ $> ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1604
                            "what does VW do here ?"
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1605
                            self error:'invalid format' mayProceed:true.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1606
                            ^ self
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
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1609
                    ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1610
                ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1611
                    out nextPut:$<.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1612
                ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1613
            ]].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1614
        ]].
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1615
    ].
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1616
    ^ out contents
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1617
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1618
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1619
     'hello <1s> how are you' expandMacrosWith:(OperatingSystem getLoginName)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1620
     'one plus one is <1p>' expandMacrosWith:2
5964
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1621
    "
0f748abc0c17 protocol rename
Claus Gittinger <cg@exept.de>
parents: 5963
diff changeset
  1622
10721
58e6950264cb care for bitsPerCharacter when expanding macros
Claus Gittinger <cg@exept.de>
parents: 10703
diff changeset
  1623
    "Modified: / 18-09-2007 / 22:50:43 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1624
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1625
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1626
isCharacters
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1627
    "added for visual works compatibility"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1628
    ^ true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1629
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1630
16295
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1631
!CharacterArray methodsFor:'JavaScript support'!
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1632
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1633
unquote
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1634
    "removes double quotes from the receiver.
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1635
     This is the JavaSccript standard unquote function."
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1636
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1637
    |mySize|
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1638
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1639
    (mySize := self size) >= 2 ifTrue:[
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1640
        ((self first == $") and:[self last == $"]) ifTrue:[
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1641
            ^ self copyFrom:2 to:mySize-1
16295
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1642
        ].
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1643
    ].
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1644
    ^ self
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1645
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1646
    "
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1647
     'hello' quote unquote
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1648
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  1649
     JavaScriptParser evaluate:'''hello''.quote.unquote' 
16295
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1650
    "
54510929f67c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16245
diff changeset
  1651
! !
13510
150d12670b9f comment/format
Claus Gittinger <cg@exept.de>
parents: 13504
diff changeset
  1652
16175
05de577feb25 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16051
diff changeset
  1653
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1654
!CharacterArray methodsFor:'character searching'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1655
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1656
includesMatchCharacters
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  1657
    "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
  1658
     for match operations; false if not.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1659
     Here, do not care for $\ escapes"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1660
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1661
    ^ self includesAny:'*#['
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1662
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1663
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1664
     '*foo' includesMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1665
     '\*foo' includesMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1666
     '\*foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1667
     '*foo' includesMatchCharacters
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1668
     '\\*foo' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1669
     'foo*' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1670
     'foo\*' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1671
     'foo\' includesMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1672
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1673
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1674
    "Modified: 2.4.1997 / 18:12:34 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1675
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1676
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1677
includesSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1678
    "return true, if the receiver contains any whitespace characters"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1679
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1680
    ^ (self indexOfSeparator ~~ 0)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1681
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1682
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1683
     'hello world' includesSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1684
     'helloworld' includesSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1685
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1686
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1687
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1688
includesUnescapedMatchCharacters
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1689
    "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
  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, care for $\ escapes"
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1692
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1693
    |idx sz specialChars escape|
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
    idx := 1.
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1696
    sz := self size.
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1697
    specialChars := '*#[\'.
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1698
    (escape := self class matchEscapeCharacter) ~~ $\ ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1699
        specialChars := specialChars copy.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1700
        specialChars at:specialChars size put:escape
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1701
    ].
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  1702
16245
d16f9c7d9428 [true] whileTrue: -> #loop
Stefan Vogel <sv@exept.de>
parents: 16212
diff changeset
  1703
    [
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1704
        idx := self indexOfAny:specialChars startingAt:idx.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1705
        idx == 0 ifTrue:[^ false].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1706
        (self at:idx) == escape ifFalse:[^ true].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1707
        idx := idx + 2.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1708
        idx > sz ifTrue:[^ false].
16245
d16f9c7d9428 [true] whileTrue: -> #loop
Stefan Vogel <sv@exept.de>
parents: 16212
diff changeset
  1709
    ] loop.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1710
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1711
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1712
     '*foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1713
     '\*foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1714
     '\\foo' includesUnescapedMatchCharacters
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1715
     '\\\$foo' includesUnescapedMatchCharacters
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1716
     '*foo' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1717
     '\\*foo' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1718
     'foo*' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1719
     'foo\*' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1720
     'foo\' includesUnescapedMatchCharacters
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1721
    "
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1722
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1723
    "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
  1724
    "Created: 2.4.1997 / 17:23:26 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1725
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1726
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1727
indexOfControlCharacterStartingAt:startIndex
3668
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1728
    "return the index of the next control character;
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1729
     that is a character with asciiValue < 32.
15605
99acf495a3cf class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15540
diff changeset
  1730
     Start the search at startIndex, searching forward.
3668
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1731
     Return 0 if none is found."
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1732
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1733
    |start  "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1734
     mySize "{ Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1735
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1736
    start := startIndex.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1737
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1738
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1739
    start to:mySize do:[:index |
15605
99acf495a3cf class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15540
diff changeset
  1740
        (self at:index) isControlCharacter ifTrue:[^ index]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1741
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1742
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1743
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1744
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1745
     'hello world' asTwoByteString            indexOfControlCharacterStartingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1746
     'hello world\foo' withCRsasTwoByteString indexOfControlCharacterStartingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1747
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1748
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1749
    "Modified: / 21.7.1998 / 17:25:07 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1750
!
3668
76271941f044 added #indexOfControlCharacterStartingAt:
Claus Gittinger <cg@exept.de>
parents: 3656
diff changeset
  1751
8541
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1752
indexOfNonSeparator
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1753
    "return the index of the first non-whitespace character.
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1754
     return 0 if no non-separator was found"
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1755
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1756
    ^ self indexOfNonSeparatorStartingAt:1.
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1757
36f903267525 +indexOfNonSeparator
Claus Gittinger <cg@exept.de>
parents: 8525
diff changeset
  1758
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1759
     '    hello world' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1760
     '    ' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1761
     'a   ' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1762
     'abc' indexOfNonSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1763
     ' ' indexOfNonSeparator
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1764
     '' indexOfNonSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1765
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1766
!
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
indexOfNonSeparatorStartingAt:startIndex
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1769
    "return the index of the next non-whitespace character,
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1770
     starting the search at startIndex, searching forward;
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1771
     return 0 if no non-separator was found"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1772
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1773
    |start  "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1774
     mySize "{ Class: SmallInteger }"|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1775
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1776
    start := startIndex.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1777
    mySize := self size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1778
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1779
    start to:mySize do:[:index |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1780
        (self at:index) isSeparator ifFalse:[^ index]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1781
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1782
    ^ 0
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1783
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1784
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1785
     '    hello world' indexOfNonSeparatorStartingAt:1
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1786
     '    ' indexOfNonSeparatorStartingAt:1
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1787
     'a   ' indexOfNonSeparatorStartingAt:2
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1788
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1789
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1790
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1791
     |s index1 index2|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1792
     s := '   foo    bar      baz'.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1793
     index1 := s indexOfNonSeparatorStartingAt:1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1794
     index2 := s indexOfSeparatorStartingAt:index1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1795
     s copyFrom:index1 to:index2 - 1
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1796
    "
9192
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
indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1800
    "return the index of the first whitespace character;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1801
     starting the search at the beginning, searching forward;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1802
     return 0 if no separator was found"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1803
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1804
    ^ self indexOfSeparatorStartingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1805
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1806
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1807
     'hello world' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1808
     'helloworld' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1809
     'hello   ' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1810
     '   hello' indexOfSeparator
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1811
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1812
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1813
15912
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1814
indexOfSeparatorOrEndStartingAt:startIndex
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1815
    "return the index of the next whitespace character,
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1816
     starting the search at startIndex, searching forward;
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1817
     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
  1818
     To extract the word, copy from startIndex to the returned index-1"
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1819
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1820
    |idx|
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1821
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1822
    idx := self indexOfSeparatorStartingAt:startIndex.
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1823
    idx == 0 ifTrue:[^ self size + 1].
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1824
    ^ idx.
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1825
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1826
    "
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1827
     'hello world' indexOfSeparatorOrEndStartingAt:3    
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1828
     ' hello world' indexOfSeparatorOrEndStartingAt:3
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1829
     'hello world ' indexOfSeparatorOrEndStartingAt:3
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1830
     'hello world ' indexOfSeparatorOrEndStartingAt:6
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1831
     'hello world ' indexOfSeparatorOrEndStartingAt:7
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1832
     'helloworld ' indexOfSeparatorOrEndStartingAt:7    
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1833
     'helloworld' indexOfSeparatorOrEndStartingAt:7
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1834
    "
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1835
!
13b6b4a8109d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15890
diff changeset
  1836
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1837
indexOfSeparatorStartingAt:startIndex
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1838
    "return the index of the next whitespace character,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1839
     starting the search at startIndex, searching forward;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1840
     return 0 if no separator was found"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1841
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1842
    |start  "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1843
     mySize "{ Class: SmallInteger }"|
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
    start := startIndex.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1846
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1847
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1848
    start to:mySize do:[:index |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1849
        (self at:index) isSeparator ifTrue:[^ index]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1850
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1851
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1852
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1853
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1854
     'hello world' indexOfSeparatorStartingAt:3
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1855
     ' hello world' indexOfSeparatorStartingAt:3
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1856
     'hello world ' indexOfSeparatorStartingAt:3
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1857
     'hello world ' indexOfSeparatorStartingAt:6
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1858
     'hello world ' indexOfSeparatorStartingAt:7
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1859
     'helloworld ' indexOfSeparatorStartingAt:7
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1860
     'helloworld' indexOfSeparatorStartingAt:7
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1861
    "
2519
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1862
!
07674cea76dd allow escaping a * when doing a match
Claus Gittinger <cg@exept.de>
parents: 2452
diff changeset
  1863
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1864
lastIndexOfSeparator
14150
e13160aa321a comment/format in: #lastIndexOfSeparator
Claus Gittinger <cg@exept.de>
parents: 14141
diff changeset
  1865
    "return the last index of a whitespace character (space or tab).
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1866
     (i.e. start the search at the end and search backwards);
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1867
     Returns 0 if no separator is found."
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1868
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1869
    ^ self lastIndexOfSeparatorStartingAt:(self size)
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1870
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1871
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1872
     'hello world' lastIndexOfSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1873
     'helloworld' lastIndexOfSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1874
     'hel lo wor ld' lastIndexOfSeparator
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1875
     'hel   ' lastIndexOfSeparator 6
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1876
    "
14150
e13160aa321a comment/format in: #lastIndexOfSeparator
Claus Gittinger <cg@exept.de>
parents: 14141
diff changeset
  1877
e13160aa321a comment/format in: #lastIndexOfSeparator
Claus Gittinger <cg@exept.de>
parents: 14141
diff changeset
  1878
    "Modified (comment): / 01-06-2012 / 13:10:30 / cg"
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1879
!
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1880
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1881
lastIndexOfSeparatorStartingAt:startIndex
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1882
    "return the index of the previous whitespace character,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1883
     starting the search at startIndex (and searching backwards);
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1884
     returns 0 if no separator was found"
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
    |start  "{ Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1887
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1888
    start := startIndex.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1889
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1890
    start to:1 by:-1 do:[:index |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1891
        (self at:index) isSeparator ifTrue:[^ index]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1892
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1893
    ^ 0
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1894
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1895
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1896
     'hello world' lastIndexOfSeparatorStartingAt:3
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1897
     'hello world' lastIndexOfSeparatorStartingAt:7
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1898
     'helloworld' lastIndexOfSeparatorStartingAt:7
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1899
     ' helloworld' lastIndexOfSeparatorStartingAt:7
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  1900
    "
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1901
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1902
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1903
!CharacterArray methodsFor:'comparing'!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1904
6742
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1905
< aString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1906
    "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
  1907
     receiver is greater than the argument. Otherwise return false.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1908
     This comparison is based on the elements ascii code -
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1909
     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
  1910
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1911
    |mySize    "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1912
     otherSize "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1913
     n         "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1914
     c1 c2|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1915
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1916
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1917
    otherSize := aString string size.
6742
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1918
    n := mySize min:otherSize.
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1919
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1920
    1 to:n do:[:index |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1921
        c1 := self at:index.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1922
        c2 := aString at:index.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1923
        (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
  1924
    ].
292775fda600 avoid endless recursion when comparing int < string
Claus Gittinger <cg@exept.de>
parents: 6655
diff changeset
  1925
    ^ mySize < otherSize
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1926
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1927
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1928
= aString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1929
    "Compare the receiver with the argument and return true if the
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1930
     receiver is equal to the argument. Otherwise return false.
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1931
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  1932
     This compare does NOT ignore case differences,
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1933
     therefore 'foo' = 'Foo' will return false.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1934
     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
  1935
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  1936
    |mySize    "{ Class: SmallInteger }"|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1937
5963
23462e06dcff compare with Texts fixed (should compare equal if strings are)
Claus Gittinger <cg@exept.de>
parents: 5946
diff changeset
  1938
    (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
  1939
        ^ false
5963
23462e06dcff compare with Texts fixed (should compare equal if strings are)
Claus Gittinger <cg@exept.de>
parents: 5946
diff changeset
  1940
    ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1941
    mySize := self size.
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  1942
    mySize ~~ (aString size) ifTrue:[^ false].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1943
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1944
    1 to:mySize do:[:index |
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  1945
        (self at:index) = (aString at:index) ifFalse:[^ false].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1946
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1947
    ^ true
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1948
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1949
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1950
     'foo' = 'Foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1951
     'foo' = 'bar'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1952
     'foo' = 'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1953
     'foo' = 'foo' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1954
     'foo' asText = 'foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1955
     'foo' asText = 'foo' asText
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1956
    "
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1957
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1958
    "Modified: 22.4.1996 / 15:53:58 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1959
!
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1960
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  1961
> aString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1962
    "Compare the receiver with the argument and return true if the
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1963
     receiver is greater than the argument. Otherwise return false.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1964
     This comparison is based on the elements ascii code -
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  1965
     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
  1966
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  1967
    |mySize    "{ Class: SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  1968
     otherSize "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1969
     n         "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1970
     c1 c2|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1971
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1972
    mySize := self size.
5929
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1973
    otherSize := aString string size.
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1974
    n := mySize min:otherSize.
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1975
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1976
    1 to:n do:[:index |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1977
        c1 := self at:index.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1978
        c2 := aString at:index.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  1979
        (c1 == c2 or:[c1 = c2]) ifFalse:[^ c1 > c2].
5929
a3d2e7aaa3a3 added #compareCaselessWith:
Claus Gittinger <cg@exept.de>
parents: 5898
diff changeset
  1980
    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1981
    ^ mySize > otherSize
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1982
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1983
    "Modified: 22.4.1996 / 15:55:00 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1984
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  1985
14660
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1986
after:aString
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1987
    "Compare the receiver with the argument and return true if the
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1988
     receiver should come after the argument in a sorted list.
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1989
     Otherwise return false.
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1990
     NOTE: The comparison should be language specific, depending on the value of
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1991
            LC_COLLATE, which is initialized from the environment.
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1992
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1993
            Currently it is for Strings, but not for UnicodeStrings...
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1994
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1995
     STUPID:
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1996
        #after has a completely different meaning in SeqColl ..."
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1997
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1998
    ^ (self compareCollatingWith:aString) > 0
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  1999
!
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2000
15814
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2001
compareAsVersionNumberWith:aStringOrCollection
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2002
    "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
  2003
     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
  2004
     Compare as version numbers in the form a.b.c... ."
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2005
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2006
    |rev1 rev2|
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2007
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2008
    rev1 := self asCollectionOfSubstringsSeparatedBy:$..
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2009
    aStringOrCollection isString ifTrue:[
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2010
        rev2 := aStringOrCollection asCollectionOfSubstringsSeparatedBy:$..
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2011
    ].
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2012
    rev1 := rev1 collect:[:each| each asInteger].
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2013
    rev2 := rev2 collect:[:each| each asInteger].
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2014
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2015
    ^ rev1 compareWith:rev2
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2016
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2017
   "
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2018
     self assert:('1' compareAsVersionNumberWith:'2') < 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2019
     self assert:('2' compareAsVersionNumberWith:'1') > 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2020
     self assert:('1.1' compareAsVersionNumberWith:'2.1.2') < 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2021
     self assert:('2.1' compareAsVersionNumberWith:'1.2.3') > 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2022
     self assert:('1' compareAsVersionNumberWith:'1.1') < 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2023
     self assert:('1.1' compareAsVersionNumberWith:'1') > 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2024
     self assert:('1.1' compareAsVersionNumberWith:'1.2') < 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2025
     self assert:('1.10' compareAsVersionNumberWith:'1.2') > 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2026
     self assert:('1.2.3.4' compareAsVersionNumberWith:'1.2.3.5') < 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2027
     self assert:('1.2.3.4' compareAsVersionNumberWith:'1.2.3.3') > 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2028
     self assert:('1.2.3.4' compareAsVersionNumberWith:'1.2.3') > 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2029
     self assert:('1.2.3.4' compareAsVersionNumberWith:'1.2.3.4') = 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2030
     self assert:('1.2.3.4' compareAsVersionNumberWith:'01.002.03.004') = 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2031
     self assert:('1.2.3.4' compareAsVersionNumberWith:#(1 2 3 4)) = 0.      
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2032
    "
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2033
!
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2034
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2035
compareCaselessWith:aString
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2036
    "Compare the receiver against the argument, ignoreing case.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2037
     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
  2038
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2039
     This comparison is based on the elements ascii code -
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2040
     i.e. national characters are NOT treated specially.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2041
     'foo' compareWith: 'Foo' will return 0"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2042
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2043
    |mySize    "{ Class: SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2044
     otherSize "{ Class: SmallInteger }"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2045
     n         "{ Class: SmallInteger }"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2046
     c1 c2|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2047
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2048
    mySize := self size.
5739
4fd3be7ccc75 oops some relational ops did accept a non-string arg
Claus Gittinger <cg@exept.de>
parents: 5732
diff changeset
  2049
    otherSize := aString string size.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2050
    n := mySize min:otherSize.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2051
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2052
    1 to:n do:[:index |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2053
        c1 := (self at:index) asLowercase.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2054
        c2 := (aString at:index) asLowercase.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2055
        c1 > c2 ifTrue:[^ 1].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2056
        c1 < c2 ifTrue:[^ -1].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2057
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2058
    mySize > otherSize ifTrue:[^ 1].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2059
    mySize < otherSize ifTrue:[^ -1].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2060
    ^ 0
1252
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  2061
105280fd8d72 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1250
diff changeset
  2062
    "Modified: 22.4.1996 / 15:56:07 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2063
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2064
14660
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2065
compareCollatingWith:aString
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2066
    "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
  2067
     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
  2068
     The comparison is language specific, depending on the value of
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2069
     LC_COLLATE, which is in the shell environment."
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2070
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2071
    "TODO not yet defined for unicode"
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2072
    <resource: #todo>
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2073
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2074
    |s|
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2075
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2076
    (s := self string) ~~ self ifTrue:[
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2077
        ^ s compareCollatingWith:aString
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2078
    ].
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2079
    ^ self compareWith:aString
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2080
!
78d3fa5b75e8 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14652
diff changeset
  2081
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2082
compareWith:aString
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2083
    "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
  2084
     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
  2085
     This comparison is based on the elements' codepoints -
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2086
     i.e. upper/lowercase & national characters are NOT treated specially.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2087
     'foo' compareWith: 'Foo' will return 1.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2088
     while 'foo' sameAs:'Foo' will return true"
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2089
15814
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2090
    |s|
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2091
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2092
    s := self string.
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2093
    s ~~ self ifTrue:[
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2094
        ^ s compareWith:aString string.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2095
    ].
15814
977883b1091b class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15788
diff changeset
  2096
    ^ super compareWith:aString string.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2097
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2098
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2099
endsWith:aStringOrCharacter
16175
05de577feb25 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16051
diff changeset
  2100
    "return true, if the receiver ends with something, aStringOrCharacter.
05de577feb25 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16051
diff changeset
  2101
     If aStringOrCharacter is empty, true is returned"
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2102
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2103
    |s|
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2104
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2105
    (s := self string) ~~ self ifTrue:[
16175
05de577feb25 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16051
diff changeset
  2106
        ^ s endsWith:aStringOrCharacter
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2107
    ].
12912
d12e31b830f5 changed: #endsWith:
Claus Gittinger <cg@exept.de>
parents: 12767
diff changeset
  2108
    (self notEmpty and:[aStringOrCharacter isCharacter]) ifTrue:[
16175
05de577feb25 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16051
diff changeset
  2109
        ^ self last = aStringOrCharacter
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2110
    ].
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2111
    ^ super endsWith:aStringOrCharacter
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2112
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2113
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2114
     'hello world' endsWith:'world'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2115
     'hello world' asText allBold endsWith:'world'
16175
05de577feb25 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16051
diff changeset
  2116
     'hello world' endsWith:''               
05de577feb25 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16051
diff changeset
  2117
     'hello world' asText allBold endsWith:''
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2118
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2119
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2120
    "Modified: 12.5.1996 / 15:49:18 / cg"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2121
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2122
11838
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2123
hammingDistanceTo:aString
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2124
    "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
  2125
     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
  2126
     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
  2127
     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
  2128
     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
  2129
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2130
    self assert:(aString size == self size).
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2131
    ^ 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
  2132
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2133
    "
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2134
     'roses' hammingDistanceTo:'toned'
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2135
    "
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2136
!
0a3d38e446e4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11828
diff changeset
  2137
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2138
hash
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2139
    "return an integer useful as a hash-key"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2140
16898
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2141
    "/ whenever changing, also care for String>>hash.
13879
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2142
    "/ immediately after any change, execute (maybe in a debugger):
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2143
    "/      Set allSubInstancesDo:[:s | s rehash]
16898
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2144
    ^ self hash_fnv1a
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2145
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2146
    "
16899
c8de03aacca0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16898
diff changeset
  2147
     'a' hash                    
c8de03aacca0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16898
diff changeset
  2148
     'a' asUnicode16String hash  
c8de03aacca0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16898
diff changeset
  2149
     'a' asUnicode32String hash  
c8de03aacca0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16898
diff changeset
  2150
     'aa' hash                   
c8de03aacca0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16898
diff changeset
  2151
     'aa' asUnicode16String hash 
c8de03aacca0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16898
diff changeset
  2152
     'aa' asUnicode32String hash 
c8de03aacca0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16898
diff changeset
  2153
     'ab' hash                   
c8de03aacca0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16898
diff changeset
  2154
     'ab' asUnicode16String hash 
c8de03aacca0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16898
diff changeset
  2155
     'ab' asUnicode32String hash 
13879
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2156
     'ab' hash
16899
c8de03aacca0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16898
diff changeset
  2157
     'ab' asArray hash           
13879
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2158
    "
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2159
14641
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2160
    "
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2161
        |syms ms|
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2162
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2163
        syms := Symbol allInstances.
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2164
        Transcript show:'syms: '; showCR:syms size.
14652
3da893944c41 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14641
diff changeset
  2165
        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
  2166
        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
  2167
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2168
        ms := Time millisecondsToRun:[
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2169
            10 timesRepeat:[
14652
3da893944c41 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14641
diff changeset
  2170
                syms do:[:each| each hash].
14641
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2171
            ].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2172
        ].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2173
        Transcript show:'sdbm hash: '; showCR:ms.
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2174
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2175
        ms := Time millisecondsToRun:[
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2176
            10 timesRepeat:[
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2177
                syms do:[:each| each hash_dragonBook].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2178
            ].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2179
        ].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2180
        Transcript show:'dragonBook: '; showCR:ms.
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2181
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2182
        syms := syms collect:[:each| each asUnicode16String].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2183
        ms := Time millisecondsToRun:[
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2184
            10 timesRepeat:[
14652
3da893944c41 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14641
diff changeset
  2185
                syms do:[:each| each hash].
14641
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2186
            ].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2187
        ].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2188
        Transcript show:'unicode sdbm hash: '; showCR:ms.
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2189
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2190
        ms := Time millisecondsToRun:[
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2191
            10 timesRepeat:[
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2192
                syms do:[:each| each hash_dragonBook].
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2193
            ].
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
        Transcript show:'unicode dragonBook:'; showCR:ms.
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2196
    "
507dd4be1798 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14637
diff changeset
  2197
13879
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2198
    "Modified: / 26-12-2011 / 14:09:07 / cg"
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2199
!
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2200
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2201
hash_dragonBook
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2202
    "return an integer useful as a hash-key"
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2203
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2204
    |h g|
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2205
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2206
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2207
    "/ this is the dragon-book algorithm
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2208
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2209
    h := 0.
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2210
    self reverseDo:[:char |
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2211
"/ 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
  2212
"/        h := (h bitShift:4) + char asciiValue.
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2213
        h := (h bitShift:4).
14637
9ba33c37bdd6 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14631
diff changeset
  2214
        h := h + char codePoint.
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2215
        h := h bitAnd:16rFFFFFFFF.
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2216
        g := (h bitAnd: 16rF0000000).
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2217
        g ~~ 0 ifTrue:[
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2218
            h := h bitXor:(g bitShift:-24).
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2219
            h := h bitXor:g.
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2220
        ].
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2221
    ].
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2222
    "/
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2223
    "/ multiply by large prime to spread values
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2224
    "/ This speeds up Set and Dictionary by a factor of 10!!
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2225
    "/
14137
1eb1b4a3f364 Inherit from UninterpretedBytes instead of ByteArray
Stefan Vogel <sv@exept.de>
parents: 14122
diff changeset
  2226
    h := h times:31415821.
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2227
    ^ h
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2228
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2229
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2230
     'a' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2231
     'a' asUnicode16String hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2232
     'aa' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2233
     'aa' asUnicode16String hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2234
     'ab' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2235
     'ab' asUnicode16String hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2236
     'ab' hash
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2237
     'ab' asArray hash
10698
08bfe7364c0f oops: Unicode16String-hash returned different value from
sr
parents: 10671
diff changeset
  2238
    "
13879
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2239
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2240
    "Created: / 26-12-2011 / 13:46:06 / cg"
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2241
!
Claus Gittinger <cg@exept.de>
parents: 13840
diff changeset
  2242
16887
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2243
hash_fnv1a
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2244
    "return an integer useful as a hash-key.
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2245
     This method uses the fnv-1a algorithm
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2246
     (which is actually a very good one)"
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2247
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2248
    |h|
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2249
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2250
    h := 2166136261.
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2251
    self do:[:eachChar |
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2252
        h := h bitXor:(eachChar codePoint).
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2253
        h := (h * 16777619) bitAnd:16rFFFFFFFF.
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2254
    ].
16898
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2255
    "/ make sure, it fits into a smallInt
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2256
    h := (h bitXor: (h >> 30)) bitAnd: 16r3FFFFFFF.
16887
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2257
    ^ h
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2258
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2259
    "
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2260
     'abc' hash_fnv1a  
16898
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2261
     'abc' asUnicode16String hash_fnv1a  
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2262
     'abc' asUnicode32String hash_fnv1a 
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2263
16887
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2264
     'foofooHelloWorld' hash_fnv1a   
16898
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2265
     'foofooHelloWorld' asUnicode16String hash_fnv1a   
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2266
     'foofooHelloWorld' asUnicode32String hash_fnv1a   
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2267
16887
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2268
     'blablaHelloWorld' hash_fnv1a   
16898
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2269
     'blablaHelloWorld' asUnicode16String hash_fnv1a   
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2270
     'blablaHelloWorld' asUnicode32String hash_fnv1a   
16887
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2271
    "
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2272
!
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2273
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2274
hash_java
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2275
    "return an integer useful as a hash-key.
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2276
     This method uses the same algorithm as used in
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2277
     the java virtual machine 
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2278
     (which is actually not 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 := 0.
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 * 31) + (eachChar codePoint).
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2285
        h := h bitAnd:16rFFFFFFFF.
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2286
    ].
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2287
    ^ h
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2288
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2289
    "
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2290
     'abc' hash_java  
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2291
     'foofooHelloWorld' hash_java   
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2292
     'blablaHelloWorld' hash_java   
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2293
    "
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2294
!
8e30e6a52a64 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16875
diff changeset
  2295
16898
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2296
hash_sdbm
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2297
    "return an integer useful as a hash-key.
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2298
     This method implements the sdbm algorithm."
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2299
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2300
    |h|
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2301
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2302
    "/
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2303
    "/ this is the sdbm algorithm
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2304
    "/
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2305
    h := 0.
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2306
    self do:[:char |
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2307
        h := (65599 times:h) plus:char codePoint.
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2308
    ].
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2309
    ^ h 
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2310
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2311
    "
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2312
     'a' hash
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2313
     'a' asUnicode16String hash
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2314
     'aa' hash
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2315
     'aa' asUnicode16String hash
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2316
     'ab' hash
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2317
     'ab' asUnicode16String hash
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2318
     'ab' hash
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2319
     'ab' asArray hash
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2320
    "
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2321
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2322
    "
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2323
        |syms ms|
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2324
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2325
        syms := Symbol allInstances.
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2326
        Transcript show:'syms: '; showCR:syms size.
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2327
        Transcript show:'sdbm hashes: '; showCR:(syms collect:[:s| s hash]) asSet size.
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2328
        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
  2329
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2330
        ms := Time millisecondsToRun:[
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2331
            10 timesRepeat:[
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2332
                syms do:[:each| each hash].
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
        Transcript show:'sdbm hash: '; showCR:ms.
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
        ms := Time millisecondsToRun:[
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2338
            10 timesRepeat:[
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2339
                syms do:[:each| each hash_dragonBook].
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
        ].
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2342
        Transcript show:'dragonBook: '; showCR:ms.
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
        syms := syms collect:[:each| each asUnicode16String].
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2345
        ms := Time millisecondsToRun:[
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2346
            10 timesRepeat:[
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2347
                syms do:[:each| each hash].
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2348
            ].
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2349
        ].
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2350
        Transcript show:'unicode sdbm hash: '; showCR:ms.
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2351
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2352
        ms := Time millisecondsToRun:[
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2353
            10 timesRepeat:[
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2354
                syms do:[:each| each hash_dragonBook].
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2355
            ].
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
        Transcript show:'unicode dragonBook:'; showCR:ms.
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2358
    "
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2359
0663e6b0d177 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16887
diff changeset
  2360
    "Modified: / 26-12-2011 / 14:09:07 / cg"
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
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2363
levenshteinTo:aString
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2364
    "return the levenshtein distance to the argument, aString;
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2365
     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
  2366
     made to get aString from the receiver.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2367
     See IEEE transactions on Computers 1976 Pg 172 ff."
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2368
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2369
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2370
     in the following, we assume that ommiting a character
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2371
     is less of an error than inserting an extra character.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2372
     Therefore the different insertion (i) and deletion (d) values.
15750
2df87ab00226 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15740
diff changeset
  2373
        s: substitution weight (4)
2df87ab00226 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15740
diff changeset
  2374
        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
  2375
        c: case weight (4)                           - or nil (then use s)
2df87ab00226 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15740
diff changeset
  2376
        e: exchange weight (8)                       - or nil (then use s*2)
2df87ab00226 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15740
diff changeset
  2377
        i: insertion of extra character weight (2)
2df87ab00226 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15740
diff changeset
  2378
        d: delete of a character weight (6)
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2379
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2380
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2381
    ^ StringUtilities
15750
2df87ab00226 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15740
diff changeset
  2382
            levenshteinDistanceFrom:self
2df87ab00226 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15740
diff changeset
  2383
            to:aString
2df87ab00226 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15740
diff changeset
  2384
            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
  2385
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2386
    "
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2387
     'computer' levenshteinTo:'computer'
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2388
     'cOmputer' levenshteinTo:'computer'
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2389
     'cOmpuTer' levenshteinTo:'computer'
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2390
     'cimputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2391
     'cumputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2392
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2393
     'cmputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2394
     'coomputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2395
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2396
     'ocmprt' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2397
     'computer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2398
     'ocmputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2399
     'cmputer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2400
     'computer' levenshteinTo:'cmputer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2401
     'Computer' levenshteinTo:'computer'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2402
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2403
     'compiter' levenshteinTo:'computer'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2404
     'compoter' levenshteinTo:'computer'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2405
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2406
     'comptuer' levenshteinTo:'computer'
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2407
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2408
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2409
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2410
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
  2411
    "parametrized levenshtein.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2412
     return the levenshtein distance to the argument, aString;
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2413
     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
  2414
     made to get aString from the receiver.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2415
     The arguments are the costs for
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2416
        s:substitution,
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2417
        k:keyboard type (substitution),
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2418
        c:case-change,
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2419
        i:insertion
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2420
        d:deletion
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2421
     of a character.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2422
     See IEEE transactions on Computers 1976 Pg 172 ff"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2423
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2424
    ^ StringUtilities
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2425
            levenshteinDistanceFrom:self
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2426
            to:aString
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2427
            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
  2428
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2429
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2430
sameAs:aString
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2431
    "Compare the receiver with the argument like =, but ignore case differences.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2432
     Return true or false."
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2433
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2434
    |mySize "{ Class: SmallInteger }"
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2435
     otherSize c1 c2|
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  2436
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2437
    self == aString ifTrue:[^ true].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2438
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2439
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2440
    otherSize := aString string size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2441
    mySize == otherSize ifFalse:[^ false].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2442
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2443
    1 to:mySize do:[:index |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2444
        c1 := self at:index.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2445
        c2 := aString at:index.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2446
        c1 == c2 ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2447
            (c1 sameAs:c2) ifFalse:[^ false].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2448
        ]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2449
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2450
    ^ true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2451
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2452
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2453
     'foo' sameAs: 'Foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2454
     'foo' sameAs: 'bar'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2455
     'foo' sameAs: 'foo'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2456
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2457
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2458
    "Modified: 22.4.1996 / 15:56:17 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2459
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2460
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2461
sameAs:aString caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2462
    "Compare the receiver with the argument.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2463
     If caseSensitive is false, this is the same as #sameAs:,
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2464
     if false, this is the same as #=."
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2465
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2466
    caseSensitive ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2467
        ^ self sameAs:aString
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2468
    ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2469
    ^ self = aString
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2470
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2471
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2472
     'foo' sameAs:'Foo' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2473
     'foo' sameAs:'foo' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2474
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2475
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2476
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2477
sameAs:aString ignoreCase:ignoreCase
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  2478
    <resource: #obsolete>
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2479
    "Compare the receiver with the argument.
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2480
     If ignoreCase is true, this is the same as #sameAs:,
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2481
     if false, this is the same as #=."
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2482
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2483
    ignoreCase ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2484
        ^ self sameAs:aString
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2485
    ].
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2486
    ^ self = aString
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2487
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2488
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2489
     'foo' sameAs:'Foo' ignoreCase:false
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2490
     'foo' sameAs:'foo' ignoreCase:true
5242
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2491
    "
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2492
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2493
!
0da078635576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5230
diff changeset
  2494
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2495
sameCharacters:aString
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2496
    "count & return the number of characters which are the same
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2497
     (ignoring case and emphasis) in the receiver and the argument, aString."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2498
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2499
    |n "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2500
     c1 c2 cnt|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2501
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2502
    n := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2503
    n := n min:(aString string size).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2504
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2505
    cnt := 0.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2506
    1 to:n do:[:index |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2507
        c1 := self at:index.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2508
        c2 := aString at:index.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2509
        ((c1 == c2)
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2510
        or:[c1 asLowercase = c2 asLowercase]) ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2511
            cnt := cnt + 1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2512
        ]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2513
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2514
    ^ cnt
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2515
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2516
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2517
     'foobarbaz' sameCharacters: 'foo'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2518
     'foobarbaz' sameCharacters: 'Foo'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2519
     'foobarbaz' sameCharacters: 'baz'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2520
    "
5510
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2521
!
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2522
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2523
sameEmphasisAs:aStringOrText
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2524
    "compare the receivers and the arguments emphasis"
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2525
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2526
    ^ self emphasis = aStringOrText emphasis
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2527
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2528
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2529
     'hello' asText sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2530
     'hello' asText sameEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2531
     'hello' asText allBold sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2532
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allBold
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2533
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allItalic
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2534
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2535
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
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2538
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  2539
sameStringAndEmphasisAs:aStringOrText
5739
4fd3be7ccc75 oops some relational ops did accept a non-string arg
Claus Gittinger <cg@exept.de>
parents: 5732
diff changeset
  2540
    "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
  2541
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2542
    aStringOrText isString ifFalse:[^ false].
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2543
    (self string = aStringOrText string) ifFalse:[^ false].
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2544
    self hasChangeOfEmphasis = aStringOrText hasChangeOfEmphasis ifFalse:[^ false].
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2545
    ^ self emphasis = aStringOrText emphasis
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2546
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2547
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2548
     'hello' asText sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2549
     'hello' asText sameEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2550
     'hello' asText allBold sameEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2551
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2552
     'hello' asText allBold sameEmphasisAs: 'fooba' asText allItalic
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2553
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2554
     'hello' sameEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2555
     'hello' sameEmphasisAs: 'hello' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2556
     'hello' sameEmphasisAs: 'fooba'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2557
     'hello' sameEmphasisAs: 'fooba' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2558
     'hello' sameEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2559
     'hello' sameEmphasisAs: 'fooba' asText allItalic
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2560
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2561
     'hello' asText sameStringAndEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2562
     'hello' asText sameStringAndEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2563
     'hello' asText allBold sameStringAndEmphasisAs: 'hello'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2564
     'hello' asText allBold sameStringAndEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2565
     'hello' asText allBold sameStringAndEmphasisAs: 'fooba' asText allItalic
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2566
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2567
     'hello' sameStringAndEmphasisAs: 'hello' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2568
     'hello' sameStringAndEmphasisAs: 'hello' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2569
     'hello' sameStringAndEmphasisAs: 'fooba'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2570
     'hello' sameStringAndEmphasisAs: 'fooba' asText
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2571
     'hello' sameStringAndEmphasisAs: 'fooba' asText allBold
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2572
     'hello' sameStringAndEmphasisAs: 'fooba' asText allItalic
5510
a261b8f5d66f moved #sameEmphasisAs: and #sameStringAndEmphasisAs:
Claus Gittinger <cg@exept.de>
parents: 5487
diff changeset
  2573
    "
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2574
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2575
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2576
spellAgainst: aString
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2577
    "return an integer between 0 and 100 indicating how similar
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2578
     the argument is to the receiver.  No case conversion is done.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2579
     This algorithm is much simpler (but also less exact) than the
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2580
     levenshtein distance. Experiment which is better for your
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2581
     application."
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2582
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2583
    | i1     "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2584
      i2     "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2585
      next1  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2586
      next2  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2587
      size1  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2588
      size2  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2589
      score  "{ Class: SmallInteger }"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2590
      maxLen "{ Class: SmallInteger }" |
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2591
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2592
    size1 := self size.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2593
    size2 := aString size.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2594
    maxLen := size1 max:size2.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2595
    score := 0.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2596
    i1 := i2 := 1.
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2597
    [i1 <= size1 and: [i2 <= size2]] whileTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2598
        next1 := i1 + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2599
        next2 := i2 + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2600
        (self at:i1) == (aString at:i2) ifTrue: [
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2601
            score := score+1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2602
            i1 := next1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2603
            i2 := next2
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2604
        ] ifFalse: [
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2605
            (i2 < size2 and: [(self at:i1) == (aString at:next2)]) ifTrue: [
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2606
                i2 := next2
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2607
            ] ifFalse: [
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2608
                (i1 < size1 and: [(self at:next1) == (aString at:i2)]) ifTrue: [
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2609
                    i1 := next1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2610
                ] ifFalse: [
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2611
                    i1 := next1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2612
                    i2 := next2
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2613
                ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2614
            ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2615
        ]
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2616
    ].
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2617
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2618
    score == maxLen ifTrue: [^ 100].
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2619
    ^ 100 * score // maxLen
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2620
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
     'Smalltalk' spellAgainst: 'Smalltlak'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2623
     'Smalltalk' spellAgainst: 'smalltlak'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2624
     'Smalltalk' spellAgainst: 'smalltalk'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2625
     'Smalltalk' spellAgainst: 'smalltlk'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2626
     'Smalltalk' spellAgainst: 'Smalltolk'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2627
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2628
!
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2629
16553
d2f7a990d66b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16473
diff changeset
  2630
startsWith:aStringOrCharacter
d2f7a990d66b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16473
diff changeset
  2631
    "return true, if the receiver starts with something, aStringOrCharacter.
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2632
     If the argument is empty, true is returned."
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2633
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2634
    |s|
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2635
16553
d2f7a990d66b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16473
diff changeset
  2636
    aStringOrCharacter isCharacter ifTrue:[
d2f7a990d66b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16473
diff changeset
  2637
        ^ (self size > 0) and:[ (self at:1) == aStringOrCharacter ]
d2f7a990d66b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16473
diff changeset
  2638
    ].
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2639
    (s := self string) ~~ self ifTrue:[
16553
d2f7a990d66b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16473
diff changeset
  2640
        ^ s startsWith:aStringOrCharacter
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2641
    ].
16553
d2f7a990d66b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16473
diff changeset
  2642
    ^ super startsWith:aStringOrCharacter
11861
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2643
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2644
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2645
     'hello world' startsWith:'hello'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2646
     'hello world' asText allBold startsWith:'hello'
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2647
     'hello world' asText allBold startsWith:''
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2648
    "
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2649
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2650
    "Created: 12.5.1996 / 15:46:40 / cg"
99bf865f7b78 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11839
diff changeset
  2651
    "Modified: 12.5.1996 / 15:49:24 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2652
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2653
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2654
!CharacterArray methodsFor:'converting'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2655
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2656
asArrayOfSubstrings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2657
    "return an array of substrings from the receiver, interpreting
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2658
     separators (i.e. spaces & newlines) as word-delimiters.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2659
     This is a compatibility method - the actual work is done in
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2660
     asCollectionOfWords."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2661
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2662
    ^ self asCollectionOfWords asArray
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2663
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2664
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2665
     '1 one two three four 5 five' asArrayOfSubstrings
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2666
     '1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2667
one
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2668
        two three four 5 five' asArrayOfSubstrings
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2669
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2670
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2671
11881
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2672
asAsciiZ
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2673
    "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
  2674
     with an additional 0-character. Otherwise return the receiver. This is sometimes
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2675
     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
  2676
     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
  2677
     strings are not."
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2678
12658
2e9c209be0cc changed: #asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 12615
diff changeset
  2679
    (self notEmpty and:[self last codePoint == 0]) ifTrue:[^ self ].
11881
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2680
    ^ self copyWith:(Character value:0).
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2681
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2682
    "
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2683
     'abc' asAsciiZ
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2684
     'abc' asWideString asAsciiZ
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2685
    "
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2686
!
23c9e1cecd05 +asAsciiZ
Claus Gittinger <cg@exept.de>
parents: 11865
diff changeset
  2687
13524
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2688
asByteArray
15936
96c6758087c1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15912
diff changeset
  2689
    "depending on the size of the characters in the receiver,
96c6758087c1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15912
diff changeset
  2690
     return a byteArray containing single-, double- or even 4-bytewise values.
96c6758087c1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15912
diff changeset
  2691
     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
  2692
     size required for the largest character.
96c6758087c1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15912
diff changeset
  2693
     Caveat: better use utf8Encoded, to get reproducable results"
96c6758087c1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15912
diff changeset
  2694
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2695
    |bytes sz bytesPerCharacter idx str|
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2696
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2697
    str := self string.
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2698
    str ~~ self ifTrue:[
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2699
        "/ for text and other wrappers
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2700
        ^ str asByteArray
13611
ba8c7372218a variable renamed in: #inspector2TabBytes
Claus Gittinger <cg@exept.de>
parents: 13524
diff changeset
  2701
    ].
ba8c7372218a variable renamed in: #inspector2TabBytes
Claus Gittinger <cg@exept.de>
parents: 13524
diff changeset
  2702
ba8c7372218a variable renamed in: #inspector2TabBytes
Claus Gittinger <cg@exept.de>
parents: 13524
diff changeset
  2703
    "/ for real strings, a fallback
13524
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2704
    sz := self size.
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2705
    bytesPerCharacter := self bitsPerCharacter // 8.
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2706
    bytes := ByteArray new:(sz * bytesPerCharacter).
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2707
    idx := 1.
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2708
    self do:[:char |
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2709
        |code|
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2710
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2711
        code := char codePoint.
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2712
        bytesPerCharacter == 2 ifTrue:[
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2713
            bytes unsignedShortAt:idx put:code
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2714
        ] ifFalse:[
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2715
            bytesPerCharacter == 4 ifTrue:[
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2716
                bytes unsignedLongAt:idx put:code
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2717
            ] ifFalse:[
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2718
                bytes at:idx put:code
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2719
            ].
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2720
        ].
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  2721
        idx := idx + bytesPerCharacter.
13524
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2722
    ].
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2723
    ^ bytes
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2724
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2725
    "Created: / 27-07-2011 / 00:56:17 / cg"
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2726
!
f625be6d274e added: #asByteArray
Claus Gittinger <cg@exept.de>
parents: 13520
diff changeset
  2727
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2728
asCollectionOfLines
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2729
    "return a collection containing the lines (separated by cr)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2730
     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
  2731
     contain empty strings. 
d7c3e67647f1 comment/format in: #asCollectionOfLines
Claus Gittinger <cg@exept.de>
parents: 14455
diff changeset
  2732
     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
  2733
     See also #asCollectionOfLinesWithReturn
d7c3e67647f1 comment/format in: #asCollectionOfLines
Claus Gittinger <cg@exept.de>
parents: 14455
diff changeset
  2734
     (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
  2735
      this method and we did not want to risk any incompatibilities)"
14455
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2736
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2737
    ^ self asCollectionOfSubstringsSeparatedBy:Character cr.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2738
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2739
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2740
     '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
  2741
     '1 one\\\\2 two\3 three' withCRs asCollectionOfLines
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2742
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2743
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2744
14455
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2745
asCollectionOfLinesWithReturn
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2746
    "return a collection containing the lines (separated by cr)
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2747
     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
  2748
     contain empty strings."
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2749
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2750
    |lines|
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2751
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2752
    lines := self asCollectionOfSubstringsSeparatedBy:Character cr.
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2753
    lines last isEmpty ifTrue:[
15167
62b89f82633c Changed usage of deprecated #copyWithoutLast: to #copyButLast:
Stefan Vogel <sv@exept.de>
parents: 15055
diff changeset
  2754
        ^ lines copyButLast:1
14455
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2755
    ].
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2756
    ^ lines
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2757
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2758
    "
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2759
     '1\2\3' withCRs asCollectionOfLines
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2760
     '1\2\3\' withCRs asCollectionOfLines
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2761
     '1\2\3' withCRs asCollectionOfLinesWithReturn
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2762
     '1\2\3\' withCRs asCollectionOfLinesWithReturn
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2763
    "
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2764
!
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2765
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2766
asCollectionOfSubstringsSeparatedBy:aCharacter
15740
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2767
    "return a collection containing substrings (separated by aCharacter)
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2768
     of the receiver. 
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2769
     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
  2770
     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
  2771
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2772
    ^ self asCollectionOfSubCollectionsSeparatedBy:aCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2773
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2774
    "
15740
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2775
     '1 one:2 two:3 three:4 four:5 five' asCollectionOfSubstringsSeparatedBy:$:  
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2776
     '1 one:2 two:3 three:4 four:5 five:' asCollectionOfSubstringsSeparatedBy:$: 
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2777
     '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
  2778
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2779
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2780
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2781
asCollectionOfSubstringsSeparatedBy:aCharacter exceptIn:ch
15740
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2782
    "return a collection containing the substrings (separated by aCharacter)
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2783
     of the receiver. If aCharacter occurs multiple times in a row,
15740
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2784
     the result will contain empty strings. 
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2785
     The separation is not done, inside a matching pair of ch-substrings. 
87dee3333591 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15734
diff changeset
  2786
     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
  2787
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2788
    |lines myClass except i c
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2789
     startIndex    "{ Class:SmallInteger }"
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2790
     stopIndex     "{ Class:SmallInteger }" |
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2791
11905
cbc2191cfe2d return stringCollections from asCollectionOfXXX
Claus Gittinger <cg@exept.de>
parents: 11904
diff changeset
  2792
    lines := StringCollection new.
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2793
    myClass := self species.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2794
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2795
    startIndex := 1.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2796
    except := false.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2797
    [
14455
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2798
        i := startIndex-1.
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2799
        [
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2800
            i := i+1.
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2801
            c := self at:i.
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2802
            c = ch ifTrue:[ except := except not. ].
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2803
            i < self size and:[except or:[c ~= aCharacter]]
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2804
        ] whileTrue.
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2805
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2806
        c = aCharacter ifTrue:[
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2807
            stopIndex := i -1.
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2808
        ] ifFalse: [
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2809
            stopIndex := i.
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2810
        ].
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2811
        (stopIndex < startIndex) ifTrue: [
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2812
            lines add:(myClass new:0)
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2813
        ] ifFalse: [
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2814
            lines add:(self copyFrom:startIndex to:stopIndex)
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2815
        ].
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2816
        startIndex := stopIndex + 2.
ee8809bade6b added: #asCollectionOfLinesWithReturn
Claus Gittinger <cg@exept.de>
parents: 14452
diff changeset
  2817
        startIndex <= self size
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2818
    ] whileTrue.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2819
    ^ lines
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2820
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2821
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2822
     'asd''f;d''dd;s' asCollectionOfSubstringsSeparatedBy:$; exceptIn:$'
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2823
    "
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  2824
    "/ 'asd "hello bla" foo "bla bla" bar' asCollectionOfSubstringsSeparatedBy:$  exceptIn:$"
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2825
!
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  2826
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2827
asCollectionOfSubstringsSeparatedBy:aFieldSeparatorString textSeparator:aTextSeparatorOrNil
13343
3f058ad0d2f1 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13332
diff changeset
  2828
    "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
  2829
     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
  2830
     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
  2831
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2832
    |aTextSeparatorChar items scanningWord inStream element lastIsFieldSeparator sz|
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2833
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2834
    aTextSeparatorOrNil isNil ifTrue:[
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2835
        ^ self asCollectionOfSubstringsSeparatedByAll: aFieldSeparatorString
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2836
    ].
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2837
    sz := aTextSeparatorOrNil size.
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2838
    sz = 0 ifTrue:[
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2839
        aTextSeparatorChar := aTextSeparatorOrNil
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2840
    ] ifFalse:[sz = 1  ifTrue:[
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2841
        "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
  2842
        aTextSeparatorChar := aTextSeparatorOrNil first.
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2843
    ] ifFalse:[
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2844
        self error:'textSeparatoSize > 1'.
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2845
    ]].
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2846
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2847
    items := OrderedCollection new.
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2848
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2849
    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
  2850
    [
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2851
        inStream skipSeparators.
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2852
        inStream atEnd
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2853
    ] whileFalse:[
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2854
        lastIsFieldSeparator := false.
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2855
        inStream peek == aTextSeparatorChar ifTrue:[
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2856
            inStream next.
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2857
            element := ''.
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2858
            scanningWord := true.
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2859
            [ scanningWord and:[inStream atEnd not] ] whileTrue:[
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2860
                element := element , (inStream upTo:aTextSeparatorChar).
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2861
                (inStream peek == aTextSeparatorChar) ifTrue:[
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2862
                    element := element , aTextSeparatorChar .
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2863
                    inStream next.
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2864
                ] ifFalse:[
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2865
                    scanningWord := false.
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2866
                ].
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2867
            ].
16200
8b5fa2bc2400 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 16181
diff changeset
  2868
            inStream upToAll_positionBefore:aFieldSeparatorString.
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2869
        ] ifFalse:[
16200
8b5fa2bc2400 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 16181
diff changeset
  2870
            element := inStream upToAll_positionBefore:aFieldSeparatorString
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2871
        ].
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2872
        items add:element.
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2873
        lastIsFieldSeparator := (inStream skipThroughAll:aFieldSeparatorString) notNil.
13343
3f058ad0d2f1 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13332
diff changeset
  2874
    ].
3f058ad0d2f1 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13332
diff changeset
  2875
    lastIsFieldSeparator ifTrue:[
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2876
        "empty element at the end of the line"
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2877
        items add:''.
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2878
    ].
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2879
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2880
    ^ items
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2881
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2882
    "
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2883
     self assert:(('#First#, #Second,SecondAdd#, #Third#' asCollectionOfSubstringsSeparatedBy:',' textSeparator: $#)
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2884
                  sameContentsAs:#('First' 'Second,SecondAdd' 'Third')).
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2885
     self assert:(('#Fir##st#, #Second,SecondAdd#, #Third#' asCollectionOfSubstringsSeparatedBy:',' textSeparator: $#)
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2886
                  sameContentsAs:#('Fir#st' 'Second,SecondAdd' 'Third')).
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2887
     self assert:(('#Fir##st#, Second,SecondAdd, #Third#' asCollectionOfSubstringsSeparatedBy:',' textSeparator: $#)
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2888
                  sameContentsAs:#('Fir#st' 'Second' 'SecondAdd' 'Third')).
13343
3f058ad0d2f1 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13332
diff changeset
  2889
     self assert:(('First,Second,Third,,' asCollectionOfSubstringsSeparatedBy:',' textSeparator:nil)
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2890
                   sameContentsAs:#('First' 'Second' 'Third' '' '')).
13344
ec6860c49990 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Stefan Vogel <sv@exept.de>
parents: 13343
diff changeset
  2891
     self assert:(('First,Second,Third,,' asCollectionOfSubstringsSeparatedBy:',' textSeparator:'#')
15431
096bf5b1b086 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15405
diff changeset
  2892
                   sameContentsAs:#('First' 'Second' 'Third' '' '')).
13327
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2893
    "
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2894
9bfd3ddd5110 changed: #asCollectionOfSubstringsSeparatedBy:textSeparator:
Claus Gittinger <cg@exept.de>
parents: 13310
diff changeset
  2895
    "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
  2896
!
999589445aa7 add new method for splitting a csv string into csv elements
ab
parents: 10437
diff changeset
  2897
7339
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2898
asCollectionOfSubstringsSeparatedByAll:aSeparatorString
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2899
    "return a collection containing the lines (separated by aSeparatorString)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2900
     of the receiver. If aSeparatorString occurs multiple times in a row,
7339
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2901
     the result will contain empty strings."
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2902
8852
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2903
    ^ self asCollectionOfSubCollectionsSeparatedByAll:aSeparatorString
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2904
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2905
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2906
     '1::2::3::4::5::' asCollectionOfSubstringsSeparatedByAll:'::'
7339
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2907
    "
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2908
!
20969b5770c9 asCollectionOfSubstringsSeparatedByAll:
Claus Gittinger <cg@exept.de>
parents: 7318
diff changeset
  2909
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2910
asCollectionOfSubstringsSeparatedByAny:aCollectionOfSeparators
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2911
    "return a collection containing the words (separated by any character
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2912
     from aCollectionOfSeparators) of the receiver.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2913
     This allows breaking up strings using any character as separator."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2914
8852
9f5984eff2c2 use asCollectionOfSubCollectionsSeparatedBy*
Claus Gittinger <cg@exept.de>
parents: 8794
diff changeset
  2915
    ^ self asCollectionOfSubCollectionsSeparatedByAny:aCollectionOfSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2916
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2917
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2918
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:#($:)
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2919
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:':'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2920
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:(Array with:$: with:Character space)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2921
     'hello:world:isnt:this nice' asCollectionOfSubstringsSeparatedByAny:': '
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2922
     'h1e2l3l4o' asCollectionOfSubstringsSeparatedByAny:($1 to: $9)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2923
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2924
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2925
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2926
asCollectionOfWords
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2927
    "return a collection containing the words (separated by whitespace)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2928
     of the receiver. Multiple occurrences of whitespace characters will
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2929
     be treated like one - i.e. whitespace is skipped."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2930
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2931
    |words|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2932
11905
cbc2191cfe2d return stringCollections from asCollectionOfXXX
Claus Gittinger <cg@exept.de>
parents: 11904
diff changeset
  2933
    words := StringCollection new.
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2934
    self asCollectionOfWordsDo:[:w | words add:w].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2935
    ^ words
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2936
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
     'hello world isnt this nice' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2939
     '    hello    world   isnt   this   nice  ' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2940
     'hello' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2941
     '' asCollectionOfWords
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2942
     '      ' asCollectionOfWords
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2943
     ' foo bar__baz__bla__ bar ' asCollectionOfWords
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  2944
     ' foo __bar__baz__bla__ bar ' asCollectionOfWords
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2945
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2946
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2947
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2948
asCollectionOfWordsDo:aBlock
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2949
    "evaluate aBlock for each word (separated by whitespace) of the receiver.
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2950
     Multiple occurrences of whitespace characters will be treated like one
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2951
     - i.e. whitespace is skipped.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2952
     Returns the number of words (i.e. the number of invocations of aBlock)."
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2953
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2954
    |count  "{ Class:SmallInteger }"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2955
     start  "{ Class:SmallInteger }"
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2956
     stop   "{ Class:SmallInteger }"
7797
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2957
     mySize "{ Class:SmallInteger }"|
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2958
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2959
    count := 0.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2960
    start := 1.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2961
    mySize := self size.
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2962
    [start <= mySize] whileTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2963
        start := self indexOfNonSeparatorStartingAt:start.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2964
        start == 0 ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2965
            ^ count
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2966
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2967
        stop := self indexOfSeparatorStartingAt:start.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2968
        stop == 0 ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2969
            aBlock value:(self copyFrom:start to:mySize).
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2970
            ^ count + 1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2971
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2972
        aBlock value:(self copyFrom:start to:(stop - 1)).
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2973
        start := stop.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  2974
        count := count + 1
7797
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
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2977
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2978
    "
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2979
     'hello world isnt this nice' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2980
     '    hello    world   isnt   this   nice  ' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2981
     'hello' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2982
     '' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2983
     '      ' asCollectionOfWordsDo:[:w | Transcript showCR:w]
49e53638191f +asCollectionOfWordsDo:
Claus Gittinger <cg@exept.de>
parents: 7780
diff changeset
  2984
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2985
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2986
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2987
asFilename
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2988
    "return a Filename with pathname taken from the receiver"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2989
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2990
    ^ Filename named:self "(self asSingleByteStringReplaceInvalidWith:$?)"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2991
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2992
    "Modified: 20.5.1996 / 09:38:15 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  2993
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  2994
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2995
asFixedPoint
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  2996
    "read a fixedPoint number from the receiver.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  2997
     Notice, that errors may occur during the read,
7423
5b25b8e82453 comments
Claus Gittinger <cg@exept.de>
parents: 7422
diff changeset
  2998
     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
  2999
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3000
    ^ FixedPoint readFromString:self
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3001
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3002
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3003
     '0.123' asFixedPoint
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3004
     '12345' asFixedPoint
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3005
     '(1/5)' asFixedPoint
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3006
     'foo' asFixedPoint
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3007
     Object errorSignal handle:[:ex | ex return:0] do:['foo' asFixedPoint]
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3010
    "Modified: / 25.10.1997 / 15:19:00 / cg"
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3013
asFixedPoint:scale
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3014
    "read a fixedPoint number with scale number of post-decimal digits
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3015
     from the receiver. Scale controls the number of displayed digits,
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3016
     not the number of actually valid digits.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3017
     Notice, that errors may occur during the read,
7423
5b25b8e82453 comments
Claus Gittinger <cg@exept.de>
parents: 7422
diff changeset
  3018
     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
  3019
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3020
    ^ (FixedPoint readFromString:self) scale:scale
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
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3023
     '0.123' asFixedPoint:2
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3024
     '123456' asFixedPoint:2
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3025
     ('3.14157' asFixedPoint:1) asFixedPoint:5
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3026
     '3.14157' asFixedPoint:2
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3027
     'foo' asFixedPoint:2
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3028
    "
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3029
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3024
diff changeset
  3030
    "Modified: / 25.10.1997 / 15:21:57 / cg"
9192
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
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3033
asFloat
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3034
    "read a float number from the receiver.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3035
     Notice, that errors may occur during the read,
7422
200486204923 comments
Claus Gittinger <cg@exept.de>
parents: 7421
diff changeset
  3036
     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
  3037
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3038
    ^ (Number readFromString:self) asFloat
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3039
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3040
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3041
     '0.123' asFloat
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3042
     '12345' asFloat
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3043
     '(1/5)' asFloat
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3044
     Object errorSignal handle:[:ex | ex return:0] do:['foo' asFloat]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3045
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3046
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3047
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3048
asInteger
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3049
    "convert the receiver into an integer.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3050
     Notice, that errors may occur during the read,
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3051
     so you better setup some exception handler when using this method.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3052
     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
  3053
     in other smalltalks.
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3054
     For less strict integer reading, use Integer readFrom:aString"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3055
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3056
    ^ Integer readFromString:self
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3057
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3058
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3059
     '12345678901234567890' asInteger
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3060
     '-1234' asInteger
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3061
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3062
     The following raises an error:
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3063
         '0.123' asInteger              <- reader finds more after reading 0
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3064
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3065
     whereas the less strict readFrom does not:
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3066
         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
  3067
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  3068
     '0.123' asInteger
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3069
     '0.123' asNumber    <- returns what you expect
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3070
     Object errorSignal handle:[:ex | ex return:0] do:['foo' asInteger]
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3071
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3072
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3073
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3074
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3075
asLowercase
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3076
    "return a copy of myself in lowercase letters"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3077
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3078
    |newStr c bitsPerCharacter
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3079
     mySize "{ Class: SmallInteger }" |
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3080
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3081
    mySize := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3082
    mySize == 0 ifTrue:[^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3083
    newStr := self species new:mySize.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3084
    bitsPerCharacter := newStr bitsPerCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3085
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3086
    1 to:mySize do:[:i |
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  3087
        c := (self at:i) asLowercase.
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  3088
        (c bitsPerCharacter > bitsPerCharacter 
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  3089
         and:[c stringSpecies ~= newStr stringSpecies]) ifTrue:[
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  3090
            newStr := c stringSpecies fromString:newStr.
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  3091
        ].
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  3092
        newStr at:i put:c
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3093
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3094
    ^ newStr
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
     'HelloWorld' asLowercase
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3098
     'HelloWorld' asLowercaseFirst
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3099
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3100
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3101
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3102
asLowercaseFirst
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3103
    "return a copy of myself where the first character is converted to lowercase."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3104
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3105
    |newString firstChar firstCharAsLowercase|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3106
11525
d76e654e24bd alspa changes
Claus Gittinger <cg@exept.de>
parents: 11524
diff changeset
  3107
    self isEmpty ifTrue:[^ self].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3108
    firstChar := (self at:1).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3109
    firstCharAsLowercase := firstChar asLowercase.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3110
    firstChar == firstCharAsLowercase ifTrue:[ ^ self].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3111
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3112
    firstCharAsLowercase bitsPerCharacter > self bitsPerCharacter ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3113
        newString := firstCharAsLowercase stringSpecies fromString:self.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3114
    ] ifFalse:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3115
        newString := self stringSpecies fromString:self.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3116
    ].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3117
    newString at:1 put:firstCharAsLowercase.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3118
    ^ newString
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3119
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3120
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3121
     'HelloWorld' asLowercase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3122
     'HelloWorld' asLowercaseFirst
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3123
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3124
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3125
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3126
asLowercaseLast
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3127
    "return a copy of myself where the last character is
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3128
     converted to lowercase."
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3129
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3130
    |newString sz|
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3131
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3132
    sz := self size.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3133
    newString := self copyFrom:1 to:sz.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3134
    sz > 0 ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3135
        newString at:sz put:(newString at:sz) asLowercase
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3136
    ].
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3137
    ^ newString
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3138
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3139
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3140
     'HelloWorld' asLowercase
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3141
     'HelloWorlD' asLowercaseLast
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3142
    "
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3143
!
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3144
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3145
asNumber
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3146
    "read a number from the receiver.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3147
     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
  3148
     so you better setup some signal handler when using this method.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3149
     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
  3150
     it does not handle smalltalk numbers (i.e. radix).
c6396149df08 comment
Claus Gittinger <cg@exept.de>
parents: 9087
diff changeset
  3151
     To read a smalltalk number, use Number >> readSmalltalkFrom:.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3152
     This may change if ANSI specifies it."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3153
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3154
"/ ST-80 behavior:
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3155
"/  ^ Number readFromString:self onError:0
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3156
17061
c1de9e428073 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17043
diff changeset
  3157
    ^ Number fromString:self
c1de9e428073 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17043
diff changeset
  3158
c1de9e428073 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17043
diff changeset
  3159
    "
c1de9e428073 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17043
diff changeset
  3160
     '123'     asNumber 
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3161
     '123.567' asNumber
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3162
     '(5/6)'   asNumber
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3163
     'foo'     asNumber
17061
c1de9e428073 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17043
diff changeset
  3164
     '123a'    asNumber
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3165
     Object errorSignal handle:[:ex | ex returnWith:0] do:['foo' asNumber]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3166
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3167
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3168
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3169
asNumberFromFormatString:ignored
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3170
    "read a number from the receiver, ignoring any nonDigit characters.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3171
     This is typically used to convert from strings which include
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3172
     dollar-signs or millenium digits. However, this method also ignores
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3173
     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
  3174
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3175
    |tempString|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3176
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3177
    tempString := self collect:[:char | char isDigit].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3178
    ^ Number readFromString:tempString onError:0
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3179
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3180
    "
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3181
     'USD 123' asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3182
     'DM 123'  asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3183
     '123'     asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3184
     '123.567' asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3185
     '(5/6)'   asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3186
     'foo'     asNumberFromFormatString:'foo'
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3187
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3188
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3189
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3190
asSingleByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3191
    "return the receiver converted to a 'normal' string.
11904
f766874c31b7 comment
Claus Gittinger <cg@exept.de>
parents: 11881
diff changeset
  3192
     Raises an error if unrepresentable characters are encountered.
f766874c31b7 comment
Claus Gittinger <cg@exept.de>
parents: 11881
diff changeset
  3193
     See also: asSingleByteStringIfPossible and asSingleByteStringReplaceInvalidWith:"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3194
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3195
    ^ String fromString:self
11904
f766874c31b7 comment
Claus Gittinger <cg@exept.de>
parents: 11881
diff changeset
  3196
f766874c31b7 comment
Claus Gittinger <cg@exept.de>
parents: 11881
diff changeset
  3197
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3198
     (Unicode16String with:(Character value:16rFF)) asSingleByteString
11904
f766874c31b7 comment
Claus Gittinger <cg@exept.de>
parents: 11881
diff changeset
  3199
     (Unicode16String with:(Character value:16rFFFF)) asSingleByteString
f766874c31b7 comment
Claus Gittinger <cg@exept.de>
parents: 11881
diff changeset
  3200
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3201
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3202
7977
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  3203
asSingleByteStringIfPossible
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  3204
    "if possible, return the receiver converted to a 'normal' string.
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  3205
     It is only possible, if there are no characters with codePoints above 255 in the receiver."
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  3206
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  3207
    self isWideString ifFalse:[^ self].
8102
e0537422e2d3 Use the ANSI-blessed #codePoint instead of deprecated #asciiValue
Stefan Vogel <sv@exept.de>
parents: 8083
diff changeset
  3208
    (self contains:[:char | char codePoint > 255]) ifFalse:[^ self asSingleByteString].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3209
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3210
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3211
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3212
     'hello' asSingleByteStringIfPossible
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3213
     'hello' asUnicodeString asSingleByteStringIfPossible
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3214
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3215
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3216
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3217
asSingleByteStringReplaceInvalidWith:replacementCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3218
    "return the receiver converted to a 'normal' string,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3219
     with invalid characters replaced by replacementCharacter.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3220
     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
  3221
     and replace characters above code-255 with some replacement."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3222
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3223
    |newString|
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
    newString := String new:(self size).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3226
    1 to:self size do:[:idx |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3227
        |char|
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3228
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3229
        char := self at:idx.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3230
        char codePoint <= 16rFF ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3231
            newString at:idx put:char
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3232
        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3233
            newString at:idx put:replacementCharacter
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3234
        ].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3235
    ].
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3236
    ^ newString
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3237
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  3238
    "Created: 30.6.1997 / 13:02:14 / cg"
7977
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  3239
!
d6f3255accdd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7968
diff changeset
  3240
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3241
asString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3242
    "return myself - I am a string"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3243
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3244
    ^ self
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
asStringCollection
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3248
    "return a collection of lines from myself."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3249
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3250
    ^ StringCollection fromString:self "string"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3251
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3252
    "Modified: 13.5.1996 / 20:36:59 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3253
!
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3254
1434
a317ba02d685 allow aText asSymbol
Claus Gittinger <cg@exept.de>
parents: 1429
diff changeset
  3255
asSymbol
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  3256
    "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
  3257
     The receiver must be a singleByte-String.
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  3258
     TwoByte- and FourByteSymbols are (currently ?) not allowed."
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  3259
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  3260
    |str|
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  3261
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3262
    str := self string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3263
    str ~~ self ifTrue:[ ^ str asSymbol ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3264
    ^ self asSingleByteString asSymbol
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3265
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3266
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3267
asSymbolIfInterned
17183
f86492476cc5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17165
diff changeset
  3268
    "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
  3269
     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
  3270
        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
  3271
     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
  3272
     The receiver must be a singleByte-String.
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  3273
     TwoByte- and FourByteSymbols are (currently ?) not allowed."
1435
3ee1fde2aa58 allow asSymbolIfInterned for Texts
Claus Gittinger <cg@exept.de>
parents: 1434
diff changeset
  3274
6642
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3275
    |s|
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3276
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3277
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3278
    s := self string.
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3279
    s ~~ self ifTrue:[
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3280
       ^ s asSymbolIfInterned
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3281
    ].
4ce854094c6f asSymbolIfInterned avoid recursion failure
penk
parents: 6528
diff changeset
  3282
    ^ nil.
1435
3ee1fde2aa58 allow asSymbolIfInterned for Texts
Claus Gittinger <cg@exept.de>
parents: 1434
diff changeset
  3283
3ee1fde2aa58 allow asSymbolIfInterned for Texts
Claus Gittinger <cg@exept.de>
parents: 1434
diff changeset
  3284
    "Created: 22.5.1996 / 16:37:04 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3285
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3286
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3287
asText
9403
ba6ca2bcfe10 documentation
Stefan Vogel <sv@exept.de>
parents: 9391
diff changeset
  3288
    "return a Text-object (string with emphasis) from myself."
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3289
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3290
    "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
  3291
    Text isNil ifTrue:[^ self].
17065
9ed49d70737a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17061
diff changeset
  3292
    ^ Text string:self
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3293
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3294
    "Created: 12.5.1996 / 10:41:14 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3295
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3296
17021
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3297
asTimestamp
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3298
    "convert the receiver into an Timestamp.
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3299
     Notice, that errors may occur during the read,
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3300
     so you better setup some exception handler when using this method."
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3301
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3302
    ^ Timestamp readFromString:self
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3303
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3304
    "
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3305
     '2014-11-10 21:30:22.444' asTimestamp
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3306
     '2014-11-10 21:30:22.444Z' asTimestamp
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3307
     '2014-11-10 21:30:22.444+0200' asTimestamp
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3308
    "
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3309
!
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3310
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3311
asTitlecase
8027
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3312
    "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
  3313
     and everything else to lowercase.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3314
     See the comment in Character on what titlecase is."
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3315
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3316
    |newStr c bitsPerCharacter
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3317
     mySize "{ Class: SmallInteger }" |
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3318
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3319
    mySize := self size.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3320
    newStr := self species new:mySize.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3321
    bitsPerCharacter := newStr bitsPerCharacter.
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3322
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3323
    1 to:mySize do:[:i |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3324
        i == 1 ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3325
            c := (self at:i) asTitlecase.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3326
        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3327
            c := (self at:i) asLowercase.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3328
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3329
        c bitsPerCharacter > bitsPerCharacter ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3330
            newStr := c stringSpecies fromString:newStr.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3331
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3332
        newStr at:i put:c
8027
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3333
    ].
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3334
    ^ newStr
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3335
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3336
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3337
     'helloWorld' asTitlecase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3338
     'HelloWorld' asTitlecase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3339
     'HELLOWORLD' asTitlecase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3340
     'helloworld' asTitlecase
8027
4536f92bdbb4 asTitlecase
Claus Gittinger <cg@exept.de>
parents: 8026
diff changeset
  3341
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3342
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3343
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3344
asTitlecaseFirst
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3345
    "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
  3346
     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
  3347
     (2-character glyphs), which consist of an upper- and lower-case characters.
93db40068fba comment
Claus Gittinger <cg@exept.de>
parents: 8023
diff changeset
  3348
     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
  3349
     receiver."
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3350
8026
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3351
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3352
     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
  3353
     (Let us write this compound character using ASCII as 'dz'.)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3354
     This character uppercases to character U+01F1, LATIN CAPITAL LETTER DZ.
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3355
     (Which is basically 'DZ'.)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3356
     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
  3357
     (Which we can write 'Dz'.)
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3358
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3359
      character uppercase titlecase
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3360
      --------- --------- ---------
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3361
      dz        DZ        Dz
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3362
    "
96cc838078ba comment
Claus Gittinger <cg@exept.de>
parents: 8025
diff changeset
  3363
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3364
    |newString firstChar firstCharAsTitlecase|
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3365
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3366
    firstChar := (self at:1).
8025
04d9b6ef3012 comments
Claus Gittinger <cg@exept.de>
parents: 8024
diff changeset
  3367
    firstCharAsTitlecase := firstChar asTitlecase.
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3368
    firstChar == firstCharAsTitlecase ifTrue:[ ^ self].
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3369
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3370
    firstCharAsTitlecase bitsPerCharacter > self bitsPerCharacter ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3371
        newString := firstCharAsTitlecase stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3372
    ] ifFalse:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3373
        newString := self stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3374
    ].
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3375
    newString at:1 put:firstCharAsTitlecase.
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3376
    ^ newString
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3377
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3378
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3379
     'helloWorld' asTitlecaseFirst
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3380
     'HelloWorld' asTitlecaseFirst
8023
c991d56bbaec +asTitlecaseFirst
Claus Gittinger <cg@exept.de>
parents: 8003
diff changeset
  3381
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3382
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3383
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3384
asTwoByteString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3385
    "return the receiver converted to a two-byte string.
16051
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3386
     Will be obsolete soon - use asUnicode16String."
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3387
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3388
    ^ TwoByteString fromString:self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3389
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3390
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3391
asURI
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3392
    "return an URI with string taken from the receiver"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3393
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3394
    ^ URI fromString:self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3395
!
8710
Stefan Vogel <sv@exept.de>
parents: 8646
diff changeset
  3396
5776
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3397
asURL
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3398
    "return an URL-object from myself."
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3399
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3400
    ^ URL fromString:self
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3401
7169165b44f2 added #asURL
Claus Gittinger <cg@exept.de>
parents: 5759
diff changeset
  3402
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3403
     'http://www.exept.de:80/index.html' asURL host
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3404
     'http://www.exept.de:80/index.html' asURL port
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3405
     'http://www.exept.de:80/index.html' asURL method
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3406
     'http://www.exept.de:80/index.html' asURL path
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3407
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3408
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3409
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3410
asUnicode16String
15035
ecbb70df7a5c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14993
diff changeset
  3411
    "return the receiver in a two-byte per character representation.
ecbb70df7a5c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14993
diff changeset
  3412
     Normally, the internal ST/X representation should be transparent and not
ecbb70df7a5c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14993
diff changeset
  3413
     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
  3414
     such as wide-string ffi calls or file contents."
ecbb70df7a5c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14993
diff changeset
  3415
16051
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3416
    ^ self as:Unicode16String.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3417
!
8295
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3418
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3419
asUnicode32String
16051
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3420
    "return the receiver in a four-byte per character representation.
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3421
     Normally, the internal ST/X representation should be transparent and not
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3422
     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
  3423
     such as wide-string ffi calls or file contents."
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3424
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3425
    ^ self as:Unicode32String
8295
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3426
!
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3427
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3428
asUnicodeString
16051
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3429
    "return the receiver in a two-byte per character representation.
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3430
     Normally, the internal ST/X representation should be transparent and not
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3431
     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
  3432
     such as wide-string ffi calls or file contents."
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3433
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3434
    ^ self asUnicode16String
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3435
    "
66b82dbe1172 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15936
diff changeset
  3436
     'Hello World' asUnicodeString
14141
e86d245213b0 comment/format in: #asUnicodeString
Stefan Vogel <sv@exept.de>
parents: 14137
diff changeset
  3437
    "
8295
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3438
!
8433d819226b Define #asUnicode16String and #asUnicode32String in CharacterArray
Stefan Vogel <sv@exept.de>
parents: 8222
diff changeset
  3439
13073
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3440
asUnixFilename
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3441
    "return a UnixFilename with pathname taken from the receiver"
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3442
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3443
    ^ UnixFilename named:self
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3444
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3445
    "Created: / 20-09-2010 / 21:42:55 / cg"
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3446
!
19261a5b4430 added: #asUnixFilename
Claus Gittinger <cg@exept.de>
parents: 13050
diff changeset
  3447
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3448
asUppercase
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3449
    "return a copy of myself in uppercase letters"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3450
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3451
    |newStr c bitsPerCharacter
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3452
     mySize "{ Class: SmallInteger }" |
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3453
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3454
    mySize := self size.
8954
12e701d7b5ac allow for receiver to be empty in asLowercase and asUppercase.
Claus Gittinger <cg@exept.de>
parents: 8938
diff changeset
  3455
    mySize == 0 ifTrue:[^ self].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3456
    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
  3457
    bitsPerCharacter := newStr bitsPerCharacter.
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3458
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3459
    1 to:mySize do:[:i |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3460
        c := (self at:i) asUppercase.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3461
        c bitsPerCharacter > bitsPerCharacter ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3462
            newStr := c stringSpecies fromString:newStr.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3463
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3464
        newStr at:i put:c
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3465
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3466
    ^ newStr
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3467
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3468
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3469
     'helloWorld' asUppercase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3470
     'helloWorld' asUppercaseFirst
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3471
     (Character value:16rB5) asString asUppercase   -- needs 16 bits !!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3472
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3473
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3474
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3475
asUppercaseFirst
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3476
    "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
  3477
     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
  3478
     receiver."
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3479
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3480
    |newString firstChar firstCharAsUppercase|
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3481
12679
18c4eabbb673 changed: #asUppercaseFirst
Claus Gittinger <cg@exept.de>
parents: 12665
diff changeset
  3482
    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
  3483
    firstChar := self at:1.
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3484
    firstCharAsUppercase := firstChar asUppercase.
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3485
    firstChar == firstCharAsUppercase ifTrue:[ ^ self].
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3486
12679
18c4eabbb673 changed: #asUppercaseFirst
Claus Gittinger <cg@exept.de>
parents: 12665
diff changeset
  3487
    "/ 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
  3488
    firstCharAsUppercase bitsPerCharacter > self bitsPerCharacter ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3489
        newString := firstCharAsUppercase stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3490
    ] ifFalse:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3491
        newString := self stringSpecies fromString:self.
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  3492
    ].
8003
6e690f4b79f1 asLowercase/asUppercase and friends care for 16-bit chars
Claus Gittinger <cg@exept.de>
parents: 7995
diff changeset
  3493
    newString at:1 put:firstCharAsUppercase.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3494
    ^ newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3495
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3496
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3497
     'helloWorld' asUppercase
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3498
     'helloWorld' asUppercaseFirst
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3499
     'HelloWorld' asUppercaseFirst
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3500
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3501
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3502
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3503
asUppercaseLast
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3504
    "return a copy of myself where the last character is
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3505
     converted to uppercase."
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3506
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3507
    |newString sz|
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3508
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3509
    sz := self size.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3510
    newString := self copyFrom:1 to:sz.
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3511
    sz > 0 ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3512
        newString at:sz put:(newString at:sz) asUppercase
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3513
    ].
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3514
    ^ newString
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3515
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3516
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3517
     'HelloWorld' asUppercase
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3518
     'HelloWorld' asUppercaseLast
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3519
    "
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3520
!
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  3521
17021
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3522
asUtcTimestamp
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3523
    "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
  3524
     Notice, that errors may occur during the read,
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3525
     so you better setup some exception handler when using this method."
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3526
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3527
    ^ UtcTimestamp readFromString:self
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3528
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3529
    "
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3530
     '2014-11-10 21:30:22.444' asUtcTimestamp
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3531
    "
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3532
!
c7ac4c24c541 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 17000
diff changeset
  3533
11062
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3534
literalArrayEncoding
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3535
    "encode myself as an array literal, from which a copy of the receiver
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3536
     can be reconstructed with #decodeAsLiteralArray."
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3537
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3538
    ^ self
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3539
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3540
    "Modified: 1.9.1995 / 02:25:45 / claus"
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3541
    "Modified: 22.4.1996 / 13:00:50 / cg"
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3542
!
c28d0630abf5 lifted #literalArrayEncoding
fm
parents: 11049
diff changeset
  3543
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3544
string
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3545
    "return the receiver - for ST-80 compatibility"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3546
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3547
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3548
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3549
    "Modified: 27.4.1996 / 13:29:30 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3550
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3551
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3552
!CharacterArray methodsFor:'copying'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3553
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3554
, aStringOrCharacter
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3555
    "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
  3556
     This is nonStandard, but convenient"
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3557
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3558
    |myWidth otherWidth|
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3559
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3560
    aStringOrCharacter isCharacter ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3561
        ^ self copyWith:aStringOrCharacter
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3562
    ].
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3563
    aStringOrCharacter isText ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3564
        ^ aStringOrCharacter concatenateFromString:self
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3565
    ].
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3566
    aStringOrCharacter isString ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3567
        (otherWidth := aStringOrCharacter bitsPerCharacter) ~~ (myWidth := self bitsPerCharacter) ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3568
            otherWidth > myWidth ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3569
                ^ (aStringOrCharacter species fromString:self) , aStringOrCharacter
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3570
            ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3571
            ^ self , (self species fromString:aStringOrCharacter)
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3572
        ].
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3573
    ].
1050
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3574
    ^ super , aStringOrCharacter
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3575
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3576
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3577
     'hello' , $1
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3578
     'hello' , '1'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3579
     'hello' , (' world' asText allBold)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3580
     'hello' , (JISEncodedString fromString:' world')
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3581
     (JISEncodedString fromString:'hello') , ' world'
1411
a3b3ab3044c6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1396
diff changeset
  3582
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1411
diff changeset
  3583
     Transcript showCR:
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3584
         (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
  3585
    "
2f14bbd792a9 , now accepts a character-argument
Claus Gittinger <cg@exept.de>
parents: 1028
diff changeset
  3586
2720
98c21d9a07c0 allow mixed strings to be concatenated using comma
Claus Gittinger <cg@exept.de>
parents: 2692
diff changeset
  3587
    "Modified: 28.6.1997 / 00:13:17 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3588
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3589
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  3590
,, aString
7020
f51001115a54 comment
penk
parents: 6998
diff changeset
  3591
    "concatenate with a newLine in between"
6965
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3592
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3593
    ^ (self copyWith:Character cr) , aString
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3594
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3595
   "
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3596
     hello ,, world
7020
f51001115a54 comment
penk
parents: 6998
diff changeset
  3597
     'hello' ,, 'world'
6965
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3598
   "
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3599
!
c40f18fdb4bb New; #,,
Stefan Vogel <sv@exept.de>
parents: 6948
diff changeset
  3600
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3601
chopTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3602
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3603
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3604
     in the middle have been removed for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3605
     of maxLen."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3606
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3607
    |sz n1 n2|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3608
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3609
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3610
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3611
    n1 := n2 := maxLen // 2.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3612
    maxLen odd ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3613
        n2 := n1 + 1
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3614
    ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3615
    ^ (self copyFrom:1 to:n1) , (self copyFrom:sz - n2 + 1)
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3616
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3617
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3618
     '12345678901234'   chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3619
     '123456789012345'  chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3620
     '1234567890123456' chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3621
     'aShortString' chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3622
     'aVeryLongNameForAStringThatShouldBeShortened' chopTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3623
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3624
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3625
    "Modified: / 24-10-2006 / 12:32:01 / cg"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3626
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3627
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3628
concatenate:string1 and:string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3629
    "return the concatenation of myself and the arguments, string1 and string2.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3630
     This is equivalent to self , string1 , string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3631
     - 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
  3632
     is known to be a string."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3633
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3634
    ^ self , string1 , string2
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3635
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3636
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3637
concatenate:string1 and:string2 and:string3
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3638
    "return the concatenation of myself and the string arguments.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3639
     This is equivalent to self , string1 , string2 , string3
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3640
     - 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
  3641
     is known to be a string."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3642
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3643
    ^ self , string1 , string2 , string3
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3644
!
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3645
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3646
contractAtBeginningTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3647
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3648
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3649
     at the beginning have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3650
     of maxLen. Can be used to abbreviate long entries in tables."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3651
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3652
    |sz|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3653
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3654
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3655
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3656
    ^ '...' , (self copyFrom:(sz - (maxLen - 4)))
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3657
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3658
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3659
     '12345678901234' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3660
     '123456789012345' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3661
     '1234567890123456' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3662
     'aShortString' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3663
     'aVeryLongNameForAStringThatShouldBeShortened' contractAtBeginningTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3664
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3665
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3666
    "Modified: / 24-10-2006 / 12:32:13 / cg"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3667
!
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3668
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3669
contractAtEndTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3670
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3671
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3672
     at the end have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3673
     of maxLen. Can be used to abbreviate long entries in tables."
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|
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
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3678
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3679
    ^ (self copyTo:maxLen-3),'...'
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
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3682
     '12345678901234' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3683
     '123456789012345' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3684
     '1234567890123456' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3685
     'aShortString' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3686
     'aVeryLongNameForAStringThatShouldBeShortened' contractAtEndTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3687
    "
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3688
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3689
    "Modified: / 24-10-2006 / 12:32:26 / cg"
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
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3692
contractLeftTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3693
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3694
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3695
     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
  3696
     of maxLen.
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3697
     Very similar to contractTo:, but better to abbreviate long filename entries,
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3698
     where the right part is of more use than the left."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3699
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3700
    |sz "{ SmallInteger }"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3701
     halfSize quarterSize "{ SmallInteger }"
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3702
     leftEnd rightEnd rightStart|
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3703
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3704
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3705
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3706
    halfSize := maxLen // 2.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3707
    quarterSize := maxLen // 4.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3708
    leftEnd := quarterSize-1.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3709
    rightEnd := maxLen - leftEnd - 3.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3710
    rightStart := sz - rightEnd + 1.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3711
    ^ (self copyTo:leftEnd),'...',(self copyFrom:rightStart)
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3712
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3713
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3714
     '12345678901234' contractLeftTo:15
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3715
     '123456789012345' contractLeftTo:15
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3716
     '1234567890123456' contractLeftTo:15
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3717
     'aShortString' contractLeftTo:15
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3718
     'aVeryLongNameForAStringThatShouldBeShortened' contractLeftTo:15
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3719
     '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
  3720
    "
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
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3723
contractTo:maxLen
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3724
    "if the receivers size is less or equal to maxLen, return it.
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3725
     Otherwise, return a copy of the receiver, where some characters
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3726
     in the middle have been replaced by '...' for a total string length
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3727
     of maxLen. Can be used to abbreviate long entries in tables."
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3728
13362
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3729
    |sz "{ SmallInteger }" leftSize rightSize|
11329
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
    (sz := self size) <= maxLen ifTrue:[ ^ self ].
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3732
13362
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3733
    rightSize := maxLen // 2.
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3734
    leftSize := maxLen - rightSize.
13822
8c2b90928dd9 contractTo:
Claus Gittinger <cg@exept.de>
parents: 13633
diff changeset
  3735
    leftSize := leftSize - 2.
8c2b90928dd9 contractTo:
Claus Gittinger <cg@exept.de>
parents: 13633
diff changeset
  3736
    rightSize := rightSize - 1.
13362
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3737
    ^ (self copyTo:leftSize),'...',(self copyFrom:(sz+1-rightSize))
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3738
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3739
    "
13882
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3740
     '12345678901234' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3741
     '123456789012345' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3742
     '1234567890123456' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3743
     '12345678901234567' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3744
     '123456789012345678' contractTo:15
187a02bd5c99 OUCH: back to old hash; crashes Certificate compare in expecco (WHY??????=
Claus Gittinger <cg@exept.de>
parents: 13879
diff changeset
  3745
     'aShortString' contractTo:15
11329
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3746
     'aVeryLongNameForAStringThatShouldBeShortened' contractTo:15
28cf7ddd8b44 category changes
Claus Gittinger <cg@exept.de>
parents: 11326
diff changeset
  3747
     '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
  3748
     ('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
  3749
     ('1234567890123456789012345678901234567' contractTo:29) size
13362
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3750
    "
ee643208df42 changed: #contractTo:
Claus Gittinger <cg@exept.de>
parents: 13344
diff changeset
  3751
13822
8c2b90928dd9 contractTo:
Claus Gittinger <cg@exept.de>
parents: 13633
diff changeset
  3752
    "Modified (comment): / 24-11-2011 / 19:17:46 / cg"
11329
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
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3755
copyReplaceAll:oldElement with:newElement
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3756
    "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
  3757
     have been replaced by newElement."
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3758
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3759
    "/ ANSI seems to allow a sequence to be replaced by another sequence,
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3760
    "/ whereas the old ST80 meant replace all occurrences... - sigh.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3761
    oldElement isByteCollection ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3762
        newElement isByteCollection ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3763
            ^ self copyReplaceString:oldElement withString:newElement.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3764
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3765
        self halt:'check if this is legal'.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3766
    ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3767
    newElement isByteCollection ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3768
        self halt:'check if this is legal'.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3769
    ].
16212
da322a6b1d2a class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 16202
diff changeset
  3770
    ^ super copyReplaceAll:oldElement with:newElement
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3771
!
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3772
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3773
copyReplaceString:subString withString:newString
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3774
    "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
  3775
     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
  3776
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3777
    |tmpStream idx idx1|
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3778
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  3779
    tmpStream := self species writeStream.
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3780
    idx := 1.
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3781
    [idx ~~ 0] whileTrue:[
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  3782
        idx1 := idx.
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  3783
        idx := self indexOfSubCollection:subString startingAt:idx.
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  3784
        idx ~~ 0 ifTrue:[
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  3785
            tmpStream nextPutAll:(self copyFrom:idx1 to:idx-1).
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  3786
            tmpStream nextPutAll:newString.
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  3787
            idx := idx + subString size
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  3788
        ]
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3789
    ].
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3790
    tmpStream nextPutAll:(self copyFrom:idx1).
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3791
    ^ tmpStream contents
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3792
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3793
   "
9306
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3794
     '12345678901234567890' copyReplaceString:'123' withString:'OneTwoThree'
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3795
     '12345678901234567890' copyReplaceString:'123' withString:'*'
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3796
     '12345678901234567890' copyReplaceString:'234' withString:'foo'
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3797
de9b438212b8 comment
Stefan Vogel <sv@exept.de>
parents: 9282
diff changeset
  3798
     ('a string with spaces' copyReplaceAll:$  withAll:' foo ')
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  3799
        copyReplaceString:'foo' withString:'bar'
8347
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3800
    "
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3801
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3802
    "Modified: / 31-05-1999 / 12:33:59 / cg"
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3803
    "Created: / 12-05-2004 / 12:00:00 / cg"
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3804
!
3ae935723b46 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8310
diff changeset
  3805
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3806
copyWith:aCharacter
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3807
    "return a new string containing the receivers characters
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3808
     and the single new character, aCharacter.
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3809
     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
  3810
     as argument, but equivalent to copy-and-addLast.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3811
     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
  3812
     (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
  3813
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3814
    |sz newString|
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3815
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3816
    aCharacter bitsPerCharacter > self bitsPerCharacter ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3817
        sz := self size.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3818
        newString := aCharacter stringSpecies new:sz + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3819
        newString replaceFrom:1 to:sz with:self startingAt:1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3820
        newString at:sz+1 put:aCharacter.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3821
        ^ newString.
8040
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3822
    ].
f10cca439066 copyWith for mixed-width string/character
Claus Gittinger <cg@exept.de>
parents: 8037
diff changeset
  3823
    ^ super copyWith:aCharacter
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3824
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3825
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3826
!CharacterArray methodsFor:'displaying'!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3827
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3828
displayOn:aGC x:x y:y from:start to:stop
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3829
    "display the receiver on a GC"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3830
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3831
    self displayOn:aGC x:x y:y from:start to:stop opaque:false
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3832
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3833
    "Modified: 12.5.1996 / 12:49:33 / cg"
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3834
!
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3835
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3836
displayOn:aGC x:x y:y from:start to:stop opaque:opaque
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3837
    "display the receiver on a GC"
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3838
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3839
    "q&d hack"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3840
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3841
    (start == 1 and:[stop == self size]) ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3842
        self displayOn:aGC x:x y:y opaque:opaque.
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  3843
    ] ifFalse:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3844
        (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
  3845
    ].
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3846
!
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3847
7082
675482728016 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7022
diff changeset
  3848
displayOn:aGc x:x y:y opaque:opaque
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3849
    "display the receiver in a graphicsContext - this method allows
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3850
     strings to be used like DisplayObjects."
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3851
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3852
    |s|
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3853
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3854
    s := self string.
7082
675482728016 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7022
diff changeset
  3855
    opaque ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3856
        aGc displayOpaqueString:s x:x y:y.
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3857
    ] ifFalse:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  3858
        aGc displayString:s x:x y:y.
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3859
    ].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3860
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3861
    "Modified: 11.5.1996 / 14:42:48 / cg"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3862
!
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  3863
2762
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3864
displayOpaqueOn:aGC x:x y:y from:start to:stop
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3865
    "display the receiver on a GC"
59c71fa02ba2 displayOn / displayOpaqueOn fixed
ca
parents: 2760
diff changeset
  3866
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  3867
    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
  3868
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  3869
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3870
!CharacterArray methodsFor:'emphasis'!
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3871
11632
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3872
actionForAll:aBlock
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3873
    "change the action block of all characters.
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3874
     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
  3875
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3876
    ^ self asText actionForAll:aBlock
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3877
!
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3878
5732
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3879
allBold
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3880
    "return a text object representing the receiver, but all boldified"
5732
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3881
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3882
    "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
  3883
    Text isNil ifTrue:[^ self].
5732
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3884
    ^ self asText allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3885
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3886
    "
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3887
     Transcript showCR:'hello' asText allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3888
     Transcript showCR:'hello' allBold
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3889
    "
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3890
!
7b5effa6816e allBold added
Claus Gittinger <cg@exept.de>
parents: 5714
diff changeset
  3891
5898
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3892
allItalic
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3893
    "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
  3894
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  3895
    "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
  3896
    Text isNil ifTrue:[^ self].
5898
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3897
    ^ self asText allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3898
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3899
    "
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3900
     Transcript showCR:'hello' asText allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3901
     Transcript showCR:'hello' allItalic
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3902
    "
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3903
!
7bc4f1593b4e allItalic now understood by CharacterArray
Claus Gittinger <cg@exept.de>
parents: 5848
diff changeset
  3904
11345
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3905
allStrikedOut
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3906
    "return a text object representing the receiver, but all in strikeout"
11345
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3907
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3908
    "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
  3909
    Text isNil ifTrue:[^ self].
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3910
    ^ self asText allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3911
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3912
    "
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3913
     Transcript showCR:'hello' asText allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3914
     Transcript showCR:'hello' allStrikedOut
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3915
    "
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3916
!
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  3917
10862
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3918
allUnderlined
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3919
    "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
  3920
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3921
    "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
  3922
    Text isNil ifTrue:[^ self].
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3923
    ^ self asText allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3924
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3925
    "
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3926
     Transcript showCR:'hello' asText allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3927
     Transcript showCR:'hello' allUnderlined
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3928
    "
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3929
!
0fa5e12415af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10841
diff changeset
  3930
6228
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3931
colorizeAllWith:aColor
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3932
    "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
  3933
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  3934
    "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
  3935
    Text isNil ifTrue:[^ self].
6228
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3936
    ^ self asText colorizeAllWith:aColor
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3937
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3938
    "
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3939
     Transcript showCR:('hello' colorizeAllWith:Color red)
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3940
     Transcript showCR:('world' colorizeAllWith:Color green darkened)
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3941
    "
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3942
!
3b39832651c9 added #colorizeAllWith:
Claus Gittinger <cg@exept.de>
parents: 6187
diff changeset
  3943
12330
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3944
colorizeAllWith:fgColor on:bgColor
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3945
    "return a text object representing the receiver, but all colorized with
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3946
     both fg and background color"
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3947
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3948
    "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
  3949
    Text isNil ifTrue:[^ self].
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3950
    ^ self asText colorizeAllWith:fgColor on:bgColor
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3951
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3952
    "
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3953
     Transcript showCR:('hello' colorizeAllWith:Color red on:Color yellow)
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3954
     Transcript showCR:('world' colorizeAllWith:Color red)
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3955
    "
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3956
!
f9b57b0b8a8b added: #colorizeAllWith:on:
Claus Gittinger <cg@exept.de>
parents: 12326
diff changeset
  3957
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3958
emphasis
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3959
    "return the emphasis.
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3960
     Since characterArrays do not hold any emphasis information,
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3961
     nil (no emphasis) is returned here."
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3962
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3963
    ^ RunArray new:self size withAll:nil
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3964
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3965
    "Created: 14.5.1996 / 13:58:58 / cg"
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3966
!
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3967
6655
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3968
emphasis:emphasisCollection
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3969
    ^ self asText emphasis:emphasisCollection
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3970
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3971
    "
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3972
     Transcript showCR:('hello' emphasis:#(bold bold bold bold bold))
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3973
    "
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3974
!
08e098ce6534 +emphasis:
Michael Beyl <mb@exept.de>
parents: 6653
diff changeset
  3975
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3976
emphasisAt:characterIndex
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3977
    "return the emphasis at some index.
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3978
     Since characterArrays do not hold any emphasis information,
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3979
     nil (no emphasis) is returned here."
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3980
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3981
    ^ nil
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3982
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  3983
    "Created: 11.5.1996 / 14:13:27 / cg"
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3984
!
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3985
11632
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3986
emphasisAtPoint:aPoint on:aGC
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3987
    "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
  3988
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3989
    ^ nil
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3990
!
b82e9f3cabd1 new: #actionForAll: #emphasisAtPoint:on:
Stefan Vogel <sv@exept.de>
parents: 11630
diff changeset
  3991
1396
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3992
emphasisCollection
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3993
    "return the emphasis.
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3994
     Since characterArrays do not hold any emphasis information,
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3995
     nil (no emphasis) is returned here."
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3996
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3997
    ^ RunArray new:(self size)
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3998
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  3999
    "Created: 14.5.1996 / 13:58:58 / cg"
5b5386311dbd concatenating mixed texts & strings
Claus Gittinger <cg@exept.de>
parents: 1393
diff changeset
  4000
    "Modified: 14.5.1996 / 15:02:29 / cg"
3404
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  4001
!
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  4002
11919
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4003
emphasiseFrom:start to:stop with:newEmphasis
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4004
    "set to the emphasis within some range. return the receiver"
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4005
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4006
    ^ self asText emphasiseFrom:start to:stop with:newEmphasis
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4007
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4008
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4009
     'hello' emphasiseFrom:2 with:#italic
11919
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4010
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4011
     Transcript showCR:('hello' emphasiseFrom:2 with:#italic)
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4012
    "
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4013
!
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4014
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4015
emphasiseFrom:start with:newEmphasis
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4016
    "set to the emphasis within some range. return the receiver"
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4017
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4018
    ^ self emphasiseFrom:start to:(self size) with:newEmphasis
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4019
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4020
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  4021
     'hello' emphasiseFrom:2 with:#italic
11919
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4022
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4023
     Transcript showCR:('hello' emphasiseFrom:2 with:#italic)
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4024
    "
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4025
!
315d79f867ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11905
diff changeset
  4026
3404
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  4027
emphasizeAllWith:emphasis
12326
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4028
    "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
  4029
c67f12213ddb comment/format in:5 methods
Claus Gittinger <cg@exept.de>
parents: 12319
diff changeset
  4030
    "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
  4031
    Text isNil ifTrue:[^ self].
3404
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  4032
    ^ self asText emphasizeAllWith:emphasis
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  4033
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  4034
    "
5a9ab54bcbd5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3337
diff changeset
  4035
     Transcript showCR:('hello' emphasizeAllWith:#bold)
3599
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  4036
     Transcript showCR:('hello' emphasizeAllWith:(#color -> Color red))
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  4037
     Transcript showCR:('hello' emphasizeAllWith:(#color -> Color red))
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  4038
    "
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  4039
fea09a812f55 comment
Claus Gittinger <cg@exept.de>
parents: 3578
diff changeset
  4040
    "Modified: / 17.6.1998 / 12:51:44 / cg"
5097
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  4041
!
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  4042
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  4043
makeSelectorBoldIn:aClass
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4044
    "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
  4045
     Change myself to boldify the selector.
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4046
     Not yet implemented (could easily use the syntaxHighlighter for this ...).
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4047
     For protocol compatibility with other smalltalks"
5097
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  4048
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  4049
    ^ self
4aa597a8a724 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4989
diff changeset
  4050
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4051
    "Created: / 13-12-1999 / 21:49:24 / cg"
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4052
!
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4053
16697
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4054
withColor:aColor
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4055
    "return a text object representing the receiver, but all colorized"
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4056
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4057
    ^ self colorizeAllWith:aColor
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4058
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4059
    "
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4060
     Transcript showCR:('hello' withColor:Color red)
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4061
     Transcript showCR:('world' withColor:Color green darkened)
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4062
    "
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4063
!
c462faf821b7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16693
diff changeset
  4064
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4065
withoutAnyColorEmphasis
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4066
    "for protocol compatibility with Text"
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4067
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4068
    ^ self
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4069
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4070
    "Created: / 06-03-2012 / 18:15:38 / cg"
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4071
!
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4072
12396
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  4073
withoutBackgroundColorEmphasis
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4074
    "for protocol compatibility with Text"
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4075
12396
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  4076
    ^ self
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4077
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4078
    "Modified (comment): / 06-03-2012 / 18:14:27 / cg"
12396
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  4079
!
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  4080
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4081
withoutEmphasis:emphasisToRemove
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4082
    "for protocol compatibility with Text"
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4083
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  4084
    ^ self
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4085
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4086
    "Modified (comment): / 06-03-2012 / 18:14:29 / cg"
12396
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  4087
!
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  4088
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  4089
withoutForegroundColorEmphasis
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4090
    "for protocol compatibility with Text"
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4091
12396
0f75aad3a34c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12343
diff changeset
  4092
    ^ self
14050
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4093
Claus Gittinger <cg@exept.de>
parents: 14014
diff changeset
  4094
    "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
  4095
! !
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  4096
7265
3b007758ff5b method category rename
Claus Gittinger <cg@exept.de>
parents: 7261
diff changeset
  4097
!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
  4098
12767
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  4099
decodeAsLiteralArray
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  4100
    "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
  4101
     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
  4102
     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
  4103
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  4104
    ^ self
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  4105
!
17d2c7268065 Prepare for changing superclass of CharacterArray from ByteArray to UninterpretedBytes
Stefan Vogel <sv@exept.de>
parents: 12679
diff changeset
  4106
991
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
  4107
decodeFrom:encodingSymbol
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4108
    "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
  4109
     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
  4110
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
  4111
    |myEncoding encoder|
7950
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  4112
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  4113
    encodingSymbol isNil ifTrue:[^ self].
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  4114
    myEncoding := self encoding.
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  4115
    encodingSymbol == myEncoding ifTrue:[^ self].
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  4116
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  4117
    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
  4118
    encoder isNil ifTrue:[^ self].
ca774158b317 code cleanup (removed old obsolete encoding stuff)
Claus Gittinger <cg@exept.de>
parents: 8102
diff changeset
  4119
    ^ 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
  4120
!
f0b45a4b82d2 first attempt in encoding/decoding for different character representations (mac/msdos etc.)
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
  4121
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4122
encodeFrom:oldEncoding into:newEncoding
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4123
    ^ CharacterEncoder encodeString:self from:oldEncoding into:newEncoding
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  4124
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  4125
    "
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  4126
     'äüö' encodeFrom:#iso8859 into:#utf8
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  4127
     ('äüö' encodeFrom:#iso8859 into:#utf8) encodeFrom:#utf8 into:#unicode
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  4128
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4129
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4130
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4131
rot13
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4132
     "Usenet: from `rotate alphabet 13 places']
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4133
      The simple Caesar-cypher encryption that replaces each English
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4134
      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
  4135
      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
  4136
      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
  4137
      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
  4138
      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
  4139
      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
  4140
      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
  4141
11865
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4142
    ^ self rot:13
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4143
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4144
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4145
     'hello world' rot13
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4146
     'hello world' rot13 rot13
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4147
    "
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4148
!
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4149
11865
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4150
rot:n
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4151
     "Usenet: from `rotate alphabet N places']
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4152
      The simple Caesar-cypher encryption that replaces each English
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4153
      letter with the one N places forward or back along the alphabet,
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4154
      so that 'The butler did it!!' becomes 'Gur ohgyre qvq vg!!' by rot 13
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4155
      Most Usenet news reading and posting programs include a rot13 feature.
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4156
      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
  4157
      to open -- e.g., for posting things that might offend some readers, or spoilers.
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4158
      A major advantage of rot13 over rot(N) for other N is that it
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4159
      is self-inverse, so the same code can be used for encoding and decoding."
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4160
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4161
    ^ self species
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4162
        streamContents:[:aStream |
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4163
            self do:[:char |
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4164
                aStream nextPut:(char rot:n) ]]
11865
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4165
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4166
    "
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4167
     'hello world' rot:13
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4168
     ('hello world' rot:13) rot:13
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4169
    "
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4170
!
Claus Gittinger <cg@exept.de>
parents: 11861
diff changeset
  4171
15656
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4172
utf16Encoded
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4173
    "Return my UTF-16 representation as a new TwoByteString"
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4174
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4175
    |s|
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4176
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4177
    s := WriteStream on:(TwoByteString uninitializedNew:self size).
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4178
    s nextPutAllUtf16:self.
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4179
    ^ s contents
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4180
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4181
    "
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4182
     'abcde1234' utf16Encoded
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4183
     'abcdeäöüß' utf16Encoded
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4184
    "
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4185
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4186
    "Modified: / 11-05-2010 / 19:12:37 / cg"
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4187
!
82aca5063e96 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15628
diff changeset
  4188
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4189
utf8Decoded
7950
1a64875be502 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7945
diff changeset
  4190
    "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
  4191
14592
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4192
    |in out|
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4193
14606
1aaaa6d79e54 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14592
diff changeset
  4194
    (self isWideString or:[self contains8BitCharacters]) ifFalse:[
14592
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4195
        "speed up common case"
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4196
        ^ self.
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4197
    ].
11326
11ce7ae19315 changed #utf8Decoded - use CharacterWriteStream
Stefan Vogel <sv@exept.de>
parents: 11320
diff changeset
  4198
    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
  4199
    in := self readStream.
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4200
    [in atEnd] whileFalse:[
14592
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4201
        out nextPut:(Character utf8DecodeFrom:in).
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4202
    ].
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4203
    ^ out contents
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4204
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4205
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4206
     #[16rC8 16rA0] asString utf8Decoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4207
     (Character value:16r220) utf8Encoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4208
     (Character value:16r220) utf8Encoded utf8Decoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4209
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4210
     (Character value:16r800) utf8Encoded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4211
     (Character value:16r220) utf8Encoded utf8Decoded
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4212
    "
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4213
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4214
    "test:
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4215
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4216
      |utf8Encoding original readBack|
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4217
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4218
      1 to:16rFFFF do:[:ascii |
14592
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4219
        original := (Character value:ascii) asString.
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4220
        utf8Encoding := original utf8Encoded.
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4221
        readBack := utf8Encoding utf8Decoded.
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4222
        readBack = original ifFalse:[
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4223
            self halt
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4224
        ]
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4225
      ]
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4226
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4227
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4228
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4229
utf8DecodedWithTwoByteCharactersReplacedBy:replacementCharacter
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4230
    "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
  4231
     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
  4232
     and replace them with replacementCharacter"
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4233
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4234
    |in out c|
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4235
8222
f2c454a9a038 replaced '' writeStream by String writeStream
Claus Gittinger <cg@exept.de>
parents: 8124
diff changeset
  4236
    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
  4237
    in := self readStream.
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4238
    [in atEnd] whileFalse:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4239
        c := Character utf8DecodeFrom:in.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4240
        c codePoint > 16rFF ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4241
            c := replacementCharacter
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4242
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4243
        out nextPut:c.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4244
    ].
6835
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4245
    ^ out contents
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4246
bdb2cb03200c added utf8Decode with 8-bit chars only
Claus Gittinger <cg@exept.de>
parents: 6834
diff changeset
  4247
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4248
     (Character value:16r220) utf8Encoded
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4249
        utf8DecodedWithTwoByteCharactersReplacedBy:(Character space)
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4250
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4251
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4252
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4253
utf8Encoded
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4254
    "Return my UTF-8 representation as a new String"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4255
14592
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4256
    |s sz|
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4257
14606
1aaaa6d79e54 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14592
diff changeset
  4258
    (self isWideString or:[self contains8BitCharacters]) ifFalse:[
14592
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4259
        "speed up common case"
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4260
        ^ self.
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4261
    ].
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4262
    "We already know, that we need more space, just a rough estimation"
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4263
    sz := self size.
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4264
    s := WriteStream on:(String uninitializedNew:(sz+2+(sz//3))).
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4265
    s nextPutAllUtf8:self.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4266
    ^ s contents
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4267
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  4268
    "
14592
cd1a3cff5d1c class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14555
diff changeset
  4269
     'abcde1234' utf8Encoded
12925
5c0a9a633ca1 comment/format in: #utf8Encoded
Claus Gittinger <cg@exept.de>
parents: 12912
diff changeset
  4270
     'abcdeäöüß' utf8Encoded
5c0a9a633ca1 comment/format in: #utf8Encoded
Claus Gittinger <cg@exept.de>
parents: 12912
diff changeset
  4271
    "
5c0a9a633ca1 comment/format in: #utf8Encoded
Claus Gittinger <cg@exept.de>
parents: 12912
diff changeset
  4272
5c0a9a633ca1 comment/format in: #utf8Encoded
Claus Gittinger <cg@exept.de>
parents: 12912
diff changeset
  4273
    "Modified: / 11-05-2010 / 19:12:37 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4274
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4275
11345
3f5e4cc6ae91 changed #allStrikedOut
Claus Gittinger <cg@exept.de>
parents: 11329
diff changeset
  4276
17165
1e2822c3c74c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17158
diff changeset
  4277
1e2822c3c74c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17158
diff changeset
  4278
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4279
!CharacterArray methodsFor:'matching - glob expressions'!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4280
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4281
compoundMatch:aString
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4282
    "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
  4283
     consisting of multiple simple GLOB patterns, separated by semicolons.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4284
     This is usable with fileName pattern fields.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4285
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4286
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4287
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4288
     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
  4289
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4290
15890
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4291
    ^ self compoundMatch:aString caseSensitive:true withoutSeparators:false
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4292
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4293
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4294
     'f*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4295
     'b*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4296
     'f*;b*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4297
     'f*;b*' match:'bar'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4298
     'f*;b*' compoundMatch:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4299
     'f*;b*' compoundMatch:'bar'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4300
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4301
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4302
    "Modified: / 30.1.1998 / 11:40:18 / stefan"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4303
    "Modified: / 16.12.1999 / 01:22:08 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4304
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4305
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4306
compoundMatch:aString caseSensitive:caseSensitive
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4307
    "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
  4308
     consisting of multiple simple GLOB patterns, separated by semicolons.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4309
     This is usable with fileName pattern fields.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4310
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4311
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4312
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4313
     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
  4314
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4315
15890
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4316
    ^self compoundMatch:aString caseSensitive:caseSensitive withoutSeparators:false
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4317
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4318
    "
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4319
     'f*' match:'foo'
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4320
     'b*' match:'foo'
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4321
     'f*;b*' match:'foo'
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4322
     'f*;b*' match:'bar'
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4323
     'f*;b*' compoundMatch:'foo'
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4324
     'f*;b*' compoundMatch:'bar'
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4325
     'f*;b*' compoundMatch:'Foo' caseSensitive:false
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4326
     'f*;b*' compoundMatch:'Bar' caseSensitive:false
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4327
     'f*;b*' compoundMatch:'ccc' caseSensitive:false
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4328
    "
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4329
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4330
    "Modified: / 15.4.1997 / 15:50:33 / cg"
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4331
    "Modified: / 30.1.1998 / 11:40:18 / stefan"
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4332
    "Created: / 16.12.1999 / 01:21:35 / cg"
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4333
!
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4334
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4335
compoundMatch:aString caseSensitive:caseSensitive withoutSeparators:withoutSeparators
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4336
    "like match, but the receiver may be a compound match pattern,
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4337
     consisting of multiple simple GLOB patterns, separated by semicolons.
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4338
     If withoutSeparators is true, spaces around individual patterns are stripped off.
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4339
     This is usable with fileName pattern fields.
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4340
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4341
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4342
             NOT the ST-80 meaning.
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4343
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4344
     NOTICE: the receiver is the match pattern"
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4345
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4346
    |matchers|
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4347
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4348
    matchers := self asCollectionOfSubstringsSeparatedBy:$;.
15890
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4349
    withoutSeparators ifTrue:[ matchers := matchers collect:[:each | each withoutSeparators] ].
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4350
    ^ matchers 
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4351
        contains:[:aPattern |
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4352
            aPattern match:aString ignoreCase:caseSensitive not escapeCharacter:nil
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4353
        ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4354
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4355
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4356
     'f*' match:'foo'
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4357
     'b*' match:'foo'
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4358
     'f*;b*' match:'foo'
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4359
     'f*;b*' match:'bar'
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4360
     'f*;b*' compoundMatch:'foo'
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4361
     'f*;b*' compoundMatch:'bar'
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4362
     'f*;b*' compoundMatch:'Foo' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4363
     'f*;b*' compoundMatch:'Bar' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4364
     'f*;b*' compoundMatch:'ccc' caseSensitive:false
15890
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4365
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4366
     'f* ; b*' compoundMatch:'foo' 
bb7a0307b078 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15829
diff changeset
  4367
     'f* ; b*' compoundMatch:'foo' caseSensitive:true withoutSeparators:true
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4368
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4369
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4370
    "Modified: / 15.4.1997 / 15:50:33 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4371
    "Modified: / 30.1.1998 / 11:40:18 / stefan"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4372
    "Created: / 16.12.1999 / 01:21:35 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4373
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4374
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4375
compoundMatch:aString ignoreCase:ignoreCase
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4376
    <resource: #obsolete>
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4377
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4378
    "like match, but the receiver may be a compound match pattern,
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4379
     consisting of multiple simple GLOB patterns, separated by semicolons.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4380
     This is usable with fileName pattern fields.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4381
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4382
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4383
             NOT the ST-80 meaning.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4384
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4385
     NOTICE: the receiver is the match pattern"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4386
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4387
    ^ self compoundMatch:aString caseSensitive:ignoreCase not
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4388
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4389
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4390
     'f*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4391
     'b*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4392
     'f*;b*' match:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4393
     'f*;b*' match:'bar'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4394
     'f*;b*' compoundMatch:'foo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4395
     'f*;b*' compoundMatch:'bar'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4396
     'f*;b*' compoundMatch:'Foo' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4397
     'f*;b*' compoundMatch:'Bar' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4398
     'f*;b*' compoundMatch:'ccc' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4399
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4400
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4401
    "Modified: / 15.4.1997 / 15:50:33 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4402
    "Modified: / 30.1.1998 / 11:40:18 / stefan"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4403
    "Created: / 16.12.1999 / 01:21:35 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4404
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4405
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4406
findMatchString:matchString
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4407
    "like findString/indexOfSubCollection, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4408
     find matchstring; if found, return the index;
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4409
     if not found, return 0.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4410
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4411
     NOTICE: match-meta character interpretation is like in unix-matching,
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4412
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4413
     NOTICE: this GLOB, which is different from regex matching (see matchesRegex:)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4414
     NOTICE: the argument is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4415
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4416
    ^ self findMatchString:matchString startingAt:1 ignoreCase:false ifAbsent:0
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4417
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4418
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4419
findMatchString:matchString startingAt:index
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4420
    "like findString, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4421
     find matchstring, starting at index. if found, return the index;
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4422
     if not found, return 0.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4423
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4424
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4425
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4426
     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
  4427
     NOTICE: the argument is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4428
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4429
    ^ self findMatchString:matchString startingAt:index ignoreCase:false ifAbsent:0
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4430
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4431
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4432
findMatchString:matchString startingAt:index caseSensitive:caseSensitive ifAbsent:exceptionBlock
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4433
    "like findString, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4434
     find matchstring, starting at index. if found, return the index;
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4435
     if not found, return the result of evaluating exceptionBlock.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4436
     This is a q&d hack - not very efficient.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4437
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4438
     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
  4439
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4440
     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
  4441
     NOTICE: the argument is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4442
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4443
    |firstChar firstSet
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4444
     startIndex "{ Class: SmallInteger }"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4445
     matchSize  "{ Class: SmallInteger }"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4446
     mySize     "{ Class: SmallInteger }"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4447
     realMatchString lcChar ucChar|
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4448
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4449
    matchSize := matchString size.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4450
    matchSize == 0 ifTrue:[^ index]. "empty string matches"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4451
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4452
    realMatchString := matchString.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4453
    (realMatchString endsWith:$*) ifFalse:[
14420
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4454
        realMatchString := realMatchString , '*'.
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4455
        matchSize := matchSize + 1
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4456
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4457
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4458
    mySize := self size.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4459
    firstChar := realMatchString at:1.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4460
    firstChar == self class matchEscapeCharacter ifTrue:[
14420
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4461
        firstChar := realMatchString at:2.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4462
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4463
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4464
    firstChar asString includesMatchCharacters ifTrue:[
14420
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4465
        index to:mySize do:[:col |
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4466
            (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
  4467
            ifTrue:[^ col]
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4468
        ].
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4469
        ^ exceptionBlock value.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4470
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4471
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4472
    lcChar := firstChar asLowercase.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4473
    ucChar := firstChar asUppercase.
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4474
    (caseSensitive not and:[ lcChar ~= ucChar ]) ifTrue:[
14420
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4475
        firstSet := Array with:ucChar with:lcChar.
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4476
        startIndex := self indexOfAny:firstSet startingAt:index.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4477
    ] ifFalse:[
14420
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4478
        startIndex := self indexOf:firstChar startingAt:index.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4479
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4480
    [startIndex == 0] whileFalse:[
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4481
        (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
  4482
        ifTrue:[^ startIndex].
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4483
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4484
        firstSet notNil ifTrue:[
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4485
            startIndex := self indexOfAny:firstSet startingAt:(startIndex + 1).
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4486
        ] ifFalse:[
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4487
            startIndex := self indexOf:firstChar startingAt:(startIndex + 1).
b388916e6aed comment/format in: #findMatchString:startingAt:ignoreCase:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 14405
diff changeset
  4488
        ].
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4489
    ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4490
    ^ exceptionBlock value
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4491
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4492
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4493
     'one two three four' findMatchString:'o[nu]'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4494
     'one two three four' findMatchString:'o[nu]' startingAt:3
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4495
     '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
  4496
     '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
  4497
     '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
  4498
     '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
  4499
      12345678901234567890
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4500
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4501
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4502
    "Modified: 13.9.1997 / 06:31:22 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4503
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4504
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4505
findMatchString:matchString startingAt:index ignoreCase:ignoreCase ifAbsent:exceptionBlock
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4506
    <resource: #obsolete>
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4507
    "like findString, but allowing GLOB match patterns.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4508
     find matchstring, starting at index. if found, return the index;
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4509
     if not found, return the result of evaluating exceptionBlock.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4510
     This is a q&d hack - not very efficient.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4511
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4512
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4513
             NOT the ST-80 meaning.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4514
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4515
     NOTICE: the argument is the match pattern"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4516
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4517
    ^ self 
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4518
        findMatchString:matchString startingAt:index caseSensitive:ignoreCase not ifAbsent:exceptionBlock
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4519
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4520
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4521
     'one two three four' findMatchString:'o[nu]'
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4522
     'one two three four' findMatchString:'o[nu]' startingAt:3
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4523
     '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
  4524
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4525
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4526
    "Modified: 13.9.1997 / 06:31:22 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4527
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4528
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4529
includesMatchString:matchString
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4530
    "like includesString, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4531
     find matchstring; if found, return true, otherwise return false.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4532
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4533
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4534
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4535
     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
  4536
     NOTICE: the argument is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4537
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4538
    ^ (self findMatchString:matchString) ~~ 0
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4539
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4540
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4541
     'hello world' includesMatchString:'h*'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4542
     'hello world' includesMatchString:'h[aeiou]llo'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4543
     'hello world' includesMatchString:'wor*'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4544
     'hello world' includesMatchString:'woR*'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4545
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4546
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4547
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4548
includesMatchString:matchString caseSensitive:caseSensitive
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4549
    "like includesString, but allowing GLOB match patterns.
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4550
     find matchstring; if found, return true, otherwise return false.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4551
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4552
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4553
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4554
     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
  4555
     NOTICE: the argument is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4556
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4557
    ^ (self findMatchString:matchString startingAt:1 ignoreCase:caseSensitive not ifAbsent:0) ~~ 0
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4558
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4559
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4560
     'hello world' includesMatchString:'h*' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4561
     'hello world' includesMatchString:'h*' caseSensitive:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4562
     'Hello world' includesMatchString:'h*' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4563
     'Hello world' includesMatchString:'h*' caseSensitive:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4564
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4565
     'hello world' includesMatchString:'h[aeiou]llo' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4566
     'hello world' includesMatchString:'h[aeiou]llo' caseSensitive:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4567
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4568
     'hello world' includesMatchString:'wor*' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4569
     'hello world' includesMatchString:'wor*' caseSensitive:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4570
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4571
     'hello world' includesMatchString:'woR*' caseSensitive:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4572
     'hello world' includesMatchString:'woR*' caseSensitive:false
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
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4575
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4576
match:aString
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4577
    "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
  4578
     characters $* (to match any string) or $# (to match any character).
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4579
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4580
     Lower/uppercase are considered different.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4581
     The escape character is the backQuote.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4582
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4583
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4584
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4585
     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
  4586
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4587
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4588
    ^ self match:aString from:1 to:aString size caseSensitive:true
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4589
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
     '\*f*' match:'f'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4592
     '\*f*' match:'*f'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4593
     '*\*f*' match:'*f'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4594
     '*f*' match:'*f'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4595
     '*ute*' match:'computer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4596
     '*uter' match:'computer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4597
     'uter*' match:'computer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4598
     '*ute*' match:''
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4599
     '[abcd]*' match:'computer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4600
     '[abcd]*' match:'komputer'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4601
     '*some*compl*ern*' match:'this is some more complicated pattern match'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4602
     '*some*compl*ern*' match:'this is another complicated pattern match'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4603
     '*-hh' match:'anton-h'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4604
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4605
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4606
    "Modified: / 9.6.1998 / 18:50:00 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4607
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4608
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4609
match:aString caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4610
    "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
  4611
     characters $* (to match any string) or $# (to match any character)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4612
     or [...] to match a set of characters.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4613
     If caseSensitive is false, lower/uppercase are considered the same.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4614
     The escape character is the backQuote.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4615
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4616
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4617
             NOT the ST-80 meaning.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4618
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4619
     NOTICE: the receiver is the match pattern"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4620
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4621
    ^ self match:aString from:1 to:aString size caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4622
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4623
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4624
     '*ute*' match:'COMPUTER' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4625
     '*uter' match:'COMPUTER' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4626
     '[abcd]*' match:'computer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4627
     '[abcd]*' match:'Computer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4628
     '[a-k]*' match:'komputer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4629
     '[a-k]*' match:'zomputer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4630
     '[a-k]*' match:'Komputer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4631
     '[a-k]*' match:'Komputer' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4632
     '*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
  4633
     '*some*compl*ern*' match:'this is another complicated pattern match' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4634
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4635
     Time millisecondsToRun:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4636
        Symbol allInstancesDo:[:sym |
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4637
            '[ab]*' match:sym caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4638
        ]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4639
     ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4640
     Time millisecondsToRun:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4641
        Symbol allInstancesDo:[:sym |
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4642
            '*at:*' match:sym caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4643
        ]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4644
     ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4645
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4646
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4647
    "Modified: 2.4.1997 / 17:28:58 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4648
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4649
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4650
match:aString caseSensitive:caseSensitive escapeCharacter:escape
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4651
    "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
  4652
     characters $* (to match any string) or $# (to match any character)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4653
     or [...] to match a set of characters.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4654
     If caseSensitive is false, lower/uppercase are considered the same.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4655
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4656
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4657
             NOT the ST-80 meaning.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4658
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4659
     NOTICE: the receiver is the match pattern"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4660
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4661
    ^ self match:aString from:1 to:aString size caseSensitive:caseSensitive escapeCharacter:escape
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4662
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4663
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4664
     '*ute*' match:'COMPUTER' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4665
     '*uter' match:'COMPUTER' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4666
     '[abcd]*' match:'computer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4667
     '[abcd]*' match:'Computer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4668
     '[a-k]*' match:'komputer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4669
     '[a-k]*' match:'zomputer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4670
     '[a-k]*' match:'Komputer' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4671
     '[a-k]*' match:'Komputer' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4672
     '*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
  4673
     '*some*compl*ern*' match:'this is another complicated pattern match' caseSensitive:false
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
     Time millisecondsToRun:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4676
        Symbol allInstancesDo:[:sym |
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4677
            '[ab]*' match:sym caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4678
        ]
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4679
     ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4680
     Time millisecondsToRun:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4681
        Symbol allInstancesDo:[:sym |
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4682
            '*at:*' match:sym caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4683
        ]
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
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4686
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4687
    "Modified: 2.4.1997 / 17:28:58 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4688
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4689
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4690
match:aString escapeCharacter:escape
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4691
    "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
  4692
     characters $* (to match any string) or $# (to match any character).
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4693
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4694
     Lower/uppercase are considered different.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4695
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4696
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4697
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4698
     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
  4699
     NOTICE: the receiver is the match pattern"
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
    ^ self match:aString from:1 to:aString size ignoreCase:false escapeCharacter:escape
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4702
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4703
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4704
     'a\b\c\*' match:'a\b\c\d'
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4705
     'a\b\c\*' match:'a\b\c\d' escapeCharacter:nil
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4706
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4707
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4708
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4709
match:aString from:start to:stop caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4710
    "return true if part of aString matches myself,
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4711
     where self may contain GLOB meta-match
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4712
     characters $* (to match any string) or $# (to match any character)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4713
     or [...] to match a set of characters.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4714
     If caseSensitive is false, lower/uppercase are considered the same.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4715
     The escape character is the backQuote.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4716
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4717
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4718
             NOT the ST-80 meaning.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4719
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4720
     NOTICE: the receiver is the match pattern"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4721
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4722
    ^ self
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4723
        match:aString from:start to:stop caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4724
        escapeCharacter:(self class matchEscapeCharacter)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4725
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4726
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4727
     '*ute*' match:'12345COMPUTER' from:1 to:5 caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4728
     '*ute*' match:'12345COMPUTER' from:6 to:13 caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4729
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4730
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4731
    "Modified: / 10.11.1998 / 21:43:46 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4732
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4733
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4734
match:aString from:start to:stop caseSensitive:caseSensitive escapeCharacter:escape
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4735
    "return true if part of aString matches myself,
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4736
     where self may contain GLOB meta-match
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4737
     characters $* (to match any string) or $# (to match any character)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4738
     or [...] to match a set of characters.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4739
     If caseSensitive is false, lower/uppercase are considered the same.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4740
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4741
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4742
             NOT the ST-80 meaning.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4743
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4744
     NOTICE: the receiver is the match pattern"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4745
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4746
    |matchScanArray|
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4747
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4748
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4749
     keep the matchScanArray from the most recent match -
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4750
     avoids parsing the pattern over-and over if multiple searches
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4751
     are done with the same pattern.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4752
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4753
    (PreviousMatch notNil
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4754
    and:[PreviousMatch key = self]) ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4755
        matchScanArray := PreviousMatch value
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4756
    ] ifFalse:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4757
        matchScanArray := self class matchScanArrayFrom:self escapeCharacter:escape.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4758
        matchScanArray isNil ifTrue:[
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4759
            'CharacterArray [info]: invalid matchpattern:''' infoPrint. self infoPrint. ''' comparing for equality.' infoPrintCR.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4760
            ^ self = aString
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4761
"/            ^ false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4762
        ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4763
        PreviousMatch := self -> matchScanArray.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4764
    ].
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4765
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4766
    ^ self class
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4767
        matchScan:matchScanArray
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4768
        from:1 to:matchScanArray size
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4769
        with:aString
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4770
        from:start to:stop
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4771
        caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4772
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4773
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4774
     '*ute*' match:'12345COMPUTER' from:1 to:5 caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4775
     '*ute*' match:'12345COMPUTER' from:6 to:13 caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4776
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4777
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4778
    "Modified: / 10.11.1998 / 21:43:46 / cg"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4779
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4780
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4781
match:aString from:start to:stop ignoreCase:ignoreCase
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4782
    <resource: #obsolete>
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4783
    "return true if part of aString matches myself,
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4784
     where self may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4785
     characters $* (to match any string) or $# (to match any character)
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4786
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4787
     If ignoreCase is true, lower/uppercase are considered the same.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4788
     The escape character is the backQuote.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4789
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4790
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4791
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4792
     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
  4793
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4794
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4795
    ^ self
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4796
        match:aString from:start to:stop ignoreCase:ignoreCase
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4797
        escapeCharacter:(self class matchEscapeCharacter)
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4798
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4799
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4800
     '*ute*' match:'12345COMPUTER' from:1 to:5 ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4801
     '*ute*' match:'12345COMPUTER' from:6 to:13 ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4802
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4803
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4804
    "Modified: / 10.11.1998 / 21:43:46 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4805
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4806
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4807
match:aString from:start to:stop ignoreCase:ignoreCase escapeCharacter:escape
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4808
    <resource: #obsolete>
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4809
    "return true if part of aString matches myself,
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4810
     where self may contain GLOB meta-match
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4811
     characters $* (to match any string) or $# (to match any character)
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4812
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4813
     If ignoreCase is true, lower/uppercase are considered the same.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4814
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4815
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4816
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4817
     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
  4818
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4819
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4820
    ^ self 
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4821
        match:aString from:start to:stop 
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4822
        caseSensitive:ignoreCase not 
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4823
        escapeCharacter:escape
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4824
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4825
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4826
     '*ute*' match:'12345COMPUTER' from:1 to:5 ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4827
     '*ute*' match:'12345COMPUTER' from:6 to:13 ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4828
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4829
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4830
    "Modified: / 10.11.1998 / 21:43:46 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4831
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4832
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4833
match:aString ignoreCase:ignoreCase
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4834
    <resource: #obsolete>
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4835
    "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
  4836
     characters $* (to match any string) or $# (to match any character)
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4837
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4838
     If ignoreCase is true, lower/uppercase are considered the same.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4839
     The escape character is the backQuote.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4840
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4841
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4842
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4843
     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
  4844
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4845
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4846
    "/ 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
  4847
    ^ self match:aString from:1 to:aString size ignoreCase:ignoreCase
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4848
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4849
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4850
     '*ute*' match:'COMPUTER' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4851
     '*uter' match:'COMPUTER' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4852
     '[abcd]*' match:'computer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4853
     '[abcd]*' match:'Computer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4854
     '[a-k]*' match:'komputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4855
     '[a-k]*' match:'zomputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4856
     '[a-k]*' match:'Komputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4857
     '[a-k]*' match:'Komputer' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4858
     '*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
  4859
     '*some*compl*ern*' match:'this is another complicated pattern match' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4860
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4861
     Time millisecondsToRun:[
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4862
        Symbol allInstancesDo:[:sym |
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4863
            '[ab]*' match:sym ignoreCase:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4864
        ]
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4865
     ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4866
     Time millisecondsToRun:[
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4867
        Symbol allInstancesDo:[:sym |
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4868
            '*at:*' match:sym ignoreCase:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4869
        ]
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4870
     ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4871
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4872
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4873
    "Modified: 2.4.1997 / 17:28:58 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4874
!
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
match:aString ignoreCase:ignoreCase escapeCharacter:escape
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4877
    <resource: #obsolete>
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4878
    "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
  4879
     characters $* (to match any string) or $# (to match any character)
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4880
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4881
     If ignoreCase is true, lower/uppercase are considered the same.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4882
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4883
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4884
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4885
     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
  4886
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4887
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4888
    ^ self match:aString from:1 to:aString size ignoreCase:ignoreCase escapeCharacter:escape
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4889
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4890
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4891
     '*ute*' match:'COMPUTER' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4892
     '*uter' match:'COMPUTER' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4893
     '[abcd]*' match:'computer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4894
     '[abcd]*' match:'Computer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4895
     '[a-k]*' match:'komputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4896
     '[a-k]*' match:'zomputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4897
     '[a-k]*' match:'Komputer' ignoreCase:false
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4898
     '[a-k]*' match:'Komputer' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4899
     '*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
  4900
     '*some*compl*ern*' match:'this is another complicated pattern match' ignoreCase:true
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4901
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4902
     Time millisecondsToRun:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4903
        Symbol allInstancesDo:[:sym |
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4904
            '[ab]*' match:sym ignoreCase:false
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4905
        ]
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4906
     ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4907
     Time millisecondsToRun:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4908
        Symbol allInstancesDo:[:sym |
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4909
            '*at:*' match:sym ignoreCase:false
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4910
        ]
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4911
     ].
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4912
    "
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4913
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4914
    "Modified: 2.4.1997 / 17:28:58 / cg"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4915
!
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4916
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4917
matches:aPatternString
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4918
    "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
  4919
     characters $* (to match any string) or $# (to match any character).
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4920
     or [...] to match a set of characters.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4921
     Lower/uppercase are considered different.
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4922
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4923
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4924
             NOT the ST-80 meaning.
12518
bfdcbf713b43 comment/format in:16 methods
Claus Gittinger <cg@exept.de>
parents: 12396
diff changeset
  4925
     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
  4926
     NOTICE: the receiver is the match pattern"
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4927
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4928
    ^ aPatternString match:self
14054
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4929
!
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4930
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4931
matches:aPatternString caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4932
    "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
  4933
     characters $* (to match any string) or $# (to match any character).
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4934
     or [...] to match a set of characters.
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
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4937
             NOT the ST-80 meaning.
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4938
     NOTICE: this is GLOB, which is different from regex matching (see matchesRegex:)
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4939
     NOTICE: the receiver is the match pattern"
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4940
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4941
    ^ aPatternString match:self caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4942
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4943
14054
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4944
matches:aPatternString ignoreCase:ignoreCase
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4945
    <resource: #obsolete>
14054
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4946
    "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
  4947
     characters $* (to match any string) or $# (to match any character).
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4948
     or [...] to match a set of characters.
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4949
     Lower/uppercase are considered different.
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4950
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4951
     NOTICE: match-meta character interpretation is like in unix-matching (glob),
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4952
             NOT the ST-80 meaning.
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4953
     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
  4954
     NOTICE: the receiver is the match pattern"
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4955
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  4956
    ^ aPatternString match:self caseSensitive:ignoreCase not
14054
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4957
48d3fab77bd9 added: #matches:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 14053
diff changeset
  4958
    "Created: / 08-03-2012 / 03:11:11 / cg"
12111
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4959
! !
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4960
4b1ac266f7aa category changes
Claus Gittinger <cg@exept.de>
parents: 12058
diff changeset
  4961
17165
1e2822c3c74c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17158
diff changeset
  4962
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4963
!CharacterArray methodsFor:'padded copying'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4964
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4965
centerPaddedTo:newSize
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4966
     "return a new string consisting of the receivers characters,
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4967
     plus spaces up to length and center the receivers characters in
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4968
     the resulting string.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4969
     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
  4970
     the original receiver is returned unchanged."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4971
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4972
     ^ self centerPaddedTo:newSize with:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4973
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4974
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4975
     'foo' centerPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4976
     123 printString centerPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4977
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4978
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4979
    "Created: 25.11.1995 / 10:53:57 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4980
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4981
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4982
centerPaddedTo:size with:padCharacter
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4983
    "return a new string of length size, which contains the receiver
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4984
     centered (i.e. padded on both sides).
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4985
     Characters are filled with padCharacter.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  4986
     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
  4987
     the original receiver is returned unchanged."
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  4988
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4989
    |len s|
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4990
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4991
    len := self size.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4992
    (len < size) ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4993
        s := self species new:size withAll:padCharacter.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4994
        s replaceFrom:(size - len) // 2  + 1 with:self.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  4995
        ^ s
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4996
    ]
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  4997
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4998
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  4999
     'foo' centerPaddedTo:11 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5000
     'fooBar' centerPaddedTo:5 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5001
     123 printString centerPaddedTo:10 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5002
     (' ' , 123 printString) centerPaddedTo:10 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5003
     (Float pi printString) centerPaddedTo:15 with:(Character space)
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5004
     (Float pi printString) centerPaddedTo:15 with:$-
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5005
     (' ' , Float pi class name) centerPaddedTo:15 with:$.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5006
    "
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5007
!
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5008
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5009
decimalPaddedTo:size and:afterPeriod at:decimalCharacter
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5010
    "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
  5011
     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
  5012
     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
  5013
     to be padded).
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5014
     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
  5015
     the original receiver is returned unchanged.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5016
     (sounds complicated ? -> see examples below)."
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5017
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5018
    ^ self
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5019
        decimalPaddedTo:size
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5020
        and:afterPeriod
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5021
        at:decimalCharacter
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5022
        withLeft:(Character space)
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5023
        right:$0
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5024
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5025
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5026
     '123' decimalPaddedTo:10 and:3 at:$.      -> '   123    '
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5027
     '123' decimalPaddedTo:10 and:3 at:$.      -> '   123.000'
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5028
     '123.' decimalPaddedTo:10 and:3 at:$.     -> '   123.000'
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5029
     '123.1' decimalPaddedTo:10 and:3 at:$.    -> '   123.100'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5030
     '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
  5031
     '123.123' decimalPaddedTo:10 and:3 at:$.  -> '   123.123'
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5032
    "
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5033
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5034
    "Created: 23.12.1995 / 13:11:52 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5035
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5036
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5037
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
  5038
    "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
  5039
     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
  5040
     of the period.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5041
     Characters on the left are filled with leftPadChar.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5042
     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
  5043
     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
  5044
     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
  5045
     the original receiver is returned unchanged.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5046
     (sounds complicated ? -> see examples below)."
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5047
5230
655c21ffe6cc care for negative size of rest-string when decimalPadding
Claus Gittinger <cg@exept.de>
parents: 5221
diff changeset
  5048
    |s idx n rest|
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5049
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5050
    idx := self indexOf:decimalCharacter.
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5051
    idx == 0 ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5052
        "/
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5053
        "/ 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
  5054
        "/
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5055
        rightPadChar isNil ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5056
            s := self , (self species new:afterPeriod + 1 withAll:leftPadChar)
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5057
        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5058
            s:= self , decimalCharacter asString , (self species new:afterPeriod withAll:rightPadChar).
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5059
        ].
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5060
    ] ifFalse:[
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5061
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5062
        "/ the number of after-decimalPoint characters
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5063
        n := self size - idx.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5064
        rest := afterPeriod - n.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5065
        rest > 0 ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5066
            s := (self species new:rest withAll:(rightPadChar ? leftPadChar)).
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5067
        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5068
            s := ''
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5069
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5070
        s := self , s.
815
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5071
    ].
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5072
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5073
    ^ s leftPaddedTo:size with:leftPadChar
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5074
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5075
    "
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5076
     '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
  5077
     '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
  5078
     '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
  5079
     '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
  5080
     '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
  5081
     '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
  5082
    "
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5083
997a02c135e7 support for decimal padding added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  5084
    "Modified: 23.12.1995 / 13:08:18 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5085
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5086
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5087
leftPaddedTo:size
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5088
    "return a new string of length size, which contains the receiver
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5089
     right-adjusted (i.e. padded on the left).
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5090
     Characters on the left are filled with spaces.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5091
     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
  5092
     the original receiver is returned unchanged."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5093
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5094
    ^ self leftPaddedTo:size with:(Character space)
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5095
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5096
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5097
     'foo' leftPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5098
     'fooBar' leftPaddedTo:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5099
     123 printString leftPaddedTo:10
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5100
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5101
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5102
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5103
paddedTo:newSize
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5104
     "return a new string consisting of the receivers characters,
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5105
     plus spaces up to length.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5106
     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
  5107
     the original receiver is returned unchanged."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5108
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5109
     ^ self paddedTo:newSize with:(Character space)
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5110
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5111
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5112
     'foo' paddedTo:10
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5113
     123 printString paddedTo:10
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  5114
     '12345678901234' paddedTo:10
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5115
    "
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5116
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  5117
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5118
!CharacterArray methodsFor:'printing & storing'!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5119
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5120
article
17137
9a31ec4d6489 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17065
diff changeset
  5121
    "return an article string for the receiver.
9a31ec4d6489 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17065
diff changeset
  5122
     The original code only looked at the first character being a vowel;
9a31ec4d6489 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17065
diff changeset
  5123
     this has been enhanced by some heuristics - not perfect, still."
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5124
17165
1e2822c3c74c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17158
diff changeset
  5125
    |firstChar secondChar|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5126
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5127
    firstChar := (self at:1) asLowercase.
5848
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  5128
    ((firstChar isVowel and:[firstChar ~~ $u]) or:[firstChar == $x]) ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5129
        ^ 'an'
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5130
    ].
17043
4cd789620782 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17024
diff changeset
  5131
4cd789620782 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17024
diff changeset
  5132
    (self size >= 3) ifTrue:[
17165
1e2822c3c74c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17158
diff changeset
  5133
        secondChar := (self at:2) asLowercase.
17043
4cd789620782 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17024
diff changeset
  5134
        (firstChar isVowel not
17165
1e2822c3c74c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17158
diff changeset
  5135
        and:[(secondChar isVowel or:[secondChar == $y]) not       
17137
9a31ec4d6489 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17065
diff changeset
  5136
        and:[(self at:3) isVowel not ]]) ifTrue:[
17158
d21b6be88f32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17137
diff changeset
  5137
            "/ exceptions: 3 non-vowels in a row: looks like an abbreviation
17137
9a31ec4d6489 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17065
diff changeset
  5138
            (self size > 4) ifTrue:[
9a31ec4d6489 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17065
diff changeset
  5139
                ((self asLowercase startsWith:'scr') and:[(self at:4) isVowel]) ifTrue:[
9a31ec4d6489 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17065
diff changeset
  5140
                    ^ 'a'
9a31ec4d6489 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17065
diff changeset
  5141
                ].
9a31ec4d6489 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17065
diff changeset
  5142
            ].
17158
d21b6be88f32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17137
diff changeset
  5143
            "/ an abbreviation; treat x, s as vowels
d21b6be88f32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17137
diff changeset
  5144
            (firstChar == $x or:[ firstChar == $s ]) ifTrue:[^ 'an'].
17043
4cd789620782 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17024
diff changeset
  5145
        ]
4cd789620782 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17024
diff changeset
  5146
    ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5147
    ^ 'a'
5848
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  5148
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  5149
    "
17137
9a31ec4d6489 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17065
diff changeset
  5150
        'uboot' article.   
9a31ec4d6489 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17065
diff changeset
  5151
        'xmas' article.    
17158
d21b6be88f32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17137
diff changeset
  5152
        'alarm' article.     
d21b6be88f32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17137
diff changeset
  5153
        'baby' article.      
d21b6be88f32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17137
diff changeset
  5154
        'sql' article.       
d21b6be88f32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17137
diff changeset
  5155
        'scr' article.       
d21b6be88f32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17137
diff changeset
  5156
        'screen' article.    
17137
9a31ec4d6489 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17065
diff changeset
  5157
        'scrollbar' article.  
17158
d21b6be88f32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17137
diff changeset
  5158
        'scrs' article.     
d21b6be88f32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17137
diff changeset
  5159
        'cvs' article.     
d21b6be88f32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17137
diff changeset
  5160
        'cvssource' article.     
17165
1e2822c3c74c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17158
diff changeset
  5161
        'symbol' article.     
5848
ef81d77ca1ad UTF-8 Stuff
Stefan Vogel <sv@exept.de>
parents: 5843
diff changeset
  5162
    "
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5163
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5164
8049
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  5165
basicStoreString
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  5166
    "return a String for storing myself"
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  5167
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  5168
    |s n index|
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  5169
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  5170
    n := self occurrencesOf:$'.
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  5171
    n ~~ 0 ifTrue:[
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5172
        s := self species new:(n + 2 + self size).
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5173
        s at:1 put:$'.
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5174
        index := 2.
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5175
        self do:[:thisChar |
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5176
            (thisChar == $') ifTrue:[
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5177
                s at:index put:thisChar.
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5178
                index := index + 1.
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5179
            ].
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5180
            s at:index put:thisChar.
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5181
            index := index + 1.
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5182
        ].
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5183
        s at:index put:$'.
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5184
        ^ s
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5185
    ].
11320
0cf84c372ccf Unicode handling:
Stefan Vogel <sv@exept.de>
parents: 11292
diff changeset
  5186
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5187
    ^ '''' , self , ''''
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5188
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5189
    "
15540
23f428755717 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15523
diff changeset
  5190
     '''immutable'' string' asImmutableString basicStoreString 
23f428755717 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15523
diff changeset
  5191
     'immutable string' asImmutableString basicStoreString 
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5192
    "
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5193
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5194
    "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
  5195
!
8049
ccd0e8f26439 printing - migrating towards unicodeSupport in ST-code
Claus Gittinger <cg@exept.de>
parents: 8040
diff changeset
  5196
11774
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5197
displayOn:aGCOrStream
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5198
    "Compatibility
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5199
     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
  5200
     OR:
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5201
     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
  5202
     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
  5203
     (although the fallBack is to display its printString ...)"
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5204
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5205
    "/ 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
  5206
    "/ 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
  5207
    (aGCOrStream isStream) ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5208
        self storeOn:aGCOrStream.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5209
        ^ self
11774
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5210
    ].
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5211
    ^ super displayOn:aGCOrStream
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5212
!
6f6e2b71b607 displayOn (inspector's interface) was broken
Claus Gittinger <cg@exept.de>
parents: 11754
diff changeset
  5213
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5214
printOn:aStream
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5215
    "print the receiver on aStream"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5216
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5217
    aStream nextPutAll:self
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5218
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5219
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5220
printString
13079
111e7e456648 Implement display with #displayOn: instead of #displayString
Stefan Vogel <sv@exept.de>
parents: 13073
diff changeset
  5221
    "return a string for printing - that's myself"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5222
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5223
    ^ self
3578
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5224
!
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5225
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5226
printWithQuotesDoubledOn:aStream
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5227
    "put the raw storeString of myself on aStream"
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5228
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5229
    self do:[:thisChar |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5230
        (thisChar == $') ifTrue:[aStream nextPut:thisChar].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5231
        aStream nextPut:thisChar
3578
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5232
    ]
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5233
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5234
    "Modified: / 15.6.1998 / 17:21:17 / cg"
46dc8399fdf8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3537
diff changeset
  5235
    "Created: / 15.6.1998 / 17:22:13 / cg"
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  5236
!
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  5237
15788
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5238
printXmlQuotedOn:aStream
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5239
    "convert aString to a valid XML string 
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5240
     that can be used for attributes, text, comments an PIs
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5241
     TODO: care for 16bit UNICODE string and escape chars ..."
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5242
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5243
    self do:[:eachChar |
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5244
        eachChar == $< ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5245
            aStream nextPutAll:'&lt;'     "mapping needed for xml text"
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5246
        ] ifFalse:[ eachChar == $& ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5247
            aStream nextPutAll:'&amp;'    "mapping needed for all"
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5248
        ] ifFalse:[ eachChar == $> ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5249
            aStream nextPutAll:'&gt;'     "mapping needed for comments"
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5250
        ] ifFalse:[ eachChar == $' ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5251
            aStream nextPutAll:'&apos;'   "mapping needed for attributes"
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5252
        ] ifFalse:[ eachChar == $" ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5253
            aStream nextPutAll:'&quot;'   "mapping needed for attributes"
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5254
        ] ifFalse:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5255
            |codePoint|
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5256
            codePoint := eachChar codePoint.
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5257
            (codePoint < 16r20 or:[codePoint >= 16r7F]) ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5258
                aStream nextPutAll:'&#'.
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5259
                codePoint printOn:aStream.
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5260
                aStream nextPut:$;.
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5261
        ] ifFalse:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5262
            aStream nextPut:eachChar
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5263
        ]]]]]]
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5264
    ].
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5265
!
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5266
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5267
printXmlTextQuotedOn:aStream
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5268
    "convert aString to a valid XML string 
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5269
     that can be used for XML text.
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5270
     Here line formatting characters are not escaped.
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5271
     TODO: care for 16bit UNICODE string and escape chars ..."
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5272
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5273
    self do:[:eachChar |
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5274
        eachChar == $< ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5275
            aStream nextPutAll:'&lt;'     "mapping needed for xml text"
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5276
        ] ifFalse:[ eachChar == $& ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5277
            aStream nextPutAll:'&amp;'    "mapping needed for all"
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5278
"/        ] ifFalse:[ eachChar == $> ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5279
"/            aStream nextPutAll:'&gt;'     "mapping needed for comments"
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5280
"/        ] ifFalse:[ eachChar == $' ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5281
"/            aStream nextPutAll:'&apos;'   "mapping needed for attributes"
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5282
"/        ] ifFalse:[ eachChar == $" ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5283
"/            aStream nextPutAll:'&quot;'   "mapping needed for attributes"
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5284
        ] ifFalse:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5285
            |codePoint|
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5286
            codePoint := eachChar codePoint.
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5287
            ((codePoint < 16r20 and:[codePoint ~~ 9 and:[codePoint ~~ 10 and:[codePoint ~~ 13]]])
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5288
             or:[codePoint >= 16r7F]) ifTrue:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5289
                aStream nextPutAll:'&#'.
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5290
                codePoint printOn:aStream.
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5291
                aStream nextPut:$;.
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5292
        ] ifFalse:[
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5293
            aStream nextPut:eachChar
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5294
        ]]]"/]]]
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5295
    ].
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5296
!
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5297
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  5298
printfWith:arg1 with:arg2 with:arg3 with:arg4 with:arg5
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5299
    "Format and print the receiver with <argI> formatted in C style,
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  5300
     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
  5301
     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
  5302
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  5303
    ^ self printf:(Array with:arg1 with:arg2 with:arg3 with:arg4 with:arg5)
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  5304
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  5305
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5306
     Transcript showCR:('%d %05x %08o %b' printfWith:123 with:234 with:345 with:123)
12171
Claus Gittinger <cg@exept.de>
parents: 12170
diff changeset
  5307
    "
15788
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5308
!
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5309
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5310
xmlQuotedPrintString
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5311
    "convert aString to a valid XML string 
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5312
     that can be used for attributes, text, comments an PIs
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5313
     TODO: care for 16bit UNICODE string and escape chars ..."
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5314
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5315
    ^ String streamContents:[:s|
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5316
        self printXmlQuotedOn:s
ca8a67212c35 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15773
diff changeset
  5317
    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5318
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5319
11955
1230c6953d49 comments
Claus Gittinger <cg@exept.de>
parents: 11919
diff changeset
  5320
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5321
!CharacterArray methodsFor:'queries'!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5322
4429
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  5323
bitsPerCharacter
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5324
    "return the underlying strings bitsPerCharacter
4429
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  5325
     (i.e. is it a regular String or a TwoByteString)"
564b0fd9168e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4410
diff changeset
  5326
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  5327
    |string max|
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  5328
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  5329
    (string := self string) ~~ self ifTrue:[
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  5330
        ^ string bitsPerCharacter
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  5331
    ].
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  5332
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  5333
    max := 8.
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  5334
    self do:[:eachCharacter |
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  5335
        max := max max:(eachCharacter bitsPerCharacter)
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5336
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5337
    ^ max
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5338
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5339
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5340
     'hello' bitsPerCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5341
     'hello' asText allBold bitsPerCharacter
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5342
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5343
!
8457
a00113e2f7bd +contains8BitCharacter
penk
parents: 8395
diff changeset
  5344
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5345
continuesWith:aString startingAt:startIndex
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5346
    "return true, if the receiver beginning at startIndex
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5347
     contains the characters in aString."
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5348
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5349
    |sz  "{Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5350
     idx "{Class: SmallInteger }"|
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5351
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5352
    sz := aString size.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5353
    idx := startIndex.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5354
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5355
    1 to:sz do:[:i |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5356
        (self at:idx) ~~ (aString at:i) ifTrue:[^ false].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5357
        idx := idx + 1
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5358
    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5359
    ^ true
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5360
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5361
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5362
     'hello world' continuesWith:'world' startingAt:6
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5363
     'hello world' continuesWith:'world' startingAt:7
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5364
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5365
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5366
    "Created: 12.5.1996 / 15:46:40 / cg"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5367
    "Modified: 26.7.1996 / 19:08:36 / cg"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5368
!
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5369
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5370
countWords
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5371
    "return the number of words, which are separated by separators"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5372
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5373
    |tally "{ Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5374
     start "{ Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5375
     mySize "{ Class: SmallInteger }"
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5376
     stop ch|
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5377
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5378
    tally := 0.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5379
    start := 1.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5380
    mySize := self size.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5381
    [start <= mySize] whileTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5382
        ch := self at:start.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5383
        ch isSeparator ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5384
            start := start + 1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5385
        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5386
            stop := self indexOfSeparatorStartingAt:start.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5387
            (stop == 0) ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5388
                stop := mySize + 1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5389
            ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5390
            tally := tally + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5391
            start := stop
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5392
        ]
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5393
    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5394
    ^ tally
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5395
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5396
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5397
     'hello world isnt this nice' countWords'
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5398
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5399
!
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  5400
11788
eea1835a1b7b added #defaultElement
Stefan Vogel <sv@exept.de>
parents: 11774
diff changeset
  5401
defaultElement
eea1835a1b7b added #defaultElement
Stefan Vogel <sv@exept.de>
parents: 11774
diff changeset
  5402
    ^ Character space
eea1835a1b7b added #defaultElement
Stefan Vogel <sv@exept.de>
parents: 11774
diff changeset
  5403
!
eea1835a1b7b added #defaultElement
Stefan Vogel <sv@exept.de>
parents: 11774
diff changeset
  5404
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5405
encoding
1311
367f740d21e7 commentary
Claus Gittinger <cg@exept.de>
parents: 1308
diff changeset
  5406
    "return the strings encoding, as a symbol.
7982
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  5407
     Here, by default, we assume unicode-encoding.
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  5408
     Notice, that iso8859-1 is a true subset of unicode,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5409
     and that singleByteStrings are therefore both unicode AND
7982
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  5410
     8859-1 encoded."
0412a26c4621 encoding now unicode
Claus Gittinger <cg@exept.de>
parents: 7977
diff changeset
  5411
14168
fb2ae640ab02 formatting
Stefan Vogel <sv@exept.de>
parents: 14150
diff changeset
  5412
    ^ #unicode
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5413
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5414
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  5415
hasChangeOfEmphasis
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  5416
    "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
  5417
     i.e. any non-normal (=emphasized) characters"
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  5418
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  5419
    ^ false
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  5420
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  5421
    "Created: 12.5.1996 / 12:31:39 / cg"
1375
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  5422
!
f035bb7468f5 additions for new Text class
Claus Gittinger <cg@exept.de>
parents: 1333
diff changeset
  5423
7995
8ddbb403d67b +hasIcon and hasImage for LabelAndIcon compatibility
Claus Gittinger <cg@exept.de>
parents: 7991
diff changeset
  5424
hasIcon
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  5425
    "for LabelAndIcon compatibility"
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  5426
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5427
    ^ false
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5428
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5429
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5430
hasImage
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5431
    "for LabelAndIcon compatibility"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5432
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5433
    ^ false
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5434
!
7995
8ddbb403d67b +hasIcon and hasImage for LabelAndIcon compatibility
Claus Gittinger <cg@exept.de>
parents: 7991
diff changeset
  5435
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5436
heightOn:aGC
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5437
    "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
  5438
6528
cf4e93b8104b #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 6523
diff changeset
  5439
    ^ (aGC font onDevice:aGC device) heightOf:self
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5440
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5441
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5442
     'hello world' heightOn:(View new)
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5443
    "
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5444
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5445
    "Created: 12.5.1996 / 20:09:29 / cg"
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5446
    "Modified: 12.5.1996 / 20:32:05 / cg"
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5447
!
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5448
15773
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5449
isKeyword
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5450
    "return true, if the receiver is a keyword message selector"
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5451
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5452
    ^ self includes:$:
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5453
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5454
    "
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5455
     #at:put: isKeyword
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5456
     #at: isKeyword
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5457
     #+ isKeyword
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5458
     #size isKeyword
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5459
    "
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5460
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5461
    "Created: / 1.11.1997 / 12:34:55 / cg"
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5462
    "Modified: / 1.11.1997 / 12:36:37 / cg"
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5463
!
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5464
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5465
isLowercaseFirst
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5466
    "return true, if the first character is a lowercase character."
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5467
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5468
    ^ self size ~~ 0 and:[ self first isLowercase ]
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5469
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5470
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5471
     'helloWorld' isLowercaseFirst
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5472
     'HelloWorld' isLowercaseFirst
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5473
    "
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5474
!
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5475
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5476
isUppercaseFirst
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5477
    "return true, if the first character is an uppercase character."
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5478
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5479
    ^ self size ~~ 0 and:[ self first isUppercase ]
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5480
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5481
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5482
     'helloWorld' isUppercaseFirst
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  5483
     'HelloWorld' isUppercaseFirst
11828
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5484
    "
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5485
!
b7fc2ba68121 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11823
diff changeset
  5486
15773
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5487
keywords
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5488
    "assuming the receiver is a keyword message selector,
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5489
     return the individual keywords (i.e. break it up at colons)
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5490
     and return these as a collection.
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5491
     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
  5492
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5493
    |coll s part|
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5494
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5495
    coll := OrderedCollection new.
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5496
    s := ReadStream on:self.
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5497
    [s atEnd] whileFalse:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5498
        part := s through:$:.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5499
        coll add:part
15773
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5500
    ].
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5501
    ^ coll asArray
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5502
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5503
    "
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5504
     #at:put: keywords
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5505
     #at: keywords
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5506
     #+ keywords
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5507
     #size keywords
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5508
    "
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5509
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5510
    "Modified (Comment): / 30-06-2011 / 17:46:21 / cg"
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5511
!
af4f1efbe9f0 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15750
diff changeset
  5512
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5513
knownAsSymbol
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5514
    "for now, only single character strings are allowed as symbols.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5515
     This method is redefined in String."
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5516
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5517
    ^ false
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5518
!
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5519
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5520
leftIndent
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5521
    "if the receiver starts with spaces, return the number of spaces
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5522
     at the left - otherwise, return 0.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5523
     If the receiver consists of spaces only, return the receivers size."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5524
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5525
    |index "{Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5526
     end   "{Class: SmallInteger }"|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5527
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5528
    index := 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5529
    end := self size.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5530
    [index <= end] whileTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5531
        (self at:index) isSeparator ifFalse:[^ index - 1].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5532
        index := index + 1
8350
d9aaa0c937cb +isValidSmalltalkIdentifier
Claus Gittinger <cg@exept.de>
parents: 8347
diff changeset
  5533
    ].
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5534
    ^ end
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5535
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5536
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5537
     '    hello' leftIndent
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5538
     'foo      ' leftIndent
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5539
     '         ' leftIndent
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5540
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5541
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5542
    "Modified: 20.4.1996 / 19:28:43 / cg"
8350
d9aaa0c937cb +isValidSmalltalkIdentifier
Claus Gittinger <cg@exept.de>
parents: 8347
diff changeset
  5543
!
d9aaa0c937cb +isValidSmalltalkIdentifier
Claus Gittinger <cg@exept.de>
parents: 8347
diff changeset
  5544
10437
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5545
nameSpaceSelectorParts
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5546
    "Answer the namespace and baseSelector parts of a namespace selector.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5547
     Namespace selectors are those generated by sends from a method in a different
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5548
     namespace; they are prefixed by ':'<ns>'::'.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5549
     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
  5550
     Experimental"
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5551
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5552
    |nsPart selPart idx|
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5553
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5554
    (self at:1) == $: ifFalse:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5555
    idx := self indexOf:$: startingAt:3.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5556
    idx == 0 ifTrue:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5557
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5558
    (idx+2 > self size) ifTrue:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5559
    (self at:idx+1) == $: ifFalse:[^ Array with:'' with:self].
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5560
    nsPart := self copyFrom:2 to:idx-1.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5561
    selPart := self copyFrom:idx+2.
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5562
    ^ Array with:nsPart with:selPart
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5563
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5564
    "test:
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5565
     self assert:('+' nameSpaceSelectorParts) = #('' '+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5566
     self assert:(':+' nameSpaceSelectorParts) = #('' ':+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5567
     self assert:(':Foo:+' nameSpaceSelectorParts) = #('' ':Foo:+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5568
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5569
     self assert:(':Foo::+' nameSpaceSelectorParts) = #('Foo' '+').
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5570
     self assert:(':Foo::bar:baz:' nameSpaceSelectorParts) = #('Foo' 'bar:baz:').
10437
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5571
    "
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5572
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5573
    "Created: / 05-03-2007 / 17:16:58 / cg"
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5574
    "Modified: / 06-03-2007 / 11:51:15 / cg"
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5575
!
0dfcdb4359ce +nameSpaceSelectorParts
Claus Gittinger <cg@exept.de>
parents: 10431
diff changeset
  5576
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  5577
stringSpecies
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5578
    "return the underlying strings bitsPerCharacter
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  5579
     (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
  5580
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  5581
    |string|
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  5582
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5583
    string := self string.
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  5584
    string == self ifTrue:[^ self species].
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  5585
    ^ string stringSpecies
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  5586
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  5587
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5588
     'hello' stringSpecies
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5589
     'hello' asText allBold stringSpecies
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5590
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5591
!
8037
8cce25b1059c care for wide chars in asXXXFirst
Claus Gittinger <cg@exept.de>
parents: 8032
diff changeset
  5592
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  5593
widthFrom:startIndex to:endIndex on:aGC
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  5594
    "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
  5595
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  5596
    ^ (aGC font onDevice:aGC device) widthOf:self from:startIndex to:endIndex
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  5597
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  5598
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5599
     'hello world' widthFrom:1 to:5 on:(View new)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5600
     'hello' widthOn:(View new)
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  5601
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5602
!
6653
2e77e6bd99a1 +withoutEmphasis:
Michael Beyl <mb@exept.de>
parents: 6643
diff changeset
  5603
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5604
widthOn:aGC
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5605
    "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
  5606
6528
cf4e93b8104b #on: -> #onDevice
Claus Gittinger <cg@exept.de>
parents: 6523
diff changeset
  5607
    ^ (aGC font onDevice:aGC device) widthOf:self
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5608
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5609
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5610
     'hello world' widthOn:(View new)
1388
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5611
    "
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5612
e47b4b894530 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1381
diff changeset
  5613
    "Created: 12.5.1996 / 20:09:29 / cg"
2554
309ee6707322 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2551
diff changeset
  5614
    "Modified: 17.4.1997 / 12:50:23 / cg"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5615
! !
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5616
17191
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  5617
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5618
!CharacterArray methodsFor:'special string converting'!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5619
16759
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5620
asUnixFilenameString
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5621
    "return a new string consisting of receiver's characters
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5622
     with all \-characters replaced by /-characters.
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5623
     If there are no backslashes, return the original"
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5624
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5625
    ^ self copyReplaceAll:$\ with:$/ ifNone:self
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5626
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5627
    "
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5628
     'hello\world' asUnixFilenameString
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5629
    "
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5630
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5631
    "Modified: / 18.7.1998 / 22:53:02 / cg"
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5632
!
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  5633
14768
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5634
expandPlaceholders:escapeCharacter with:argArrayOrDictionary
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5635
    "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
  5636
     escape character to be used (typically $$ or $% are effectively used).
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5637
     Return a copy of the receiver, where all %i escapes are
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5638
     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5639
     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5640
     in the new string 'hello world; how is this'.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5641
     As an extension, the argument may also be a dictionary, providing
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5642
     values for symbolic keys.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5643
     In this case, %a .. %z and %(...) are also allowed.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5644
     (%1..%9 require a numeric key in the dictionary, however)
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5645
     To get a '%' character, use a '%%'-escape.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5646
     To get an integer-indexed placeHolder followed by another digit,
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5647
     or an index > 9, you must use %(digit).
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5648
     See also bindWith:... for VisualAge compatibility."
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5649
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5650
    |stream|
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5651
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5652
    stream := (TextStream ? WriteStream) on:(self species new:self size + 20).
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5653
    self expandPlaceholders:escapeCharacter with:argArrayOrDictionary on:stream.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5654
    ^ stream contents.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5655
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5656
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5657
    "
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5658
     'hello %1' expandPlaceholdersWith:#('world')
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5659
     'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this')
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5660
     'hello %2; how is %1' expandPlaceholdersWith:#('world' 'this')
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5661
     '%1 plus %2 gives %3 ' expandPlaceholdersWith:#(4 5 9)
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5662
     '%%(1)0 gives %(1)0' expandPlaceholdersWith:#(123)
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5663
     '%%10 gives %10' expandPlaceholdersWith:#(123)
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5664
     '%%(10) gives %(10)' expandPlaceholdersWith:#(123)
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5665
     '%test gives %1' expandPlaceholdersWith:#(123)
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5666
     'bla %1 bla' expandPlaceholdersWith:{ 'hello' allBold }
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5667
     'bla %1 bla' expandPlaceholdersWith:{ 'hello' }
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5668
    "
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5669
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5670
    "
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5671
     |dict|
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5672
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5673
     dict := Dictionary new.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5674
     dict at:1 put:'one'.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5675
     dict at:$a put:'AAAAA'.
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5676
     dict at:$b put:[ Time now ].
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5677
     dict at:'foo' put:[ Date today ].
15196
116b287d6d89 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15167
diff changeset
  5678
     'hello $1 %a $b %(foo) $foo ' expandPlaceholders:$$ with:dict.       
116b287d6d89 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15167
diff changeset
  5679
     'hello $1 %a $b %(foo) $foo ' expandPlaceholders:$% with:dict.       
14768
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5680
    "
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5681
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5682
    "Modified: 1.7.1997 / 00:53:24 / cg"
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5683
!
1da413c31c24 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14765
diff changeset
  5684
14765
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5685
expandPlaceholders:escapeCharacter with:argArrayOrDictionary on:aStream
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5686
    "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
  5687
     escape character to be used (typically $$ or $% are effectively used).
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5688
     Write the receiver to aStream, where all %i escapes are
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5689
     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5690
     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5691
     in the new string 'hello world; how is this'.
17192
dc09b5644f84 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17191
diff changeset
  5692
     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
  5693
     In this case, %a .. %z and %(...) are also allowed.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5694
     (%1..%9 require a numeric key in the dictionary, however)
17192
dc09b5644f84 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17191
diff changeset
  5695
     Also, the values in argArrayOrDictionary may be blocks.
14765
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5696
     To get a '%' character, use a '%%'-escape.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5697
     To get an integer-indexed placeHolder followed by another digit,
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5698
     or an index > 9, you must use %(digit).
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5699
     See also bindWith:... for VisualAge compatibility.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5700
     Use %<cr> to insert a CR and %<tab> to insert a TAB."
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5701
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5702
    |next v key
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5703
     idx   "{ SmallInteger }"
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5704
     idx2  "{ SmallInteger }"
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5705
     start "{ SmallInteger }"
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5706
     stop  "{ SmallInteger }"|
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5707
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5708
    stop := self size.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5709
    start := 1.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5710
    [start <= stop] whileTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5711
        idx := self indexOf:escapeCharacter startingAt:start.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5712
        (idx == 0 or:[idx == stop]) ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5713
            aStream nextPutAll:self startingAt:start to:stop.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5714
            ^ self.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5715
        ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5716
        "found an escapeCharacter"
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5717
        aStream nextPutAll:self startingAt:start to:(idx - 1).
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5718
        next := self at:(idx + 1).
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5719
        (next == escapeCharacter) ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5720
            aStream nextPut:escapeCharacter.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5721
        ] ifFalse:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5722
            next == $< ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5723
                idx2 := self indexOf:$> startingAt:idx+2.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5724
                key := self copyFrom:idx+2 to:idx2-1.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5725
                idx := idx2 - 1.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5726
                key := key asSymbolIfInterned.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5727
                (#(cr tab nl return lf ff null) includesIdentical:key) ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5728
                    aStream nextPut:(Character perform:key).
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5729
                ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5730
            ] ifFalse:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5731
                next isDigit ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5732
                    v := argArrayOrDictionary at:(next digitValue) ifAbsent:''
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5733
                ] ifFalse:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5734
                    next == $( ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5735
                        idx2 := self indexOf:$) startingAt:idx+2.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5736
                        key := self copyFrom:idx+2 to:idx2-1.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5737
                        idx := idx2 - 1.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5738
                        (argArrayOrDictionary includesKey:key) ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5739
                            v := argArrayOrDictionary at:key
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5740
                        ] ifFalse:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5741
                            key := key asSymbolIfInterned ? key.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5742
                            (argArrayOrDictionary includesKey:key) ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5743
                                v := argArrayOrDictionary at:key
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5744
                            ] ifFalse:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5745
                                (key size == 1 and:[ argArrayOrDictionary includesKey:(key at:1)]) ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5746
                                    v := argArrayOrDictionary at:(key at:1)
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5747
                                ] ifFalse:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5748
                                    key isNumeric ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5749
                                        key := Integer readFrom:key onError:nil.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5750
                                    ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5751
                                    v := argArrayOrDictionary at:key ifAbsent:''
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5752
                                ]
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5753
                            ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5754
                        ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5755
                    ] ifFalse:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5756
                        (next isLetter and:[argArrayOrDictionary isSequenceable not "is a Dictionary"]) ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5757
                            "so next is a non-numeric single character."
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5758
                            v := argArrayOrDictionary
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5759
                                    at:next
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5760
                                    ifAbsent:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5761
                                        "try symbol instead of character"
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5762
                                        argArrayOrDictionary
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5763
                                            at:next asSymbol
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5764
                                            ifAbsent:[String with:escapeCharacter with:next].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5765
                                 ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5766
                        ] ifFalse:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5767
                            v := String with:$% with:next.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5768
                        ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5769
                    ]
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5770
                ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5771
                "/ v notNil ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5772
                    v isBlock ifTrue:[
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5773
                        v := v value
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5774
                    ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5775
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5776
                    v printOn:aStream.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5777
                "/ ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5778
            ]
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5779
        ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5780
        start := idx + 2
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5781
    ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5782
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5783
    "
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5784
     String streamContents:[:s|
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5785
        'hello %1' expandPlaceholders:$% with:#('world') on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5786
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5787
        'hello $1; how is $2' expandPlaceholders:$$ with:#('world' 'this') on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5788
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5789
        'hello %2; how is %1' expandPlaceholders:$% with:#('world' 'this') on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5790
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5791
        '%1 plus %2 gives %3 ' expandPlaceholders:$% with:#(4 5 9) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5792
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5793
        '%%(1)0 gives %(1)0' expandPlaceholders:$% with:#(123) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5794
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5795
        '%%10 gives %10' expandPlaceholders:$% with:#(123) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5796
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5797
        '%%(10) gives %(10) %<cr>%<tab>next line' expandPlaceholders:$% with:#(123) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5798
        s cr.
16452
2c3e39ef6902 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16295
diff changeset
  5799
        '%%test gives %test' expandPlaceholders:$% with:#(123) on:s.
2c3e39ef6902 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16295
diff changeset
  5800
        s cr.
2c3e39ef6902 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16295
diff changeset
  5801
        '|%%<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
  5802
     ]  
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5803
    "
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5804
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5805
    "
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5806
     |dict|
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5807
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5808
     dict := Dictionary new.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5809
     dict at:1 put:'one'.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5810
     dict at:$a put:'AAAAA'.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5811
     dict at:$b put:[ Time now ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5812
     String streamContents:[:s|
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5813
         'hello $1 $a $b' expandPlaceholders:$$ with:dict on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5814
     ].
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5815
    "
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5816
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5817
    "Modified: / 18-11-2010 / 15:43:28 / cg"
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5818
!
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5819
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5820
expandPlaceholdersWith:argArrayOrDictionary
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5821
    "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
  5822
     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5823
     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5824
     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
  5825
     As an extension, the argument may also be a dictionary, providing
7313
9be9b35f5370 comment
Claus Gittinger <cg@exept.de>
parents: 7312
diff changeset
  5826
     values for symbolic keys.
4842
0086acd80497 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  5827
     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
  5828
     (%1..%9 require a numeric key in the dictionary, however)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5829
     To get a '%' character, use a '%%'-escape.
7313
9be9b35f5370 comment
Claus Gittinger <cg@exept.de>
parents: 7312
diff changeset
  5830
     To get an integer-indexed placeHolder followed by another digit,
9be9b35f5370 comment
Claus Gittinger <cg@exept.de>
parents: 7312
diff changeset
  5831
     or an index > 9, you must use %(digit).
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5832
     See also bindWith:... for VisualAge compatibility."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5833
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5834
    |stream|
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5835
12601
afe93f0d48c5 changed: #expandPlaceholdersWith:
Claus Gittinger <cg@exept.de>
parents: 12519
diff changeset
  5836
    stream := (TextStream ? WriteStream) on:(self species new:self size + 20).
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5837
    self expandPlaceholdersWith:argArrayOrDictionary on:stream.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5838
    ^ stream contents.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5839
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5840
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5841
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5842
     'hello %1' expandPlaceholdersWith:#('world')
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5843
     'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this')
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5844
     'hello %2; how is %1' expandPlaceholdersWith:#('world' 'this')
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5845
     '%1 plus %2 gives %3 ' expandPlaceholdersWith:#(4 5 9)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5846
     '%%(1)0 gives %(1)0' expandPlaceholdersWith:#(123)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5847
     '%%10 gives %10' expandPlaceholdersWith:#(123)
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  5848
     '%%(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
  5849
     '%test gives %1' expandPlaceholdersWith:#(123)
11028
cb1ee3ddd91a expandPlaceHolders: care fr Text with emphasis
Claus Gittinger <cg@exept.de>
parents: 11018
diff changeset
  5850
     'bla %1 bla' expandPlaceholdersWith:{ 'hello' allBold }
cb1ee3ddd91a expandPlaceHolders: care fr Text with emphasis
Claus Gittinger <cg@exept.de>
parents: 11018
diff changeset
  5851
     'bla %1 bla' expandPlaceholdersWith:{ 'hello' }
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  5852
    "
1026
455c9f609f4d care for 16bit strings in expandPlaceHolders
Claus Gittinger <cg@exept.de>
parents: 1025
diff changeset
  5853
4410
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  5854
    "
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  5855
     |dict|
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  5856
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  5857
     dict := Dictionary new.
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  5858
     dict at:1 put:'one'.
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  5859
     dict at:$a put:'AAAAA'.
8794
a5df33935142 nindWith supports blocks in the value dictionary
Claus Gittinger <cg@exept.de>
parents: 8710
diff changeset
  5860
     dict at:$b put:[ Time now ].
12316
3e78905d70a9 comment/format in: #expandPlaceholdersWith:
Claus Gittinger <cg@exept.de>
parents: 12196
diff changeset
  5861
     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
  5862
     '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
  5863
    "
2bdc0c89a42e enhanced #exapndPlaceHolders, to allow for a dictionary arg
Claus Gittinger <cg@exept.de>
parents: 4409
diff changeset
  5864
2737
9f29aecea39d care for % at end in expandPlaceHolders.
Claus Gittinger <cg@exept.de>
parents: 2736
diff changeset
  5865
    "Modified: 1.7.1997 / 00:53:24 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5866
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  5867
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5868
expandPlaceholdersWith:argArrayOrDictionary on:aStream
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5869
    "write the receiver to aStream, where all %i escapes are
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5870
     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5871
     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5872
     in the new string 'hello world; how is this'.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5873
     As an extension, the argument may also be a dictionary, providing
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5874
     values for symbolic keys.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5875
     In this case, %a .. %z and %(...) are also allowed.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5876
     (%1..%9 require a numeric key in the dictionary, however)
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5877
     To get a '%' character, use a '%%'-escape.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5878
     To get an integer-indexed placeHolder followed by another digit,
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5879
     or an index > 9, you must use %(digit).
10935
7142eab95639 #expandPlaceHoldersWith:in:
Stefan Vogel <sv@exept.de>
parents: 10929
diff changeset
  5880
     See also bindWith:... for VisualAge compatibility.
10939
d0ca31c1d1e9 #expandPlaceHoldersWith: handle %<cr> %<tab> etc
Stefan Vogel <sv@exept.de>
parents: 10935
diff changeset
  5881
     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
  5882
14765
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5883
    ^ self expandPlaceholders:$% with:argArrayOrDictionary on:aStream
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5884
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5885
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5886
     String streamContents:[:s|
14765
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5887
        'hello %1' expandPlaceholdersWith:#('world') on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5888
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5889
        'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5890
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5891
        'hello %2; how is %1' expandPlaceholdersWith:#('world' 'this') on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5892
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5893
        '%1 plus %2 gives %3 ' expandPlaceholdersWith:#(4 5 9) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5894
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5895
        '%%(1)0 gives %(1)0' expandPlaceholdersWith:#(123) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5896
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5897
        '%%10 gives %10' expandPlaceholdersWith:#(123) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5898
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5899
        '%%(10) gives %(10) %<cr>%<tab>next line' expandPlaceholdersWith:#(123) on:s.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5900
        s cr.
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5901
        '%test gives %1' expandPlaceholdersWith:#(123) on:s.
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5902
     ]
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5903
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5904
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5905
    "
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5906
     |dict|
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5907
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5908
     dict := Dictionary new.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5909
     dict at:1 put:'one'.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5910
     dict at:$a put:'AAAAA'.
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5911
     dict at:$b put:[ Time now ].
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5912
     String streamContents:[:s|
14765
c1769994b460 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14681
diff changeset
  5913
         'hello %1 %a %b' expandPlaceholdersWith:dict on:s.
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5914
     ].
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5915
    "
13008
a27647c36b31 changed: #expandPlaceholdersWith:on:
Claus Gittinger <cg@exept.de>
parents: 12925
diff changeset
  5916
13138
d2eb0eba5907 changed: #expandPlaceholdersWith:on:
Claus Gittinger <cg@exept.de>
parents: 13137
diff changeset
  5917
    "Modified: / 18-11-2010 / 15:43:28 / cg"
10906
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5918
!
6468fe197af0 CharacterArray>>#expandMacrosWith:on:
Stefan Vogel <sv@exept.de>
parents: 10903
diff changeset
  5919
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5920
firstLine
14405
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  5921
    "return the first line of a multiline string"
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  5922
1d0d99a95bba comment/format in:7 methods
Claus Gittinger <cg@exept.de>
parents: 14168
diff changeset
  5923
    ^ self asCollectionOfSubCollectionsSeparatedBy:(Character cr) do:[:line | ^ line].
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5924
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5925
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5926
     'hello' firstLine
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5927
     '1\2\3' withCRs firstLine
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  5928
     '\1\2\3' withCRs firstLine
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5929
    "
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5930
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  5931
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5932
tokensBasedOn:aCharacter
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5933
    "this is an ST-80 alias for the ST/X method
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  5934
        asCollectionOfSubstringsSeparatedBy:"
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5935
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5936
    ^ self asCollectionOfSubstringsSeparatedBy:aCharacter
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5937
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5938
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5939
     'hello:world:isnt:this nice' tokensBasedOn:$:
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5940
     'foo,bar,baz' tokensBasedOn:$,
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5941
     '/etc/passwd' asFilename readStream nextLine tokensBasedOn:$:
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5942
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5943
!
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5944
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5945
withCEscapes
16863
6235ea959712 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16855
diff changeset
  5946
    "return a new string consisting of receiver's characters
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5947
     with all special and unprintable characters replaced by \X-character escapes.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5948
     (similar to the way C-language literal Strings are represented).
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5949
     The resulting string will contain only 7-bit ascii characters.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5950
     Emphasis is not supported.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5951
     The following escapes are generated:
16785
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  5952
        \'      single quote character
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  5953
        \dQuote double quote character
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  5954
        \r      return character
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5955
        \r      return character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5956
        \n      newline character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5957
        \t      tab character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5958
        \\      the \ character itself
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5959
        \xnn    two digit hex number defining the characters ascii value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5960
        \unnnn  four digit hex number defining the characters ascii value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5961
        \Unnnnnnnn  eight digit hex number defining the characters ascii value
16863
6235ea959712 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16855
diff changeset
  5962
     This is the opposite of withoutCEscapes.
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  5963
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  5964
     Sigh: this is named completely wrong (opposite naming of withCRs/witoutCRs),
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  5965
           but it cannot be changed easily, as these methods are already used heavily
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5966
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5967
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5968
    |anyEscapeNeeded out seq|
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5969
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5970
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5971
     first, check if any escape is needed and return the receiver unchanged if not
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5972
    "
16785
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  5973
    anyEscapeNeeded := self 
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  5974
                        contains:[:ch | 
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  5975
                            ((ch codePoint between:32 and:126) not
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  5976
                            or:[ch == $' or:[ch == $"]]) 
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  5977
                        ].
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5978
    anyEscapeNeeded ifFalse:[ ^ self ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5979
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5980
    self hasChangeOfEmphasis ifTrue:[ self error:'emphasis not supported' ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5981
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5982
    out := WriteStream on:(String new:self size-1).
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5983
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5984
    self do:[:ch |
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5985
        |cp|
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5986
16785
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  5987
        (ch == $' or:[ch == $"]) ifTrue:[
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  5988
            out nextPut:$\.
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  5989
            out nextPut:ch.
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  5990
        ] ifFalse:[
16785
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  5991
            (ch codePoint between:32 and:126) ifTrue:[
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  5992
                out nextPut:ch
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  5993
            ] ifFalse:[
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  5994
                ch == Character return ifTrue:[
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  5995
                    seq := '\r'
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  5996
                ] ifFalse:[ ch == Character nl ifTrue:[
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  5997
                    seq := '\n'
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  5998
                ] ifFalse:[ ch == Character tab ifTrue:[
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  5999
                    seq := '\t'
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6000
                ] ifFalse:[ ch == $\ ifTrue:[
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6001
                    seq := '\\'
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6002
                ] ifFalse:[ 
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6003
                    cp := ch codePoint.
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6004
                    cp <= 16rFF ifTrue:[
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6005
                        seq := '\x' , (cp printStringRadix:16 padTo:2)   
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6006
                    ] ifFalse:[
16785
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6007
                        cp <= 16rFFFF ifTrue:[
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6008
                            seq := '\u' , (cp printStringRadix:16 padTo:4)   
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6009
                        ] ifFalse:[
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6010
                            seq := '\U',(cp printStringRadix:16 padTo:8)
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6011
                        ]
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6012
                    ]
16785
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6013
                ]]]].
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6014
                out nextPutAll:seq
58e758125b3a class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16759
diff changeset
  6015
            ].
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6016
        ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6017
    ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6018
    ^ out contents
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6019
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6020
    "
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6021
     'hello\n\tworld' withoutCEscapes. 
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6022
     'hello\nworld\na\n\tnice\n\t\tstring' withoutCEscapes withCEscapes.
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6023
     ('hello ',(Character value:16r1234),' world') withCEscapes 
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6024
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6025
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6026
    "Created: / 25-01-2012 / 11:08:16 / cg"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6027
!
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6028
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6029
withCRs
17205
b266cb703584 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17192
diff changeset
  6030
    "return a new string consisting of the receiver's characters
16757
da377b8c79f5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16738
diff changeset
  6031
     with all \-characters replaced by cr-characters.
da377b8c79f5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16738
diff changeset
  6032
     If there are no backslashes, return the original"
da377b8c79f5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16738
diff changeset
  6033
16759
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  6034
    ^ self copyReplaceAll:$\ with:(Character cr) ifNone:self
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6035
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6036
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6037
     'hello\world' withCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6038
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6039
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6040
    "Modified: / 18.7.1998 / 22:53:02 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6041
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6042
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6043
withEscapes
15405
ef2e23943761 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15400
diff changeset
  6044
    <resource: #obsolete>
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6045
    "has been renamed; the name withEscapes is misleading"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6046
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6047
    self obsoleteMethodWarning:'use withoutCEscapes'.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6048
    ^ self withoutCEscapes.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6049
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6050
    "Modified: / 25-01-2012 / 10:42:30 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6051
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6052
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6053
withMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6054
    "return a copy of the receiver with all match characters escaped
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6055
     by $\ characters (to be usable as a match string).
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6056
     Return the receiver, if there are none."
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6057
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  6058
    |in out c escape|
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  6059
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  6060
    escape := self class matchEscapeCharacter.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6061
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6062
    in := self readStream.
7986
715c72e62d58 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7982
diff changeset
  6063
    out := WriteStream on:(self species new:self size).
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6064
    [in atEnd] whileFalse:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6065
        c := in next.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6066
        (c == escape or:['*[#' includes:c]) ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6067
            out nextPut:$\.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6068
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6069
        out nextPut:c.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6070
    ].
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6071
    ^ out contents.
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6072
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6073
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6074
     '*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6075
     '\*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6076
     '*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6077
     '\\*foo' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6078
     'foo*' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6079
     'foo\*' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6080
     'foo\' withMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6081
     'f*o*o' withMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6082
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6083
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6084
    "Modified: 2.4.1997 / 18:13:04 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6085
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6086
14992
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6087
withSeparatorsCompacted
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6088
    "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
  6089
     Preserves a leading/trailing space."
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6090
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6091
    ^ self species streamContents:[:s |
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6092
        |skipping|
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6093
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6094
        skipping := false.
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6095
        1 to:self size do:[:idx |
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6096
            |char|
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6097
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6098
            char := self at:idx.
14993
bbabce626acf class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14992
diff changeset
  6099
            char isSeparator ifFalse:[
bbabce626acf class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14992
diff changeset
  6100
                s nextPut:char.
bbabce626acf class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14992
diff changeset
  6101
                skipping := false.
bbabce626acf class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14992
diff changeset
  6102
            ] ifTrue:[
bbabce626acf class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14992
diff changeset
  6103
                skipping ifFalse:[
14992
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6104
                    s nextPut:(Character space).
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6105
                    skipping := true
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6106
                ].
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6107
            ]
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6108
        ]
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6109
    ]
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6110
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6111
    "
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6112
     'hello wwww'         withSeparatorsCompacted  
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6113
     'hello    wwww'      withSeparatorsCompacted  
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6114
     '  hello wwww'       withSeparatorsCompacted  
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6115
     '  hello wwww   '    withSeparatorsCompacted  
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6116
     '  hello    wwww   ' withSeparatorsCompacted  
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6117
     'hel   lo www   w'   withSeparatorsCompacted  
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6118
    "
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6119
!
ee87364e3bf5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14865
diff changeset
  6120
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6121
withTabs
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  6122
    "return a string consisting of the receivers characters
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  6123
     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
  6124
     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
  6125
     otherwise a new string is returned.
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6126
     Limitation: only the very first spaces are replaced
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  6127
                 (i.e. if the receiver contains newLine characters,
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  6128
                  no tabs are inserted after those lineBreaks)"
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6129
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6130
    |idx   "{ SmallInteger }"
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6131
     nTabs "{ SmallInteger }"
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6132
     newString|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6133
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6134
    idx := self findFirst:[:c | (c ~~ Character space)].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6135
    nTabs := (idx-1) // 8.
5815
4acdd87a77d4 // can return negative numbers.
Stefan Vogel <sv@exept.de>
parents: 5795
diff changeset
  6136
    nTabs <= 0 ifTrue:[^ self].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6137
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6138
    "any tabs"
15523
4323024f2f04 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15433
diff changeset
  6139
    newString := self species new:(self size - (nTabs * 7)).
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6140
    newString atAll:(1 to:nTabs) put:(Character tab).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6141
    newString replaceFrom:(nTabs + 1) with:self startingAt:(nTabs * 8 + 1).
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6142
    ^ newString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6143
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6144
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6145
     '12345678901234567890' withTabs
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6146
     '       8901234567890' withTabs
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6147
     '        901234567890' withTabs
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6148
     '               67890' withTabs
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6149
     '                7890' withTabs
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6150
     '                 890' withTabs
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6151
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6152
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6153
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6154
withTabsExpanded
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  6155
    "return a string consisting of the receivers characters,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6156
     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
  6157
     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
  6158
     otherwise a new string is returned.
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  6159
     This does handle multiline strings."
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6160
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6161
    ^ self withTabsExpanded:8
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6162
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6163
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6164
     ('1' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6165
     ('12345' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6166
     ('123456' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6167
     ('1234567' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6168
     ('12345678' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6169
     ('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
  6170
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6171
     (String with:Character tab
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6172
             with:Character tab
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6173
             with:$1) withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6174
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6175
     (String with:Character tab
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6176
             with:$1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6177
             with:Character tab
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6178
             with:$2) withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6179
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6180
     (String with:Character tab
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6181
             with:$1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6182
             with:Character cr
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6183
             with:Character tab
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6184
             with:$2) withTabsExpanded
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6185
    "
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6186
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6187
    "Modified: 12.5.1996 / 13:05:10 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6188
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6189
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6190
withTabsExpanded:numSpaces
5741
3a6086774d38 added #withTabsExpanded: (i.e. arg to specify tab-column width)
Claus Gittinger <cg@exept.de>
parents: 5739
diff changeset
  6191
    "return a string consisting of the receivers characters,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6192
     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
  6193
     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
  6194
     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
  6195
     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
  6196
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6197
    |col    "{ SmallInteger }"
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6198
     str ch
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6199
     dstIdx "{ SmallInteger }"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6200
     newSz  "{ SmallInteger }"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6201
     sz "{ SmallInteger }"
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6202
     hasEmphasis e|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6203
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6204
    (self includes:(Character tab)) ifFalse:[^ self].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6205
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6206
    sz := self size.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6207
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6208
    "/ count the new size first, instead of
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6209
    "/ multiple resizing (better for large strings)
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6210
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6211
    col := 1. newSz := 0.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6212
    1 to:sz do:[:srcIdx |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6213
        ch := self at:srcIdx.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6214
        ch == Character tab ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6215
            col := col + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6216
            newSz := newSz + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6217
            ch == Character cr ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6218
                col := 1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6219
            ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6220
        ] ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6221
            (col \\ numSpaces) to:numSpaces do:[:ii |
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6222
                newSz := newSz + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6223
                col := col + 1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6224
            ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6225
        ]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6226
    ].
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6227
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6228
    str := self species new:newSz.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6229
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6230
    hasEmphasis := self hasChangeOfEmphasis.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6231
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6232
    col := 1. dstIdx := 1.
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6233
    1 to:sz do:[:srcIdx |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6234
        ch := self at:srcIdx.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6235
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6236
        ch == Character tab ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6237
            col := col + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6238
            ch == Character cr ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6239
                col := 1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6240
            ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6241
            hasEmphasis ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6242
                e := self emphasisAt:srcIdx.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6243
                str emphasisAt:dstIdx put:e
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6244
            ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6245
            str at:dstIdx put:ch.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6246
            dstIdx := dstIdx + 1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6247
        ] ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6248
            (col \\ numSpaces) to:numSpaces do:[:ii |
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6249
                str at:dstIdx put:Character space.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6250
                dstIdx := dstIdx + 1.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6251
                col := col + 1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6252
            ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6253
        ]
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6254
    ].
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6255
    ^ str
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6256
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6257
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6258
     ('1' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6259
     ('1' , Character tab asString , 'x') withTabsExpanded:4
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6260
     ('12345' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6261
     ('123456' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6262
     ('1234567' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6263
     ('12345678' , Character tab asString , 'x') withTabsExpanded
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6264
     ('123456789' , Character tab asString , 'x') withTabsExpanded
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  6265
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6266
     (String with:Character tab
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6267
             with:Character tab
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6268
             with:$1) withTabsExpanded
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6269
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6270
     (String with:Character tab
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6271
             with:$1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6272
             with:Character tab
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6273
             with:$2) withTabsExpanded
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  6274
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  6275
     (String with:Character tab
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6276
             with:$1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6277
             with:Character cr
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6278
             with:Character tab
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6279
             with:$2) withTabsExpanded
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6280
    "
735
362ce9e28d89 expandTabs now handles multiline strings
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
  6281
1381
c920ec16a98f Text fixes
Claus Gittinger <cg@exept.de>
parents: 1375
diff changeset
  6282
    "Modified: 12.5.1996 / 13:05:10 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6283
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6284
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6285
withoutAllSpaces
16855
c088880a590b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16785
diff changeset
  6286
    "return a copy of the receiver with all whitespace removed"
c088880a590b class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16785
diff changeset
  6287
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6288
    ^ self asCollectionOfWords asStringWith:''.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6289
"/    |col string|
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6290
"/
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6291
"/    col := self asCollectionOfWords.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6292
"/    string := String new.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6293
"/    col do:[:el |
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6294
"/       string := string,el
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6295
"/    ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6296
"/    ^string
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6297
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6298
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6299
     'hello wwww'  withoutAllSpaces
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6300
     'hel   lo www   w'  withoutAllSpaces
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6301
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6302
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6303
    "Modified: / 18.7.1998 / 22:53:08 / cg"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6304
!
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6305
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6306
withoutCEscapes
15628
4fe28df5850d class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15605
diff changeset
  6307
    "return a new string consisting of receiver's characters
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6308
     with all \X-character escapes replaced by corresponding-characters.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6309
     (similar to the way C-language Strings are converted).
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6310
     The following escapes are supported:
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6311
        \r      return character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6312
        \n      newline character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6313
        \b      backspace character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6314
        \f      formfeed character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6315
        \t      tab character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6316
        \e      escape character
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6317
        \\      the \ character itself
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6318
        \nnn    three digit octal number defining the characters ascii value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6319
        \xnn    two digit hex number defining the characters ascii value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6320
        \unnnn  four digit hex number defining the characters unicode value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6321
        \Unnnnnnnn  eight digit hex number defining the characters unicode value
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6322
        \other  other
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6323
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6324
     Notice, that \' is NOT a valid escape, since the general syntax of
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6325
     string constants is not affected by this method.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6326
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6327
     Although easily implementable, this is NOT done automatically
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6328
     by the compiler (due to a lack of a language standard for this).
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6329
     However, the compiler may detect sends ot #withEscapes to string literals
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6330
     and place a modified string constant into the binary/byte-code.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6331
     Therefore, no runtime penalty will be payed for using these escapes.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6332
     (not in pre 2.11 versions)
16863
6235ea959712 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16855
diff changeset
  6333
6235ea959712 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16855
diff changeset
  6334
     This is the opposite of withCEscapes.
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6335
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6336
     Sigh: this is named completely wrong (opposite naming of withCRs/witoutCRs),
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6337
           but it cannot be changed easily, as these methods are already used heavily
13987
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6338
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6339
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6340
    |val     "{ SmallInteger }"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6341
     in out nextChar nDigits|
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6342
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6343
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6344
     first, see if there is any escape; if not, return the receiver unchanged
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6345
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6346
    (self includes:$\) ifFalse:[^ self ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6347
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6348
    self hasChangeOfEmphasis ifTrue:[ self error:'emphasis not supported' ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6349
    out := CharacterWriteStream on:(String new:self size - 1).
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6350
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6351
    in := ReadStream on:self.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6352
    [in atEnd] whileFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6353
        nextChar := in next.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6354
        nextChar == $\ ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6355
            in atEnd ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6356
            ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6357
                nextChar := in next.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6358
                nextChar == $r ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6359
                    nextChar := Character return
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6360
                ] ifFalse:[ nextChar == $n ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6361
                    nextChar := Character nl
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6362
                ] ifFalse:[ nextChar == $b ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6363
                    nextChar := Character backspace
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6364
                ] ifFalse:[ nextChar == $f ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6365
                    nextChar := Character newPage
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6366
                ] ifFalse:[ nextChar == $t ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6367
                    nextChar := Character tab
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6368
                ] ifFalse:[ nextChar == $e ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6369
                    nextChar := Character esc
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6370
                ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6371
                    nextChar == $0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6372
                        val := 0.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6373
                        nextChar := in peek.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6374
                        nDigits := 1.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6375
                        [nextChar notNil and:[nextChar isDigit and:[nDigits <= 3]]] whileTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6376
                            val := (val * 8) + nextChar digitValue.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6377
                            nextChar := in nextPeek.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6378
                            nDigits := nDigits + 1.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6379
                        ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6380
                        nextChar := Character value:val.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6381
                    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6382
                        val := 0.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6383
                        nextChar == $x ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6384
                            2 timesRepeat:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6385
                                nextChar := in next.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6386
                                val := (val * 16) + nextChar digitValue.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6387
                            ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6388
                            nextChar := Character value:val.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6389
                        ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6390
                            nextChar == $u ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6391
                                4 timesRepeat:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6392
                                    nextChar := in next.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6393
                                    val := (val * 16) + nextChar digitValue.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6394
                                ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6395
                                nextChar := Character value:val.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6396
                            ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6397
                                nextChar == $U ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6398
                                    8 timesRepeat:[
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6399
                                        nextChar := in next.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6400
                                        val := (val * 16) + nextChar digitValue.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6401
                                    ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6402
                                    nextChar := Character value:val.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6403
                                ]
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6404
                            ]
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6405
                        ]
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6406
                    ]
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6407
                ]]]]]].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6408
            ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6409
        ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6410
        out nextPut:nextChar.
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6411
    ].
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6412
    ^ out contents
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6413
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6414
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6415
     'hello world' withoutCEscapes         
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6416
     'hello\world' withoutCEscapes         
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6417
     'hello\world\' withoutCEscapes        
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6418
     'hello world\' withoutCEscapes        
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6419
     'hello\tworld' withoutCEscapes        
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6420
     'hello\nworld\na\n\tnice\n\t\tstring' withoutCEscapes
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6421
     'hello\tworld\n' withoutCEscapes   
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6422
     'hello\010world' withoutCEscapes   
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6423
     'hello\r\nworld' withoutCEscapes   
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6424
     'hello\r\n\x08world' withoutCEscapes 
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6425
     '0\x080' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6426
     '0\u12340' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6427
     '0\U123456780' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6428
     '0\0a' withoutCEscapes     
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6429
     '0\00a' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6430
     '0\000a' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6431
     '0\0000a' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6432
     '0\00000a' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6433
     '0\03770' withoutCEscapes       
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6434
    "
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6435
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6436
    "Created: / 25-01-2012 / 10:41:44 / cg"
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6437
!
Claus Gittinger <cg@exept.de>
parents: 13882
diff changeset
  6438
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6439
withoutCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6440
    "return a new collection consisting of receivers elements
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6441
     with all cr-characters replaced by \-characters.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6442
     This is the reverse operation of withCRs."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6443
16759
347181805b43 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16757
diff changeset
  6444
    ^ self copyReplaceAll:(Character cr) with:$\ ifNone:self
12319
18b80c2ce1e3 oops #withoutSeparators #withoutSpaces were noops
Claus Gittinger <cg@exept.de>
parents: 12317
diff changeset
  6445
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6446
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6447
     'hello
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6448
world' withoutCRs
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6449
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6450
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6451
    "Modified: / 18.7.1998 / 22:53:08 / cg"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6452
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6453
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6454
withoutLeadingSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6455
    "return a copy of myself without leading separators.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6456
     Notice: this does remove tabs, newline or any other whitespace.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6457
     Returns an empty string, if the receiver consist only of whitespace."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6458
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6459
    |index|
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6460
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6461
    index := self indexOfNonSeparatorStartingAt:1.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6462
    index ~~ 0 ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6463
        index == 1 ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6464
            ^ self
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6465
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6466
        ^ self copyFrom:index
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6467
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6468
    ^ ''
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6469
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6470
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6471
     '    foo    ' withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6472
     'foo    '     withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6473
     '    foo'     withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6474
     '       '     withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6475
     'foo'         withoutLeadingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6476
     ('  ' , Character tab asString , ' foo   ') withoutLeadingSeparators inspect
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6477
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6478
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6479
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6480
withoutMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6481
    "return a copy of the receiver with all $\ removed or
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6482
     the receiver, if there are none."
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6483
5342
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  6484
    |in out c escape|
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  6485
5010cea0ffd4 match-escape character definition in one place
Claus Gittinger <cg@exept.de>
parents: 5316
diff changeset
  6486
    escape := self class matchEscapeCharacter.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6487
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6488
    in := self readStream.
8222
f2c454a9a038 replaced '' writeStream by String writeStream
Claus Gittinger <cg@exept.de>
parents: 8124
diff changeset
  6489
    out := self species writeStream.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6490
    [in atEnd] whileFalse:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6491
        c := in next.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6492
        c == escape ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6493
            in atEnd ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6494
                c := in next.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6495
            ]
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6496
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6497
        out nextPut:c.
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6498
    ].
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6499
    ^ out contents.
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6500
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6501
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6502
     '*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6503
     '\*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6504
     '*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6505
     '\\*foo' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6506
     'foo*' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6507
     'foo\*' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6508
     'foo\' withoutMatchEscapes
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6509
     'f\*o\*o' withoutMatchEscapes
4117
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6510
    "
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6511
1b98af571a04 comments;
Claus Gittinger <cg@exept.de>
parents: 3987
diff changeset
  6512
    "Modified: 30.6.1997 / 13:40:23 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6513
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6514
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6515
withoutPrefix:aString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6516
    "if the receiver startsWith aPrefix, return a copy without it.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6517
     Otherwise return the receiver"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6518
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6519
    (self startsWith:aString) ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6520
        ^ self copyFrom:aString size + 1
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6521
    ].
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6522
    ^ self
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6523
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6524
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6525
     'helloworld' withoutPrefix:'hello'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6526
     'helloworld' withoutPrefix:'foo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6527
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6528
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6529
10671
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  6530
withoutQuotes
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6531
    "/ remove quotes ($" and $') from the front and end of myself (if matching)"
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6532
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6533
    |firstChar|
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6534
17024
f0ef2620b98b class: CharacterArray
ca
parents: 17021
diff changeset
  6535
    self isEmpty ifTrue:[^ self].
f0ef2620b98b class: CharacterArray
ca
parents: 17021
diff changeset
  6536
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6537
    firstChar := self first.
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6538
    ((firstChar == $") or:[firstChar == $']) ifFalse:[^ self].
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6539
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6540
    self last == firstChar ifTrue:[
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6541
        ^ self copyFrom:2 to:(self size-1)
10671
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  6542
    ].
17000
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6543
    ^ self
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6544
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6545
    "/
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6546
    "/ '"hello"' withoutQuotes     
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6547
    "/ '''hello''' withoutQuotes   
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6548
    "/ 'hello' withoutQuotes 
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6549
    "/ '"hello' withoutQuotes 
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6550
    "/ 'hello"' withoutQuotes  
28e08401d7ae class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16899
diff changeset
  6551
    "/
10671
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  6552
!
90b197d23f1b new: #withoutQuotes
Stefan Vogel <sv@exept.de>
parents: 10569
diff changeset
  6553
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6554
withoutSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6555
    "return a copy of myself without leading and trailing whitespace.
4156
3079a5a94617 comments
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
  6556
     (but whiteSpace in-between is preserved)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6557
     Whitespace is space, tab, newline, formfeed.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6558
     Use withoutSpaces, if you want to remove spaces only."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6559
12319
18b80c2ce1e3 oops #withoutSeparators #withoutSpaces were noops
Claus Gittinger <cg@exept.de>
parents: 12317
diff changeset
  6560
    ^ self trimForWhich:[:ch | ch isSeparator]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6561
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6562
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6563
     '    foo    ' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6564
     '    foo' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6565
     'foo    ' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6566
     '       ' withoutSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6567
     ('  foo' , Character tab asString , '    ') withoutSeparators inspect
12319
18b80c2ce1e3 oops #withoutSeparators #withoutSpaces were noops
Claus Gittinger <cg@exept.de>
parents: 12317
diff changeset
  6568
     '    foo    ' asUnicode16String withoutSeparators
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6569
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6570
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6571
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6572
withoutSpaces
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6573
    "return a copy of myself without leading and trailing spaces.
4156
3079a5a94617 comments
Claus Gittinger <cg@exept.de>
parents: 4117
diff changeset
  6574
     (but spaces in-between are preserved)
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6575
     Notice: this does NOT remove tabs, newline or any other whitespace.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6576
     Use withoutSeparators for this."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6577
12319
18b80c2ce1e3 oops #withoutSeparators #withoutSpaces were noops
Claus Gittinger <cg@exept.de>
parents: 12317
diff changeset
  6578
    ^ self trimForWhich:[:ch | ch == Character space]
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6579
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6580
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6581
     '    foo    ' withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6582
     'foo    '     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6583
     '    foo'     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6584
     '       '     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6585
     'a     b'     withoutSpaces
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6586
     ('  foo' , Character tab asString , '    ') withoutSpaces inspect
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6587
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6588
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6589
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6590
withoutTrailingSeparators
915
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  6591
    "return a copy of myself without trailing separators.
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  6592
     Notice: this does remove tabs, newline or any other whitespace.
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  6593
     Returns an empty string, if the receiver consist only of whitespace."
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  6594
12188
0e8bdcb8ab41 added: #withoutLeading:
fm
parents: 12177
diff changeset
  6595
    ^ self withoutTrailingForWhich:[:ch | ch isSeparator]
915
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  6596
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  6597
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6598
     '    foo    ' withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6599
     'foo    '     withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6600
     '    foo'     withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6601
     '       '     withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6602
     'foo'         withoutTrailingSeparators
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6603
     ('  ' , Character tab asString , ' foo   ') withoutTrailingSeparators inspect
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6604
     ('   foo' , Character tab asString) withoutTrailingSeparators inspect
915
1ac1c7e942f4 added withoutTrailingSeparators
Claus Gittinger <cg@exept.de>
parents: 828
diff changeset
  6605
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6606
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6607
17191
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6608
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6609
!CharacterArray methodsFor:'substring searching'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6610
15055
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6611
findRangeOfString:subString
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6612
    "find a substring. if found, return the start- and endIndex;
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6613
     if not found, return an empty interval."
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6614
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6615
    ^ self rangeOfSubCollection:subString startingAt:1 ifAbsent:[0 to:-1] caseSensitive:true
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6616
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6617
    "
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6618
     'hello world' findRangeOfString:'llo'
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6619
     'hello world' findRangeOfString:'ole'
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6620
    "
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6621
!
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6622
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6623
findString:subString
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6624
    "find a substring. if found, return the index;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6625
     if not found, return 0."
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
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:0 caseSensitive:true
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6628
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
     'hello world' findString:'llo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6631
     'hello world' findString:'ole'
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
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6634
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6635
findString:subString caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6636
    "find a substring. if found, return the index;
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6637
     if not found, return 0."
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6638
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6639
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:0 caseSensitive:caseSensitive
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6640
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6641
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6642
     'hello world' findString:'LLo' caseSensitive:true
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6643
     'hello world' findString:'LLo' caseSensitive:false
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6644
    "
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6645
!
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6646
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6647
findString:subString ifAbsent:exceptionBlock
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6648
    "find a substring. If found, return the index;
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6649
     if not found, return the result of evaluating exceptionBlock."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6650
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6651
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:exceptionBlock caseSensitive:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6652
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6653
11018
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6654
findString:subString ignoreCase:ignoreCase
15734
d89a293a56e7 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15712
diff changeset
  6655
    <resource: #obsolete>
11018
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6656
    "find a substring. if found, return the index;
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6657
     if not found, return 0."
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6658
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6659
    ^ self indexOfSubCollection:subString startingAt:1 ifAbsent:0 caseSensitive:ignoreCase not
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6660
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6661
    "
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6662
     'hello world' findString:'LLo' ignoreCase:false
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6663
     'hello world' findString:'LLo' ignoreCase:true
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6664
    "
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6665
!
01c9038023b3 +findString:ignoreCase:
Claus Gittinger <cg@exept.de>
parents: 10940
diff changeset
  6666
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6667
findString:subString startingAt:index
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6668
    "find a substring, starting at index. if found, return the index;
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6669
     if not found, return 0."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6670
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6671
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:0 caseSensitive:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6672
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6673
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6674
     'hello yello' findString:'llo' startingAt:1
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6675
     'hello yello' findString:'llo' startingAt:5
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6676
     'hello yello' findString:'llo' startingAt:15
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6677
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6678
!
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6679
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6680
findString:subString startingAt:index ifAbsent:exceptionBlock
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6681
    "find a substring, starting at index. if found, return the index;
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6682
     if not found, return the result of evaluating exceptionBlock."
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6683
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6684
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:true
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6685
!
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6686
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6687
findString:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive
10929
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  6688
    "find a substring, starting at index. if found, return the index;
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  6689
     if not found, return the result of evaluating exceptionBlock."
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  6690
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  6691
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  6692
!
7f025abfa145 *** empty log message ***
fm
parents: 10906
diff changeset
  6693
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6694
includesString:aString
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6695
    "return true, if a substring is contained in the receiver"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6696
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6697
    ^ (self indexOfSubCollection:aString startingAt:1 ifAbsent:0 caseSensitive:true) ~~ 0
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6698
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6699
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6700
     'hello world' includesString:'hel'
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6701
     'hello world' includesString:'rld'
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6702
     'hello world' includesString:'llo'
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6703
     'hello world' includesString:'LLO'
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6704
     'hello world' includesString:''
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6705
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6706
!
9191
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  6707
7f1797f8d0a3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9190
diff changeset
  6708
includesString:aString caseSensitive:caseSensitive
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6709
    "return true, if a substring is contained in the receiver"
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6710
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6711
    ^ (self indexOfSubCollection:aString startingAt:1 ifAbsent:0 caseSensitive:caseSensitive) ~~ 0
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6712
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6713
    "
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6714
     'hello world' includesString:'hel' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6715
     'hello world' includesString:'HEL' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6716
     'hello world' includesString:'HEL' caseSensitive:false
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6717
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6718
     'hello world' includesString:'wor' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6719
     'hello world' includesString:'WOR' caseSensitive:true
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6720
     'hello world' includesString:'WOR' caseSensitive:false
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6721
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6722
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6723
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6724
indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6725
    "find a substring, starting at index. if found, return the index;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6726
     if not found, return the result of evaluating exceptionBlock.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6727
     This is a q&d hack - not very efficient"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6728
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6729
    ^ self indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:true.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6730
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6731
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6732
indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6733
    "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
  6734
     if not found, return the result of evaluating exceptionBlock.
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6735
     This is a q&d hack - not very efficient"
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6736
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6737
    |firstChar found
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6738
     startIndex "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6739
     subSize    "{ Class: SmallInteger }"
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6740
     mySize     "{ Class: SmallInteger }"
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6741
     runIdx     "{ Class: SmallInteger }"
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6742
     tester|
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6743
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6744
    subSize := subString size.
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  6745
    subSize == 0 ifTrue:[
15433
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6746
        subString isString ifFalse:[
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6747
           self error:'non string argument' mayProceed:true.
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6748
        ].
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6749
        "empty string does not match"
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6750
        ^ 0.
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6751
        "empty string matches"
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6752
"/        ^ index
6122
a98958f1c85f handle non-string arg to indexOfSubString:
Claus Gittinger <cg@exept.de>
parents: 6119
diff changeset
  6753
    ].
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6754
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6755
    mySize := self size.
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6756
    firstChar := subString at:1.
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6757
    caseSensitive ifTrue:[
15433
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6758
        tester := [:c1 :c2 | c1 = c2 ].
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6759
        startIndex := self indexOf:firstChar startingAt:index.
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6760
    ] ifFalse:[
15433
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6761
        tester := [:c1 :c2 | c1 sameAs: c2 ].
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6762
        startIndex := self findFirst:[:c | c sameAs:firstChar] startingAt:index.
9087
9e28a6168468 case-insensitive search cleanup
Claus Gittinger <cg@exept.de>
parents: 9058
diff changeset
  6763
    ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6764
    [startIndex == 0] whileFalse:[
15433
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6765
        runIdx := startIndex.
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6766
        found := true.
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6767
        1 to:subSize do:[:i |
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6768
            runIdx > mySize ifTrue:[
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6769
                found := false
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6770
            ] ifFalse:[
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6771
                (tester value:(subString at:i) value:(self at:runIdx)) ifFalse:[
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6772
                    found := false
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6773
                ]
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6774
            ].
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6775
            runIdx := runIdx + 1
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6776
        ].
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6777
        found ifTrue:[
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6778
            ^ startIndex
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6779
        ].
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6780
        caseSensitive ifTrue:[
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6781
            startIndex := self indexOf:firstChar startingAt:(startIndex + 1)
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6782
        ] ifFalse:[
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6783
            startIndex := self findFirst:[:c | c sameAs:firstChar] startingAt:(startIndex + 1).
426f079817b4 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15431
diff changeset
  6784
        ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6785
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  6786
    ^ exceptionBlock value
1005
4507487e0be6 more on encoding/decoding (still unfinished)
Claus Gittinger <cg@exept.de>
parents: 997
diff changeset
  6787
4507487e0be6 more on encoding/decoding (still unfinished)
Claus Gittinger <cg@exept.de>
parents: 997
diff changeset
  6788
    "Modified: 23.2.1996 / 15:35:15 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6789
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6790
17191
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6791
indexOfSubCollection:subString startingAt:index ifAbsent:exceptionBlock caseSensitive:caseSensitive ignoreDiacritics:ignoreDiacritics
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6792
    "find a substring, starting at index. if found, return the index;
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6793
     if not found, return the result of evaluating exceptionBlock.
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6794
     This is a q&d hack - not very efficient 
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6795
     (see implementation in string, for a much faster algorithm)"
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6796
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6797
    |firstChar found
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6798
     startIndex "{ Class: SmallInteger }"
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6799
     subSize    "{ Class: SmallInteger }"
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6800
     mySize     "{ Class: SmallInteger }"
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6801
     runIdx     "{ Class: SmallInteger }"
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6802
     tester charMap firstCharMapped findNextIndex|
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6803
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6804
    subSize := subString size.
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6805
    subSize == 0 ifTrue:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6806
        subString isString ifFalse:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6807
           self error:'non string argument' mayProceed:true.
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6808
        ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6809
        "empty string does not match"
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6810
        ^ 0.
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6811
        "empty string matches"
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6812
"/        ^ index
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6813
    ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6814
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6815
    mySize := self size.
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6816
    firstChar := subString at:1.
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6817
    ignoreDiacritics ifTrue:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6818
        caseSensitive ifTrue:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6819
            charMap := [:ch | ch asLowercase withoutDiacritics].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6820
        ] ifFalse:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6821
            charMap := [:ch | ch withoutDiacritics].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6822
        ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6823
        tester := [:c1 :c2 | (charMap value:c1) = (charMap value:c2) ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6824
        firstCharMapped := (charMap value:firstChar).
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6825
        findNextIndex := [:index | self findFirst:[:ch | (charMap value:ch) = firstCharMapped] startingAt:index].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6826
    ] ifFalse:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6827
        caseSensitive ifTrue:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6828
            tester := [:c1 :c2 | c1 = c2 ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6829
            findNextIndex := [:index | self indexOf:firstChar startingAt:index].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6830
        ] ifFalse:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6831
            tester := [:c1 :c2 | c1 sameAs: c2 ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6832
            findNextIndex := [:index | self findFirst:[:c | c sameAs:firstChar] startingAt:index].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6833
        ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6834
    ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6835
    startIndex := findNextIndex value:index.
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6836
    [startIndex == 0] whileFalse:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6837
        runIdx := startIndex.
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6838
        found := true.
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6839
        1 to:subSize do:[:i |
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6840
            runIdx > mySize ifTrue:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6841
                found := false
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6842
            ] ifFalse:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6843
                (tester value:(subString at:i) value:(self at:runIdx)) ifFalse:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6844
                    found := false
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6845
                ]
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6846
            ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6847
            runIdx := runIdx + 1
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6848
        ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6849
        found ifTrue:[
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6850
            ^ startIndex
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6851
        ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6852
        startIndex := findNextIndex value:(startIndex + 1)
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6853
    ].
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6854
    ^ exceptionBlock value
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6855
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6856
    "
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6857
     'bla depot bla dépots' indexOfSubCollection:'dep' startingAt:1 ifAbsent:0 caseSensitive:false ignoreDiacritics:true. 5
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6858
     'bla depot bla dépots' indexOfSubCollection:'dep' startingAt:6 ifAbsent:0 caseSensitive:false ignoreDiacritics:true. 0
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6859
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6860
     'bla depot bla dépots' indexOfSubCollection:'dep' startingAt:1 ifAbsent:0 caseSensitive:false ignoreDiacritics:false. 5
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6861
     'bla depot bla dépots' indexOfSubCollection:'dep' startingAt:6 ifAbsent:0 caseSensitive:false ignoreDiacritics:false. 0
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6862
    "
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6863
!
4af58fcf0955 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17183
diff changeset
  6864
15055
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6865
rangeOfSubCollection:subString startingAt:start ifAbsent:exceptionValue caseSensitive:caseSensitive
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6866
    "find a substring. if found, return the start- and endIndex;
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6867
     if not found, return the value of exceptionValue."
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6868
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6869
    |i|
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6870
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6871
    i := self indexOfSubCollection:subString startingAt:start ifAbsent:0 caseSensitive:caseSensitive.
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6872
    i == 0 ifTrue:[
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6873
        ^ exceptionValue value
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6874
    ].
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6875
    ^ i to:(i + subString size - 1)
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6876
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6877
    "
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6878
     'hello world' findRangeOfString:'llo'
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6879
     'hello world' findRangeOfString:'ole'
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6880
    "
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6881
!
99961534feb1 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15035
diff changeset
  6882
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6883
restAfter:keyword withoutSeparators:strip
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6884
    "compare the left of the receiver with keyword,
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6885
     if it matches return the right.
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6886
     Finally, if strip is true, remove whiteSpace.
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6887
     This method is used to match and extract lines of the form:
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6888
        something: rest
759
908363ce8a32 interest is written with one 'r' (shame on me)
Claus Gittinger <cg@exept.de>
parents: 735
diff changeset
  6889
     where we are interested in rest, but only if the receiver string
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6890
     begins with something.
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6891
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6892
     You may wonder why such a specialized method exists here
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6893
     - this is so common when processing mailboxes,
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6894
     rcs files, nntp/pop3 responses, that is was considered worth
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6895
     a special method here to avoid having the code below a hundred
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6896
     times in variuos places."
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6897
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6898
    |rest|
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6899
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6900
    (self startsWith:keyword) ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6901
        rest := self copyFrom:(keyword size + 1).
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6902
        strip ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6903
            rest := rest withoutSeparators
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6904
        ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6905
        ^ rest
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6906
    ].
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6907
    ^ nil
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6908
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6909
    "
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6910
     'foo: hello world' restAfter:'foo:' withoutSeparators:true
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6911
     'funny: something' restAfter:'foo:' withoutSeparators:true
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6912
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6913
     'foo:     hello world    ' restAfter:'foo:' withoutSeparators:true
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  6914
     'foo:     hello world    ' restAfter:'foo:' withoutSeparators:false
651
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6915
    "
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6916
2093b018dc3a added restAfter:withoutSeparators:
Claus Gittinger <cg@exept.de>
parents: 650
diff changeset
  6917
    "Created: 25.11.1995 / 11:04:18 / cg"
15213
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6918
!
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6919
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6920
splitAtString:subString withoutSeparators:strip
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6921
    "If the receiver is of the form:
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6922
        <left><subString><right>
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6923
     return a collection containing left and right only.
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6924
     If strip is true, remove whiteSpace in the returned substrings."
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6925
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6926
    |idx left right|
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6927
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6928
    (idx := self indexOfSubCollection:subString) ~~ 0 ifTrue:[
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6929
        left := self copyTo:(idx - 1).
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6930
        right := self copyFrom:(idx + subString size).
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6931
        strip ifTrue:[
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6932
            left := left withoutSeparators.
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6933
            right := right withoutSeparators.
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6934
        ].
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6935
        ^ StringCollection with:left with:right
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6936
    ].
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6937
    self error:'substring not present in receiver' mayProceed:true.
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6938
    ^ self
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6939
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6940
    "
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6941
     'hello -> world' splitAtString:'->' withoutSeparators:false  
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6942
     'hello -> world' splitAtString:'->' withoutSeparators:true  
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6943
     'hello -> ' splitAtString:'->' withoutSeparators:true       
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6944
     'hello > error' splitAtString:'->' withoutSeparators:true 
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6945
    "
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6946
d7fb4e3b0c32 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 15196
diff changeset
  6947
    "Created: 25.11.1995 / 11:04:18 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6948
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6949
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6950
!CharacterArray methodsFor:'testing'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6951
15829
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  6952
contains8BitCharacters
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  6953
    "return true, if the underlying string contains 8BitCharacters (or widers)
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  6954
     (i.e. if it is non-ascii)"
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  6955
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  6956
    |string|
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  6957
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  6958
    (string := self string) ~~ self ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6959
        ^ string contains8BitCharacters
15829
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  6960
    ].
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  6961
    ^ self contains:[:aCharacter | aCharacter codePoint > 16r7F ].
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  6962
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  6963
    "
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  6964
     'hello' contains8BitCharacters
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  6965
     'hello' asText allBold contains8BitCharacters
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  6966
    "
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  6967
!
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  6968
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6969
isAlphaNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6970
    "return true, if the receiver is some alphanumeric word;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6971
     i.e. consists of a letter followed by letters or digits."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6972
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6973
    self size == 0 ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6974
        "mhmh what is this ?"
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  6975
        ^ false
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
    (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
  6978
    ^ self conform:[:char | char isLetterOrDigit].
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  6979
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  6980
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6981
     'helloWorld' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6982
     'foo1234' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6983
     'f1234' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6984
     '1234' isAlphaNumeric
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  6985
     '+' isAlphaNumeric
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  6986
    "
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  6987
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  6988
    "Modified: / 13-10-2006 / 12:53:49 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  6989
!
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  6990
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  6991
isBinarySelector
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  6992
    "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
  6993
     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
  6994
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  6995
    |binopChars|
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  6996
13332
329707312282 changed: #isBinarySelector
Stefan Vogel <sv@exept.de>
parents: 13327
diff changeset
  6997
    (self size > Scanner maxBinarySelectorSize) ifTrue:[^ false].
9190
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  6998
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  6999
    binopChars := Scanner binarySelectorCharacters.
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7000
    ^ (self conform:[:char | (binopChars includes:char)])
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7001
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7002
    "
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7003
     'foo:bar:' isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7004
     #foo:bar: isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7005
     'hello' isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7006
     '+' isBinarySelector
87dd824f1ebb comments in #asInteger
Claus Gittinger <cg@exept.de>
parents: 9151
diff changeset
  7007
     '|' isBinarySelector
8874
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  7008
     '?' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  7009
     ':' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  7010
     'a:' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  7011
     '->' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  7012
     '<->' isBinarySelector
f1fdda306d51 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8862
diff changeset
  7013
     '::' isBinarySelector
7482
e73c296fa7dc + isBinarySelector
Claus Gittinger <cg@exept.de>
parents: 7423
diff changeset
  7014
    "
e73c296fa7dc + isBinarySelector
Claus Gittinger <cg@exept.de>
parents: 7423
diff changeset
  7015
e73c296fa7dc + isBinarySelector
Claus Gittinger <cg@exept.de>
parents: 7423
diff changeset
  7016
    "Modified: 4.1.1997 / 14:16:14 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7017
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7018
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7019
isBlank
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7020
    "return true, if the receiver contains spaces only"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7021
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7022
    ^ (self contains:[:char | char ~~ Character space]) not
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7023
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7024
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7025
     '' isBlank
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7026
     '   a    ' isBlank
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7027
     '        ' isBlank
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7028
     '        ' asUnicode16String isBlank
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7029
    "
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7030
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7031
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7032
isKeywordSelector
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7033
    "return true, iff there are only alphanumeric or underline characters separated by colons.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7034
     Must end with a colon."
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7035
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7036
    |state|
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7037
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  7038
    state := #initial.
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7039
    self do:[:char |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7040
        (state == #initial or:[ state == #gotColon]) ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7041
            (char isLetter or:[ char == $_ ]) ifFalse:[^ false].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7042
            state := #gotCharacter.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7043
        ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7044
            char == $: ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7045
                state := #gotColon.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7046
            ] ifFalse:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7047
                (char isLetterOrDigit or:[char == $_]) ifFalse:[^ false].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7048
            ].
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7049
        ].
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7050
    ].
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7051
    ^ state == #gotColon.
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7052
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7053
    "
12177
63eb5d728567 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12171
diff changeset
  7054
     self assert:(':' isKeywordSelector not).
10903
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7055
     self assert:(':a' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7056
     self assert:('1:' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7057
     self assert:('a:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7058
     self assert:('_:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7059
     self assert:('_a:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7060
     self assert:('_1:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7061
     self assert:('_1::' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7062
     self assert:('_:_:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7063
     self assert:('a:b:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7064
     self assert:('aa:bb:' isKeywordSelector).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7065
     self assert:('aa:bb:a' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7066
     self assert:('1:2:' isKeywordSelector not).
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7067
    "
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7068
!
54a532a1558d isKeywordSelector
Claus Gittinger <cg@exept.de>
parents: 10883
diff changeset
  7069
10431
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7070
isNameSpaceSelector
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7071
    "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
  7072
     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
  7073
     For example, the #+ selector as seen by the Foo namespace would be actually #':Foo::+'.
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7074
     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
  7075
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7076
    |i|
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7077
16733
3f4622673efc comment/format only
Claus Gittinger <cg@exept.de>
parents: 16697
diff changeset
  7078
    (self at:1) == $: ifFalse:[^ false].
10431
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7079
    i := self indexOf:$: startingAt:2.
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7080
    i == 0 ifTrue:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7081
    self size <= (i+1) ifTrue:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7082
    (self at:i+1) == $: ifFalse:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7083
    (self at:i+2) == $: ifTrue:[^ false].
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7084
    "/ 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
  7085
    ^ true
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7086
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7087
    "test:
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7088
     self assert:('+' isNameSpaceSelector) not.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7089
     self assert:(':+' isNameSpaceSelector) not.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7090
     self assert:(':Foo:+' isNameSpaceSelector) not.
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7091
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7092
     self assert:(':Foo::+' isNameSpaceSelector).
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7093
     self assert:(':Foo::bar:baz:' isNameSpaceSelector).
10431
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7094
    "
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7095
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7096
    "Created: / 05-03-2007 / 11:35:31 / cg"
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7097
!
6b7467f6d2d2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10353
diff changeset
  7098
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7099
isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7100
    "return true, if the receiver is some numeric word;
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7101
     i.e. consists only of digits."
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7102
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7103
    self size == 0 ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7104
        ^ false
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7105
    ].
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  7106
    ^ self conform:[:char | char isDigit]
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7107
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7108
    "
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7109
     'helloWorld' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7110
     'foo1234' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7111
     'f1234' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7112
     '1234' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7113
     '+' isNumeric
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7114
    "
10093
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  7115
8cff5eca1c6f code cleanup: use #contains/#conform instead of explicit loop
Claus Gittinger <cg@exept.de>
parents: 10088
diff changeset
  7116
    "Modified: / 13-10-2006 / 12:54:12 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7117
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7118
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7119
isString
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7120
    "return true, if the receiver is some kind of string;
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7121
     true is returned here - redefinition of Object>>isString."
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7122
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7123
    ^ true
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7124
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7125
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7126
isUnarySelector
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7127
    "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
  7128
9471
7b1df2a2a2d7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9425
diff changeset
  7129
    ^ (self first isLetter or:[ self first == $_ ])
9845
361f4b5d7b19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9522
diff changeset
  7130
      and:[ self conform: [ :chr | chr isLetterOrDigit or:[chr == $_] ]]
361f4b5d7b19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9522
diff changeset
  7131
361f4b5d7b19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9522
diff changeset
  7132
    "Modified: / 13-09-2006 / 11:35:15 / cg"
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7133
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7134
14122
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7135
isUnicode16String
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7136
    ^ false
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7137
!
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7138
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7139
isUnicode32String
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7140
    ^ false
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7141
!
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7142
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7143
isUnicodeString
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7144
    ^ false
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7145
!
Stefan Vogel <sv@exept.de>
parents: 14054
diff changeset
  7146
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7147
isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7148
    "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
  7149
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7150
    |scanner tok|
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7151
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7152
    scanner := Compiler new.
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7153
    scanner source:(self readStream).
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  7154
    Parser parseErrorSignal handle:[:ex |
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7155
        tok := nil.
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  7156
    ] do:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7157
        tok := scanner nextToken.
11630
6db5956f188f isValidSmalltalkIdentifier: return true/false (catch parseError)
Claus Gittinger <cg@exept.de>
parents: 11565
diff changeset
  7158
    ].
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7159
    tok ~~ #Identifier ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7160
        ^ false
9230
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7161
    ].
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7162
    scanner tokenPosition == 1 ifFalse:[^ false].
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7163
    ^ scanner sourceStream atEnd.
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7164
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7165
    "
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7166
     'foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7167
     '1foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7168
     '_foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7169
     '_foo_bar_' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7170
     'foo ' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7171
     ' foo' isValidSmalltalkIdentifier
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7172
    "
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7173
!
9c12f7612321 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9195
diff changeset
  7174
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  7175
isWideString
15829
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7176
    |string|
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7177
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7178
    (string := self string) ~~ self ifTrue:[
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7179
        ^ string isWideString.
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7180
    ].
46b5bea19daa class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 15814
diff changeset
  7181
    ^ self contains:[:aCharacter | aCharacter codePoint > 16rFF].
14555
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  7182
!
2872ee4b234f class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14456
diff changeset
  7183
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7184
numArgs
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  7185
    "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
  7186
9038
d75b89570ec0 numArgs fixed (binOps can now be longer)
Claus Gittinger <cg@exept.de>
parents: 9019
diff changeset
  7187
    |binopChars|
d75b89570ec0 numArgs fixed (binOps can now be longer)
Claus Gittinger <cg@exept.de>
parents: 9019
diff changeset
  7188
d75b89570ec0 numArgs fixed (binOps can now be longer)
Claus Gittinger <cg@exept.de>
parents: 9019
diff changeset
  7189
    (self size <= Scanner maxBinarySelectorSize) ifTrue:[
16202
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7190
        binopChars := Scanner binarySelectorCharacters.
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7191
        (self conform:[:eachChar | (binopChars includes:eachChar)]) ifTrue:[
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7192
            ^ 1
f83742e87419 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 16200
diff changeset
  7193
        ].
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  7194
    ].
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  7195
    ^ self occurrencesOf:$:
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  7196
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  7197
    "
10703
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7198
     'foo:bar:' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7199
     #foo:bar: numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7200
     'hello' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7201
     '+' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7202
     '++' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7203
     '+++' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7204
     '|' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7205
     '?' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7206
     '_' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7207
     '_:' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7208
     '_:_:' numArgs
d1e981878c9c Work around stx bug when compiling hash
Stefan Vogel <sv@exept.de>
parents: 10698
diff changeset
  7209
     '<->' numArgs
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  7210
    "
2051
08fd6a693ee3 ask Scanner for valid binarySelector characters in numArgs
Claus Gittinger <cg@exept.de>
parents: 1978
diff changeset
  7211
10088
b8e69093ca13 code cleanup
Claus Gittinger <cg@exept.de>
parents: 10061
diff changeset
  7212
    "Modified: / 13-10-2006 / 11:52:33 / cg"
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7213
!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7214
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7215
partsIfSelector
14629
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7216
    "treat the receiver as a message selector, return a collection of parts.
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7217
     Notice: this is more tolerant than Smalltalk's syntax would suggest;
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7218
     especially it allows for empty keyword parts between colons.
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7219
     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
  7220
     degenerate selectors as appearing with objectiveC."
608
cd5ac440fa95 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 581
diff changeset
  7221
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7222
    |idx1 "{ Class: SmallInteger }"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7223
     coll idx2 sz|
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7224
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7225
    coll := OrderedCollection new.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7226
    idx1 := 1.
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7227
    sz := self size.
16245
d16f9c7d9428 [true] whileTrue: -> #loop
Stefan Vogel <sv@exept.de>
parents: 16212
diff changeset
  7228
    [
14629
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7229
        idx2 := self indexOf:$: startingAt:idx1.
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7230
        (idx2 == 0 or:[idx2 == sz]) ifTrue:[
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7231
            coll add:(self copyFrom:idx1).
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7232
            ^ coll
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7233
        ].
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7234
        coll add:(self copyFrom:idx1 to:idx2).
6491c3b25cd5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14609
diff changeset
  7235
        idx1 := idx2 + 1
16245
d16f9c7d9428 [true] whileTrue: -> #loop
Stefan Vogel <sv@exept.de>
parents: 16212
diff changeset
  7236
    ] loop.
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7237
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7238
    "
14631
501217c542a5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14629
diff changeset
  7239
     'foo:' partsIfSelector            
501217c542a5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14629
diff changeset
  7240
     'foo:bar:' partsIfSelector    
501217c542a5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14629
diff changeset
  7241
     'foo::::' partsIfSelector     
501217c542a5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14629
diff changeset
  7242
     #foo:bar: partsIfSelector     
501217c542a5 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 14629
diff changeset
  7243
     'hello' partsIfSelector       
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7244
     '+' partsIfSelector
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7245
    "
64
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  7246
! !
af7aeb79b25e Initial revision
claus
parents:
diff changeset
  7247
9192
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7248
!CharacterArray methodsFor:'tracing'!
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7249
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7250
traceInto:aRequestor level:level from:referrer
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7251
    "double dispatch into tracer, passing my type implicitely in the selector"
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7252
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7253
    ^ aRequestor traceCharacterArray:self level:level from:referrer
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7254
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7255
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7256
! !
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7257
2fb261f753f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9191
diff changeset
  7258
!CharacterArray methodsFor:'visiting'!
8395
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  7259
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  7260
acceptVisitor:aVisitor with:aParameter
16733
3f4622673efc comment/format only
Claus Gittinger <cg@exept.de>
parents: 16697
diff changeset
  7261
    "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
  7262
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  7263
    ^ aVisitor visitString:self with:aParameter
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  7264
! !
6bd97113cb4c Generalize visitor pattern and define #visit...:with: -methods instead
Stefan Vogel <sv@exept.de>
parents: 8376
diff changeset
  7265
17165
1e2822c3c74c class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17158
diff changeset
  7266
1849
9f35f5934ec6 added msdos-latin1 en/decoder (code = #msdos850)
Claus Gittinger <cg@exept.de>
parents: 1669
diff changeset
  7267
!CharacterArray class methodsFor:'documentation'!
629
2ceefe9b5a19 version at the end
Claus Gittinger <cg@exept.de>
parents: 608
diff changeset
  7268
2ceefe9b5a19 version at the end
Claus Gittinger <cg@exept.de>
parents: 608
diff changeset
  7269
version
17213
1031d5018042 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17205
diff changeset
  7270
    ^ '$Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.560 2014-12-14 11:20:23 cg Exp $'
12058
80a7dee97d3c comments
Claus Gittinger <cg@exept.de>
parents: 11955
diff changeset
  7271
!
80a7dee97d3c comments
Claus Gittinger <cg@exept.de>
parents: 11955
diff changeset
  7272
80a7dee97d3c comments
Claus Gittinger <cg@exept.de>
parents: 11955
diff changeset
  7273
version_CVS
17213
1031d5018042 class: CharacterArray
Claus Gittinger <cg@exept.de>
parents: 17205
diff changeset
  7274
    ^ '$Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.560 2014-12-14 11:20:23 cg Exp $'
629
2ceefe9b5a19 version at the end
Claus Gittinger <cg@exept.de>
parents: 608
diff changeset
  7275
! !
6809
72fee17c14b1 utf8 encoding fixed;
Claus Gittinger <cg@exept.de>
parents: 6743
diff changeset
  7276
14606
1aaaa6d79e54 class: CharacterArray
Stefan Vogel <sv@exept.de>
parents: 14592
diff changeset
  7277
2728
7569e45a4d15 raise error signal if anything goes wrong while decoding.
Claus Gittinger <cg@exept.de>
parents: 2721
diff changeset
  7278
CharacterArray initialize!