StringPattern.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 22 Dec 2011 00:20:13 +0100
changeset 2698 16c85264fef2
parent 2687 278a4b4f41d1
child 2912 2417be04fe10
permissions -rw-r--r--
Fix (isWhiteSpace -> isSeparator)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'stx:libbasic2' }"
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
Object subclass:#StringPattern
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
	instanceVariableNames:'data'
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
	classVariableNames:''
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
	poolDictionaries:''
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
	category:'Collections-Text-Support'
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    10
StringPattern subclass:#Includes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    11
	instanceVariableNames:''
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    12
	classVariableNames:''
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    13
	poolDictionaries:''
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    14
	privateIn:StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    15
!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    16
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    17
StringPattern subclass:#Matches
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    18
	instanceVariableNames:''
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    19
	classVariableNames:''
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    20
	poolDictionaries:''
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    21
	privateIn:StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    22
!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    23
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
Object subclass:#Parser
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
	instanceVariableNames:'stream errorBlock'
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
	classVariableNames:''
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
	poolDictionaries:''
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
	privateIn:StringPattern
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
StringPattern subclass:#StartsWith
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
	instanceVariableNames:''
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
	classVariableNames:''
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
	poolDictionaries:''
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
	privateIn:StringPattern
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
!StringPattern class methodsFor:'documentation'!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
documentation
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
"
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
    A StringPattern instances are used to match string. The
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
    pattern is build from a user-supplied string. It is the
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
    intention to let the use type the search pattern - it can
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
    ve used for various live searches in lists, dialogs etc.
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
    This is an unfinished class. More detailed description about
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
    syntax and algorithm will be added once the results will be
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
    considered good and the API become stable. If not, blame on
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
    JV :-)
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
    [author:]
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
        Jan Vrany <jan.vrany@fit.cvut.cz>
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
    [instance variables:]
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
    [class variables:]
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
    [see also:]
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
"
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
! !
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
!StringPattern class methodsFor:'instance creation'!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    66
includes: aString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    67
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    68
    ^Includes new on: aString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    69
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    70
    "Created: / 18-10-2011 / 21:22:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    71
!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    72
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    73
matches: aString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    74
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    75
    ^Matches new on: aString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    76
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    77
    "Created: / 18-10-2011 / 21:23:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    78
!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    79
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
readFrom:aStringOrStream onError:exceptionBlock
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
    ^Parser parse: aStringOrStream readStream onError: exceptionBlock
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    84
    "
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    85
        StringPattern readFrom: 'abcd'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    86
        StringPattern readFrom: ' abcd'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    87
        StringPattern readFrom: ' a??d'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    88
        StringPattern readFrom: ' a*d*'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    89
        StringPattern readFrom: 'abcd*'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    90
    "
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    91
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
    "Created: / 09-08-2011 / 13:39:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
startsWith: aString
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
    ^StartsWith new on: aString
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
    "Created: / 09-08-2011 / 13:42:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
! !
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
!StringPattern methodsFor:'initialization'!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
on: anObject
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
    data := anObject.
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
    "Created: / 09-08-2011 / 13:42:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
! !
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
!StringPattern methodsFor:'matching'!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
match: string 
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
    "Answers true if myself match the given string.
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
     No relaxing done"
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
    ^self match: string relax: 1.
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
    "Created: / 09-08-2011 / 13:51:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
match: string relax: relax
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   124
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
    "Answers true if myself match the given string.
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
     relax argument say how much the matching should
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
     be relaxed - relax is a number in <1..3>, where
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
     1 means no relaxing at all (aka exact match). 
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
     All patterns should support relax == 1. If the relax
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
     level is not supported by a pattern, false must be 
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
     returned."
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
    ^self subclassResponsibility
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
    "Created: / 09-08-2011 / 13:47:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
! !
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   138
!StringPattern methodsFor:'printing & storing'!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   139
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   140
printOn:aStream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   141
    "append a printed representation if the receiver to the argument, aStream"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   142
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   143
    super printOn:aStream.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   144
    aStream nextPut:$(.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   145
    data printOn: aStream.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   146
    aStream nextPut:$).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   147
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   148
    "Modified: / 18-10-2011 / 21:28:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   149
! !
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   150
2687
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   151
!StringPattern methodsFor:'utilities'!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   152
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   153
matchObject: anObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   154
    "Return true if pattern matches given object with relax level 1.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   155
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   156
    Some heuristics is performed to obtain objects textual
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   157
    representation."
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   158
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   159
    self matchObject: anObject relax: 1
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   160
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   161
    "Created: / 29-11-2011 / 15:34:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   162
!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   163
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   164
matchObject: object relax: relax
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   165
    "Return true if pattern matches given object..
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   166
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   167
    Some heuristics is performed to obtain objects textual
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   168
    representation."
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   169
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   170
    object isString ifTrue:[
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   171
        ^self match: object relax: relax.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   172
    ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   173
    object isHierarchicalItem ifTrue:[
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   174
        ^self match: object label relax: relax.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   175
    ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   176
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   177
    ^self match: object displayString relax: relax.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   178
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   179
    "Created: / 29-11-2011 / 15:37:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   180
! !
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   181
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   182
!StringPattern::Includes methodsFor:'matching'!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   183
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   184
match:string relax:relax
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   185
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   186
    relax == 1 ifTrue:[
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   187
        ^string includes: data
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   188
    ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   189
    relax == 2 ifTrue:[
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   190
        ^string matches: ('*', data, '*')
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   191
    ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   192
    ^false.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   193
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   194
    "Modified: / 18-10-2011 / 21:33:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   195
! !
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   196
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   197
!StringPattern::Matches methodsFor:'matching'!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   198
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   199
match:string relax:relax
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   200
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   201
    relax == 1 ifTrue:[
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   202
        ^string matches: data
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   203
    ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   204
    relax == 2 ifTrue:[
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   205
        | relaxed |
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   206
        relaxed := data.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   207
        data first ~~  $* ifTrue:[
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   208
            relaxed := '*' , relaxed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   209
        ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   210
        data last ~~  $* ifTrue:[
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   211
            relaxed := relaxed , '*'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   212
        ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   213
        ^string matches: relaxed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   214
    ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   215
    ^false.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   216
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   217
    "Modified: / 18-10-2011 / 21:35:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   218
! !
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   219
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
!StringPattern::Parser class methodsFor:'parsing'!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   221
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
parse: aStream onError: errorBlock
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   223
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
    ^self new parse: aStream onError: errorBlock
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   226
    "Created: / 09-08-2011 / 13:39:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
! !
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   228
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
!StringPattern::Parser methodsFor:'parsing'!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   231
parse
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   232
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   233
    "Sorry, no fancy AND/OR patterns now"
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   234
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   235
   ^self parsePattern.
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   237
    "Created: / 09-08-2011 / 13:41:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   240
parse: aStream onError: aBlock
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   241
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   242
    stream := aStream.
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   243
    errorBlock := aBlock.
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   244
    ^self parse.
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   245
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   246
    "Created: / 09-08-2011 / 13:40:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   247
!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   248
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   249
parsePattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   250
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   251
    | data |
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   252
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   253
    stream position1Based == 1 ifTrue:[
2698
16c85264fef2 Fix (isWhiteSpace -> isSeparator)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2687
diff changeset
   254
        (stream peek notNil and:[stream peek isSeparator]) ifFalse:[
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   255
            data := stream upToSeparator.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   256
            (data includes: $*) ifTrue:[
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   257
                ^StringPattern matches: data
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   258
            ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   259
            (data includes: $?) ifTrue:[
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   260
                ^StringPattern matches: data
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   261
            ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   262
            ^StringPattern startsWith: data    
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   263
        ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   264
    ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   265
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   266
    stream skipSeparators.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   267
    data := stream upToSeparator.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   268
    (data includes: $*) ifTrue:[
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   269
        ^StringPattern matches: data
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   270
    ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   271
    (data includes: $?) ifTrue:[
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   272
        ^StringPattern matches: data
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   273
    ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   274
    ^StringPattern includes: data
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   275
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   276
    "Created: / 18-10-2011 / 21:26:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2698
16c85264fef2 Fix (isWhiteSpace -> isSeparator)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2687
diff changeset
   277
    "Modified: / 21-12-2011 / 23:19:06 / jv"
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   278
! !
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   279
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   280
!StringPattern::StartsWith methodsFor:'matching'!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   281
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   282
match: string relax: relax
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   283
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   284
    relax == 1 ifTrue:[
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   285
        ^string startsWith: data.
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   286
    ].
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   287
    relax == 2 ifTrue:[
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   288
        ^string includes: data
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   289
    ].
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   290
    relax == 3 ifTrue:[
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   291
        ^string matches: ('*', data, '*')
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   292
    ].
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   293
    ^false.
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   294
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   295
    "
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   296
        (StringPattern startsWith: 'String') match: 'StringPattern'
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   297
        (StringPattern startsWith: 'STring') match: 'StringPattern' relax: 2
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   298
    "
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   299
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   300
    "Created: / 09-08-2011 / 13:50:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   301
! !
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   302
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   303
!StringPattern class methodsFor:'documentation'!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   304
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   305
version
2698
16c85264fef2 Fix (isWhiteSpace -> isSeparator)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2687
diff changeset
   306
    ^ '$Header: /cvs/stx/stx/libbasic2/StringPattern.st,v 1.4 2011-12-21 23:20:13 vrany Exp $'
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   307
!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   308
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   309
version_CVS
2698
16c85264fef2 Fix (isWhiteSpace -> isSeparator)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2687
diff changeset
   310
    ^ '$Header: /cvs/stx/stx/libbasic2/StringPattern.st,v 1.4 2011-12-21 23:20:13 vrany Exp $'
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   311
! !