{-# LANGUAGE UnicodeSyntax #-} module Rakka.Wiki ( WikiPage , Element(..) , Attribute , BlockElement(..) , InlineElement(..) , Definition(..) , ListType(..) , ListItem , CommandType(..) , BlockCommand(..) , InlineCommand(..) ) where import Data.CaseInsensitive (CI) import Data.Text (Text) import Network.URI import Rakka.Page type WikiPage = [BlockElement] data Element = Block !BlockElement | Inline !InlineElement deriving (Eq, Show) type Attribute = (CI Text, Text) data BlockElement = Heading { headingLevel ∷ !Int , headingText ∷ !Text } | HorizontalLine | List { listType ∷ !ListType , listItems ∷ ![ListItem] } | DefinitionList ![Definition] | Preformatted ![InlineElement] | Paragraph ![InlineElement] | Div ![Attribute] ![Element] | EmptyBlock | BlockCmd !BlockCommand deriving (Eq, Show) data InlineElement = Text !Text | Italic ![InlineElement] | Bold ![InlineElement] | ObjectLink { objLinkPage ∷ !PageName , objLinkText ∷ !(Maybe Text) } | PageLink { linkPage ∷ !(Maybe PageName) , linkFragment ∷ !(Maybe Text) , linkText ∷ !(Maybe Text) } | ExternalLink { extLinkURI ∷ !URI , extLinkText ∷ !(Maybe Text) } | LineBreak ![Attribute] | Span ![Attribute] ![InlineElement] | Image { imgSource ∷ !(Either URI PageName) , imgAlt ∷ !(Maybe Text) } | Anchor ![Attribute] ![InlineElement] | Input ![Attribute] | EmptyInline | InlineCmd !InlineCommand deriving (Eq, Show) data ListType = Bullet | Numbered deriving (Eq, Show) type ListItem = [Element] data Definition = Definition { defTerm ∷ ![InlineElement] , defDesc ∷ ![InlineElement] } deriving (Eq, Show) data CommandType = InlineCommandType | BlockCommandType deriving (Eq, Show) data BlockCommand = BlockCommand { bCmdName ∷ !Text , bCmdAttributes ∷ ![Attribute] , bCmdContents ∷ ![BlockElement] } deriving (Eq, Show) data InlineCommand = InlineCommand { iCmdName :: !Text , iCmdAttributes :: ![Attribute] , iCmdContents :: ![InlineElement] } deriving (Eq, Show)