module Data.OrgMode.Parse.Attoparsec.Section where
import Control.Applicative ((<$>), (<*>), (<|>))
import Data.Attoparsec.Text as T
import Data.Attoparsec.Types as TP
import Data.Monoid (mempty)
import Data.Text (Text, pack,
unlines)
import Prelude hiding (unlines)
import Data.OrgMode.Parse.Attoparsec.PropertyDrawer
import Data.OrgMode.Parse.Attoparsec.Time
import Data.OrgMode.Parse.Types
parseSection :: TP.Parser Text Section
parseSection = Section
<$> (Plns <$> parsePlannings)
<*> many' parseClock
<*> option mempty parseDrawer
<*> (unlines <$> many' nonHeaderLine)
where
nonHeaderLine :: TP.Parser Text Text
nonHeaderLine = nonHeaderLine0 <|> nonHeaderLine1
where
nonHeaderLine0 = endOfLine >> return (pack "")
nonHeaderLine1 = pack <$> do
h <- notChar '*'
t <- manyTill anyChar endOfLine
return (h:t)