X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Rakka%2FWiki.hs;h=bdecec7fac00a5da4b3aa5e86865bc6e2fc91955;hb=42f51754dea02201aececaacbf194d714cd58aaf;hp=c5c2c68ec1b12b19e62bb73b85b81a5f96bc3ca2;hpb=1647278f9393f7382b6e8b8a5e9e14ce50aae718;p=Rakka.git diff --git a/Rakka/Wiki.hs b/Rakka/Wiki.hs index c5c2c68..bdecec7 100644 --- a/Rakka/Wiki.hs +++ b/Rakka/Wiki.hs @@ -1,37 +1,117 @@ +{-# LANGUAGE + UnicodeSyntax + #-} module Rakka.Wiki ( WikiPage - , WikiElement(..) + + , Element(..) + , Attribute + , BlockElement(..) , InlineElement(..) - ) - where -import Rakka.Page + , Definition(..) + , ListType(..) + , ListItem -type WikiPage = [WikiElement] + , CommandType(..) + , BlockCommand(..) + , InlineCommand(..) + ) + where +import Data.CaseInsensitive (CI) +import Data.Text (Text) +import Network.URI +import Rakka.Page +type WikiPage = [BlockElement] -data WikiElement - = Block !BlockElement +data Element + = Block !BlockElement | Inline !InlineElement 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] } - | 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 String) - , linkText :: !(Maybe String) + 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)