added:
#includes:
#matches:
#printOn:
changed: #readFrom:onError:
--- a/StringPattern.st Wed Oct 12 15:31:52 2011 +0200
+++ b/StringPattern.st Tue Oct 18 21:44:20 2011 +0200
@@ -7,6 +7,20 @@
category:'Collections-Text-Support'
!
+StringPattern subclass:#Includes
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:StringPattern
+!
+
+StringPattern subclass:#Matches
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:StringPattern
+!
+
Object subclass:#Parser
instanceVariableNames:'stream errorBlock'
classVariableNames:''
@@ -49,10 +63,32 @@
!StringPattern class methodsFor:'instance creation'!
+includes: aString
+
+ ^Includes new on: aString
+
+ "Created: / 18-10-2011 / 21:22:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+matches: aString
+
+ ^Matches new on: aString
+
+ "Created: / 18-10-2011 / 21:23:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
readFrom:aStringOrStream onError:exceptionBlock
^Parser parse: aStringOrStream readStream onError: exceptionBlock
+ "
+ StringPattern readFrom: 'abcd'
+ StringPattern readFrom: ' abcd'
+ StringPattern readFrom: ' a??d'
+ StringPattern readFrom: ' a*d*'
+ StringPattern readFrom: 'abcd*'
+ "
+
"Created: / 09-08-2011 / 13:39:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
@@ -99,6 +135,57 @@
"Created: / 09-08-2011 / 13:47:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
+!StringPattern methodsFor:'printing & storing'!
+
+printOn:aStream
+ "append a printed representation if the receiver to the argument, aStream"
+
+ super printOn:aStream.
+ aStream nextPut:$(.
+ data printOn: aStream.
+ aStream nextPut:$).
+
+ "Modified: / 18-10-2011 / 21:28:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!StringPattern::Includes methodsFor:'matching'!
+
+match:string relax:relax
+
+ relax == 1 ifTrue:[
+ ^string includes: data
+ ].
+ relax == 2 ifTrue:[
+ ^string matches: ('*', data, '*')
+ ].
+ ^false.
+
+ "Modified: / 18-10-2011 / 21:33:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!StringPattern::Matches methodsFor:'matching'!
+
+match:string relax:relax
+
+ relax == 1 ifTrue:[
+ ^string matches: data
+ ].
+ relax == 2 ifTrue:[
+ | relaxed |
+ relaxed := data.
+ data first ~~ $* ifTrue:[
+ relaxed := '*' , relaxed.
+ ].
+ data last ~~ $* ifTrue:[
+ relaxed := relaxed , '*'.
+ ].
+ ^string matches: relaxed
+ ].
+ ^false.
+
+ "Modified: / 18-10-2011 / 21:35:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
!StringPattern::Parser class methodsFor:'parsing'!
parse: aStream onError: errorBlock
@@ -112,9 +199,9 @@
parse
- "Sorry, no fancy patterns now"
+ "Sorry, no fancy AND/OR patterns now"
- ^StringPattern startsWith: stream contents.
+ ^self parsePattern.
"Created: / 09-08-2011 / 13:41:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
@@ -126,6 +213,36 @@
^self parse.
"Created: / 09-08-2011 / 13:40:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parsePattern
+
+ | data |
+
+ stream position1Based == 1 ifTrue:[
+ (stream peek notNil and:[stream peek isWhiteSpace]) ifFalse:[
+ data := stream upToSeparator.
+ (data includes: $*) ifTrue:[
+ ^StringPattern matches: data
+ ].
+ (data includes: $?) ifTrue:[
+ ^StringPattern matches: data
+ ].
+ ^StringPattern startsWith: data
+ ].
+ ].
+
+ stream skipSeparators.
+ data := stream upToSeparator.
+ (data includes: $*) ifTrue:[
+ ^StringPattern matches: data
+ ].
+ (data includes: $?) ifTrue:[
+ ^StringPattern matches: data
+ ].
+ ^StringPattern includes: data
+
+ "Created: / 18-10-2011 / 21:26:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!StringPattern::StartsWith methodsFor:'matching'!
@@ -136,10 +253,10 @@
^string startsWith: data.
].
relax == 2 ifTrue:[
- ^((string copyTo: data size) levenshteinTo: data) < 8"Wild guess, we will see"
+ ^string includes: data
].
relax == 3 ifTrue:[
- ^((string copyTo: data size) levenshteinTo: data) < 14"Wild guess, we will see"
+ ^string matches: ('*', data, '*')
].
^false.
@@ -154,9 +271,9 @@
!StringPattern class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic2/StringPattern.st,v 1.1 2011-08-09 12:56:35 vrany Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic2/StringPattern.st,v 1.2 2011-10-18 19:44:20 vrany Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic2/StringPattern.st,v 1.1 2011-08-09 12:56:35 vrany Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic2/StringPattern.st,v 1.2 2011-10-18 19:44:20 vrany Exp $'
! !