úÎ;g8È,      !"#$%&'()*+© 2014 Parnell SpringmeyerAll Rights Reserved/Parnell Springmeyer <parnell@digitalmentat.com>stableNone bSo we don't get confused when passing the opening and closing characters to the timestamp parser.#An active or inactive timestamp as ,.^The schedule value, no value (or a failed parse) will result in simply the APPOINTMENT value. [The "schedule" line. In OrgMode it must precede the heading immediately and can contain a  ,  Q, or none. No marker assumes the lonely timestamp is therefore an *appointment*.}SCHEDULED* is the date & time you are going to start on something and the appointment is the date and time something occurs.]Recurring time intervals are also possible and are not parsed right now but are kept in the  field.,The property drawer as an unordered HashMap.9A keyword in a heading *not part of the property drawer*!2The state of a heading (TODO, DONE, EVENT, etc...)The priority of a heading item., , and  correspond to the `[A]`, `[5B]`, and `[#C]` syntax in OrgMode document headings.An OrgMode heading."#Convert text into a Priority value.#  !"#  !"# !"       !"© 2014 Parnell SpringmeyerAll Rights Reserved/Parnell Springmeyer <parnell@digitalmentat.com>stableNone#Parse a property drawer. Z:PROPERTIES: :DATE: [2014-12-14 11:00] :NOTE: Something really crazy happened today! :END:$Parse a property of a drawer.´Properties *must* be a `:KEY: value` pair, the key can be of any case and contain any characters except for newlines and colons (since they delimit the start and end of the key).#$#$#$#$© 2014 Parnell SpringmeyerAll Rights Reserved/Parnell Springmeyer <parnell@digitalmentat.com>stableNone%xParse an org-mode timestamp line with user-supplied opening and ending brackets (for either active or inactive stamps).&Parse the type of schedule.%&%&%&%&© 2014 Parnell SpringmeyerAll Rights Reserved/Parnell Springmeyer <parnell@digitalmentat.com>stableNone'Parse an org-mode heading.(EParse the asterisk indicated heading level until a space is reached.)Parse the priority indicator.LIf anything but these priority indicators are used the parser will fail: `[A]`, `[ B]`, `[#C]`.-Parse the state indicator {TODO | DOING | DONE}.fThese can be custom so we're parsing the state identifier as Text but wrapped with the State newtype.*Title parser with alternative.ƒThis function tries to parse a title with a keyword and if it fails it then attempts to parse everything till the end of the line..(Try to parse a title that may have keys.-This function recurs for every occurrence of :N and tries to parse it as a keyword. If the keyword parser fails we fold the :[ onto our title result. If it succeeds then we return the title *and the parsed keyword*./Parse a heading keyword.$NOTE: this is meant to be used with .™ since it cannot fail and we use it recursively in that function to determine whether we are hitting a keyword chunk or not (and saving it if we do!).FIt is not exported because it is not meant to be used outside of the . function.+Parse a heading keyword.You can use this with 0 and 1 to get a list keywords: 4keys <- many' headingKeyword return $ catMaybes keys '()-*2./+'()*+'()*+ '()-*2./+© 2014 Parnell SpringmeyerAll Rights Reserved/Parnell Springmeyer <parnell@digitalmentat.com>stableNone #$%&'()*+3      !"#$%&'()*+,-./012345678orgmode-parse-0.0.2.1Data.OrgMode.Parse.Types,Data.OrgMode.Parse.Attoparsec.PropertyDrawer"Data.OrgMode.Parse.Attoparsec.Time&Data.OrgMode.Parse.Attoparsec.HeadingsData.OrgMode.ParseCloseOpen TimestampInactiveActive ScheduleType APPOINTMENTDEADLINE SCHEDULEDSchedule schedule_type timestamp recurringPropertyDrawerKeywordStatePriorityUnknownCBAHeadinglevelprioritystatetitlekeywords toPrioritydrawerpropertyparseTimestamp scheduleTypeheading headingLevelheadingPriority headingTitleheadingKeyword thyme-0.3.5.3Data.Thyme.LocalTime LocalTime headingState takeTitleKeysheadingKeyword'attoparsec-0.12.1.2Data.Attoparsec.Combinatormany'base Data.Maybe catMaybes takeTitleEnd