RST reader: fix regression with code includes.

With the recent changes to include infrastructure,
included code blocks were getting an extra newline.

Closes #7436.  Added regression test.
This commit is contained in:
John MacFarlane 2021-07-09 12:27:41 -07:00
parent 565330033a
commit ae22b1e977
4 changed files with 23 additions and 1 deletions

View file

@ -213,6 +213,7 @@ extra-source-files:
test/command/B.txt
test/command/C.txt
test/command/D.txt
test/command/three.txt
test/command/01.csv
test/command/chap1/spider.png
test/command/chap2/spider.png

View file

@ -474,6 +474,7 @@ includeDirective top fields body = do
case lookup "literal" fields of
Just _ -> B.rawBlock "rst" . sourcesToText <$> getInput
Nothing -> parseBlocks
let isLiteral = isJust (lookup "code" fields `mplus` lookup "literal" fields)
let selectLines =
(case trim <$> lookup "end-before" fields of
Just patt -> takeWhile (not . (patt `T.isInfixOf`))
@ -482,8 +483,11 @@ includeDirective top fields body = do
Just patt -> drop 1 .
dropWhile (not . (patt `T.isInfixOf`))
Nothing -> id)
let toStream t =
toSources [(f, T.unlines . selectLines . T.lines $ t)]
Sources [(initialPos f,
(T.unlines . selectLines . T.lines $ t) <>
if isLiteral then mempty else "\n")] -- see #7436
currentDir <- takeDirectory . sourceName <$> getPosition
insertIncludedFile parser toStream [currentDir] f startLine endLine

14
test/command/7436.md Normal file
View file

@ -0,0 +1,14 @@
```
% pandoc -f rst -t native
.. include:: command/three.txt
:code:
.. include:: command/three.txt
:literal:
.. include:: command/three.txt
^D
[CodeBlock ("",[""],[("code","")]) "1st line.\n2nd line.\n3rd line.\n"
,RawBlock (Format "rst") "1st line.\n2nd line.\n3rd line.\n"
,Para [Str "1st",Space,Str "line.",SoftBreak,Str "2nd",Space,Str "line.",SoftBreak,Str "3rd",Space,Str "line."]]
```

3
test/command/three.txt Normal file
View file

@ -0,0 +1,3 @@
1st line.
2nd line.
3rd line.