Christoph Thiede uploaded a new version of Regex-Core to project The Inbox: http://source.squeak.org/inbox/Regex-Core-ct.77.mcz
==================== Summary ====================
Name: Regex-Core-ct.77 Author: ct Time: 5 October 2022, 11:08:58.426956 am UUID: 526b6f56-d854-b74e-9a67-fc0f136ecfcd Ancestors: Regex-Core-ct.76
Implements match reset (\K) as an alternative to positive lookbehinds. This is useful for compatibility with Perl/PCRE/Boost et al. For more information, see: https://www.regular-expressions.info/keep.html
Examples:
'a\Kb' asRegex matches: 'ab'; subexpression: 1. "'b'" '([a-z]\K[A-Z])+' asRegex matches: 'aBcDeF'; allSubexpressions. "#(#('F') #('aB' 'cD' 'eF'))"
=============== Diff against Regex-Core-ct.76 ===============
Item was changed: ----- Method: RxMatcher>>matchAgainstMarkerAt:nextLink: (in category 'matching') ----- matchAgainstMarkerAt: index nextLink: anRmxLink
| position | position := stream position. (anRmxLink matchAgainst: self) ifFalse: [ ^false ]. index <= 2 + ifTrue: + [ (markerPositions at: index) + ifNotNil: [ "position was eagerly set in #matchResetNextLink:" ] + ifNil: [ markerPositions at: index put: position ] ] - ifTrue: [ markerPositions at: index put: position ] ifFalse: [ (markerPositions at: index) addLast: position ]. ^true!
Item was added: + ----- Method: RxMatcher>>matchResetNextLink: (in category 'matching') ----- + matchResetNextLink: anRmxLink + + | position | + position := stream position. + (anRmxLink matchAgainst: self) ifFalse: [^ false]. + (markerPositions at: 1) + ifNotNil: [ "position was already set in a nested (subsequent) reset" ] + ifNil: [ markerPositions at: 1 put: position ]. + ^ true!
Item was added: + ----- Method: RxMatcher>>syntaxMatchReset (in category 'double dispatch') ----- + syntaxMatchReset + + ^ RxmMatchReset new!
Item was changed: ----- Method: RxParser class>>initializeBackslashSpecials (in category 'class initialization') ----- initializeBackslashSpecials "Keys are characters that normally follow a , the values are associations of classes and initialization selectors on the instance side of the classes." "self initializeBackslashSpecials"
(BackslashSpecials := Dictionary new) at: $w put: (Association key: RxsPredicate value: #beWordConstituent); at: $W put: (Association key: RxsPredicate value: #beNotWordConstituent); at: $s put: (Association key: RxsPredicate value: #beSpace); at: $S put: (Association key: RxsPredicate value: #beNotSpace); at: $d put: (Association key: RxsPredicate value: #beDigit); at: $D put: (Association key: RxsPredicate value: #beNotDigit); at: $b put: (Association key: RxsContextCondition value: #beWordBoundary); at: $B put: (Association key: RxsContextCondition value: #beNonWordBoundary); at: $< put: (Association key: RxsContextCondition value: #beBeginningOfWord); + at: $> put: (Association key: RxsContextCondition value: #beEndOfWord); + at: $K put: (Association key: RxsMatchReset value: #yourself)! - at: $> put: (Association key: RxsContextCondition value: #beEndOfWord)!
Item was added: + RxmLink subclass: #RxmMatchReset + instanceVariableNames: '' + classVariableNames: '' + poolDictionaries: '' + category: 'Regex-Core'! + + !RxmMatchReset commentStamp: 'ct 10/5/2022 10:59' prior: 0! + Instance matches always and trims the matched string to start from the current position.!
Item was added: + ----- Method: RxmMatchReset>>matchAgainst: (in category 'matching') ----- + matchAgainst: aMatcher + + ^ aMatcher matchResetNextLink: next!
Item was added: + RxsNode subclass: #RxsMatchReset + instanceVariableNames: '' + classVariableNames: '' + poolDictionaries: '' + category: 'Regex-Core'! + + !RxsMatchReset commentStamp: 'ct 10/5/2022 10:58' prior: 0! + I reset the matcher to the current position and remove all previously matched characters from the match. I do not affect any capture groups.!
Item was added: + ----- Method: RxsMatchReset>>dispatchTo: (in category 'building') ----- + dispatchTo: aBuilder + + ^ aBuilder syntaxMatchReset!
Item was added: + ----- Method: RxsMatchReset>>isNullable (in category 'testing') ----- + isNullable + + ^ true!
Item was changed: + (PackageInfo named: 'Regex-Core') postscript: 'RxParser initializeBackslashSpecials. "Regex-Core-ct.77 (match reset)"'! - (PackageInfo named: 'Regex-Core') postscript: 'RxsPredicate initializeEscapedLetterSelectors.'!
squeak-dev@lists.squeakfoundation.org