diff options
author | Niklas Haas <git@nand.wakku.to> | 2014-02-22 21:15:34 +0100 |
---|---|---|
committer | Niklas Haas <git@nand.wakku.to> | 2014-02-22 21:31:03 +0100 |
commit | fc7fd1875d31dbfd37eaa058177e534b4fc6bc25 (patch) | |
tree | 15cad6ae08c535594a452e67cbe2ddc785ba7676 /src | |
parent | 91e2c21cfdaca7913dbfec17bdd7712c0c1ed732 (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.hs | 11 |
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) |