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
| Underline [Markup]
| Strike [Markup]
| Pre String
- | List [[Markup]]
+ | List Bool [[Markup]]
type Document = [Markup]
[] -> 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
pMain :: Parser Markup
pMain = choice [
try (pHeading)
- ,try pList
+ ,try $ pList True
+ ,try $ pList False
,try (pPara)
,try(pPre)
,try(pBold)
toHtml ((Heading n d):xs) = "\n<h"++show n++">"++toHtml d++"</h"++show n++">\n"++toHtml xs
toHtml ((Url l):xs) = "<link: "++l++">"++toHtml xs
toHtml ((Pre s):xs) = "<pre>"++s++"</pre>"++toHtml xs
-toHtml ((List l):xs) = "<ul>\n"++(unlines $ map (\s -> "<li>"++toHtml s++"</li>\n") l) ++ "</ul>"++toHtml xs
+toHtml ((List o l):xs) = "<"++listType o++">\n"++(unlines $ map (\s -> "<li>"++toHtml s++"</li>\n") l) ++ "</"++listType o++">"++toHtml xs
+
+listType True = "ol"
+listType False = "ul"
htmlOutput s = case parse wikiParser "" s of
Right n -> putStr (toHtml n)