X-Git-Url: https://ruin.nu/git/?p=yawbih.git;a=blobdiff_plain;f=Wiki.hs;fp=Wiki.hs;h=2b8b31383779ae576115b14cdc106522b4bf99d1;hp=2de6f920cde32ec3baeb96a9c8774c3299c35f92;hb=b0821b704ddf955948416ec8bfa0afcc6512c933;hpb=58e04761af30e092662dac331493200ccca48650 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)