@@ -57,6 +57,7 @@ data WriterState =
5757 , stHasRawTeX :: Bool
5858 , stOptions :: WriterOptions
5959 , stTopLevel :: Bool
60+ , stLastNested :: Bool
6061 }
6162
6263type RST = StateT WriterState
@@ -67,7 +68,7 @@ writeRST opts document = do
6768 let st = WriterState { stNotes = [], stLinks = [],
6869 stImages = [], stHasMath = False,
6970 stHasRawTeX = False, stOptions = opts,
70− stTopLevel = True}
71+ stTopLevel = True, stLastNested = False}
7172 evalStateT (pandocToRST document) st
7273
7374-- | Return RST representation of document.
@@ -343,11 +344,32 @@ blockListToRST' :: PandocMonad m
343344 -> RST m Doc
344345blockListToRST' topLevel blocks = do
345346 tl <- gets stTopLevel
346− modify (\s->s{stTopLevel=topLevel})
347− res <- vcat `fmap` mapM blockToRST blocks
347+ modify (\s->s{stTopLevel=topLevel, stLastNested=False})
348+ res <- vcat `fmap` mapM blockToRST' blocks
348349 modify (\s->s{stTopLevel=tl})
349350 return res
350351
352+blockToRST' :: PandocMonad m => Block -> RST m Doc
353+blockToRST' (x@BlockQuote{}) = do
354+ lastNested <- gets stLastNested
355+ res <- blockToRST x
356+ modify (\s -> s{stLastNested = True})
357+ return $ if lastNested
358+ then ".." $+$ res
359+ else res
360+blockToRST' x = do
361+ modify (\s -> s{stLastNested =
362+ case x of
363+ Para [Image _ _ (_,'f':'i':'g':':':_)] -> True
364+ Para{} -> False
365+ Plain{} -> False
366+ Header{} -> False
367+ LineBlock{} -> False
368+ HorizontalRule -> False
369+ _ -> True
370+ })
371+ blockToRST x
372+
351373blockListToRST :: PandocMonad m
352374 => [Block] -- ^ List of block elements
353375 -> RST m Doc