Fixed bug in parsing files that begin with blank lines.

+ In Text.Pandoc.Shared: rewrote lineClump to parse EITHER a string
  of blank lines OR a string of nonblanks.  Removed code for parsing
  eof.
+ In Markdown and RST readers, use 'manyTill (... <|> lineClump) eof'
  instead of many, since lineClump no longer parses eof. 


git-svn-id: https://pandoc.googlecode.com/svn/trunk@1057 788f1e2b-df1e-0410-8736-df70ead52e1b
This commit is contained in:
fiddlosopher 2007-10-29 21:00:48 +00:00
parent 63dfc3abf2
commit d5adbcb774
3 changed files with 7 additions and 7 deletions

View file

@ -142,14 +142,16 @@ parseMarkdown = do
startPos <- getPosition
-- go through once just to get list of reference keys
-- docMinusKeys is the raw document with blanks where the keys were...
docMinusKeys <- many (referenceKey <|> lineClump) >>= return . concat
docMinusKeys <- manyTill (referenceKey <|> lineClump) eof >>=
return . concat
setInput docMinusKeys
setPosition startPos
st <- getState
-- go through again for notes unless strict...
if stateStrict st
then return ()
else do docMinusNotes <- many (noteBlock <|> lineClump) >>= return . concat
else do docMinusNotes <- manyTill (noteBlock <|> lineClump) eof >>=
return . concat
st <- getState
let reversedNotes = stateNotes st
updateState $ \st -> st { stateNotes = reverse reversedNotes }

View file

@ -86,7 +86,7 @@ parseRST = do
startPos <- getPosition
-- go through once just to get list of reference keys
-- docMinusKeys is the raw document with blanks where the keys were...
docMinusKeys <- many (referenceKey <|> lineClump) >>= return . concat
docMinusKeys <- manyTill (referenceKey <|> lineClump) eof >>= return . concat
setInput docMinusKeys
setPosition startPos
st <- getState

View file

@ -298,10 +298,8 @@ parseFromString parser str = do
-- | Parse raw line block up to and including blank lines.
lineClump :: GenParser Char st String
lineClump = do
lns <- many1 (notFollowedBy blankline >> anyLine)
blanks <- blanklines <|> (eof >> return "\n")
return $ (unlines lns) ++ blanks
lineClump = blanklines
<|> (many1 (notFollowedBy blankline >> anyLine) >>= return . unlines)
-- | Parse a string of characters between an open character
-- and a close character, including text between balanced