module Rakka.Wiki ( WikiPage , Element(..) , Attribute , BlockElement(..) , InlineElement(..) , Definition(..) , ListType(..) , ListItem , CommandType(..) , BlockCommand(..) , InlineCommand(..) ) where import Network.URI import Rakka.Page type WikiPage = [BlockElement] data Element = Block !BlockElement | Inline !InlineElement deriving (Eq, Show) type Attribute = (String, String) data BlockElement = Heading { headingLevel :: !Int , headingText :: !String } | HorizontalLine | List { listType :: !ListType , listItems :: ![ListItem] } | DefinitionList ![Definition] | Preformatted ![InlineElement] | Paragraph ![InlineElement] | Div ![Attribute] ![Element] | EmptyBlock | BlockCmd !BlockCommand deriving (Eq, Show) data InlineElement = Text !String | Italic ![InlineElement] | Bold ![InlineElement] | ObjectLink { objLinkPage :: !PageName , objLinkText :: !(Maybe String) } | PageLink { linkPage :: !(Maybe PageName) , linkFragment :: !(Maybe String) , linkText :: !(Maybe String) } | ExternalLink { extLinkURI :: !URI , extLinkText :: !(Maybe String) } | LineBreak ![Attribute] | Span ![Attribute] ![InlineElement] | Image { imgSource :: !(Either URI PageName) , imgAlt :: !(Maybe String) } | 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 :: !String , bCmdAttributes :: ![Attribute] , bCmdContents :: ![BlockElement] } deriving (Eq, Show) data InlineCommand = InlineCommand { iCmdName :: !String , iCmdAttributes :: ![Attribute] , iCmdContents :: ![InlineElement] } deriving (Eq, Show)