15
15
@available ( SwiftStdlib 5 . 7 , * )
16
16
public struct CharacterClass {
17
17
internal var ccc : DSLTree . CustomCharacterClass
18
+ /// The builtin character class, if this CharacterClass is representable by one
19
+ internal var builtin : DSLTree . Atom . CharacterClass ?
18
20
19
21
init ( _ ccc: DSLTree . CustomCharacterClass ) {
20
22
self . ccc = ccc
23
+ self . builtin = nil
21
24
}
22
25
23
- init ( unconverted atom: DSLTree . _AST . Atom ) {
24
- self . ccc = . init( members: [ . atom( . unconverted( atom) ) ] )
26
+ init ( builtin: DSLTree . Atom . CharacterClass ) {
27
+ self . ccc = . init( members: [ . atom( . characterClass( builtin) ) ] )
28
+ self . builtin = builtin
25
29
}
26
30
}
27
31
28
32
@available ( SwiftStdlib 5 . 7 , * )
29
33
extension CharacterClass : RegexComponent {
30
34
public var regex : Regex < Substring > {
31
- _RegexFactory ( ) . customCharacterClass ( ccc)
35
+ if let cc = builtin {
36
+ return _RegexFactory ( ) . characterClass ( cc)
37
+ } else {
38
+ return _RegexFactory ( ) . customCharacterClass ( ccc)
39
+ }
32
40
}
33
41
}
34
42
35
43
@available ( SwiftStdlib 5 . 7 , * )
36
44
extension CharacterClass {
37
45
public var inverted : CharacterClass {
38
- CharacterClass ( ccc. inverted)
46
+ if let inv = builtin? . inverted {
47
+ return CharacterClass ( builtin: inv)
48
+ } else {
49
+ return CharacterClass ( ccc. inverted)
50
+ }
39
51
}
40
52
}
41
53
@@ -50,15 +62,15 @@ extension RegexComponent where Self == CharacterClass {
50
62
}
51
63
52
64
public static var anyGraphemeCluster : CharacterClass {
53
- . init( unconverted : . _anyGrapheme )
65
+ . init( builtin : . anyGrapheme )
54
66
}
55
67
56
68
public static var whitespace : CharacterClass {
57
- . init( unconverted : . _whitespace )
69
+ . init( builtin : . whitespace )
58
70
}
59
71
60
72
public static var digit : CharacterClass {
61
- . init( unconverted : . _digit )
73
+ . init( builtin : . digit )
62
74
}
63
75
64
76
public static var hexDigit : CharacterClass {
@@ -70,19 +82,19 @@ extension RegexComponent where Self == CharacterClass {
70
82
}
71
83
72
84
public static var horizontalWhitespace : CharacterClass {
73
- . init( unconverted : . _horizontalWhitespace )
85
+ . init( builtin : . horizontalWhitespace )
74
86
}
75
87
76
88
public static var newlineSequence : CharacterClass {
77
- . init( unconverted : . _newlineSequence )
89
+ . init( builtin : . newlineSequence )
78
90
}
79
91
80
92
public static var verticalWhitespace : CharacterClass {
81
- . init( unconverted : . _verticalWhitespace )
93
+ . init( builtin : . verticalWhitespace )
82
94
}
83
95
84
96
public static var word : CharacterClass {
85
- . init( unconverted : . _word )
97
+ . init( builtin : . word )
86
98
}
87
99
}
88
100
0 commit comments