X-Git-Url: https://ruin.nu/git/?p=yawbih.git;a=blobdiff_plain;f=Wiki.hs;fp=Wiki.hs;h=83827cc1a6e6fbb9e04059f91350b99a0ae824cd;hp=59e592938df2e7fbb25634bb30b65dd357f05735;hb=098456b001387b7133e3d7a8bb06afaf54b434a5;hpb=ee02e144cc032d02afc0aaf3b1e73a1a68963ac6 diff --git a/Wiki.hs b/Wiki.hs index 59e5929..83827cc 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, Heading, Url) + ,Markup (Text, Paragraph, Link, Bold, Emph, Heading, Url, Underline, Strike) ,Document ,wikiParser @@ -35,6 +35,8 @@ data Markup = Text String | Emph [Markup] | Heading Int [Markup] | Url String + | Underline [Markup] + | Strike [Markup] type Document = [Markup] @@ -58,19 +60,22 @@ pEol = char '\n' <|> do char '\r' char '\n' -pLinkLong = do - string "[[" - l <- many1 $ noneOf ['|'] - char '|' - d <- many1 $ noneOf "]" - string "]]" - return (Link l d) +pLinkParser = do try (string "]]" >> return ([],[])) + <|> try (do + string " | " + d <- pString "]]" + return ([],d)) + <|> (do + c <- anyChar + (l,d) <- pLinkParser + return (c:l,d)) pLink = do string "[[" - l <- many1 $ noneOf "]" - string "]]" - return (Link l l) + (l,d) <- pLinkParser + case d of + [] -> return (Link l l) + _ -> return (Link l d) pBold = do string "**" @@ -82,12 +87,28 @@ pEmph = do s <- pStringParser "//" return (Emph s) +pUnderline = do + string "__" + s <- pStringParser "__" + return (Underline s) + +pStrike = do + string "--" + s <- pStringParser "--" + return (Strike s) + pStringParser xs = do try (string xs >> return []) <|> (do s <- pMain ss <- pStringParser xs return (s:ss)) +pString xs = do + try (string xs >> return []) <|> (do + s <- anyChar + ss <- pString xs + return (s:ss)) + pHeading = do many1 pEol level <- many1 $ char '=' @@ -106,7 +127,8 @@ pMain = try (pHeading) <|> pSpace <|> try(pBold) <|> try(pEmph) - <|> try (pLinkLong) + <|> try(pUnderline) + <|> try(pStrike) <|> try (pLink) <|> try (pURL) <|> pOtherChar @@ -139,7 +161,9 @@ instance Backend PGB where getList (PGB db) key = do list <- selectReturnTuples db $ "SELECT id, timestamp, author, comment from fulltexts WHERE keyword = "++tov key - return $ map (\[id,date,author,comment] -> (id,date,author,comment)) list + case list of + [[]] -> return [] + _ -> return $ map (\[id,date,author,comment] -> (id,date,author,comment)) list get (PGB db) key id = do list <- selectReturnTuples db $ "SELECT fulltext from fulltexts WHERE id = "++tov id