regexp: slightly more complicated tokenization to handle another case.
R/ [^/]/ R/ (/|abc)/windows-drag
parent
d59292faf6
commit
9f0bce7622
|
@ -197,11 +197,27 @@ PRIVATE>
|
||||||
|
|
||||||
<PRIVATE
|
<PRIVATE
|
||||||
|
|
||||||
: take-until ( lexer -- string )
|
:: (take-until) ( col line end -- col' line )
|
||||||
dup skip-blank [
|
"\\" end suffix :> tokens
|
||||||
|
col line [
|
||||||
|
[ [ tokens member? ] find-from ] keep swap [
|
||||||
|
CHAR: \ = [ [ 2 + ] dip t ] [ [ 1 + ] dip f ] if
|
||||||
|
] [
|
||||||
|
"Unterminated regexp" throw
|
||||||
|
] if*
|
||||||
|
] loop ;
|
||||||
|
|
||||||
|
:: take-until ( lexer -- string )
|
||||||
|
lexer skip-blank
|
||||||
|
lexer [
|
||||||
dupd [
|
dupd [
|
||||||
[ [ "\\/" member? ] find-from ] keep swap [
|
[ [ "[(\\/" member? ] find-from ] keep swap [
|
||||||
CHAR: \ = [ [ 2 + ] dip t ] [ f ] if
|
{
|
||||||
|
{ CHAR: [ [ CHAR: ] (take-until) t ] }
|
||||||
|
{ CHAR: ( [ CHAR: ) (take-until) t ] }
|
||||||
|
{ CHAR: \ [ [ 2 + ] dip t ] }
|
||||||
|
{ CHAR: / [ f ] }
|
||||||
|
} case
|
||||||
] [
|
] [
|
||||||
"Unterminated regexp" throw
|
"Unterminated regexp" throw
|
||||||
] if*
|
] if*
|
||||||
|
|
Loading…
Reference in New Issue