X-Git-Url: https://ruin.nu/git/?p=yawbih.git;a=blobdiff_plain;f=Wiki.hs;h=59e592938df2e7fbb25634bb30b65dd357f05735;hp=41fa15a8cd5d532b84aa03b79a97fc8fef79c017;hb=ee02e144cc032d02afc0aaf3b1e73a1a68963ac6;hpb=b9ff8d1cc183f8f07056efb4680b8b56556d4246 diff --git a/Wiki.hs b/Wiki.hs index 41fa15a..59e5929 100644 --- a/Wiki.hs +++ b/Wiki.hs @@ -2,7 +2,7 @@ module Wiki ( Backend (getCurrent,getList,get,setCurrent,update) ,PGB ,createPGB - ,Markup (Text, Paragraph, Link, Bold, Emph) + ,Markup (Text, Paragraph, Link, Bold, Emph, Heading, Url) ,Document ,wikiParser @@ -33,6 +33,8 @@ data Markup = Text String | Link String String | Bold [Markup] | Emph [Markup] + | Heading Int [Markup] + | Url String type Document = [Markup] @@ -81,19 +83,34 @@ pEmph = do return (Emph s) pStringParser xs = do - (string xs >> return []) <|> (do + try (string xs >> return []) <|> (do s <- pMain ss <- pStringParser xs return (s:ss)) + +pHeading = do + many1 pEol + level <- many1 $ char '=' + char ' ' + s <- pStringParser (' ':level) + return (Heading (length level) s) + +pURL = do + proto <- many1 letter + string "://" + s <- many1 (alphaNum <|> oneOf "?.:&-/") + return (Url (proto++"://"++s)) -pMain = (try (pPara) - <|> pSpace - <|> try(pBold) - <|> try(pEmph) - <|> try (pLinkLong) - <|> try (pLink) - <|> pOtherChar - <|> pText) +pMain = try (pHeading) + <|> (try (pPara) + <|> pSpace + <|> try(pBold) + <|> try(pEmph) + <|> try (pLinkLong) + <|> try (pLink) + <|> try (pURL) + <|> pOtherChar + <|> pText) pOtherChar = do c <- oneOf "*,;.:!?[]()'\"=-%$£<>/\\|"