orgmode-parse 0.2.2 → 0.2.3
raw patch · 4 files changed
+62/−27 lines, 4 files
Files
- orgmode-parse.cabal +1/−1
- src/Data/OrgMode/Parse/Attoparsec/Section.hs +3/−5
- src/Data/OrgMode/Parse/Attoparsec/Time.hs +22/−21
- test/Document.hs +36/−0
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 =