aboutsummaryrefslogtreecommitdiff
path: root/haddock-library/src/Documentation
diff options
context:
space:
mode:
Diffstat (limited to 'haddock-library/src/Documentation')
-rw-r--r--haddock-library/src/Documentation/Haddock/Parser.hs15
1 files changed, 14 insertions, 1 deletions
diff --git a/haddock-library/src/Documentation/Haddock/Parser.hs b/haddock-library/src/Documentation/Haddock/Parser.hs
index 8dc2a801..dd1044cb 100644
--- a/haddock-library/src/Documentation/Haddock/Parser.hs
+++ b/haddock-library/src/Documentation/Haddock/Parser.hs
@@ -338,7 +338,7 @@ definitionList :: BS.ByteString -> Parser (DocH mod Identifier)
definitionList indent = DocDefList <$> p
where
p = do
- label <- "[" *> (parseStringBS <$> takeWhile1 (notInClass "]\n")) <* ("]" <* optional ":")
+ label <- "[" *> (parseStringBS <$> scan False accept) <* ("]" <* optional ":")
c <- takeLine
(cs, items) <- more indent p
let contents = parseString . dropNLs . unlines $ c : cs
@@ -346,6 +346,19 @@ definitionList indent = DocDefList <$> p
Left x -> [(label, contents `docAppend` x)]
Right i -> (label, contents) : i
+ -- handle '\]' escapes
+ accept True ']' = Just False
+
+ -- stop on ']' or '\n'
+ accept _ ']' = Nothing
+ accept _ '\n' = Nothing
+
+ -- starting an escape sequence
+ accept _ '\\' = Just True
+
+ -- anything else
+ accept _ _ = Just False
+
-- | Drops all trailing newlines.
dropNLs :: String -> String
dropNLs = reverse . dropWhile (== '\n') . reverse