packages feed

orgmode-parse 0.2.2 → 0.2.3

raw patch · 4 files changed

+62/−27 lines, 4 files

Files

orgmode-parse.cabal view
@@ -1,5 +1,5 @@ Name:                   orgmode-parse-Version:                0.2.2+Version:                0.2.3 Author:                 Parnell Springmeyer <parnell@digitalmentat.com> Maintainer:             Parnell Springmeyer <parnell@digitalmentat.com> License:                BSD3
src/Data/OrgMode/Parse/Attoparsec/Section.hs view
@@ -13,16 +13,14 @@  module Data.OrgMode.Parse.Attoparsec.Section where -import           Control.Applicative                  ()-import           Data.Attoparsec.Text+import           Data.Attoparsec.Text                 (many', option, skipSpace) import           Data.Attoparsec.Types                as Attoparsec import           Data.Monoid                          ()-import           Data.Text                            (Text)-import qualified Data.Text                            as Text- import           Data.OrgMode.Parse.Attoparsec.Drawer import           Data.OrgMode.Parse.Attoparsec.Time import qualified Data.OrgMode.Parse.Attoparsec.Util   as Util+import           Data.Text                            (Text)+import qualified Data.Text                            as Text  import           Data.OrgMode.Types 
src/Data/OrgMode/Parse/Attoparsec/Time.hs view
@@ -22,23 +22,25 @@ ) where -import           Control.Applicative        -import qualified Data.Attoparsec.ByteString as Attoparsec.ByteString-import           Data.Attoparsec.Combinator as Attoparsec+import           Control.Applicative+import qualified Data.Attoparsec.ByteString         as Attoparsec.ByteString+import           Data.Attoparsec.Combinator         as Attoparsec import           Data.Attoparsec.Text-import           Data.Attoparsec.Types      as Attoparsec (Parser)-import qualified Data.ByteString.Char8      as BS-import           Data.Functor               (($>))-import           Data.HashMap.Strict        (HashMap, fromList)-import           Data.Maybe                 (listToMaybe)-import           Data.Monoid                ()-import           Data.Text                  (Text)-import qualified Data.Text                  as Text-import           Data.Thyme.Format          (buildTime, timeParser)-import           Data.Thyme.LocalTime       (Hours, Minutes)-import           System.Locale              (defaultTimeLocale)-import           Data.Semigroup             ((<>))+import           Data.Attoparsec.Types              as Attoparsec (Parser)+import qualified Data.ByteString.Char8              as BS+import           Data.Functor                       (($>))+import           Data.HashMap.Strict                (HashMap, fromList)+import           Data.Maybe                         (listToMaybe)+import           Data.Monoid                        ()+import qualified Data.OrgMode.Parse.Attoparsec.Util as Util import           Data.OrgMode.Types+import           Data.Semigroup                     ((<>))+import           Data.Text                          (Text)+import qualified Data.Text                          as Text+import           Data.Thyme.Format                  (buildTime, timeParser)+import           Data.Thyme.LocalTime               (Hours, Minutes)+import           Prelude                            hiding (repeat)+import           System.Locale                      (defaultTimeLocale)  -- | Parse a planning line. --@@ -48,7 +50,7 @@ -- -- > DEADLINE: <2015-05-10 17:00> CLOSED: <2015-04-1612:00> parsePlannings :: Attoparsec.Parser Text (HashMap PlanningKeyword Timestamp)-parsePlannings = fromList <$> many' (skipSpace *> planning <* skipSpace)+parsePlannings = fromList <$> many' (skipSpace *> planning <* Util.skipOnlySpace)   where     planning =  (,) <$> pType <* char ':' <*> (skipSpace *> parseTimestamp)     pType    = choice [string "SCHEDULED" $>  SCHEDULED@@ -65,9 +67,8 @@ parseClock :: Attoparsec.Parser Text Clock parseClock = Clock <$> ((,) <$> (skipSpace *> string "CLOCK: " *> ts) <*> dur)   where-    ts  = option Nothing (Just <$> parseTimestamp)-    dur = option Nothing (Just <$> (string " => "-                                    *> skipSpace *> parseHM))+    ts  = optional parseTimestamp+    dur = optional (string " => " *> skipSpace *> parseHM)  -- | Parse a timestamp. --@@ -109,7 +110,7 @@    where     optionalBracketedDateTime =-      option Nothing (Just <$> (string "--" *> parseBracketedDateTime))+      optional (string "--" *> parseBracketedDateTime)   -- | Parse a single time part.@@ -136,7 +137,7 @@   closingBracket <- char '>' <|> char ']'   finally brkDateTime openingBracket closingBracket   where-    optionalParse p  = option Nothing (Just <$> p) <* skipSpace+    optionalParse p  = optional p <* skipSpace     maybeListParse p = listToMaybe <$> many' p  <* skipSpace     activeBracket ((=='<') -> active) =       if active then Active else Inactive
test/Document.hs view
@@ -29,6 +29,12 @@   , testCase "Parse Headline with Planning" $       testDocS samplePText samplePParse +  , testCase "Parse Headline with properties" $+      testDocS sampleP2Text sampleP2Parse++  , testCase "Parse Headline with scheduled" $+      testDocS sampleP3Text sampleP3Parse+   , testCase "Parse Headline no \n" $       testDocS "* T" (Document "" [emptyHeadline {title="T"}]) @@ -90,6 +96,36 @@     plns = Plns con      Right con = parseOnly parsePlannings "SCHEDULED: <2015-06-12 Fri>"++sampleP2Text :: Text+sampleP2Text =+    Text.concat ["* Test3_1\n"+                ,"  :PROPERTIES:\n"+                ,"  :CATEGORY: testCategory\n"+                ,"  :END:"+                ]++sampleP2Parse :: Document+sampleP2Parse =+    Document "" [ emptyHeadline {+                      title = "Test3_1"+                    , section = emptySection {+                          sectionProperties = Properties (fromList [("CATEGORY", "testCategory")])}}]++sampleP3Text :: Text+sampleP3Text =+    Text.concat ["* Test4_1\n"+                ,"  SCHEDULED: <2004-02-29 Sun 10:20>"+                ]++sampleP3Parse :: Document+sampleP3Parse =+    Document "" [ emptyHeadline {+                      title = "Test4_1"+                    , section = emptySection {+                          sectionPlannings = Plns con}}]+  where+    Right con = parseOnly parsePlannings "SCHEDULED: <2004-02-29 Sun 10:20>"  emptyHeadline :: Headline emptyHeadline =