-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | iCalendar format parser and org-mode converter.
--   
--   Please see README.md
@package ical
@version 0.0.1


-- | All iCalendar types.
module ICal.Types

-- | Tree for representing iCal file.
data Object
Property :: !Text -> !Text -> Object
Object :: !Text -> ![Object] -> Object

-- | An iCalendar line.
data Line
Begin :: !Text -> Line
End :: !Text -> Line
Pair :: !Text -> !Text -> Line
instance GHC.Show.Show ICal.Types.Line
instance GHC.Show.Show ICal.Types.Object
instance Data.Aeson.Types.ToJSON.ToJSON ICal.Types.Object


-- | The basic tokenizer.
module ICal.Tokenizer

-- | Tokenizer a complete document from a .ics file.
tokenizeObjectFromFile :: FilePath -> IO Object

-- | Tokenizer a complete document.
tokenizeObjectFromText :: Text -> Either String Object

-- | Tokenize an Aeson instance from the document.
tokenizeAesonFromText :: FromJSON a => Text -> Either String a

-- | Tokenize a list of lines into an object.
objectTokenizer :: [Line] -> Either String (Object, [Line])

-- | Tokenize lines of iCalendar format.
linesTokenizer :: Parser [Line]

-- | Tokenize a single line.
lineTokenizer :: Parser Line


-- | The basic parser.
module ICal.Parser

-- | Parser type.
data Parser m s a

-- | A parse error.
data ParseError
ExpectedObject :: !Text -> ParseError
ExpectedProperty :: !Text -> ParseError
GeneralProblem :: !Text -> ParseError

-- | Parse some iCalendar thing.
parseEither :: Monad m => s -> Parser m s a -> m (Either ParseError a)

-- | Require the given object name to exist and run in that context.
begin :: Monad m => Text -> Parser m [Object] a -> Parser m Object a

-- | Lookup an object with this name in the current object's children, then
--   run with that object as the context.
object :: Monad m => Text -> Parser m [Object] a -> Parser m [Object] a

-- | Lookup objects with this name in the current object's children, then
--   run with that object as the context.
objects :: Monad m => Text -> Parser m [Object] a -> Parser m [Object] [a]

-- | Lookup a property.
property :: Monad m => Text -> Parser m [Object] Text

-- | Get all values of a property.
properties :: Monad m => Text -> Parser m [Object] [Text]

-- | Use a local state of a different type.
local :: Monad m => t -> Parser m t a -> Parser m s a

-- | Throw a parse error.
parseError :: Monad m => ParseError -> Parser m o a

-- | Get the current state.
getState :: Monad m => Parser m s s

-- | Put a new state.
putState :: Monad m => s -> Parser m s ()
instance GHC.Base.Monad m => GHC.Base.Functor (ICal.Parser.Parser m s)
instance GHC.Base.Monad m => GHC.Base.Applicative (ICal.Parser.Parser m s)
instance GHC.Base.Monad m => GHC.Base.Monad (ICal.Parser.Parser m s)
instance GHC.Show.Show ICal.Parser.ParseError
instance GHC.Base.Monad m => GHC.Base.Alternative (ICal.Parser.Parser m s)


-- | Basic parser for ICalendar format.
module ICal

-- | Tokenizer a complete document from a .ics file.
tokenizeObjectFromFile :: FilePath -> IO Object

-- | Tokenizer a complete document.
tokenizeObjectFromText :: Text -> Either String Object

-- | Tokenize an Aeson instance from the document.
tokenizeAesonFromText :: FromJSON a => Text -> Either String a

-- | Tree for representing iCal file.
data Object
Property :: !Text -> !Text -> Object
Object :: !Text -> ![Object] -> Object

-- | An iCalendar line.
data Line
Begin :: !Text -> Line
End :: !Text -> Line
Pair :: !Text -> !Text -> Line


-- | Export to Org mode for Emacs.
module ICal.Org

-- | Handy exporting function.
exportFromToFile :: Day -> FilePath -> FilePath -> IO ()

-- | Parse an iCalendar object into an Org mode document.
parseFromObject :: Object -> Either ParseError [Event]

-- | Parse an org-mode document from the object.
documentParser :: Parser Identity Object [Event]

-- | Build an org-mode document.
buildDocument :: Day -> UTCTime -> [Event] -> Builder

-- | An Org mode section.
data Event
Event :: !Text -> !UTCTime -> !(Maybe Text) -> !(Maybe UTCTime) -> !UTCTime -> Event

-- | Title of the section.
[eventTitle] :: Event -> !Text

-- | Date starts.
[eventStart] :: Event -> !UTCTime

-- | Contents of the section.
[eventDescription] :: Event -> !(Maybe Text)

-- | Date ends.
[eventEnd] :: Event -> !(Maybe UTCTime)

-- | Date created.
[eventCreated] :: Event -> !UTCTime
instance GHC.Show.Show ICal.Org.Event
