diff options
Diffstat (limited to 'haddock-library/src')
| -rw-r--r-- | haddock-library/src/Documentation/Haddock/Parser.hs | 15 | 
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 | 
