module Rakka.Wiki
( WikiPage
- , WikiElement(..)
+
+ , Element(..)
+ , Attribute
+
, BlockElement(..)
, InlineElement(..)
+
+ , Definition(..)
+
+ , ListType(..)
+ , ListItem
+
+ , CommandType(..)
+ , BlockCommand(..)
+ , InlineCommand(..)
)
where
-type WikiPage = [WikiElement]
+import Network.URI
+import Rakka.Page
-data WikiElement
- = Block !BlockElement
+type WikiPage = [BlockElement]
+
+
+data Element
+ = Block !BlockElement
| Inline !InlineElement
deriving (Eq, Show)
+type Attribute = (String, String)
+
+
data BlockElement
- = Header {
- hdLevel :: !Int
- , hdText :: !String
+ = Heading {
+ headingLevel :: !Int
+ , headingText :: !String
}
- | EmptyLine
+ | 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)