X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Rakka%2FWiki.hs;h=719ed62cc646699ebb4069a2bc1c6b51506b3de0;hb=e43bb104a7313dd696b8bb8aa3bafff94706a187;hp=3b1802f0e4cc42928fc4341e03f2eb36116eb1a1;hpb=16b140fe235a43f9dfb9b57e69ebc302beeaea27;p=Rakka.git diff --git a/Rakka/Wiki.hs b/Rakka/Wiki.hs index 3b1802f..719ed62 100644 --- a/Rakka/Wiki.hs +++ b/Rakka/Wiki.hs @@ -1,54 +1,124 @@ module Rakka.Wiki ( WikiPage + + , Element(..) + , Attribute + , BlockElement(..) , InlineElement(..) - , ListElement(..) + , Definition(..) + , ListType(..) , ListItem + + , 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 - | LeadingSpaced ![InlineElement] + | List { + listType :: !ListType + , listItems :: ![ListItem] + } + | DefinitionList ![Definition] + | 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, Typeable, Data) + + +type ListItem = [Element] + + +data Definition + = Definition { + defTerm :: ![InlineElement] + , defDesc :: ![InlineElement] + } + deriving (Eq, Show, Typeable, Data) + + +data CommandType + = InlineCommandType + | BlockCommandType deriving (Eq, Show) -type ListItem = [Either ListElement InlineElement] +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)