dotenv 0.1.0.3 → 0.1.0.4
raw patch · 2 files changed
+31/−17 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- dotenv.cabal +1/−1
- src/Configuration/Dotenv/Parse.hs +30/−16
dotenv.cabal view
@@ -1,5 +1,5 @@ name: dotenv-version: 0.1.0.3+version: 0.1.0.4 synopsis: Loads environment variables from dotenv files description:
src/Configuration/Dotenv/Parse.hs view
@@ -1,6 +1,6 @@ module Configuration.Dotenv.Parse (configParser) where -import Text.Parsec ((<|>), anyChar, char, many, manyTill, try)+import Text.Parsec ((<|>), (<?>), anyChar, char, many, manyTill, try) import Text.Parsec.Combinator (eof) import Text.Parsec.String (Parser) import Text.ParserCombinators.Parsec.Char@@ -21,47 +21,61 @@ envLine = (comment <|> blankLine) *> return Nothing <|> Just <$> optionLine blankLine :: Parser String-blankLine = many verticalSpace <* newline+blankLine = many verticalSpace <* newline <?> "blank line" optionLine :: Parser (String, String) optionLine = liftM2 (,)- (many verticalSpace *> variableName <* keywordArgSeparator)- argumentParser+ (many verticalSpace *> variableName <* variableValueSeparator)+ value -- | Variables must start with a letter or underscore, and may contain -- letters, digits or '_' character after the first character. variableName :: Parser String variableName =- liftM2 (:) (letter <|> char '_') (many (letter <|> char '_' <|> digit))+ liftM2 (:) -argumentParser :: Parser String-argumentParser = quotedArgument <|> unquotedArgument+ (letter <|> char '_') -quotedArgument :: Parser String-quotedArgument = quotedWith '\'' <|> quotedWith '\"'+ (many+ (letter <|> char '_' <|> digit <?>+ unwords+ [ "valid non-leading shell variable character (alphanumeric, "+ , "digit or underscore)" ])) -unquotedArgument :: Parser String-unquotedArgument =+ <?> unwords [ "shell variable name (letter or underscore followed"+ , "by alphanumeric characters or underscores)" ]++value :: Parser String+value = quotedValue <|> unquotedValue <?> "variable value"++quotedValue :: Parser String+quotedValue = quotedWith '\'' <|> quotedWith '\"'+ <?> "variable value surrounded with single or double quotes"++unquotedValue :: Parser String+unquotedValue = manyTill anyChar (comment <|> many verticalSpace <* endOfLineOrInput) -- | Based on a commented-string parser in: -- http://hub.darcs.net/navilan/XMonadTasks/raw/Data/Config/Lexer.hs quotedWith :: Char -> Parser String-quotedWith c = char c *> many chr <* char c+quotedWith c = char c *> many chr <* (char c <?> "closing quote character") where chr = esc <|> noneOf [c]- esc = escape *> char c+ esc = escape *> char c <?> "escape character" comment :: Parser String comment = try (many verticalSpace *> char '#') *> manyTill anyChar endOfLineOrInput+ <?> "comment" endOfLineOrInput :: Parser () endOfLineOrInput = newline *> return () <|> eof -keywordArgSeparator :: Parser ()-keywordArgSeparator =- many verticalSpace *> char '=' *> many verticalSpace *> return ()+variableValueSeparator :: Parser ()+variableValueSeparator =+ many verticalSpace *> (char '=' <?> "variable-value separator character (=)")+ *> many verticalSpace *> return () escape :: Parser Char escape = char '\\'