From: Michael Andreen Date: Wed, 19 Jan 2005 21:43:08 +0000 (+0000) Subject: Ordered lists and some cleanup X-Git-Url: https://ruin.nu/git/?p=yawbih.git;a=commitdiff_plain;h=b0821b704ddf955948416ec8bfa0afcc6512c933 Ordered lists and some cleanup --- diff --git a/Main.hs b/Main.hs index 3c634d3..c89ebf2 100644 --- a/Main.hs +++ b/Main.hs @@ -149,10 +149,13 @@ toWash ((Url l):xs) = do toWash ((Pre s):xs) = do pre $ text s toWash xs -toWash ((List l):xs) = do - ul $ mapM (\s -> li $ toWash s) l +toWash ((List o l):xs) = do + listType o $ mapM (\s -> li $ toWash s) l toWash xs +listType True = ol +listType False = ul + stripMailto ('m':'a':'i':'l':'t':'o':':':xs) = xs stripMailto xs = xs diff --git a/Wiki.hs b/Wiki.hs index 2de6f92..2b8b313 100644 --- a/Wiki.hs +++ b/Wiki.hs @@ -42,7 +42,7 @@ data Markup = Text String | Underline [Markup] | Strike [Markup] | Pre String - | List [[Markup]] + | List Bool [[Markup]] type Document = [Markup] @@ -60,23 +60,25 @@ pLink = do [] -> return (Link l l) _ -> return (Link l d) -pList :: Parser Markup -pList = do - list <- many1 $ try pListItem - return (List list) +pList :: Bool -> Parser Markup +pList enum = do + list <- many1 $ try $ pListItem enum + return (List enum list) -pListItem :: Parser [Markup] -pListItem = do +pListItem :: Bool -> Parser [Markup] +pListItem enum = do many1 pEol - char '*' + char $ listToken enum many pOneLine + +listToken True = '#' +listToken False = '*' pHeading :: Parser Markup pHeading = do many1 pEol level <- many1 $ char '=' - char ' ' - s <- pStopAt (' ':level) + s <- pStopAt level return (Heading (length level) s) pURL :: Parser Markup @@ -146,7 +148,8 @@ pUntil p xs = manyTill p (try $ string xs) pMain :: Parser Markup pMain = choice [ try (pHeading) - ,try pList + ,try $ pList True + ,try $ pList False ,try (pPara) ,try(pPre) ,try(pBold) @@ -242,7 +245,10 @@ toHtml ((Strike d):xs) = ""++toHtml d++""++toHtml xs toHtml ((Heading n d):xs) = "\n"++toHtml d++"\n"++toHtml xs toHtml ((Url l):xs) = ""++toHtml xs toHtml ((Pre s):xs) = "
"++s++"
"++toHtml xs -toHtml ((List l):xs) = ""++toHtml xs +toHtml ((List o l):xs) = "<"++listType o++">\n"++(unlines $ map (\s -> "
  • "++toHtml s++"
  • \n") l) ++ ""++toHtml xs + +listType True = "ol" +listType False = "ul" htmlOutput s = case parse wikiParser "" s of Right n -> putStr (toHtml n)