Fixed small bug in RST list parsing.

See #3432.  Previously the parser didn't handle properly this
case:

    * - a
      - b
    * - c
      - d
This commit is contained in:
John MacFarlane 2017-02-11 20:55:13 +01:00
parent 92a5445aa1
commit 1a23bc65b8
2 changed files with 21 additions and 3 deletions

View file

@ -548,8 +548,7 @@ listItem :: PandocMonad m
listItem start = try $ do
(markerLength, first) <- rawListItem start
rest <- many (listContinuation markerLength)
blanks <- choice [ try (many blankline <* lookAhead start),
many1 blankline ] -- whole list must end with blank.
skipMany1 blankline <|> () <$ lookAhead start
-- parsing with ListItemState forces markers at beginning of lines to
-- count as list item markers, even if not separated by blank space.
-- see definition of "endline"
@ -557,7 +556,7 @@ listItem start = try $ do
let oldContext = stateParserContext state
setState $ state {stateParserContext = ListItemState}
-- parse the extracted block, which may itself contain block elements
parsed <- parseFromString parseBlocks $ concat (first:rest) ++ blanks
parsed <- parseFromString parseBlocks $ concat (first:rest) ++ "\n"
updateState (\st -> st {stateParserContext = oldContext})
return $ case B.toList parsed of
[Para xs] -> B.singleton $ Plain xs

19
test/command/3432a.md Normal file
View file

@ -0,0 +1,19 @@
```
% pandoc -f rst
* - a
- b
* - c
- d
^D
<ul>
<li><ul>
<li>a</li>
<li>b</li>
</ul></li>
<li><ul>
<li>c</li>
<li>d</li>
</ul></li>
</ul>
```