orgmode-parse-0.1.0.4: src/Data/OrgMode/Parse/Attoparsec/Section.hs
-----------------------------------------------------------------------------
-- |
-- Module : Data.OrgMode.Parse.Attoparsec.Section
-- Copyright : © 2015 Parnell Springmeyer
-- License : All Rights Reserved
-- Maintainer : Parnell Springmeyer <parnell@digitalmentat.com>
-- Stability : stable
--
-- Parsing combinators for org-mode sections.
----------------------------------------------------------------------------
{-# LANGUAGE OverloadedStrings #-}
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
-- | Parse a heading section
--
-- Heading sections contain optionally a property drawer,
-- a list of clock entries, code blocks (not yet implemented),
-- plain lists (not yet implemented), and unstructured text.
parseSection :: TP.Parser Text Section
parseSection = Section
<$> (Plns <$> parsePlannings)
<*> many' parseClock
<*> option mempty parseDrawer
<*> (unlines <$> many' nonHeaderLine)
where
nonHeaderLine = pack <$> manyTill (notChar '*') endOfLine