Support for recursive regex groups
This commit is contained in:
parent
0a2314cdcd
commit
e84d5abc3e
|
@ -341,7 +341,7 @@ readConditionContents single = do
|
||||||
try (string "=~") <|> try (string "~=")
|
try (string "=~") <|> try (string "~=")
|
||||||
return True)
|
return True)
|
||||||
<|> return False
|
<|> return False
|
||||||
readRegex = called "regex" $ do
|
readRegex = called "regex" $ do
|
||||||
id <- getNextId
|
id <- getNextId
|
||||||
parts <- many1 (readGroup <|> readSingleQuoted <|> readDoubleQuoted <|> readDollarExpression <|> readNormalLiteral "( " <|> readGlobLiteral)
|
parts <- many1 (readGroup <|> readSingleQuoted <|> readDoubleQuoted <|> readDollarExpression <|> readNormalLiteral "( " <|> readGlobLiteral)
|
||||||
disregard spacing
|
disregard spacing
|
||||||
|
@ -351,12 +351,16 @@ readConditionContents single = do
|
||||||
id <- getNextId
|
id <- getNextId
|
||||||
s <- many1 (extglobStart <|> oneOf "[]$")
|
s <- many1 (extglobStart <|> oneOf "[]$")
|
||||||
return $ T_Literal id s
|
return $ T_Literal id s
|
||||||
readGroup = do -- Fixme: account for vars and quotes in groups
|
readGroup = called "regex grouping" $ do
|
||||||
id <- getNextId
|
id <- getNextId
|
||||||
char '('
|
char '('
|
||||||
s <- readGenericLiteral (char ')')
|
parts <- many (readGroup <|> readSingleQuoted <|> readDoubleQuoted <|> readDollarExpression <|> readRegexLiteral <|> readGlobLiteral)
|
||||||
char ')'
|
char ')'
|
||||||
return $ T_Literal id $ "(" ++ s ++ ")"
|
return $ T_NormalWord id parts
|
||||||
|
readRegexLiteral = do
|
||||||
|
id <- getNextId
|
||||||
|
str <- readGenericLiteral1 (singleQuote <|> doubleQuotable <|> oneOf "()")
|
||||||
|
return $ T_Literal id str
|
||||||
|
|
||||||
readCondTerm = readCondNot <|> readCondExpr
|
readCondTerm = readCondNot <|> readCondExpr
|
||||||
readCondNot = do
|
readCondNot = do
|
||||||
|
@ -549,6 +553,8 @@ prop_readCondition2 = isOk readCondition "[[ (a = b) || (c = d) ]]"
|
||||||
prop_readCondition3 = isOk readCondition "[[ $c = [[:alpha:].~-] ]]"
|
prop_readCondition3 = isOk readCondition "[[ $c = [[:alpha:].~-] ]]"
|
||||||
prop_readCondition4 = isOk readCondition "[[ $c =~ *foo* ]]"
|
prop_readCondition4 = isOk readCondition "[[ $c =~ *foo* ]]"
|
||||||
prop_readCondition5 = isOk readCondition "[[ $c =~ f( ]] )* ]]"
|
prop_readCondition5 = isOk readCondition "[[ $c =~ f( ]] )* ]]"
|
||||||
|
prop_readCondition5a= isOk readCondition "[[ $c =~ a(b) ]]"
|
||||||
|
prop_readCondition5b= isOk readCondition "[[ $c =~ f( ($var ]]) )* ]]"
|
||||||
prop_readCondition6 = isOk readCondition "[[ $c =~ ^[yY]$ ]]"
|
prop_readCondition6 = isOk readCondition "[[ $c =~ ^[yY]$ ]]"
|
||||||
prop_readCondition7 = isOk readCondition "[[ ${line} =~ ^[[:space:]]*# ]]"
|
prop_readCondition7 = isOk readCondition "[[ ${line} =~ ^[[:space:]]*# ]]"
|
||||||
readCondition = called "test expression" $ do
|
readCondition = called "test expression" $ do
|
||||||
|
|
Loading…
Reference in New Issue