]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - Rakka/Wiki.hs
Wrote many...
[Rakka.git] / Rakka / Wiki.hs
index 9f8bcdce7d9d47268d557521f7e15e05e0a97efa..719ed62cc646699ebb4069a2bc1c6b51506b3de0 100644 (file)
@@ -1,60 +1,95 @@
 module Rakka.Wiki
     ( WikiPage
+
+    , Element(..)
+    , Attribute
+
     , BlockElement(..)
     , InlineElement(..)
 
-    , ListElement(..)
+    , Definition(..)
+
     , ListType(..)
     , ListItem
 
-    , Definition(..)
+    , CommandType(..)
+    , BlockCommand(..)
+    , InlineCommand(..)
     )
     where
 
+import           Data.Generics
+import           Network.URI
 import           Rakka.Page
 
 
 type WikiPage = [BlockElement]
 
 
+data Element
+    = Block  !BlockElement
+    | Inline !InlineElement
+    deriving (Eq, Show, Typeable, Data)
+
+
+type Attribute = (String, String)
+
+
 data BlockElement
     = Heading {
         headingLevel :: !Int
       , headingText  :: !String
       }
     | HorizontalLine
-    | List !ListElement
+    | List {
+        listType  :: !ListType
+      , listItems :: ![ListItem]
+      }
     | DefinitionList ![Definition]
-    | LeadingSpaced ![InlineElement]
+    | Preformatted ![InlineElement]
     | Paragraph ![InlineElement]
-    deriving (Eq, Show)
+    | Div ![Attribute] ![Element]
+    | EmptyBlock
+    | BlockCmd !BlockCommand
+    deriving (Eq, Show, Typeable, Data)
 
 
 data InlineElement
     = Text !String
+    | Italic ![InlineElement]
+    | Bold ![InlineElement]
+    | ObjectLink {
+        objLinkPage :: !PageName
+      , objLinkText :: !(Maybe String)
+      }
     | PageLink {
         linkPage     :: !(Maybe PageName)
       , linkFragment :: !(Maybe String)
       , linkText     :: !(Maybe String)
       }
-    deriving (Eq, Show)
-
-
-data ListElement
-    = ListElement {
-        listType  :: !ListType
-      , listItems :: ![ListItem]
+    | ExternalLink {
+        extLinkURI  :: !URI
+      , extLinkText :: !(Maybe String)
       }
-    deriving (Eq, Show)
+    | LineBreak ![Attribute]
+    | Span ![Attribute] ![InlineElement]
+    | Image {
+        imgSource :: !PageName
+      , imgAlt    :: !(Maybe String)
+      }
+    | Anchor ![Attribute] ![InlineElement]
+    | EmptyInline
+    | InlineCmd !InlineCommand
+    deriving (Eq, Show, Typeable, Data)
 
 
 data ListType
     = Bullet
     | Numbered
-    deriving (Eq, Show)
+    deriving (Eq, Show, Typeable, Data)
 
 
-type ListItem = [Either ListElement InlineElement]
+type ListItem = [Element]
 
 
 data Definition
@@ -62,4 +97,28 @@ data Definition
         defTerm :: ![InlineElement]
       , defDesc :: ![InlineElement]
       }
-    deriving (Eq, Show)
\ No newline at end of file
+    deriving (Eq, Show, Typeable, Data)
+
+
+data CommandType
+    = InlineCommandType
+    | BlockCommandType
+    deriving (Eq, Show)
+
+
+data BlockCommand
+    = BlockCommand {
+        bCmdName       :: !String
+      , bCmdAttributes :: ![Attribute]
+      , bCmdContents   :: ![BlockElement]
+      }
+    deriving (Eq, Show, Typeable, Data)
+
+
+data InlineCommand
+    = InlineCommand {
+        iCmdName       :: !String
+      , iCmdAttributes :: ![Attribute]
+      , iCmdContents   :: ![InlineElement]
+      }
+    deriving (Eq, Show, Typeable, Data)