mirror of
https://github.com/jgm/pandoc.git
synced 2026-08-24 09:16:43 +00:00
RST writer: add empty comments when needed...
to avoid including a blocquote in the indented content of a preceding block. Closes #3675.
This commit is contained in:
@@ -57,6 +57,7 @@ data WriterState =
|
||||
, stHasRawTeX :: Bool
|
||||
, stOptions :: WriterOptions
|
||||
, stTopLevel :: Bool
|
||||
, stLastNested :: Bool
|
||||
}
|
||||
|
||||
type RST = StateT WriterState
|
||||
@@ -67,7 +68,7 @@ writeRST opts document = do
|
||||
let st = WriterState { stNotes = [], stLinks = [],
|
||||
stImages = [], stHasMath = False,
|
||||
stHasRawTeX = False, stOptions = opts,
|
||||
stTopLevel = True}
|
||||
stTopLevel = True, stLastNested = False}
|
||||
evalStateT (pandocToRST document) st
|
||||
|
||||
-- | Return RST representation of document.
|
||||
@@ -343,11 +344,32 @@ blockListToRST' :: PandocMonad m
|
||||
-> RST m Doc
|
||||
blockListToRST' topLevel blocks = do
|
||||
tl <- gets stTopLevel
|
||||
modify (\s->s{stTopLevel=topLevel})
|
||||
res <- vcat `fmap` mapM blockToRST blocks
|
||||
modify (\s->s{stTopLevel=topLevel, stLastNested=False})
|
||||
res <- vcat `fmap` mapM blockToRST' blocks
|
||||
modify (\s->s{stTopLevel=tl})
|
||||
return res
|
||||
|
||||
blockToRST' :: PandocMonad m => Block -> RST m Doc
|
||||
blockToRST' (x@BlockQuote{}) = do
|
||||
lastNested <- gets stLastNested
|
||||
res <- blockToRST x
|
||||
modify (\s -> s{stLastNested = True})
|
||||
return $ if lastNested
|
||||
then ".." $+$ res
|
||||
else res
|
||||
blockToRST' x = do
|
||||
modify (\s -> s{stLastNested =
|
||||
case x of
|
||||
Para [Image _ _ (_,'f':'i':'g':':':_)] -> True
|
||||
Para{} -> False
|
||||
Plain{} -> False
|
||||
Header{} -> False
|
||||
LineBlock{} -> False
|
||||
HorizontalRule -> False
|
||||
_ -> True
|
||||
})
|
||||
blockToRST x
|
||||
|
||||
blockListToRST :: PandocMonad m
|
||||
=> [Block] -- ^ List of block elements
|
||||
-> RST m Doc
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
````
|
||||
% pandoc -t rst
|
||||
```python
|
||||
print("hello")
|
||||
```
|
||||
> block quote
|
||||
^D
|
||||
.. code:: python
|
||||
|
||||
print("hello")
|
||||
|
||||
..
|
||||
|
||||
block quote
|
||||
````
|
||||
@@ -75,6 +75,8 @@ E-mail style:
|
||||
|
||||
This is a block quote. It is pretty short.
|
||||
|
||||
..
|
||||
|
||||
Code in a block quote:
|
||||
|
||||
::
|
||||
@@ -92,6 +94,8 @@ E-mail style:
|
||||
|
||||
nested
|
||||
|
||||
..
|
||||
|
||||
nested
|
||||
|
||||
This should not be a block quote: 2 > 1.
|
||||
@@ -342,6 +346,8 @@ Multiple blocks with italics:
|
||||
|
||||
{ orange code block }
|
||||
|
||||
..
|
||||
|
||||
orange block quote
|
||||
|
||||
Multiple definitions, tight:
|
||||
|
||||
Reference in New Issue
Block a user