]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - Rakka/Wiki.hs
The experimental code worked like a magic. I can't believe that.
[Rakka.git] / Rakka / Wiki.hs
index f08aa96b5a8d363434d28738131b8006c36c644d..96231a46c72174bc33c7df3733e8c9457e230b09 100644 (file)
 module Rakka.Wiki
     ( WikiPage
-    , WikiElement(..)
     , BlockElement(..)
     , InlineElement(..)
+
+    , ListElement(..)
+    , ListType(..)
+    , ListItem
+
+    , Definition(..)
+
+    , CommandType(..)
+    , Attribute
+    , BlockCommand(..)
+    , InlineCommand(..)
     )
     where
 
-type WikiPage = [WikiElement]
+import           Data.Generics
+import           Rakka.Page
 
 
-data WikiElement
-    = Block !BlockElement
-    | Inline !InlineElement
-    deriving (Eq, Show)
+type WikiPage = [BlockElement]
 
 
 data BlockElement
-    = Header {
-        hdLevel :: !Int
-      , hdText  :: !String
+    = Heading {
+        headingLevel :: !Int
+      , headingText  :: !String
       }
-    | EmptyLine
-    deriving (Eq, Show)
+    | HorizontalLine
+    | List !ListElement
+    | DefinitionList ![Definition]
+    | Preformatted ![InlineElement]
+    | Paragraph ![InlineElement]
+    | Div ![Attribute] ![BlockElement]
+    | BlockCmd !BlockCommand
+    deriving (Eq, Show, Typeable, Data)
 
 
 data InlineElement
     = Text !String
+    | Italic ![InlineElement]
+    | Bold ![InlineElement]
+    | PageLink {
+        linkPage     :: !(Maybe PageName)
+      , linkFragment :: !(Maybe String)
+      , linkText     :: !(Maybe String)
+      }
+    | LineBreak ![Attribute]
+    | Span ![Attribute] ![InlineElement]
+    | Image ![Attribute]
+    | Anchor ![Attribute] ![InlineElement]
+    | InlineCmd !InlineCommand
+    deriving (Eq, Show, Typeable, Data)
+
+
+data ListElement
+    = ListElement {
+        listType  :: !ListType
+      , listItems :: ![ListItem]
+      }
+    deriving (Eq, Show, Typeable, Data)
+
+
+data ListType
+    = Bullet
+    | Numbered
+    deriving (Eq, Show, Typeable, Data)
+
+
+type ListItem = [Either ListElement InlineElement]
+
+
+data Definition
+    = Definition {
+        defTerm :: ![InlineElement]
+      , defDesc :: ![InlineElement]
+      }
+    deriving (Eq, Show, Typeable, Data)
+
+
+data CommandType
+    = InlineCommandType
+    | BlockCommandType
     deriving (Eq, Show)
+
+
+type Attribute = (String, String)
+
+
+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)