]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - Rakka/Wiki.hs
merge branch origin/master
[Rakka.git] / Rakka / Wiki.hs
index f08aa96b5a8d363434d28738131b8006c36c644d..bdecec7fac00a5da4b3aa5e86865bc6e2fc91955 100644 (file)
+{-# LANGUAGE
+    UnicodeSyntax
+  #-}
 module Rakka.Wiki
     ( WikiPage
-    , WikiElement(..)
+
+    , 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 = [WikiElement]
-
+type WikiPage = [BlockElement]
 
-data WikiElement
-    = Block !BlockElement
+data Element
+    = Block  !BlockElement
     | Inline !InlineElement
     deriving (Eq, Show)
 
+type Attribute = (CI Text, Text)
 
 data BlockElement
-    = Header {
-        hdLevel :: !Int
-      , hdText  :: !String
+    = Heading {
+        headingLevel ∷ !Int
+      , headingText  ∷ !Text
+      }
+    | HorizontalLine
+    | List {
+        listType  ∷ !ListType
+      , listItems ∷ ![ListItem]
       }
-    | EmptyLine
+    | DefinitionList ![Definition]
+    | Preformatted   ![InlineElement]
+    | Paragraph      ![InlineElement]
+    | Div            ![Attribute] ![Element]
+    | EmptyBlock
+    | BlockCmd       !BlockCommand
     deriving (Eq, Show)
 
-
 data InlineElement
-    = Text !String
+    = 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)