X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Rakka%2FWiki.hs;h=a519d34a227da9b8a40ec6db7b66108907185fc2;hb=b33b02e8fdc8e24c0a5062e122212122e8031523;hp=f08aa96b5a8d363434d28738131b8006c36c644d;hpb=8a7556db44cd91ac0bb52279472bcc2abaa3f18e;p=Rakka.git diff --git a/Rakka/Wiki.hs b/Rakka/Wiki.hs index f08aa96..a519d34 100644 --- a/Rakka/Wiki.hs +++ b/Rakka/Wiki.hs @@ -1,29 +1,124 @@ module Rakka.Wiki ( WikiPage - , WikiElement(..) + + , Element(..) + , Attribute + , BlockElement(..) , InlineElement(..) + + , Definition(..) + + , ListType(..) + , ListItem + + , CommandType(..) + , BlockCommand(..) + , InlineCommand(..) ) where -type WikiPage = [WikiElement] +import Network.URI +import Rakka.Page -data WikiElement - = Block !BlockElement +type WikiPage = [BlockElement] + + +data Element + = Block !BlockElement | Inline !InlineElement deriving (Eq, Show) +type Attribute = (String, String) + + data BlockElement - = Header { - hdLevel :: !Int - , hdText :: !String + = Heading { + headingLevel :: !Int + , headingText :: !String } - | EmptyLine + | HorizontalLine + | List { + listType :: !ListType + , listItems :: ![ListItem] + } + | DefinitionList ![Definition] + | Preformatted ![InlineElement] + | Paragraph ![InlineElement] + | Div ![Attribute] ![Element] + | EmptyBlock + | BlockCmd !BlockCommand deriving (Eq, Show) 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] + | Image { + imgSource :: !(Either URI PageName) + , imgAlt :: !(Maybe String) + } + | 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 :: !String + , bCmdAttributes :: ![Attribute] + , bCmdContents :: ![BlockElement] + } + deriving (Eq, Show) + + +data InlineCommand + = InlineCommand { + iCmdName :: !String + , iCmdAttributes :: ![Attribute] + , iCmdContents :: ![InlineElement] + } deriving (Eq, Show)