more quoted string splitting/joining utils
This commit is contained in:
		
							parent
							
								
									a447e2c56b
								
							
						
					
					
						commit
						666218dd62
					
				| @ -74,13 +74,24 @@ quoteIfSpaced s | isSingleQuoted s || isDoubleQuoted s = s | ||||
|                   where escapeSingleQuotes = regexReplace "'" "\'" | ||||
| 
 | ||||
| -- | Quote-aware version of words - don't split on spaces which are inside quotes. | ||||
| -- NB correctly handles "a'b" but not "''a''". | ||||
| words' :: String -> [String] | ||||
| words' = map stripquotes . fromparse . parsewith ((quotedPattern <|> pattern) `sepBy` many1 spacenonewline) | ||||
| words' = map stripquotes . fromparse . parsewith p | ||||
|     where | ||||
|       p = do ss <- (quotedPattern <|> pattern) `sepBy` many1 spacenonewline | ||||
|              -- eof | ||||
|              return ss | ||||
|       pattern = many (noneOf whitespacechars) | ||||
|       quotedPattern = between (oneOf "'\"") (oneOf "'\"") $ many $ noneOf "'\"" | ||||
| 
 | ||||
| whitespacechars = " \t\n\r\'\"" | ||||
| -- | Quote-aware version of unwords - single-quote strings which contain whitespace | ||||
| unwords' :: [String] -> String | ||||
| unwords' = unwords . map singleQuoteIfNeeded | ||||
| 
 | ||||
| singleQuoteIfNeeded s | any (`elem` s) whitespacechars = "'"++s++"'" | ||||
|                       | otherwise = s | ||||
| 
 | ||||
| whitespacechars = " \t\n\r" | ||||
| 
 | ||||
| -- | Strip one matching pair of single or double quotes on the ends of a string. | ||||
| stripquotes :: String -> String | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user