diff options
| -rw-r--r-- | src/Parsers.hs | 31 | 
1 files changed, 21 insertions, 10 deletions
| diff --git a/src/Parsers.hs b/src/Parsers.hs index 414f324..919ce68 100644 --- a/src/Parsers.hs +++ b/src/Parsers.hs @@ -37,16 +37,20 @@ type ColorString = String  parseString :: Config -> String -> IO [(Widget, ColorString, Maybe Action)]  parseString c s =      case parse (stringParser (fgColor c) Nothing) "" s of -      Left  _ -> return [(Text $ "Could not parse string: " ++ s, fgColor c, Nothing)] +      Left  _ -> return [(Text $ "Could not parse string: " ++ s +                          , fgColor c +                          , Nothing)]        Right x -> return (concat x)  -- | Gets the string and combines the needed parsers -stringParser :: String -> Maybe Action -> Parser [[(Widget, ColorString, Maybe Action)]] +stringParser :: String -> Maybe Action +                -> Parser [[(Widget, ColorString, Maybe Action)]]  stringParser c a = manyTill (textParser c a <|> try (iconParser c a) <|>                               try (actionParser c) <|> colorParser a) eof  -- | Parses a maximal string without color markup. -textParser :: String -> Maybe Action -> Parser [(Widget, ColorString, Maybe Action)] +textParser :: String -> Maybe Action +              -> Parser [(Widget, ColorString, Maybe Action)]  textParser c a = do s <- many1 $                            noneOf "<" <|>                              try (notFollowedBy' (char '<') @@ -66,7 +70,8 @@ notFollowedBy' p e = do x <- p                          notFollowedBy $ try (e >> return '*')                          return x -iconParser :: String -> Maybe Action -> Parser [(Widget, ColorString, Maybe Action)] +iconParser :: String -> Maybe Action +              -> Parser [(Widget, ColorString, Maybe Action)]  iconParser c a = do    string "<icon="    i <- manyTill (noneOf ">") (try (string "/>")) @@ -77,7 +82,8 @@ actionParser c = do    a <- between (string "<action=") (string ">") (many1 (noneOf ">"))    let a' = Just (Spawn a)    s <- manyTill (try (textParser c a') <|> try (iconParser c a') <|> -                 try (colorParser a') <|> actionParser c) (try $ string "</action>") +                 try (colorParser a') <|> actionParser c) +                (try $ string "</action>")    return (concat s)  -- | Parsers a string wrapped in a color specification. @@ -122,7 +128,8 @@ parseTemplate c s =  -- | Given a finite "Map" and a parsed template produce the resulting  -- output string. -combine :: Config -> Map.Map String Runnable -> [(String, String, String)] -> [(Runnable,String,String)] +combine :: Config -> Map.Map String Runnable +           -> [(String, String, String)] -> [(Runnable,String,String)]  combine _ _ [] = []  combine c m ((ts,s,ss):xs) = (com, s, ss) : combine c m xs      where com  = Map.findWithDefault dflt ts m @@ -132,7 +139,8 @@ allTillSep :: Config -> Parser String  allTillSep = many . noneOf . sepChar  stripComments :: String -> String -stripComments = unlines . map (drop 5 . strip False . (replicate 5 ' '++)) . lines +stripComments = +  unlines . map (drop 5 . strip False . (replicate 5 ' '++)) . lines      where strip m ('-':'-':xs) = if m then "--" ++ strip m xs else ""            strip m ('\\':xss) = case xss of                                  '\\':xs -> '\\' : strip m xs @@ -197,7 +205,8 @@ parseConfig = runParser parseConf fields "Config" . stripComments                        ; notFollowedBy $ wrapSkip $ string "Run"                        ; return ","                        } -      readCommands = manyTill anyChar (try commandsEnd) >>= read' commandsErr . flip (++) "]" +      readCommands = manyTill anyChar (try commandsEnd) >>= +                        read' commandsErr . flip (++) "]"        strField e n = field e n . between (strDel "start" n) (strDel "end" n) .                       many $ noneOf "\"\n\r" @@ -217,5 +226,7 @@ parseConfig = runParser parseConf fields "Config" . stripComments                      _ -> fail $ "error reading the " ++ d ++ " field: " ++ s  commandsErr :: String -commandsErr = "commands: this usually means that a command could not be parsed.\n" ++ -              "The error could be located at the begining of the command which follows the offending one." +commandsErr = "commands: this usually means that a command could not" ++ +              "\nbe parsed." ++ +              "\nThe error could be located at the begining of the command" ++ +              "\nwhich follows the offending one." | 
