@@ -50,74 +50,6 @@ public struct _CharacterClassModel: Hashable {
5050 case whitespace
5151 /// Character.isLetter or Character.isDigit or Character == "_"
5252 case word
53- /// One of the custom character set.
54- case custom( [ CharacterSetComponent ] )
55- }
56-
57- public enum SetOperator : Hashable {
58- case subtraction
59- case intersection
60- case symmetricDifference
61- }
62-
63- /// A binary set operation that forms a character class component.
64- public struct SetOperation : Hashable {
65- var lhs : CharacterSetComponent
66- var op : SetOperator
67- var rhs : CharacterSetComponent
68-
69- func matches( _ c: Character , with options: MatchingOptions ) -> Bool {
70- switch op {
71- case . intersection:
72- return lhs. matches ( c, with: options) && rhs. matches ( c, with: options)
73- case . subtraction:
74- return lhs. matches ( c, with: options) && !rhs. matches ( c, with: options)
75- case . symmetricDifference:
76- return lhs. matches ( c, with: options) != rhs. matches ( c, with: options)
77- }
78- }
79- }
80-
81- public enum CharacterSetComponent : Hashable {
82- case character( Character )
83- case range( ClosedRange < Character > )
84-
85- /// A nested character class.
86- case characterClass( _CharacterClassModel )
87-
88- /// A binary set operation of character class components.
89- indirect case setOperation( SetOperation )
90-
91- public static func setOperation(
92- lhs: CharacterSetComponent , op: SetOperator , rhs: CharacterSetComponent
93- ) -> CharacterSetComponent {
94- . setOperation( . init( lhs: lhs, op: op, rhs: rhs) )
95- }
96-
97- func matches( _ character: Character , with options: MatchingOptions ) -> Bool {
98- switch self {
99- case . character( let c) :
100- if options. isCaseInsensitive {
101- return c. lowercased ( ) == character. lowercased ( )
102- } else {
103- return c == character
104- }
105- case . range( let range) :
106- if options. isCaseInsensitive {
107- let newLower = range. lowerBound. lowercased ( )
108- let newUpper = range. upperBound. lowercased ( )
109- // FIXME: Is failing this possible? Is this the right behavior if so?
110- guard newLower <= newUpper else { return false }
111- return ( newLower... newUpper) . contains ( character. lowercased ( ) )
112- } else {
113- return range. contains ( character)
114- }
115- case . characterClass( let custom) :
116- let str = String ( character)
117- return custom. matches ( in: str, at: str. startIndex, with: options) != nil
118- case . setOperation( let op) : return op. matches ( character, with: options)
119- }
120- }
12153 }
12254
12355 enum MatchLevel : Hashable {
@@ -188,8 +120,6 @@ public struct _CharacterClassModel: Hashable {
188120 matched = c. isWhitespace && ( c. isASCII || !options. usesASCIISpaces)
189121 case . word:
190122 matched = c. isWordCharacter && ( c. isASCII || !options. usesASCIIWord)
191- case . custom( let set) :
192- matched = set. any { $0. matches ( c, with: options) }
193123 }
194124 if isInverted {
195125 matched. toggle ( )
@@ -222,8 +152,6 @@ public struct _CharacterClassModel: Hashable {
222152 matched = c. properties. isWhitespace && ( c. isASCII || !options. usesASCIISpaces)
223153 case . word:
224154 matched = ( c. properties. isAlphabetic || c == " _ " ) && ( c. isASCII || !options. usesASCIIWord)
225- case . custom( let set) :
226- matched = set. any { $0. matches ( Character ( c) , with: options) }
227155 }
228156 if isInverted {
229157 matched. toggle ( )
@@ -286,23 +214,6 @@ extension _CharacterClassModel {
286214 public static var word : _CharacterClassModel {
287215 . init( cc: . word, matchLevel: . graphemeCluster)
288216 }
289-
290- public static func custom(
291- _ components: [ _CharacterClassModel . CharacterSetComponent ]
292- ) -> _CharacterClassModel {
293- . init( cc: . custom( components) , matchLevel: . graphemeCluster)
294- }
295- }
296-
297- extension _CharacterClassModel . CharacterSetComponent : CustomStringConvertible {
298- public var description : String {
299- switch self {
300- case . range( let range) : return " <range \( range) > "
301- case . character( let character) : return " <character \( character) > "
302- case . characterClass( let custom) : return " \( custom) "
303- case . setOperation( let op) : return " < \( op. lhs) \( op. op) \( op. rhs) > "
304- }
305- }
306217}
307218
308219extension _CharacterClassModel . Representation : CustomStringConvertible {
@@ -318,7 +229,6 @@ extension _CharacterClassModel.Representation: CustomStringConvertible {
318229 case . verticalWhitespace: return " vertical whitespace "
319230 case . whitespace: return " <whitespace> "
320231 case . word: return " <word> "
321- case . custom( let set) : return " <custom \( set) > "
322232 }
323233 }
324234}
@@ -391,22 +301,6 @@ extension _CharacterClassModel {
391301 }
392302}
393303
394- extension DSLTree . Node {
395- var characterClass : _CharacterClassModel ? {
396- switch self {
397- case let . customCharacterClass( ccc) :
398- return ccc. modelCharacterClass
399- case let . atom( a) :
400- return a. characterClass
401- case . characterPredicate:
402- // FIXME: Do we make one from this?
403- return nil
404- default :
405- return nil
406- }
407- }
408- }
409-
410304extension _CharacterClassModel {
411305 func withMatchLevel(
412306 _ level: _CharacterClassModel . MatchLevel
@@ -417,17 +311,6 @@ extension _CharacterClassModel {
417311 }
418312}
419313
420- extension DSLTree . Atom {
421- var characterClass : _CharacterClassModel ? {
422- switch self {
423- case let . unconverted( a) :
424- return a. ast. characterClass
425-
426- default : return nil
427- }
428- }
429- }
430-
431314extension AST . Atom {
432315 var characterClass : _CharacterClassModel ? {
433316 switch kind {
@@ -489,81 +372,6 @@ extension AST.Atom.EscapedBuiltin {
489372 }
490373}
491374
492- extension DSLTree . CustomCharacterClass {
493- // TODO: Refactor a bit, and... can we drop this type?
494- var modelCharacterClass : _CharacterClassModel ? {
495- var result =
496- Array < _CharacterClassModel . CharacterSetComponent > ( )
497- for m in members {
498- switch m {
499- case let . atom( a) :
500- if let cc = a. characterClass {
501- result. append ( . characterClass( cc) )
502- } else if let c = a. literalCharacterValue {
503- result. append ( . character( c) )
504- } else {
505- return nil
506- }
507- case let . range( low, high) :
508- guard let lhs = low. literalCharacterValue,
509- let rhs = high. literalCharacterValue
510- else {
511- return nil
512- }
513- result. append ( . range( lhs... rhs) )
514-
515- case let . custom( ccc) :
516- guard let cc = ccc. modelCharacterClass else {
517- return nil
518- }
519- result. append ( . characterClass( cc) )
520-
521- case let . intersection( lhs, rhs) :
522- guard let lhs = lhs. modelCharacterClass,
523- let rhs = rhs. modelCharacterClass
524- else {
525- return nil
526- }
527- result. append ( . setOperation(
528- lhs: . characterClass( lhs) ,
529- op: . intersection,
530- rhs: . characterClass( rhs) ) )
531-
532- case let . subtraction( lhs, rhs) :
533- guard let lhs = lhs. modelCharacterClass,
534- let rhs = rhs. modelCharacterClass
535- else {
536- return nil
537- }
538- result. append ( . setOperation(
539- lhs: . characterClass( lhs) ,
540- op: . subtraction,
541- rhs: . characterClass( rhs) ) )
542-
543- case let . symmetricDifference( lhs, rhs) :
544- guard let lhs = lhs. modelCharacterClass,
545- let rhs = rhs. modelCharacterClass
546- else {
547- return nil
548- }
549- result. append ( . setOperation(
550- lhs: . characterClass( lhs) ,
551- op: . symmetricDifference,
552- rhs: . characterClass( rhs) ) )
553-
554- case let . quotedLiteral( s) :
555- // Decompose quoted literal into literal characters.
556- result += s. map { . character( $0) }
557-
558- case . trivia:
559- break
560- }
561- }
562- let cc = _CharacterClassModel. custom ( result)
563- return isInverted ? cc. inverted : cc
564- }
565- }
566-
567375extension _CharacterClassModel {
568376 // FIXME: Calling on inverted sets wont be the same as the
569377 // inverse of a boundary if at the start or end of the
0 commit comments