X-Git-Url: https://ruin.nu/git/?p=yawbih.git;a=blobdiff_plain;f=Wiki.hs;h=5e75da1958e2c494a7ac6e643c939e4c28c4f366;hp=210708df3d3a100fb50d267f33d1e647604acb37;hb=5d62f948d470010c1f7eb855f7cad681253f315a;hpb=66579a5b5cf49483f40de590f9b3b0527ba5621c diff --git a/Wiki.hs b/Wiki.hs index 210708d..5e75da1 100644 --- a/Wiki.hs +++ b/Wiki.hs @@ -50,8 +50,13 @@ type Document = [Markup] wikiParser :: Parser Document wikiParser = many1 pMain +firstInLineChars = "#*=" + pPara :: Parser Markup -pPara = count 2 pEol >> return (Paragraph) +pPara = do + count 2 pEol + notFollowedBy $ oneOf firstInLineChars + return (Paragraph) pLink :: Parser Markup pLink = do @@ -68,16 +73,21 @@ pList enum = do pListItem :: Bool -> Parser [Markup] pListItem enum = do - many1 pEol + pEol char $ listToken enum - many pOneLine + many (pOneLine <|> try (pOneEol)) + +pOneEol = do + c <- pEol + notFollowedBy (oneOf $ firstInLineChars++"\r\n") + return c listToken True = '#' listToken False = '*' pHeading :: Parser Markup pHeading = do - many1 pEol + pEol level <- many1 $ char '=' s <- pStopAt level return (Heading (length level) s)