packages feed

orgmode-parse 0.0.2.1 → 0.1.0

raw patch · 4 files changed

+255/−86 lines, 4 filesdep +aesondep +bytestringdep +containersdep ~tastyPVP ok

version bump matches the API change (PVP)

Dependencies added: aeson, bytestring, containers, hashable

Dependency ranges changed: tasty

API changes (from Hackage documentation)

- Data.OrgMode.Parse.Attoparsec.Headings: heading :: Parser Text Heading
- Data.OrgMode.Parse.Attoparsec.Headings: headingKeyword :: Parser Text (Maybe Keyword)
- Data.OrgMode.Parse.Attoparsec.Headings: headingTitle :: Parser Text (Text, Maybe Keyword)
- Data.OrgMode.Parse.Attoparsec.PropertyDrawer: drawer :: Parser Text (PropertyDrawer Text Text)
- Data.OrgMode.Parse.Attoparsec.Time: scheduleType :: Parser Text ScheduleType
- Data.OrgMode.Parse.Types: APPOINTMENT :: ScheduleType
- Data.OrgMode.Parse.Types: Active :: LocalTime -> Timestamp
- Data.OrgMode.Parse.Types: Close :: Char -> Close
- Data.OrgMode.Parse.Types: Inactive :: LocalTime -> Timestamp
- Data.OrgMode.Parse.Types: Keyword :: Text -> Keyword
- Data.OrgMode.Parse.Types: Open :: Char -> Open
- Data.OrgMode.Parse.Types: PropertyDrawer :: (HashMap k v) -> PropertyDrawer k v
- Data.OrgMode.Parse.Types: Schedule :: ScheduleType -> Maybe Timestamp -> Maybe Text -> Schedule
- Data.OrgMode.Parse.Types: State :: Text -> State
- Data.OrgMode.Parse.Types: Unknown :: Priority
- Data.OrgMode.Parse.Types: data Schedule
- Data.OrgMode.Parse.Types: data ScheduleType
- Data.OrgMode.Parse.Types: instance (Eq k, Eq v) => Eq (PropertyDrawer k v)
- Data.OrgMode.Parse.Types: instance (Show k, Show v) => Show (PropertyDrawer k v)
- Data.OrgMode.Parse.Types: instance Eq Keyword
- Data.OrgMode.Parse.Types: instance Eq Schedule
- Data.OrgMode.Parse.Types: instance Eq ScheduleType
- Data.OrgMode.Parse.Types: instance Eq State
- Data.OrgMode.Parse.Types: instance Ord Keyword
- Data.OrgMode.Parse.Types: instance Show Keyword
- Data.OrgMode.Parse.Types: instance Show Schedule
- Data.OrgMode.Parse.Types: instance Show ScheduleType
- Data.OrgMode.Parse.Types: instance Show State
- Data.OrgMode.Parse.Types: keywords :: Heading -> [Keyword]
- Data.OrgMode.Parse.Types: newtype Close
- Data.OrgMode.Parse.Types: newtype Keyword
- Data.OrgMode.Parse.Types: newtype Open
- Data.OrgMode.Parse.Types: newtype PropertyDrawer k v
- Data.OrgMode.Parse.Types: newtype State
- Data.OrgMode.Parse.Types: recurring :: Schedule -> Maybe Text
- Data.OrgMode.Parse.Types: schedule_type :: Schedule -> ScheduleType
- Data.OrgMode.Parse.Types: state :: Heading -> Maybe State
- Data.OrgMode.Parse.Types: timestamp :: Schedule -> Maybe Timestamp
- Data.OrgMode.Parse.Types: toPriority :: Text -> Priority
+ Data.OrgMode.Parse.Attoparsec.Document: parseDocument :: [Text] -> Parser Text Document
+ Data.OrgMode.Parse.Attoparsec.Headings: headingBelowLevel :: [Text] -> Int -> Parser Text Heading
+ Data.OrgMode.Parse.Attoparsec.Headings: parseStats :: Parser Text Stats
+ Data.OrgMode.Parse.Attoparsec.Headings: parseTags :: Parser Text [Tag]
+ Data.OrgMode.Parse.Attoparsec.PropertyDrawer: parseDrawer :: Parser Text Properties
+ Data.OrgMode.Parse.Attoparsec.Section: parseSection :: Parser Text Section
+ Data.OrgMode.Parse.Attoparsec.Time: parseBracketedDateTime :: Parser Text (DateTime, Maybe (Hours, Minutes), Bool)
+ Data.OrgMode.Parse.Attoparsec.Time: parseClock :: Parser Text (Maybe Timestamp, Maybe Duration)
+ Data.OrgMode.Parse.Attoparsec.Time: parseDate :: Parser Text YearMonthDay
+ Data.OrgMode.Parse.Attoparsec.Time: parseDay :: Parser Text Text
+ Data.OrgMode.Parse.Attoparsec.Time: parseDelay :: Parser Text Delay
+ Data.OrgMode.Parse.Attoparsec.Time: parseHM :: Parser Text (Hours, Minutes)
+ Data.OrgMode.Parse.Attoparsec.Time: parsePlannings :: Parser Text (HashMap PlanningKeyword Timestamp)
+ Data.OrgMode.Parse.Attoparsec.Time: parseRepeater :: Parser Text Repeater
+ Data.OrgMode.Parse.Attoparsec.Time: parseTime' :: Parser Text (Either (Hours, Minutes) ((Hours, Minutes), (Hours, Minutes)))
+ Data.OrgMode.Parse.Attoparsec.Time: parseTimeUnit :: Parser Text TimeUnit
+ Data.OrgMode.Parse.Types: CLOSED :: PlanningKeyword
+ Data.OrgMode.Parse.Types: DateTime :: YearMonthDay' -> Maybe Text -> Maybe (Hour, Minute) -> Maybe Repeater -> Maybe Delay -> DateTime
+ Data.OrgMode.Parse.Types: Delay :: DelayType -> Int -> TimeUnit -> Delay
+ Data.OrgMode.Parse.Types: DelayAll :: DelayType
+ Data.OrgMode.Parse.Types: DelayFirst :: DelayType
+ Data.OrgMode.Parse.Types: Document :: Text -> [Heading] -> Document
+ Data.OrgMode.Parse.Types: Plns :: (HashMap PlanningKeyword Timestamp) -> Plannings
+ Data.OrgMode.Parse.Types: RepeatCatchUp :: RepeaterType
+ Data.OrgMode.Parse.Types: RepeatCumulate :: RepeaterType
+ Data.OrgMode.Parse.Types: RepeatRestart :: RepeaterType
+ Data.OrgMode.Parse.Types: Repeater :: RepeaterType -> Int -> TimeUnit -> Repeater
+ Data.OrgMode.Parse.Types: Section :: Plannings -> [Clock] -> Properties -> Text -> Section
+ Data.OrgMode.Parse.Types: StateKeyword :: Text -> StateKeyword
+ Data.OrgMode.Parse.Types: StatsOf :: Int -> Int -> Stats
+ Data.OrgMode.Parse.Types: StatsPct :: Int -> Stats
+ Data.OrgMode.Parse.Types: Timestamp :: DateTime -> Bool -> Maybe DateTime -> Timestamp
+ Data.OrgMode.Parse.Types: UnitDay :: TimeUnit
+ Data.OrgMode.Parse.Types: UnitHour :: TimeUnit
+ Data.OrgMode.Parse.Types: UnitMonth :: TimeUnit
+ Data.OrgMode.Parse.Types: UnitWeek :: TimeUnit
+ Data.OrgMode.Parse.Types: UnitYear :: TimeUnit
+ Data.OrgMode.Parse.Types: YMD' :: YearMonthDay -> YearMonthDay'
+ Data.OrgMode.Parse.Types: YearMonthDay :: UnpkYear -> UnpkMonth -> UnpkDayOfMonth -> YearMonthDay
+ Data.OrgMode.Parse.Types: data DateTime
+ Data.OrgMode.Parse.Types: data Delay
+ Data.OrgMode.Parse.Types: data DelayType
+ Data.OrgMode.Parse.Types: data Document
+ Data.OrgMode.Parse.Types: data PlanningKeyword
+ Data.OrgMode.Parse.Types: data Repeater
+ Data.OrgMode.Parse.Types: data RepeaterType
+ Data.OrgMode.Parse.Types: data Section
+ Data.OrgMode.Parse.Types: data Stats
+ Data.OrgMode.Parse.Types: data TimeUnit
+ Data.OrgMode.Parse.Types: data YearMonthDay :: *
+ Data.OrgMode.Parse.Types: dayName :: DateTime -> Maybe Text
+ Data.OrgMode.Parse.Types: delay :: DateTime -> Maybe Delay
+ Data.OrgMode.Parse.Types: delayType :: Delay -> DelayType
+ Data.OrgMode.Parse.Types: delayUnit :: Delay -> TimeUnit
+ Data.OrgMode.Parse.Types: delayValue :: Delay -> Int
+ Data.OrgMode.Parse.Types: documentHeadings :: Document -> [Heading]
+ Data.OrgMode.Parse.Types: documentText :: Document -> Text
+ Data.OrgMode.Parse.Types: hourMinute :: DateTime -> Maybe (Hour, Minute)
+ Data.OrgMode.Parse.Types: instance Constructor C1_0DateTime
+ Data.OrgMode.Parse.Types: instance Constructor C1_0Delay
+ Data.OrgMode.Parse.Types: instance Constructor C1_0DelayType
+ Data.OrgMode.Parse.Types: instance Constructor C1_0Document
+ Data.OrgMode.Parse.Types: instance Constructor C1_0Heading
+ Data.OrgMode.Parse.Types: instance Constructor C1_0PlanningKeyword
+ Data.OrgMode.Parse.Types: instance Constructor C1_0Plannings
+ Data.OrgMode.Parse.Types: instance Constructor C1_0Priority
+ Data.OrgMode.Parse.Types: instance Constructor C1_0Repeater
+ Data.OrgMode.Parse.Types: instance Constructor C1_0RepeaterType
+ Data.OrgMode.Parse.Types: instance Constructor C1_0Section
+ Data.OrgMode.Parse.Types: instance Constructor C1_0StateKeyword
+ Data.OrgMode.Parse.Types: instance Constructor C1_0Stats
+ Data.OrgMode.Parse.Types: instance Constructor C1_0TimeUnit
+ Data.OrgMode.Parse.Types: instance Constructor C1_0Timestamp
+ Data.OrgMode.Parse.Types: instance Constructor C1_0YearMonthDay'
+ Data.OrgMode.Parse.Types: instance Constructor C1_1DelayType
+ Data.OrgMode.Parse.Types: instance Constructor C1_1PlanningKeyword
+ Data.OrgMode.Parse.Types: instance Constructor C1_1Priority
+ Data.OrgMode.Parse.Types: instance Constructor C1_1RepeaterType
+ Data.OrgMode.Parse.Types: instance Constructor C1_1Stats
+ Data.OrgMode.Parse.Types: instance Constructor C1_1TimeUnit
+ Data.OrgMode.Parse.Types: instance Constructor C1_2PlanningKeyword
+ Data.OrgMode.Parse.Types: instance Constructor C1_2Priority
+ Data.OrgMode.Parse.Types: instance Constructor C1_2RepeaterType
+ Data.OrgMode.Parse.Types: instance Constructor C1_2TimeUnit
+ Data.OrgMode.Parse.Types: instance Constructor C1_3TimeUnit
+ Data.OrgMode.Parse.Types: instance Constructor C1_4TimeUnit
+ Data.OrgMode.Parse.Types: instance Datatype D1DateTime
+ Data.OrgMode.Parse.Types: instance Datatype D1Delay
+ Data.OrgMode.Parse.Types: instance Datatype D1DelayType
+ Data.OrgMode.Parse.Types: instance Datatype D1Document
+ Data.OrgMode.Parse.Types: instance Datatype D1Heading
+ Data.OrgMode.Parse.Types: instance Datatype D1PlanningKeyword
+ Data.OrgMode.Parse.Types: instance Datatype D1Plannings
+ Data.OrgMode.Parse.Types: instance Datatype D1Priority
+ Data.OrgMode.Parse.Types: instance Datatype D1Repeater
+ Data.OrgMode.Parse.Types: instance Datatype D1RepeaterType
+ Data.OrgMode.Parse.Types: instance Datatype D1Section
+ Data.OrgMode.Parse.Types: instance Datatype D1StateKeyword
+ Data.OrgMode.Parse.Types: instance Datatype D1Stats
+ Data.OrgMode.Parse.Types: instance Datatype D1TimeUnit
+ Data.OrgMode.Parse.Types: instance Datatype D1Timestamp
+ Data.OrgMode.Parse.Types: instance Datatype D1YearMonthDay'
+ Data.OrgMode.Parse.Types: instance Enum PlanningKeyword
+ Data.OrgMode.Parse.Types: instance Eq DateTime
+ Data.OrgMode.Parse.Types: instance Eq Delay
+ Data.OrgMode.Parse.Types: instance Eq DelayType
+ Data.OrgMode.Parse.Types: instance Eq Document
+ Data.OrgMode.Parse.Types: instance Eq PlanningKeyword
+ Data.OrgMode.Parse.Types: instance Eq Plannings
+ Data.OrgMode.Parse.Types: instance Eq Repeater
+ Data.OrgMode.Parse.Types: instance Eq RepeaterType
+ Data.OrgMode.Parse.Types: instance Eq Section
+ Data.OrgMode.Parse.Types: instance Eq StateKeyword
+ Data.OrgMode.Parse.Types: instance Eq Stats
+ Data.OrgMode.Parse.Types: instance Eq TimeUnit
+ Data.OrgMode.Parse.Types: instance Eq YearMonthDay'
+ Data.OrgMode.Parse.Types: instance FromJSON DateTime
+ Data.OrgMode.Parse.Types: instance FromJSON Delay
+ Data.OrgMode.Parse.Types: instance FromJSON DelayType
+ Data.OrgMode.Parse.Types: instance FromJSON Document
+ Data.OrgMode.Parse.Types: instance FromJSON Heading
+ Data.OrgMode.Parse.Types: instance FromJSON PlanningKeyword
+ Data.OrgMode.Parse.Types: instance FromJSON Plannings
+ Data.OrgMode.Parse.Types: instance FromJSON Priority
+ Data.OrgMode.Parse.Types: instance FromJSON Repeater
+ Data.OrgMode.Parse.Types: instance FromJSON RepeaterType
+ Data.OrgMode.Parse.Types: instance FromJSON Section
+ Data.OrgMode.Parse.Types: instance FromJSON StateKeyword
+ Data.OrgMode.Parse.Types: instance FromJSON Stats
+ Data.OrgMode.Parse.Types: instance FromJSON TimeUnit
+ Data.OrgMode.Parse.Types: instance FromJSON Timestamp
+ Data.OrgMode.Parse.Types: instance FromJSON YearMonthDay'
+ Data.OrgMode.Parse.Types: instance Generic DateTime
+ Data.OrgMode.Parse.Types: instance Generic Delay
+ Data.OrgMode.Parse.Types: instance Generic DelayType
+ Data.OrgMode.Parse.Types: instance Generic Document
+ Data.OrgMode.Parse.Types: instance Generic Heading
+ Data.OrgMode.Parse.Types: instance Generic PlanningKeyword
+ Data.OrgMode.Parse.Types: instance Generic Plannings
+ Data.OrgMode.Parse.Types: instance Generic Priority
+ Data.OrgMode.Parse.Types: instance Generic Repeater
+ Data.OrgMode.Parse.Types: instance Generic RepeaterType
+ Data.OrgMode.Parse.Types: instance Generic Section
+ Data.OrgMode.Parse.Types: instance Generic StateKeyword
+ Data.OrgMode.Parse.Types: instance Generic Stats
+ Data.OrgMode.Parse.Types: instance Generic TimeUnit
+ Data.OrgMode.Parse.Types: instance Generic Timestamp
+ Data.OrgMode.Parse.Types: instance Generic YearMonthDay'
+ Data.OrgMode.Parse.Types: instance Hashable PlanningKeyword
+ Data.OrgMode.Parse.Types: instance Ord PlanningKeyword
+ Data.OrgMode.Parse.Types: instance Selector S1_0_0DateTime
+ Data.OrgMode.Parse.Types: instance Selector S1_0_0Delay
+ Data.OrgMode.Parse.Types: instance Selector S1_0_0Document
+ Data.OrgMode.Parse.Types: instance Selector S1_0_0Heading
+ Data.OrgMode.Parse.Types: instance Selector S1_0_0Repeater
+ Data.OrgMode.Parse.Types: instance Selector S1_0_0Section
+ Data.OrgMode.Parse.Types: instance Selector S1_0_0StateKeyword
+ Data.OrgMode.Parse.Types: instance Selector S1_0_0Timestamp
+ Data.OrgMode.Parse.Types: instance Selector S1_0_1DateTime
+ Data.OrgMode.Parse.Types: instance Selector S1_0_1Delay
+ Data.OrgMode.Parse.Types: instance Selector S1_0_1Document
+ Data.OrgMode.Parse.Types: instance Selector S1_0_1Heading
+ Data.OrgMode.Parse.Types: instance Selector S1_0_1Repeater
+ Data.OrgMode.Parse.Types: instance Selector S1_0_1Section
+ Data.OrgMode.Parse.Types: instance Selector S1_0_1Timestamp
+ Data.OrgMode.Parse.Types: instance Selector S1_0_2DateTime
+ Data.OrgMode.Parse.Types: instance Selector S1_0_2Delay
+ Data.OrgMode.Parse.Types: instance Selector S1_0_2Heading
+ Data.OrgMode.Parse.Types: instance Selector S1_0_2Repeater
+ Data.OrgMode.Parse.Types: instance Selector S1_0_2Section
+ Data.OrgMode.Parse.Types: instance Selector S1_0_2Timestamp
+ Data.OrgMode.Parse.Types: instance Selector S1_0_3DateTime
+ Data.OrgMode.Parse.Types: instance Selector S1_0_3Heading
+ Data.OrgMode.Parse.Types: instance Selector S1_0_3Section
+ Data.OrgMode.Parse.Types: instance Selector S1_0_4DateTime
+ Data.OrgMode.Parse.Types: instance Selector S1_0_4Heading
+ Data.OrgMode.Parse.Types: instance Selector S1_0_5Heading
+ Data.OrgMode.Parse.Types: instance Selector S1_0_6Heading
+ Data.OrgMode.Parse.Types: instance Selector S1_0_7Heading
+ Data.OrgMode.Parse.Types: instance Show DateTime
+ Data.OrgMode.Parse.Types: instance Show Delay
+ Data.OrgMode.Parse.Types: instance Show DelayType
+ Data.OrgMode.Parse.Types: instance Show Document
+ Data.OrgMode.Parse.Types: instance Show PlanningKeyword
+ Data.OrgMode.Parse.Types: instance Show Plannings
+ Data.OrgMode.Parse.Types: instance Show Repeater
+ Data.OrgMode.Parse.Types: instance Show RepeaterType
+ Data.OrgMode.Parse.Types: instance Show Section
+ Data.OrgMode.Parse.Types: instance Show StateKeyword
+ Data.OrgMode.Parse.Types: instance Show Stats
+ Data.OrgMode.Parse.Types: instance Show TimeUnit
+ Data.OrgMode.Parse.Types: instance Show YearMonthDay'
+ Data.OrgMode.Parse.Types: instance ToJSON DateTime
+ Data.OrgMode.Parse.Types: instance ToJSON Delay
+ Data.OrgMode.Parse.Types: instance ToJSON DelayType
+ Data.OrgMode.Parse.Types: instance ToJSON Document
+ Data.OrgMode.Parse.Types: instance ToJSON Heading
+ Data.OrgMode.Parse.Types: instance ToJSON PlanningKeyword
+ Data.OrgMode.Parse.Types: instance ToJSON Plannings
+ Data.OrgMode.Parse.Types: instance ToJSON Priority
+ Data.OrgMode.Parse.Types: instance ToJSON Repeater
+ Data.OrgMode.Parse.Types: instance ToJSON RepeaterType
+ Data.OrgMode.Parse.Types: instance ToJSON Section
+ Data.OrgMode.Parse.Types: instance ToJSON StateKeyword
+ Data.OrgMode.Parse.Types: instance ToJSON Stats
+ Data.OrgMode.Parse.Types: instance ToJSON TimeUnit
+ Data.OrgMode.Parse.Types: instance ToJSON Timestamp
+ Data.OrgMode.Parse.Types: instance ToJSON YearMonthDay'
+ Data.OrgMode.Parse.Types: keyword :: Heading -> Maybe StateKeyword
+ Data.OrgMode.Parse.Types: newtype Plannings
+ Data.OrgMode.Parse.Types: newtype StateKeyword
+ Data.OrgMode.Parse.Types: newtype YearMonthDay'
+ Data.OrgMode.Parse.Types: repeater :: DateTime -> Maybe Repeater
+ Data.OrgMode.Parse.Types: repeaterType :: Repeater -> RepeaterType
+ Data.OrgMode.Parse.Types: repeaterUnit :: Repeater -> TimeUnit
+ Data.OrgMode.Parse.Types: repeaterValue :: Repeater -> Int
+ Data.OrgMode.Parse.Types: section :: Heading -> Section
+ Data.OrgMode.Parse.Types: sectionClocks :: Section -> [Clock]
+ Data.OrgMode.Parse.Types: sectionParagraph :: Section -> Text
+ Data.OrgMode.Parse.Types: sectionPlannings :: Section -> Plannings
+ Data.OrgMode.Parse.Types: sectionProperties :: Section -> Properties
+ Data.OrgMode.Parse.Types: stats :: Heading -> Maybe Stats
+ Data.OrgMode.Parse.Types: subHeadings :: Heading -> [Heading]
+ Data.OrgMode.Parse.Types: tags :: Heading -> [Tag]
+ Data.OrgMode.Parse.Types: tsActive :: Timestamp -> Bool
+ Data.OrgMode.Parse.Types: tsEndTime :: Timestamp -> Maybe DateTime
+ Data.OrgMode.Parse.Types: tsTime :: Timestamp -> DateTime
+ Data.OrgMode.Parse.Types: type Duration = (Hour, Minute)
+ Data.OrgMode.Parse.Types: type Properties = HashMap Text Text
+ Data.OrgMode.Parse.Types: type Tag = Text
+ Data.OrgMode.Parse.Types: unStateKeyword :: StateKeyword -> Text
+ Data.OrgMode.Parse.Types: yearMonthDay :: DateTime -> YearMonthDay'
+ Data.OrgMode.Parse.Types: ymdDay :: YearMonthDay -> UnpkDayOfMonth
+ Data.OrgMode.Parse.Types: ymdMonth :: YearMonthDay -> UnpkMonth
+ Data.OrgMode.Parse.Types: ymdYear :: YearMonthDay -> UnpkYear
- Data.OrgMode.Parse.Attoparsec.Headings: headingLevel :: Parser Text Int
+ Data.OrgMode.Parse.Attoparsec.Headings: headingLevel :: Int -> Parser Text Int
- Data.OrgMode.Parse.Attoparsec.Headings: headingPriority :: Parser Text (Maybe Priority)
+ Data.OrgMode.Parse.Attoparsec.Headings: headingPriority :: Parser Text Priority
- Data.OrgMode.Parse.Attoparsec.Time: parseTimestamp :: Open -> Close -> Parser Text (Maybe Schedule)
+ Data.OrgMode.Parse.Attoparsec.Time: parseTimestamp :: Parser Text Timestamp
- Data.OrgMode.Parse.Types: DEADLINE :: ScheduleType
+ Data.OrgMode.Parse.Types: DEADLINE :: PlanningKeyword
- Data.OrgMode.Parse.Types: Heading :: Int -> Maybe Priority -> Maybe State -> Text -> [Keyword] -> Heading
+ Data.OrgMode.Parse.Types: Heading :: Int -> Maybe StateKeyword -> Maybe Priority -> Text -> Maybe Stats -> [Tag] -> Section -> [Heading] -> Heading
- Data.OrgMode.Parse.Types: SCHEDULED :: ScheduleType
+ Data.OrgMode.Parse.Types: SCHEDULED :: PlanningKeyword

Files

orgmode-parse.cabal view
@@ -1,5 +1,5 @@ Name:                   orgmode-parse-Version:                0.0.2.1+Version:                0.1.0 Author:                 Parnell Springmeyer <parnell@digitalmentat.com> Maintainer:             Parnell Springmeyer <parnell@digitalmentat.com> License:                BSD3@@ -37,13 +37,17 @@     Data.OrgMode.Parse.Types    Build-Depends:-    base                      >= 4.4      && < 5,-    attoparsec                >= 0.12     && < 0.13,-    unordered-containers      >= 0.2      && < 0.3,-    thyme                     >= 0.3      && < 0.4,-    old-locale                >= 1.0      && < 2.0,-    free                      >= 4.9      && < 5,-    text                      >= 1.0      && < 2.0+                  aeson                     >= 0.8.0.2  && < 0.9+                , attoparsec                >= 0.12     && < 0.13+                , base                      >= 4.4      && < 5+                , bytestring                >= 0.10.4   && < 0.11+                , containers                >= 0.5.5    && < 0.6+                , free                      >= 4.9      && < 5+                , hashable                  >= 1.2      && < 1.3+                , old-locale                >= 1.0      && < 2.0+                , text                      >= 1.0      && < 2.0+                , thyme                     >= 0.3      && < 0.4+                , unordered-containers      >= 0.2      && < 0.3  Test-Suite tests   Type:                 exitcode-stdio-1.0@@ -56,14 +60,18 @@    Build-Depends:     base                       >= 4.4      && < 5,+    aeson                      >= 0.8      && < 0.9,+    bytestring                 >= 0.10     && < 0.11,     text                       >= 1.0      && < 2.0,     attoparsec                 >= 0.12     && < 0.13,+    hashable                   >= 1.2      && < 1.3,     unordered-containers       >= 0.2      && < 0.3,     thyme                      >= 0.3      && < 0.4,     old-locale                 >= 1.0      && < 2.0,     HUnit                      >= 1.2.5.2  && < 1.3,-    tasty                      >= 0.8      && < 0.9,-    tasty-hunit                >= 0.8.0.1  && < 0.9+    tasty                      >= 0.8      && < 0.11,+    tasty-hunit                >= 0.8.0.1  && < 0.9,+    containers  Source-Repository head   Type:                 git
src/Data/OrgMode/Parse.hs view
@@ -1,26 +1,42 @@--------------------------------------------------------------------------------- |--- Module      :  Data.OrgMode.Parse.Attoparsec.Headings--- Copyright   :  © 2014 Parnell Springmeyer--- License     :  All Rights Reserved--- Maintainer  :  Parnell Springmeyer <parnell@digitalmentat.com>--- Stability   :  stable------ Attoparsec combinators for orgmode documents.-----------------------------------------------------------------------------+{-|+Module      :  Data.OrgMode.Parse.Attoparsec.Headings+Copyright   :  © 2014 Parnell Springmeyer+License     :  All Rights Reserved+Maintainer  :  Parnell Springmeyer <parnell@digitalmentat.com>+Stability   :  stable -module Data.OrgMode.Parse-(--- * Parse Document+Attoparsec combinators for orgmode documents.+-} --- * Parse Headline-  module Data.OrgMode.Parse.Attoparsec.Headings--- * Parse Headline Metadata (properties, timestamps, etc...)-, module Data.OrgMode.Parse.Attoparsec.Time+module Data.OrgMode.Parse (++-- * Parse OrgMode documents+  module Data.OrgMode.Parse.Attoparsec.Document++-- * OrgMode Document structure+, module Data.OrgMode.Parse.Types++-- * Parse headlines+, module Data.OrgMode.Parse.Attoparsec.Headings++-- * Parse headline metadata sections+, module Data.OrgMode.Parse.Attoparsec.Section++-- * Parse metadata property drawers , module Data.OrgMode.Parse.Attoparsec.PropertyDrawer--- * Parse Body++-- * Parse metadata timestamps and modifiers+, module Data.OrgMode.Parse.Attoparsec.Time ) where -import           Data.OrgMode.Parse.Attoparsec.Headings-import           Data.OrgMode.Parse.Attoparsec.PropertyDrawer-import           Data.OrgMode.Parse.Attoparsec.Time+import Data.OrgMode.Parse.Attoparsec.Document++import Data.OrgMode.Parse.Attoparsec.Section++import Data.OrgMode.Parse.Attoparsec.Headings++import Data.OrgMode.Parse.Attoparsec.PropertyDrawer++import Data.OrgMode.Parse.Attoparsec.Time++import Data.OrgMode.Parse.Types
src/Data/OrgMode/Parse/Types.hs view
@@ -1,77 +1,220 @@--------------------------------------------------------------------------------- |--- Module      :  Data.OrgMode.Parse.Types--- Copyright   :  © 2014 Parnell Springmeyer--- License     :  All Rights Reserved--- Maintainer  :  Parnell Springmeyer <parnell@digitalmentat.com>--- Stability   :  stable------ Types and utility functions.-----------------------------------------------------------------------------+{-|+Module      :  Data.OrgMode.Parse.Types+Copyright   :  © 2014 Parnell Springmeyer+License     :  All Rights Reserved+Maintainer  :  Parnell Springmeyer <parnell@digitalmentat.com>+Stability   :  experimental +Types and utility functions.+-}+ {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE DeriveGeneric     #-}  module Data.OrgMode.Parse.Types-( Heading  (..)+( Document (..)+, Section (..)+, Heading  (..) , Priority (..)-, State    (..)-, Keyword  (..)-, PropertyDrawer (..)-, Schedule     (..)-, ScheduleType (..)+, Plannings (..)+, StateKeyword  (..)+, Duration+, PlanningKeyword (..)+, Properties , Timestamp    (..)-, Open         (..)-, Close        (..)-, toPriority+, DateTime (..)+, Stats (..)+, Tag+, TimeUnit (..)+, RepeaterType (..)+, Repeater (..)+, DelayType (..)+, Delay (..)+, YearMonthDay(..)+, YearMonthDay'(..) ) where -import           Data.HashMap.Strict  (HashMap)-import           Data.Text            (Text)-import           Data.Thyme.LocalTime (LocalTime (..))+import           Control.Applicative+import           Control.Monad        (mzero)+import qualified Data.Aeson           as A+import           Data.Aeson           ((.=),(.:))+import           Data.Hashable        (Hashable(..))+import           Data.HashMap.Strict  (HashMap, fromList, toList, keys)+import           Data.Text            (Text, pack)+import           Data.Thyme.Calendar  (YearMonthDay(..))+import           Data.Thyme.LocalTime (Hour, Minute)+import           Data.Traversable+import           GHC.Generics -----------------------------------------------------------------------------+data Document = Document {+    documentText     :: Text      -- ^ Text occurring before any Org headlines+  , documentHeadings :: [Heading] -- ^ Toplevel Org headlines+  } deriving (Show, Eq, Generic) +instance A.ToJSON Document where+instance A.FromJSON Document where+ data Heading = Heading-    { level    :: Int-    , priority :: Maybe Priority-    , state    :: Maybe State-    , title    :: Text-    , keywords :: [Keyword]-    } deriving (Show, Eq)+    { level       :: Int                -- ^ Org headline nesting level (1 is at the top)+    , keyword     :: Maybe StateKeyword -- ^ State of the headline (e.g. TODO, DONE)+    , priority    :: Maybe Priority     --+    , title       :: Text               -- properties+    , stats       :: Maybe Stats        --+    , tags        :: [Tag]             --+    , section     :: Section            -- Next-line+    , subHeadings :: [Heading]          -- elements+    } deriving (Show, Eq, Generic) +type Properties = HashMap Text Text+type Clock      = (Maybe Timestamp, Maybe Duration) -data Priority = A | B | C | Unknown-  deriving (Show, Read, Eq, Ord)+data Section = Section {+      sectionPlannings  :: Plannings+    , sectionClocks     :: [Clock]+    , sectionProperties :: Properties+    , sectionParagraph  :: Text+  } deriving (Show, Eq, Generic) -newtype State = State Text-  deriving (Show, Eq) -newtype Keyword = Keyword Text-  deriving (Show, Eq, Ord)+data Timestamp = Timestamp {+    tsTime    :: DateTime+  , tsActive  :: Bool+  , tsEndTime :: Maybe DateTime+  } deriving (Show, Eq, Generic) -toPriority :: Text -> Priority-toPriority "A" = A-toPriority "B" = B-toPriority "C" = C-toPriority _   = Unknown+instance A.ToJSON Timestamp where+instance A.FromJSON Timestamp where ----------------------------------------------------------------------------- -newtype PropertyDrawer k v = PropertyDrawer (HashMap k v)-  deriving (Show, Eq)+newtype YearMonthDay' = YMD' YearMonthDay+                        deriving (Show, Eq, Generic) ------------------------------------------------------------------------------data Schedule = Schedule-    { schedule_type :: ScheduleType-    , timestamp     :: Maybe Timestamp-    , recurring     :: Maybe Text-    } deriving (Show, Eq)+instance A.ToJSON YearMonthDay' where+  toJSON (YMD' (YearMonthDay y m d)) =+    A.object ["ymdYear"  .= y+             ,"ymdMonth" .= m+             ,"ymdDay"   .= d] -data ScheduleType = SCHEDULED | DEADLINE | APPOINTMENT-  deriving (Show, Eq)+instance A.FromJSON YearMonthDay' where+  parseJSON (A.Object v) = do+    y <- v .: "ymdYear"+    m <- v .: "ymdMonth"+    d <- v .: "ymdDay"+    return (YMD' (YearMonthDay y m d))+  parseJSON _ = mzero -data Timestamp = Active LocalTime | Inactive LocalTime-  deriving (Show, Eq)+data DateTime = DateTime {+    yearMonthDay :: YearMonthDay'+  , dayName      :: Maybe Text+  , hourMinute   :: Maybe (Hour,Minute)+  , repeater     :: Maybe Repeater+  , delay        :: Maybe Delay+  } deriving (Show, Eq, Generic) -newtype Open = Open Char-newtype Close = Close Char+instance A.ToJSON DateTime where+instance A.FromJSON DateTime where++data RepeaterType = RepeatCumulate | RepeatCatchUp | RepeatRestart+                  deriving (Show, Eq, Generic)++instance A.ToJSON RepeaterType+instance A.FromJSON RepeaterType++data Repeater = Repeater {+    repeaterType  :: RepeaterType+  , repeaterValue :: Int+  , repeaterUnit  :: TimeUnit+  } deriving (Show, Eq, Generic)++instance A.ToJSON Repeater where+instance A.FromJSON Repeater where++data DelayType = DelayAll | DelayFirst+               deriving (Show, Eq, Generic)++instance A.ToJSON   DelayType where+instance A.FromJSON DelayType where++data Delay = Delay {+    delayType  :: DelayType+  , delayValue :: Int+  , delayUnit  :: TimeUnit+  } deriving (Show, Eq, Generic)++instance A.ToJSON Delay where+instance A.FromJSON Delay where++data TimeUnit = UnitYear+              | UnitWeek+              | UnitMonth+              | UnitDay+              | UnitHour+              deriving (Show, Eq, Generic)++instance A.ToJSON TimeUnit where+instance A.FromJSON TimeUnit where++---------------------------------------------------------------------------+--instance A.ToJSON Document where+--instance A.FromJSON Document where++newtype StateKeyword = StateKeyword {unStateKeyword :: Text}+  deriving (Show, Eq, Generic)++instance A.ToJSON StateKeyword where+instance A.FromJSON StateKeyword where+++data PlanningKeyword = SCHEDULED | DEADLINE | CLOSED+  deriving (Show, Eq, Enum, Ord, Generic)++instance A.ToJSON PlanningKeyword where+instance A.FromJSON PlanningKeyword where++--instance (A.ToJSON k, A.ToJSON v) => A.ToJSON (HashMap k v) where+--  toJSON hm = A.object hm++newtype Plannings = Plns (HashMap PlanningKeyword Timestamp)+                  deriving (Show, Eq, Generic)++instance A.ToJSON Plannings where+  toJSON (Plns hm) = A.object $ map jPair (toList hm)+    where jPair (k, v) = pack (show k) .= A.toJSON v++instance A.FromJSON Plannings where+  parseJSON (A.Object v) = Plns . fromList <$> (traverse jPair (keys v))+    where jPair k = v .: k+  parseJSON _ = mzero++instance A.ToJSON Section where+instance A.FromJSON Section where++instance A.ToJSON Heading where+instance A.FromJSON Heading where++data Priority = A | B | C+  deriving (Show, Read, Eq, Ord, Generic)++instance A.ToJSON Priority where+instance A.FromJSON Priority where+type Tag = Text++data Stats = StatsPct Int+           | StatsOf  Int Int+           deriving (Show, Eq, Generic)++instance A.ToJSON Stats where+instance A.FromJSON Stats where++type Duration = (Hour,Minute)++instance Hashable PlanningKeyword where+  hashWithSalt salt k = hashWithSalt salt (fromEnum k)++-- -- This might be the form to use if we were supporting <diary> timestamps+-- data Timestamp = Dairy Text+--                | Time  TimestampTime+--               deriving (Show, Eq, Generic)+++
test/Test.hs view
@@ -7,6 +7,7 @@ import           PropertyDrawer import           Test.Tasty import           Timestamps+import           Document  main :: IO () main = defaultMain tests@@ -17,4 +18,5 @@           [ parserHeadingTests           , parserPropertyDrawerTests           , parserTimestampTests+          , parserSmallDocumentTests           ]