module DisTract.Config.Parser
(parseConfig,
findUserInPrefsBranch
)
where
import DisTract.Monotone.Parser (handleParseError)
import qualified Data.Map as M
import Text.ParserCombinators.Parsec
parseConfig :: String -> M.Map String String
parseConfig = handleParseError . runParser (configParser M.empty) ()
"DisTract.Config.Parser"
configParser :: (M.Map String String) -> Parser (M.Map String String)
configParser m = do { key <- manyTill anyChar (try (char '='))
; value <- manyTill anyChar
((try (do {newline; return ()})) <|> eof)
; rest <- configParser m
; return (M.insert key value rest)
}
<|> return m
findUserInPrefsBranch :: String -> String
findUserInPrefsBranch = handleParseError . runParser parseUserBranch ()
"DisTract.Config.Parser userBranch"
parseUserBranch :: Parser String
parseUserBranch = do { manyTill anyChar (try (string ".prefs."))
; user <- manyTill anyChar
((try (do {newline; return ()})) <|> eof)
; return user
}