module Data.Microformats2 (module Data.Microformats2) where
import safe Data.Typeable (Typeable)
import safe Data.Text.Lazy (Text)
import safe Data.Data (Data)
import Data.Time (UTCTime)
import Text.Pandoc.Definition (Pandoc)
type Link a = Text
data Embedded a = Here a | Somewhere (Link a) | Nowhere
deriving (Eq, Show, Data, Typeable)
hereFromMaybe :: Maybe a -> Embedded a
hereFromMaybe m = case m of
Just thing -> Here thing
Nothing -> Nowhere
somewhereFromMaybe :: Maybe (Link a) -> Embedded a
somewhereFromMaybe m = case m of
Just lnk -> Somewhere lnk
Nothing -> Nowhere
data Geo = Geo
{ geoLatitude :: Maybe Double
, geoLongitude :: Maybe Double
, geoAltitude :: Maybe Double }
deriving (Eq, Show, Data, Typeable)
defaultGeo :: Geo
defaultGeo = Geo
{ geoLatitude = Nothing
, geoLongitude = Nothing
, geoAltitude = Nothing }
data Adr = Adr
{ adrStreetAddress :: Maybe Text
, adrExtendedAddress :: Maybe Text
, adrPostOfficeBox :: Maybe Text
, adrLocality :: Maybe Text
, adrRegion :: Maybe Text
, adrPostalCode :: Maybe Text
, adrCountryName :: Maybe Text
, adrLabel :: Maybe Text
, adrGeo :: Embedded Geo }
deriving (Eq, Show, Data, Typeable)
defaultAdr :: Adr
defaultAdr = Adr
{ adrStreetAddress = Nothing
, adrExtendedAddress = Nothing
, adrPostOfficeBox = Nothing
, adrLocality = Nothing
, adrRegion = Nothing
, adrPostalCode = Nothing
, adrCountryName = Nothing
, adrLabel = Nothing
, adrGeo = Nowhere }
data Card = Card
{ cardName :: Maybe Text
, cardHonorificPrefix :: Maybe Text
, cardGivenName :: Maybe Text
, cardAdditionalName :: Maybe Text
, cardFamilyName :: Maybe Text
, cardSortString :: Maybe Text
, cardHonorificSuffix :: Maybe Text
, cardNickname :: Maybe Text
, cardEmail :: Maybe Text
, cardLogo :: Maybe Text
, cardPhoto :: Maybe Text
, cardUrl :: Maybe Text
, cardUid :: Maybe Text
, cardCategory :: [Text]
, cardAdr :: Embedded Adr
, cardTel :: Maybe Text
, cardNote :: Maybe Text
, cardBday :: Maybe UTCTime
, cardKey :: Maybe Text
, cardOrg :: Embedded Card
, cardJobTitle :: Maybe Text
, cardRole :: Maybe Text
, cardImpp :: [Text]
, cardSex :: Maybe Text
, cardGenderIdentity :: Maybe Text
, cardAnniversary :: Maybe UTCTime }
deriving (Eq, Show, Data, Typeable)
defaultCard :: Card
defaultCard = Card
{ cardName = Nothing
, cardHonorificPrefix = Nothing
, cardGivenName = Nothing
, cardAdditionalName = Nothing
, cardFamilyName = Nothing
, cardSortString = Nothing
, cardHonorificSuffix = Nothing
, cardNickname = Nothing
, cardEmail = Nothing
, cardLogo = Nothing
, cardPhoto = Nothing
, cardUrl = Nothing
, cardUid = Nothing
, cardCategory = []
, cardAdr = Nowhere
, cardTel = Nothing
, cardNote = Nothing
, cardBday = Nothing
, cardKey = Nothing
, cardOrg = Nowhere
, cardJobTitle = Nothing
, cardRole = Nothing
, cardImpp = []
, cardSex = Nothing
, cardGenderIdentity = Nothing
, cardAnniversary = Nothing }
data Cite = Cite
{ citeName :: Maybe Text
, citePublished :: Maybe UTCTime
, citeAuthor :: Embedded Card
, citeUrl :: Maybe Text
, citeUid :: Maybe Text
, citePublication :: Maybe Text
, citeAccessed :: Maybe UTCTime
, citeContent :: Maybe Text }
deriving (Eq, Show, Data, Typeable)
defaultCite :: Cite
defaultCite = Cite
{ citeName = Nothing
, citePublished = Nothing
, citeAuthor = Nowhere
, citeUrl = Nothing
, citeUid = Nothing
, citePublication = Nothing
, citeAccessed = Nothing
, citeContent = Nothing }
type LocationReference = Either (Embedded Card) (Embedded Adr)
type EntryReference = Either (Embedded Cite) (Link Entry)
type ContentReference = Either Pandoc Text
data Entry = Entry
{ entryName :: Maybe Text
, entrySummary :: Maybe Text
, entryContent :: Maybe ContentReference
, entryPublished :: Maybe UTCTime
, entryUpdated :: Maybe UTCTime
, entryAuthor :: Embedded Card
, entryCategory :: [Text]
, entryUrl :: Maybe Text
, entryUid :: Maybe Text
, entryLocation :: Maybe LocationReference
, entryComments :: [EntryReference]
, entrySyndication :: [Text]
, entryInReplyTo :: Maybe EntryReference
, entryLikeOf :: Maybe EntryReference
, entryRepostOf :: Maybe EntryReference }
deriving (Eq, Show, Data, Typeable)
defaultEntry :: Entry
defaultEntry = Entry
{ entryName = Nothing
, entrySummary = Nothing
, entryContent = Nothing
, entryPublished = Nothing
, entryUpdated = Nothing
, entryAuthor = Nowhere
, entryCategory = []
, entryUrl = Nothing
, entryUid = Nothing
, entryLocation = Nothing
, entryComments = []
, entrySyndication = []
, entryInReplyTo = Nothing
, entryLikeOf = Nothing
, entryRepostOf = Nothing }