StringPattern.st
author Claus Gittinger <cg@exept.de>
Thu, 05 Mar 2015 11:37:28 +0100
changeset 3524 7bfa53fd9072
parent 3468 589b394c1c7b
child 4017 42cb3e340b6e
permissions -rw-r--r--
class: StringPattern comment/format in: #match:from:to:case:relax: #matchObject: #matchObject:relax:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3524
7bfa53fd9072 class: StringPattern
Claus Gittinger <cg@exept.de>
parents: 3468
diff changeset
     1
"{ Encoding: utf8 }"
7bfa53fd9072 class: StringPattern
Claus Gittinger <cg@exept.de>
parents: 3468
diff changeset
     2
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
"{ Package: 'stx:libbasic2' }"
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
3464
8d9675f053d4 Allow for space in patterns
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3449
diff changeset
     5
"{ NameSpace: Smalltalk }"
8d9675f053d4 Allow for space in patterns
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3449
diff changeset
     6
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
Object subclass:#StringPattern
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
	instanceVariableNames:'data'
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
	classVariableNames:''
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
	poolDictionaries:''
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
	category:'Collections-Text-Support'
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    14
StringPattern subclass:#Includes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    15
	instanceVariableNames:''
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    16
	classVariableNames:''
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    17
	poolDictionaries:''
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    18
	privateIn:StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    19
!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    20
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    21
StringPattern subclass:#Matches
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    22
	instanceVariableNames:''
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    23
	classVariableNames:''
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    24
	poolDictionaries:''
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    25
	privateIn:StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    26
!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    27
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
Object subclass:#Parser
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
	instanceVariableNames:'stream errorBlock'
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
	classVariableNames:''
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
	poolDictionaries:''
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
	privateIn:StringPattern
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
StringPattern subclass:#StartsWith
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
	instanceVariableNames:''
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
	classVariableNames:''
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
	poolDictionaries:''
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
	privateIn:StringPattern
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
!
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
!StringPattern class methodsFor:'documentation'!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
documentation
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
"
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
    A StringPattern instances are used to match string. The
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
    pattern is build from a user-supplied string. It is the
3205
154e2d2fcb71 class: StringPattern
Claus Gittinger <cg@exept.de>
parents: 3079
diff changeset
    48
    intention to let the user type the search pattern - it can
154e2d2fcb71 class: StringPattern
Claus Gittinger <cg@exept.de>
parents: 3079
diff changeset
    49
    be used for various live searches in lists, dialogs etc.
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
    This is an unfinished class. More detailed description about
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
    syntax and algorithm will be added once the results will be
3205
154e2d2fcb71 class: StringPattern
Claus Gittinger <cg@exept.de>
parents: 3079
diff changeset
    53
    considered good and the API become stable. 
154e2d2fcb71 class: StringPattern
Claus Gittinger <cg@exept.de>
parents: 3079
diff changeset
    54
    If not, blame it on JV :-)
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
    [author:]
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
        Jan Vrany <jan.vrany@fit.cvut.cz>
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
    [instance variables:]
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
    [class variables:]
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
    [see also:]
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
"
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
! !
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
!StringPattern class methodsFor:'instance creation'!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    70
includes: aString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    71
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    72
    ^Includes new on: aString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    73
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    74
    "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
    75
!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    76
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    77
matches: aString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    78
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    79
    ^Matches new on: aString
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    80
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    81
    "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
    82
!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    83
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
readFrom:aStringOrStream onError:exceptionBlock
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
    ^Parser parse: aStringOrStream readStream onError: exceptionBlock
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    88
    "
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
        StringPattern readFrom: ' abcd'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    91
        StringPattern readFrom: ' a??d'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    92
        StringPattern readFrom: ' a*d*'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    93
        StringPattern readFrom: 'abcd*'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    94
    "
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
    95
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
    "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
    97
!
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
startsWith: aString
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
    ^StartsWith new on: aString
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
    "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
   104
! !
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
3468
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   106
!StringPattern methodsFor:'conversion'!
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   107
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   108
asString
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   109
    "Returns a string representation of the pattern.
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   110
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   111
     `StringPattern fromString: pattern asString` should return
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   112
     the same pattern (same meaning equal)"
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   113
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   114
    ^ self subclassResponsibility
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   115
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   116
    "Created: / 23-01-2015 / 17:36:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   117
! !
3249
16699e7a3c08 class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3205
diff changeset
   118
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
!StringPattern methodsFor:'initialization'!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
on: anObject
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
    data := anObject.
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
    "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
   126
! !
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
!StringPattern methodsFor:'matching'!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
match: string 
3449
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   131
    ^self match: string from: 1 to: string size
2619
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
    "Created: / 09-08-2011 / 13:51:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3449
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   134
    "Modified: / 26-11-2014 / 07:00:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   135
!
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   136
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   137
match: string case: case 
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   138
    ^self match: string case: case relax: 1
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   139
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   140
    "Created: / 26-11-2014 / 07:02:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   141
!
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   142
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   143
match: string case: case relax: relax 
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   144
    ^self match: string from: 1 to: string size case: case relax: relax
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   145
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   146
    "Created: / 26-11-2014 / 07:02:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
3449
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   149
match: string from: from to: to 
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   150
    ^self match: string from: 1 to: string size case: true
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   151
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   152
    "Created: / 26-11-2014 / 07:01:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   153
!
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   154
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   155
match: string from: from to: to case: case                                                              
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   156
    ^self match: string from: from to: to case: case relax: 1
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
3449
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   158
    "Created: / 26-11-2014 / 07:01:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   159
    "Modified: / 26-11-2014 / 10:00:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   160
!
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   161
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   162
match: string from: from to: to case: case relax: relax
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   163
    "Answers true if receiver matches the given `string`
3524
7bfa53fd9072 class: StringPattern
Claus Gittinger <cg@exept.de>
parents: 3468
diff changeset
   164
     portion starting at `from`, ending at `to`.
3449
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   165
     If `case` is true, then perform natch case sensitive,
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   166
     otherwise match case insensitive.
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   167
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   168
     `relax` argument say how much the matching should
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
     be relaxed - relax is a number in <1..3>, where
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
     1 means no relaxing at all (aka exact match). 
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
     All patterns should support relax == 1. If the relax
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   172
     level is not supported by a pattern, false must be 
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   173
     returned."
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
    ^self subclassResponsibility
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
3449
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   177
    "Created: / 26-11-2014 / 06:35:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   178
!
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   179
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   180
match: string from: from to: to relax: relax                                                              
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   181
    ^self match: string from: from to: string size case: true relax: relax
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   182
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   183
    "Created: / 26-11-2014 / 07:01:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   184
!
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   185
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   186
match: string relax: relax
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   187
    ^ self match: string case: true relax: relax
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   188
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
    "Created: / 09-08-2011 / 13:47:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3449
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   190
    "Modified: / 26-11-2014 / 07:03:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
! !
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   193
!StringPattern methodsFor:'printing & storing'!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   194
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   195
printOn:aStream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   196
    "append a printed representation if the receiver to the argument, aStream"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   197
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   198
    super printOn:aStream.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   199
    aStream nextPut:$(.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   200
    data printOn: aStream.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   201
    aStream nextPut:$).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   202
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   203
    "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
   204
! !
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   205
2687
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   206
!StringPattern methodsFor:'utilities'!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   207
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   208
matchObject: anObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   209
    "Return true if pattern matches given object with relax level 1.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   210
3524
7bfa53fd9072 class: StringPattern
Claus Gittinger <cg@exept.de>
parents: 3468
diff changeset
   211
    Some heuristics is performed to obtain the object's textual representation."
2687
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   212
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   213
    self matchObject: anObject relax: 1
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   214
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   215
    "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
   216
!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   217
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   218
matchObject: object relax: relax
3524
7bfa53fd9072 class: StringPattern
Claus Gittinger <cg@exept.de>
parents: 3468
diff changeset
   219
    "Return true if pattern matches given object.
2687
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   220
3524
7bfa53fd9072 class: StringPattern
Claus Gittinger <cg@exept.de>
parents: 3468
diff changeset
   221
    Some heuristics is performed to obtain the object's textual representation."
2687
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   222
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   223
    object isString ifTrue:[
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   224
        ^self match: object relax: relax.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   225
    ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   226
    object isHierarchicalItem ifTrue:[
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   227
        ^self match: object label relax: relax.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   228
    ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   229
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   230
    ^self match: object displayString relax: relax.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   232
    "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
   233
! !
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2672
diff changeset
   234
3468
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   235
!StringPattern::Includes methodsFor:'conversion'!
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   236
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   237
asString
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   238
    "Returns a string representation of the pattern.
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   239
     
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   240
     `StringPattern fromString: pattern asString` should return
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   241
     the same pattern (same meaning equal)"
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   242
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   243
    ^ ' ', data
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   244
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   245
    "Created: / 23-01-2015 / 17:40:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   246
! !
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   247
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   248
!StringPattern::Includes methodsFor:'matching'!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   249
3449
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   250
match:string from: from to: to case: case relax:relax
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   251
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   252
    relax == 1 ifTrue:[
3449
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   253
        | i |
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   254
        i := string indexOfSubCollection:data startingAt:from ifAbsent:0 caseSensitive:case.
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   255
        ^ i between: from and: to - data size + 1 
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   256
    ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   257
    ^false.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   258
3449
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   259
    "Created: / 26-11-2014 / 06:40:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   260
! !
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   261
3468
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   262
!StringPattern::Matches methodsFor:'conversion'!
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   263
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   264
asString
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   265
    "Returns a string representation of the pattern.
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   266
     
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   267
     `StringPattern fromString: pattern asString` should return
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   268
     the same pattern (same meaning equal)"
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   269
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   270
    ^ data
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   271
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   272
    "Created: / 23-01-2015 / 17:41:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   273
! !
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   274
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   275
!StringPattern::Matches methodsFor:'matching'!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   276
3449
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   277
match:string from: from to: to case: case relax:relax
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   278
    | pattern |
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   279
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   280
    relax > 2 ifTrue:[ ^ false ].
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   281
3449
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   282
    pattern := data.
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   283
    relax == 2 ifTrue:[
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   284
        data first ~~  $* ifTrue:[
3449
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   285
            pattern := '*' , pattern.
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   286
        ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   287
        data last ~~  $* ifTrue:[
3449
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   288
            pattern := pattern , '*'.
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   289
        ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   290
    ].
3449
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   291
    ^ pattern match: string from: from to: to caseSensitive: case.
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   292
3449
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   293
    "Created: / 26-11-2014 / 06:43:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   294
! !
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   295
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   296
!StringPattern::Parser class methodsFor:'parsing'!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   297
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   298
parse: aStream onError: errorBlock
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
    ^self new parse: aStream onError: errorBlock
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
    "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
   303
! !
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
!StringPattern::Parser methodsFor:'parsing'!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   306
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   307
parse
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   308
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   309
    "Sorry, no fancy AND/OR patterns now"
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   310
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   311
   ^self parsePattern.
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   312
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   313
    "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
   314
!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   315
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   316
parse: aStream onError: aBlock
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   317
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   318
    stream := aStream.
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   319
    errorBlock := aBlock.
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   320
    ^self parse.
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   321
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   322
    "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
   323
!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   324
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   325
parsePattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   326
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   327
    | data |
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   328
3079
a419a95f3e3f class: StringPattern
Stefan Vogel <sv@exept.de>
parents: 2912
diff changeset
   329
    stream position == 0 ifTrue:[
2698
16c85264fef2 Fix (isWhiteSpace -> isSeparator)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2687
diff changeset
   330
        (stream peek notNil and:[stream peek isSeparator]) ifFalse:[
3464
8d9675f053d4 Allow for space in patterns
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3449
diff changeset
   331
            data := stream upToEnd."/upToSeparator.
2672
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   332
            (data includes: $*) ifTrue:[
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   333
                ^StringPattern matches: data
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   334
            ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   335
            (data includes: $?) ifTrue:[
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   336
                ^StringPattern matches: data
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   337
            ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   338
            ^StringPattern startsWith: data    
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   339
        ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   340
    ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   341
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   342
    stream skipSeparators.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   343
    data := stream upToSeparator.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   344
    (data includes: $*) ifTrue:[
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   345
        ^StringPattern matches: data
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   346
    ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   347
    (data includes: $?) ifTrue:[
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   348
        ^StringPattern matches: data
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   349
    ].
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   350
    ^StringPattern includes: data
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   351
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2619
diff changeset
   352
    "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
   353
    "Modified: / 21-12-2011 / 23:19:06 / jv"
3464
8d9675f053d4 Allow for space in patterns
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3449
diff changeset
   354
    "Modified (format): / 09-01-2015 / 13:09:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   355
! !
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   356
3468
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   357
!StringPattern::StartsWith methodsFor:'conversion'!
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   358
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   359
asString
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   360
    "Returns a string representation of the pattern.
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   361
     
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   362
     `StringPattern fromString: pattern asString` should return
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   363
     the same pattern (same meaning equal)"
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   364
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   365
    ^ data
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   366
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   367
    "Created: / 23-01-2015 / 17:41:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   368
! !
589b394c1c7b class: StringPattern
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3464
diff changeset
   369
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   370
!StringPattern::StartsWith methodsFor:'matching'!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   371
3449
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   372
match: string from: from to: to case: case relax: relax
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   373
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   374
    relax == 1 ifTrue:[
3449
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   375
        (case and:[from == 1]) ifTrue:[
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   376
            ^ string startsWith: data.
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   377
        ] ifFalse:[ 
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   378
            | stringSz dataSz |
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   379
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   380
            stringSz := string size.
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   381
            dataSz := data size.
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   382
            stringSz >= (from + dataSz - 1) ifTrue:[ 
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   383
                | i |
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   384
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   385
                i := dataSz.
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   386
                case ifTrue:[
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   387
                    [ i > 0 ] whileTrue:[ 
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   388
                        (string at: from + i - 1) ~~ (data at: i) ifTrue:[  ^ false ].
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   389
                        i := i - 1.
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   390
                    ].
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   391
                ] ifFalse:[
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   392
                    [ i > 0 ] whileTrue:[ 
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   393
                        (string at: from + i - 1) asLowercase ~~ (data at: i) asLowercase ifTrue:[  ^ false ].
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   394
                        i := i - 1.
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   395
                    ].
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   396
                ].
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   397
                ^ true
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   398
            ].
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   399
            ^ false
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   400
        ].
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   401
    ].
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   402
    relax == 2 ifTrue:[
3449
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   403
        | i |
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   404
        i := string indexOfSubCollection:data startingAt:from ifAbsent:0 caseSensitive:case.
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   405
        ^ i between: from and: to - data size + 1 
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   406
    ].
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   407
    relax == 3 ifTrue:[
3449
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   408
        ^ ('*', data, '*') match: string from: from to: to caseSensitive: case.
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   409
    ].
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   410
    ^false.
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   411
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   412
    "
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   413
        (StringPattern startsWith: 'String') match: 'StringPattern'
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   414
        (StringPattern startsWith: 'STring') match: 'StringPattern' relax: 2
3449
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   415
        (StringPattern startsWith: 'Pattern') match: 'StringPattern' from: 7 to: 13 relax: 1   
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   416
        (StringPattern startsWith: 'String') match: 'StringPattern' from: 7 to: 13 relax: 1   
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   417
        (StringPattern startsWith: 'Pattern') match: 'StringPattern' relax: 2   
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   418
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   419
    "
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   420
3449
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   421
    "Created: / 26-11-2014 / 06:45:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
21c891242b9d Added support for matching only a portion of a string and match case sensitive/insensitive.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3249
diff changeset
   422
    "Modified: / 26-11-2014 / 09:58:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   423
! !
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   424
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   425
!StringPattern class methodsFor:'documentation'!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   426
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   427
version
3524
7bfa53fd9072 class: StringPattern
Claus Gittinger <cg@exept.de>
parents: 3468
diff changeset
   428
    ^ '$Header: /cvs/stx/stx/libbasic2/StringPattern.st,v 1.12 2015-03-05 10:37:28 cg Exp $'
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   429
!
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   430
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   431
version_CVS
3524
7bfa53fd9072 class: StringPattern
Claus Gittinger <cg@exept.de>
parents: 3468
diff changeset
   432
    ^ '$Header: /cvs/stx/stx/libbasic2/StringPattern.st,v 1.12 2015-03-05 10:37:28 cg Exp $'
2619
0012c9536b98 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   433
! !
2912
2417be04fe10 Bugfix in StringPattern::Includes>>match:relax:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2698
diff changeset
   434