packages feed

vision-0.0.2.2: src/Playlist/Format/Parser.hs

-- -*-haskell-*-
--  Vision (for the Voice): an XMMS2 client.
--
--  Author:  Oleg Belozeorov
--  Created: 23 Feb. 2010
--
--  Copyright (C) 2009-2010 Oleg Belozeorov
--
--  This program is free software; you can redistribute it and/or
--  modify it under the terms of the GNU General Public License as
--  published by the Free Software Foundation; either version 3 of
--  the License, or (at your option) any later version.
--
--  This program is distributed in the hope that it will be useful,
--  but WITHOUT ANY WARRANTY; without even the implied warranty of
--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
--  General Public License for more details.
--

module Playlist.Format.Parser
  ( parseFormat
  ) where

import Control.Applicative hiding (many, optional, (<|>))

import Text.Parsec
import Text.Parsec.String

import Playlist.Format.Format (Fe (..))


parseFormat = parse format ""

format :: Parser [Fe String]
format = do
  fes <- many fe
  eof
  return fes

fe :: Parser (Fe String)
fe = feP <|> feO <|> feL

feP :: Parser (Fe String)
feP = FeP <$> between (char '{') (char '}') (many1 (noneOf "{}"))

feL :: Parser (Fe String)
feL = FeL <$> many1 (esc <|> noneOf "{}[]")

feO :: Parser (Fe String)
feO = FeO <$> between (char '[') (char ']') (many fe)

esc = char '\\' >> anyChar