Merge pull request #4259 from italia/4248

in RST writer insert comment between lists and quotes, closes #4248
This commit is contained in:
John MacFarlane
2018-01-19 18:33:07 -07:00
committed by GitHub
2 changed files with 27 additions and 25 deletions
+17 -25
View File
@@ -57,7 +57,6 @@ data WriterState =
, stHasRawTeX :: Bool
, stOptions :: WriterOptions
, stTopLevel :: Bool
, stLastNested :: Bool
}
type RST = StateT WriterState
@@ -68,7 +67,7 @@ writeRST opts document = do
let st = WriterState { stNotes = [], stLinks = [],
stImages = [], stHasMath = False,
stHasRawTeX = False, stOptions = opts,
stTopLevel = True, stLastNested = False}
stTopLevel = True }
evalStateT (pandocToRST document) st
-- | Return RST representation of document.
@@ -353,33 +352,26 @@ blockListToRST' :: PandocMonad m
-> [Block] -- ^ List of block elements
-> RST m Doc
blockListToRST' topLevel blocks = do
-- insert comment between list and quoted blocks, see #4248 and #3675
let fixBlocks (b1:b2@(BlockQuote _):bs)
| toClose b1 = b1 : commentSep : b2 : fixBlocks bs
where
toClose (Plain{}) = False
toClose (Header{}) = False
toClose (LineBlock{}) = False
toClose (HorizontalRule) = False
toClose (Para [Image _ _ (_,'f':'i':'g':':':_)]) = True
toClose (Para{}) = False
toClose _ = True
commentSep = RawBlock "rst" "..\n\n"
fixBlocks (b:bs) = b : fixBlocks bs
fixBlocks [] = []
tl <- gets stTopLevel
modify (\s->s{stTopLevel=topLevel, stLastNested=False})
res <- vcat `fmap` mapM blockToRST' blocks
modify (\s->s{stTopLevel=topLevel})
res <- vcat `fmap` mapM blockToRST (fixBlocks 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
+10
View File
@@ -40,6 +40,16 @@ tests = [ testGroup "rubrics"
, " :name: foo"
, " :class: baz"]
]
, testGroup "ligatures" -- handling specific sequences of blocks
[ "a list is closed by a comment before a quote" =: -- issue 4248
bulletList [plain "bulleted"] <> blockQuote (plain "quoted") =?>
unlines
[ "- bulleted"
, ""
, ".."
, ""
, " quoted"]
]
, testGroup "headings"
[ "normal heading" =:
header 1 (text "foo") =?>