@@ -3,18 +3,27 @@ import Foundation
3
3
@testable @_spi ( RegexBuilder) import _StringProcessing
4
4
5
5
struct ExpressionParser {
6
+ struct Modes {
7
+ let matchingOptions : [ String ]
8
+
9
+ var i : Bool { matchingOptions. contains ( " i " ) }
10
+ var s : Bool { matchingOptions. contains ( " s " ) }
11
+ }
12
+
6
13
private( set) var tokens = [ Token] ( )
7
14
private( set) var diagnostics : Diagnostics ?
8
15
9
16
private let pattern : String
10
- private let insensitive : Bool
17
+ private let matchingOptions : [ String ]
18
+ private let modes : Modes
11
19
12
20
private var depth = 0
13
21
private var groupCount = 0
14
22
15
- init ( pattern: String , insensitive : Bool = true ) {
23
+ init ( pattern: String , matchingOptions : [ String ] ) {
16
24
self . pattern = pattern
17
- self . insensitive = insensitive
25
+ self . matchingOptions = matchingOptions
26
+ modes = Modes ( matchingOptions: matchingOptions)
18
27
}
19
28
20
29
mutating func parse( ) {
@@ -516,7 +525,7 @@ struct ExpressionParser {
516
525
substitution = [
517
526
" {{getChar()}} " : #"" \#( c) ""# ,
518
527
" {{code}} " : charcode,
519
- " {{getInsensitive()}} " : " Case \( insensitive ? " in " : " " ) sensitive "
528
+ " {{getInsensitive()}} " : " Case \( modes . i ? " in " : " " ) sensitive "
520
529
]
521
530
} else {
522
531
`class` = " char "
@@ -525,7 +534,7 @@ struct ExpressionParser {
525
534
substitution = [
526
535
" {{getChar()}} " : #"" \#( c) ""# ,
527
536
" {{code}} " : charcode,
528
- " {{getInsensitive()}} " : " Case \( insensitive ? " in " : " " ) sensitive "
537
+ " {{getInsensitive()}} " : " Case \( modes . i ? " in " : " " ) sensitive "
529
538
]
530
539
}
531
540
case . scalar( let scalar) :
@@ -535,7 +544,7 @@ struct ExpressionParser {
535
544
substitution = [
536
545
" {{getChar()}} " : #"" \#( String ( scalar. value) ) ""# ,
537
546
" {{code}} " : String ( format: " U+%X " , scalar. value. value) ,
538
- " {{getInsensitive()}} " : " Case \( insensitive ? " in " : " " ) sensitive "
547
+ " {{getInsensitive()}} " : " Case \( modes . i ? " in " : " " ) sensitive "
539
548
]
540
549
case . scalarSequence( let scalarSequence) :
541
550
let scalars = scalarSequence. scalars
@@ -548,7 +557,7 @@ struct ExpressionParser {
548
557
substitution = [
549
558
" {{getChar()}} " : #"" \#( value) ""# ,
550
559
" {{code}} " : charcode,
551
- " {{getInsensitive()}} " : " Case \( insensitive ? " in " : " " ) sensitive "
560
+ " {{getInsensitive()}} " : " Case \( modes . i ? " in " : " " ) sensitive "
552
561
]
553
562
case . property( let prop) :
554
563
`class` = " charclass "
@@ -994,6 +1003,7 @@ struct ExpressionParser {
994
1003
`class` = " charclass "
995
1004
category = " charclasses "
996
1005
key = " dot "
1006
+ substitution = [ " {{getDotAll()}} " : " \( modes. s ? " including " : " except " ) line breaks " ]
997
1007
case . caretAnchor:
998
1008
`class` = " anchor "
999
1009
category = " anchors "
0 commit comments