aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNiklas Haas <git@nand.wakku.to>2014-02-22 21:15:34 +0100
committerNiklas Haas <git@nand.wakku.to>2014-02-22 21:31:03 +0100
commitfc7fd1875d31dbfd37eaa058177e534b4fc6bc25 (patch)
tree15cad6ae08c535594a452e67cbe2ddc785ba7676 /src
parent91e2c21cfdaca7913dbfec17bdd7712c0c1ed732 (diff)
Strip a single leading space from bird tracks (#201)
This makes bird tracks in the form > foo > bar > bat parse as if they had been written as >foo >bar >bat ie. without the leading whitespace in front of every line. Ideally we also want to look into how leading whitespace affects code blocks written using the @ @ syntax, which are currently unaffected by this patch.
Diffstat (limited to 'src')
-rw-r--r--src/Haddock/Parser.hs11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/Haddock/Parser.hs b/src/Haddock/Parser.hs
index e9bed2a5..a6ad817c 100644
--- a/src/Haddock/Parser.hs
+++ b/src/Haddock/Parser.hs
@@ -302,10 +302,19 @@ takeNonEmptyLine = do
(++ "\n") . decodeUtf8 <$> (takeWhile1 (/= '\n') >>= nonSpace) <* "\n"
birdtracks :: Parser (Doc a)
-birdtracks = DocCodeBlock . DocString . intercalate "\n" <$> many1 line
+birdtracks = DocCodeBlock . DocString . intercalate "\n" . stripSpace <$> many1 line
where
line = skipHorizontalSpace *> ">" *> takeLine
+-- | Strip leading spaces, but ignore blank lines. If any of the lines don't
+-- start with a ' ', however, we don't touch the block.
+stripSpace :: [String] -> [String]
+stripSpace = fromMaybe <*> mapM strip
+ where
+ strip (' ':xs) = Just xs
+ strip "" = Just ""
+ strip _ = Nothing
+
-- | Parses examples. Examples are a paragraph level entitity (separated by an empty line).
-- Consecutive examples are accepted.
examples :: Parser (Doc a)