From ee02e144cc032d02afc0aaf3b1e73a1a68963ac6 Mon Sep 17 00:00:00 2001 From: Michael Andreen Date: Mon, 13 Dec 2004 08:41:18 +0000 Subject: [PATCH] headings, urls and maybe some more --- Main.hs | 15 +++++++++++++++ Wiki.hs | 37 +++++++++++++++++++++++++++---------- 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/Main.hs b/Main.hs index 2457b05..3242416 100644 --- a/Main.hs +++ b/Main.hs @@ -118,6 +118,19 @@ ex ((Bold d):xs) = do ex ((Emph d):xs) = do em (ex d) ex xs +ex ((Heading n d):xs) = do + heading n $ ex d + ex xs +ex ((Url l):xs) = do + hlink (URL {unURL = ("wiki?"++l)}) (text l) + ex xs + +heading 1 = h1 +heading 2 = h2 +heading 3 = h3 +heading 4 = h4 +heading 5 = h5 +heading 6 = h6 ex2 [] = [] ex2 ((Paragraph):xs) = "

"++ex2 xs @@ -125,6 +138,8 @@ 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 +ex2 ((Heading n d):xs) = ""++ex2 d++""++ex2 xs +ex2 ((Url l):xs) = ""++ex2 xs test s = case parse wikiParser "" s of 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 "*,;.:!?[]()'\"=-%$£<>/\\|" -- 2.39.2