@@ -50,74 +50,6 @@ public struct _CharacterClassModel: Hashable {
50
50
case whitespace
51
51
/// Character.isLetter or Character.isDigit or Character == "_"
52
52
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
- }
121
53
}
122
54
123
55
enum MatchLevel : Hashable {
@@ -188,8 +120,6 @@ public struct _CharacterClassModel: Hashable {
188
120
matched = c. isWhitespace && ( c. isASCII || !options. usesASCIISpaces)
189
121
case . word:
190
122
matched = c. isWordCharacter && ( c. isASCII || !options. usesASCIIWord)
191
- case . custom( let set) :
192
- matched = set. any { $0. matches ( c, with: options) }
193
123
}
194
124
if isInverted {
195
125
matched. toggle ( )
@@ -222,8 +152,6 @@ public struct _CharacterClassModel: Hashable {
222
152
matched = c. properties. isWhitespace && ( c. isASCII || !options. usesASCIISpaces)
223
153
case . word:
224
154
matched = ( c. properties. isAlphabetic || c == " _ " ) && ( c. isASCII || !options. usesASCIIWord)
225
- case . custom( let set) :
226
- matched = set. any { $0. matches ( Character ( c) , with: options) }
227
155
}
228
156
if isInverted {
229
157
matched. toggle ( )
@@ -286,23 +214,6 @@ extension _CharacterClassModel {
286
214
public static var word : _CharacterClassModel {
287
215
. init( cc: . word, matchLevel: . graphemeCluster)
288
216
}
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
- }
306
217
}
307
218
308
219
extension _CharacterClassModel . Representation : CustomStringConvertible {
@@ -318,7 +229,6 @@ extension _CharacterClassModel.Representation: CustomStringConvertible {
318
229
case . verticalWhitespace: return " vertical whitespace "
319
230
case . whitespace: return " <whitespace> "
320
231
case . word: return " <word> "
321
- case . custom( let set) : return " <custom \( set) > "
322
232
}
323
233
}
324
234
}
@@ -391,22 +301,6 @@ extension _CharacterClassModel {
391
301
}
392
302
}
393
303
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
-
410
304
extension _CharacterClassModel {
411
305
func withMatchLevel(
412
306
_ level: _CharacterClassModel . MatchLevel
@@ -417,17 +311,6 @@ extension _CharacterClassModel {
417
311
}
418
312
}
419
313
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
-
431
314
extension AST . Atom {
432
315
var characterClass : _CharacterClassModel ? {
433
316
switch kind {
@@ -489,81 +372,6 @@ extension AST.Atom.EscapedBuiltin {
489
372
}
490
373
}
491
374
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
-
567
375
extension _CharacterClassModel {
568
376
// FIXME: Calling on inverted sets wont be the same as the
569
377
// inverse of a boundary if at the start or end of the
0 commit comments