packages feed

keyword-args 0.1.0.4 → 0.1.0.5

raw patch · 3 files changed

+44/−40 lines, 3 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

keyword-args.cabal view
@@ -1,5 +1,5 @@ name:                keyword-args-version:             0.1.0.4+version:             0.1.0.5 synopsis:            Extract data from a keyword-args config file format  description: Extracts data from a configuration file with keywords@@ -28,7 +28,7 @@    hs-source-dirs:      src   default-language:    Haskell2010-+  ghc-options:         -Wall  library   exposed-modules:    Data.KeywordArgs.Parse@@ -38,7 +38,7 @@    hs-source-dirs:      src   default-language:    Haskell2010-+  ghc-options:         -Wall  test-suite keyword-args-test   type: exitcode-stdio-1.0@@ -51,6 +51,7 @@                        , hspec    default-language:    Haskell2010+  ghc-options:         -Wall  source-repository head   type:     git
src/Data/KeywordArgs/Parse.hs view
@@ -1,14 +1,12 @@ module Data.KeywordArgs.Parse (configParser) where  import Data.Maybe (catMaybes)-import Data.Char (isSpace) -import Text.Parsec ((<|>), many, try, manyTill, char, anyChar, many1, satisfy)+import Text.Parsec ((<|>), many, try, manyTill, char, anyChar, many1) import Text.Parsec.String (Parser) -import Text.ParserCombinators.Parsec.Prim hiding (try)-import Text.ParserCombinators.Parsec.Char (string, space, tab, newline,-                                           alphaNum)+import Text.ParserCombinators.Parsec.Prim (GenParser)+import Text.ParserCombinators.Parsec.Char (space, newline, oneOf, noneOf)  import Control.Monad (liftM2) @@ -22,36 +20,30 @@ configParser :: Parser [(String, String)] configParser = catMaybes <$> many line --manyTill1 :: GenParser tok st a -> GenParser tok st end -> GenParser tok st [a]-manyTill1 p end = liftM2 (:) p (manyTill p end)--isValidKeyChar :: Char -> Bool-isValidKeyChar c =  c /= '#' && (not . isSpace) c---isValidValueChar :: Char -> Bool-isValidValueChar c =  c /= '#'-+line :: Parser (Maybe (String, String))+line = comment *> return Nothing <|> Just <$> configurationOption  configurationOption :: Parser (String, String) configurationOption = do-  many space+  _ <- many space -  keyword <- manyTill1 (satisfy isValidKeyChar) (many1 (char ' '))+  keyword <- manyTill1 anyChar keywordArgSeparator+  val     <- value -  let-    endOfOption   = endOfLineOrInput <|> comment+  return (keyword, val) -    quotedValue   = char '"' *>-                    manyTill1 (satisfy isValidValueChar) (try (char '"')) <*-                    endOfOption+value :: Parser String+value =+  unquotedValue <|> quotedValue -    unquotedValue = manyTill1 (satisfy isValidValueChar) endOfOption+  where+    endOfOption   = endOfLineOrInput <|> comment -  value <- quotedValue <|> unquotedValue+    quotedValue   = quote+                    *> manyTill1 argumentChar quote+                    <* endOfOption -  return (keyword, value)+    unquotedValue = manyTill1 argumentChar endOfOption  comment :: Parser () comment =@@ -62,5 +54,14 @@ endOfLineOrInput :: Parser () endOfLineOrInput = newline *> return () <|> eof -line :: Parser (Maybe (String, String))-line = comment *> return Nothing <|> Just <$> configurationOption+manyTill1 :: GenParser tok st a -> GenParser tok st end -> GenParser tok st [a]+manyTill1 p end = liftM2 (:) p (manyTill p end)++argumentChar :: Parser Char+argumentChar =  noneOf "#\""++keywordArgSeparator :: Parser ()+keywordArgSeparator = many1 (oneOf "\t ") *> return ()++quote :: Parser Char+quote = char '"'
src/Main.hs view
@@ -5,11 +5,9 @@ import System.Console.GetOpt  import System.Environment (getArgs, getProgName)-import System.Exit (ExitCode(..), exitWith, exitSuccess)-import System.IO.Error (ioError)+import System.Exit (exitSuccess)  import Paths_keyword_args (version)-import Data.Maybe (fromMaybe)  import Data.Version (showVersion) @@ -18,7 +16,6 @@ import Data.KeywordArgs.Parse  import Text.Parsec-import Text.ParserCombinators.Parsec.Error (ParseError)  import Data.Csv (encode) @@ -27,6 +24,7 @@     , optShowHelp    :: Bool     } deriving Show +defaultOptions :: Options defaultOptions = Options     { optShowVersion = False     , optShowHelp    = False@@ -34,20 +32,26 @@  options :: [OptDescr (Options -> Options)] options =-  [ Option ['V'] ["version"] (NoArg (\opts -> opts { optShowVersion = True }))+  [ Option "V" ["version"] (NoArg (\opts -> opts { optShowVersion = True }))     "show version number" -  , Option ['h'] ["help"]    (NoArg (\opts -> opts { optShowHelp = True }))+  , Option "h" ["help"]    (NoArg (\opts -> opts { optShowHelp = True }))     "show help"   ] +showHelp :: IO () showHelp = do   prg <- getProgName   putStrLn (usageInfo prg options)   exitSuccess  headerMessage :: String -> String-headerMessage progName = "Usage: " ++ progName ++ " [OPTION...]"+headerMessage progName =+  unlines [+    progName ++ " " +++    "cleans up whitespace and comments in keyword-argument input " +++    "and emits CSV output.\n"+    , "Usage: " ++ progName ++ " [OPTION...]"]  lintOpts :: [String] -> IO (Options, [String]) lintOpts argv = do@@ -63,14 +67,12 @@  runCheck :: IO () runCheck = do-   f <- getContents    case parseConfig f of     Left e -> ioError $ userError $ "Parse error: " ++ show e      Right config -> putStr $ unpack $ encode config-  main :: IO () main = do