@@ -46,27 +46,31 @@ const unescapedCharInsideBrackets = P.satisfy(Range.mustBeEscapedOrInBrackets)
4646
4747export class UnsupportedSyntaxError extends Error { }
4848
49- const escapeSequence = P . string ( '\\' ) . andThen ( _ => P . anyChar ) . map ( escapedChar => {
49+ const escapeSequence = P . string ( '\\' ) . andThen ( _ => P . anyChar ) . andThen ( escapedChar => {
5050 switch ( escapedChar ) {
51- case 'w' : return CharSet . wordChars
52- case 'W' : return CharSet . nonWordChars
53- case 's' : return CharSet . whiteSpaceChars
54- case 'S' : return CharSet . nonWhiteSpaceChars
55- case 'd' : return CharSet . digitChars
56- case 'D' : return CharSet . nonDigitChars
57- case 't' : return CharSet . singleton ( '\t' ) // horizontal tab
58- case 'r' : return CharSet . singleton ( '\r' ) // carriage return
59- case 'n' : return CharSet . singleton ( '\n' ) // line feed
60- case 'v' : return CharSet . singleton ( '\v' ) // vertical tab
61- case 'f' : return CharSet . singleton ( '\f' ) // form feed
62- case '0' : return CharSet . singleton ( '\0' ) // NUL character
51+ case 'w' : return P . pure ( CharSet . wordChars )
52+ case 'W' : return P . pure ( CharSet . nonWordChars )
53+ case 's' : return P . pure ( CharSet . whiteSpaceChars )
54+ case 'S' : return P . pure ( CharSet . nonWhiteSpaceChars )
55+ case 'd' : return P . pure ( CharSet . digitChars )
56+ case 'D' : return P . pure ( CharSet . nonDigitChars )
57+ case 't' : return P . pure ( CharSet . singleton ( '\t' ) ) // horizontal tab
58+ case 'r' : return P . pure ( CharSet . singleton ( '\r' ) ) // carriage return
59+ case 'n' : return P . pure ( CharSet . singleton ( '\n' ) ) // line feed
60+ case 'v' : return P . pure ( CharSet . singleton ( '\v' ) ) // vertical tab
61+ case 'f' : return P . pure ( CharSet . singleton ( '\f' ) ) // form feed
62+ case '0' : return P . pure ( CharSet . singleton ( '\0' ) ) // NUL character
6363 case 'b' : throw new UnsupportedSyntaxError ( '\b word-boundary assertion not supported' )
6464 case 'c' : throw new UnsupportedSyntaxError ( '\cX control characters not supported' )
65- case 'x' : throw new UnsupportedSyntaxError ( '\\x not supported' )
66- case 'u' : throw new UnsupportedSyntaxError ( '\\u not supported' )
65+ case 'x' : return P . count ( 2 , P . hexChar ) . map ( chars =>
66+ CharSet . fromRange ( Range . singleton ( parseInt ( chars . join ( '' ) , 16 ) ) )
67+ )
68+ case 'u' : return P . count ( 4 , P . hexChar ) . map ( chars =>
69+ CharSet . fromRange ( Range . singleton ( parseInt ( chars . join ( '' ) , 16 ) ) )
70+ )
6771 case 'p' : throw new UnsupportedSyntaxError ( '\\p not supported' )
6872 case 'P' : throw new UnsupportedSyntaxError ( '\\P not supported' )
69- default : return CharSet . singleton ( escapedChar ) // match character literally
73+ default : return P . pure ( CharSet . singleton ( escapedChar ) ) // match character literally
7074 }
7175} )
7276
0 commit comments