X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Rakka%2FWiki.hs;h=af50afbc7adef90939cdba3376cad8bca3de214b;hb=656fdb2772ab4de5cd083cbe9e7c1610cccef73b;hp=0bf23987b5ffed8c5368fd13d85695183a3b89c8;hpb=f832f12703d807f5fc3350dc71d8624ffc5b97a5;p=Rakka.git diff --git a/Rakka/Wiki.hs b/Rakka/Wiki.hs index 0bf2398..af50afb 100644 --- a/Rakka/Wiki.hs +++ b/Rakka/Wiki.hs @@ -1,72 +1,96 @@ module Rakka.Wiki ( WikiPage + + , Element(..) + , Attribute + , BlockElement(..) , InlineElement(..) - , ListElement(..) + , Definition(..) + , ListType(..) , ListItem - , Definition(..) - , CommandType(..) - , Attribute , 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] | Preformatted ![InlineElement] | Paragraph ![InlineElement] - | Div ![Attribute] ![BlockElement] + | Div ![Attribute] ![Element] + | EmptyBlock | BlockCmd !BlockCommand - deriving (Eq, Show) + 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) } + | ExternalLink { + extLinkURI :: !URI + , extLinkText :: !(Maybe String) + } | LineBreak ![Attribute] | Span ![Attribute] ![InlineElement] - | InlineCmd !InlineCommand - deriving (Eq, Show) - - -data ListElement - = ListElement { - listType :: !ListType - , listItems :: ![ListItem] + | Image { + imgSource :: !(PageName) + , imgAlt :: !(Maybe String) } - deriving (Eq, Show) + | Anchor ![Attribute] ![InlineElement] + | Input ![Attribute] + | 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 @@ -74,15 +98,13 @@ data Definition defTerm :: ![InlineElement] , defDesc :: ![InlineElement] } - deriving (Eq, Show) + deriving (Eq, Show, Typeable, Data) data CommandType = InlineCommandType | BlockCommandType - - -type Attribute = (String, String) + deriving (Eq, Show) data BlockCommand @@ -91,7 +113,7 @@ data BlockCommand , bCmdAttributes :: ![Attribute] , bCmdContents :: ![BlockElement] } - deriving (Eq, Show) + deriving (Eq, Show, Typeable, Data) data InlineCommand @@ -100,4 +122,4 @@ data InlineCommand , iCmdAttributes :: ![Attribute] , iCmdContents :: ![InlineElement] } - deriving (Eq, Show) + deriving (Eq, Show, Typeable, Data)