----------------------------------------------------------------------------- -- | -- Module : Data.OrgMode.Parse.Attoparsec.Section -- Copyright : © 2015 Parnell Springmeyer -- License : All Rights Reserved -- Maintainer : Parnell Springmeyer -- 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