module Development.Shake.Language.C.Util (
mapFlag
, concatMapFlag
, escapeSpaces
, words'
) where
import Data.List
mapFlag :: String -> [String] -> [String]
mapFlag f = concatMap (\x -> [f, x])
concatMapFlag :: String -> [String] -> [String]
concatMapFlag f = map (f++)
escapeSpaces :: String -> String
escapeSpaces [] = []
escapeSpaces (' ':xs) = '\\' : ' ' : escapeSpaces xs
escapeSpaces ('\\':xs) = '\\' : '\\' : escapeSpaces xs
escapeSpaces (x:xs) = x : escapeSpaces xs
words' :: String -> [String]
words' = unescape . words
where
escape = "\\"
escapeLength = length escape
isEscaped = isSuffixOf escape
dropEscape = (++" ") . reverse . drop escapeLength . reverse
unescape [] = []
unescape [x] = [if isEscaped x then dropEscape x else x]
unescape (x1:x2:xs)
| isEscaped x1 = unescape ((dropEscape x1 ++ x2):xs)
| otherwise = [x1] ++ unescape (x2:xs)