@@ -3,18 +3,27 @@ import Foundation
33@testable @_spi ( RegexBuilder) import _StringProcessing
44
55struct 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+
613 private( set) var tokens = [ Token] ( )
714 private( set) var diagnostics : Diagnostics ?
815
916 private let pattern : String
10- private let insensitive : Bool
17+ private let matchingOptions : [ String ]
18+ private let modes : Modes
1119
1220 private var depth = 0
1321 private var groupCount = 0
1422
15- init ( pattern: String , insensitive : Bool = true ) {
23+ init ( pattern: String , matchingOptions : [ String ] ) {
1624 self . pattern = pattern
17- self . insensitive = insensitive
25+ self . matchingOptions = matchingOptions
26+ modes = Modes ( matchingOptions: matchingOptions)
1827 }
1928
2029 mutating func parse( ) {
@@ -516,7 +525,7 @@ struct ExpressionParser {
516525 substitution = [
517526 " {{getChar()}} " : #"" \#( c) ""# ,
518527 " {{code}} " : charcode,
519- " {{getInsensitive()}} " : " Case \( insensitive ? " in " : " " ) sensitive "
528+ " {{getInsensitive()}} " : " Case \( modes . i ? " in " : " " ) sensitive "
520529 ]
521530 } else {
522531 `class` = " char "
@@ -525,7 +534,7 @@ struct ExpressionParser {
525534 substitution = [
526535 " {{getChar()}} " : #"" \#( c) ""# ,
527536 " {{code}} " : charcode,
528- " {{getInsensitive()}} " : " Case \( insensitive ? " in " : " " ) sensitive "
537+ " {{getInsensitive()}} " : " Case \( modes . i ? " in " : " " ) sensitive "
529538 ]
530539 }
531540 case . scalar( let scalar) :
@@ -535,7 +544,7 @@ struct ExpressionParser {
535544 substitution = [
536545 " {{getChar()}} " : #"" \#( String ( scalar. value) ) ""# ,
537546 " {{code}} " : String ( format: " U+%X " , scalar. value. value) ,
538- " {{getInsensitive()}} " : " Case \( insensitive ? " in " : " " ) sensitive "
547+ " {{getInsensitive()}} " : " Case \( modes . i ? " in " : " " ) sensitive "
539548 ]
540549 case . scalarSequence( let scalarSequence) :
541550 let scalars = scalarSequence. scalars
@@ -548,7 +557,7 @@ struct ExpressionParser {
548557 substitution = [
549558 " {{getChar()}} " : #"" \#( value) ""# ,
550559 " {{code}} " : charcode,
551- " {{getInsensitive()}} " : " Case \( insensitive ? " in " : " " ) sensitive "
560+ " {{getInsensitive()}} " : " Case \( modes . i ? " in " : " " ) sensitive "
552561 ]
553562 case . property( let prop) :
554563 `class` = " charclass "
@@ -994,6 +1003,7 @@ struct ExpressionParser {
9941003 `class` = " charclass "
9951004 category = " charclasses "
9961005 key = " dot "
1006+ substitution = [ " {{getDotAll()}} " : " \( modes. s ? " including " : " except " ) line breaks " ]
9971007 case . caretAnchor:
9981008 `class` = " anchor "
9991009 category = " anchors "
0 commit comments