From b9ff8d1cc183f8f07056efb4680b8b56556d4246 Mon Sep 17 00:00:00 2001 From: Michael Andreen Date: Sun, 12 Dec 2004 21:07:46 +0000 Subject: [PATCH] Rewrote the bold parser and added emphasis --- Main.hs | 4 ++++ Wiki.hs | 43 ++++++++++++++++++++++++++++++------------- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/Main.hs b/Main.hs index bd0df8a..2457b05 100644 --- a/Main.hs +++ b/Main.hs @@ -115,12 +115,16 @@ ex ((Link l d):xs) = do ex ((Bold d):xs) = do b (ex d) ex xs +ex ((Emph d):xs) = do + em (ex d) + ex xs ex2 [] = [] ex2 ((Paragraph):xs) = "

"++ex2 xs ex2 ((Text s):xs) = s++ex2 xs ex2 ((Link l d):xs) = ""++ex2 xs ex2 ((Bold d):xs) = ""++ex2 d++""++ex2 xs +ex2 ((Emph d):xs) = ""++ex2 d++""++ex2 xs test s = case parse wikiParser "" s of diff --git a/Wiki.hs b/Wiki.hs index 0b9e337..41fa15a 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) + ,Markup (Text, Paragraph, Link, Bold, Emph) ,Document ,wikiParser @@ -32,17 +32,13 @@ data Markup = Text String | Paragraph | Link String String | Bold [Markup] + | Emph [Markup] type Document = [Markup] wikiParser :: GenParser Char st Document wikiParser = do - s <- (try (pPara) - <|> pSpace - <|> try (pLinkLong) - <|> try (pLink) - <|> pOtherChar - <|> pText) + s <- pMain ss <- (wikiParser <|> return []) return (s:ss) @@ -68,18 +64,39 @@ pLinkLong = do string "]]" return (Link l d) -pBold = do - string "'''" - s <- wikiParser - return (Bold s) - pLink = do string "[[" l <- many1 $ noneOf "]" string "]]" return (Link l l) + +pBold = do + string "**" + s <- pStringParser "**" + return (Bold s) + +pEmph = do + string "//" + s <- pStringParser "//" + return (Emph s) + +pStringParser xs = do + (string xs >> return []) <|> (do + s <- pMain + ss <- pStringParser xs + return (s:ss)) + +pMain = (try (pPara) + <|> pSpace + <|> try(pBold) + <|> try(pEmph) + <|> try (pLinkLong) + <|> try (pLink) + <|> pOtherChar + <|> pText) + pOtherChar = do - c <- oneOf ",;.:!?[]()\'\"=-%$£<>/\\|" + c <- oneOf "*,;.:!?[]()'\"=-%$£<>/\\|" return (Text (c:[])) pText = do -- 2.39.2