+{-# LANGUAGE
+ UnicodeSyntax
+ #-}
module Rakka.Wiki
( WikiPage
, InlineCommand(..)
)
where
-
-import Data.Generics
-import Network.URI
-import Rakka.Page
-
+import Data.CaseInsensitive (CI)
+import Data.Text (Text)
+import Network.URI
+import Rakka.Page
type WikiPage = [BlockElement]
-
data Element
= Block !BlockElement
| Inline !InlineElement
- deriving (Eq, Show, Typeable, Data)
-
-
-type Attribute = (String, String)
+ deriving (Eq, Show)
+type Attribute = (CI Text, Text)
data BlockElement
= Heading {
- headingLevel :: !Int
- , headingText :: !String
+ headingLevel ∷ !Int
+ , headingText ∷ !Text
}
| HorizontalLine
| List {
- listType :: !ListType
- , listItems :: ![ListItem]
+ listType ∷ !ListType
+ , listItems ∷ ![ListItem]
}
| DefinitionList ![Definition]
- | Preformatted ![InlineElement]
- | Paragraph ![InlineElement]
- | Div ![Attribute] ![Element]
+ | Preformatted ![InlineElement]
+ | Paragraph ![InlineElement]
+ | Div ![Attribute] ![Element]
| EmptyBlock
- | BlockCmd !BlockCommand
- deriving (Eq, Show, Typeable, Data)
-
+ | BlockCmd !BlockCommand
+ deriving (Eq, Show)
data InlineElement
- = Text !String
+ = Text !Text
| Italic ![InlineElement]
- | Bold ![InlineElement]
+ | Bold ![InlineElement]
| ObjectLink {
- objLinkPage :: !PageName
- , objLinkText :: !(Maybe String)
+ objLinkPage ∷ !PageName
+ , objLinkText ∷ !(Maybe Text)
}
| PageLink {
- linkPage :: !(Maybe PageName)
- , linkFragment :: !(Maybe String)
- , linkText :: !(Maybe String)
+ linkPage ∷ !(Maybe PageName)
+ , linkFragment ∷ !(Maybe Text)
+ , linkText ∷ !(Maybe Text)
}
| ExternalLink {
- extLinkURI :: !URI
- , extLinkText :: !(Maybe String)
+ extLinkURI ∷ !URI
+ , extLinkText ∷ !(Maybe Text)
}
| LineBreak ![Attribute]
- | Span ![Attribute] ![InlineElement]
+ | Span ![Attribute] ![InlineElement]
| Image {
- imgSource :: !PageName
- , imgAlt :: !(Maybe String)
+ imgSource ∷ !(Either URI PageName)
+ , imgAlt ∷ !(Maybe Text)
}
- | Anchor ![Attribute] ![InlineElement]
+ | Anchor ![Attribute] ![InlineElement]
+ | Input ![Attribute]
| EmptyInline
| InlineCmd !InlineCommand
- deriving (Eq, Show, Typeable, Data)
-
+ deriving (Eq, Show)
data ListType
= Bullet
| Numbered
- deriving (Eq, Show, Typeable, Data)
-
+ deriving (Eq, Show)
type ListItem = [Element]
-
data Definition
= Definition {
- defTerm :: ![InlineElement]
- , defDesc :: ![InlineElement]
+ defTerm ∷ ![InlineElement]
+ , defDesc ∷ ![InlineElement]
}
- deriving (Eq, Show, Typeable, Data)
-
+ deriving (Eq, Show)
data CommandType
= InlineCommandType
| BlockCommandType
deriving (Eq, Show)
-
data BlockCommand
= BlockCommand {
- bCmdName :: !String
- , bCmdAttributes :: ![Attribute]
- , bCmdContents :: ![BlockElement]
+ bCmdName ∷ !Text
+ , bCmdAttributes ∷ ![Attribute]
+ , bCmdContents ∷ ![BlockElement]
}
- deriving (Eq, Show, Typeable, Data)
-
+ deriving (Eq, Show)
data InlineCommand
= InlineCommand {
- iCmdName :: !String
+ iCmdName :: !Text
, iCmdAttributes :: ![Attribute]
, iCmdContents :: ![InlineElement]
}
- deriving (Eq, Show, Typeable, Data)
+ deriving (Eq, Show)