@@ -46,6 +46,7 @@ import Text.Pandoc.Pretty
4646import Text.Pandoc.Shared
4747import Text.Pandoc.Templates (renderTemplate')
4848import Text.Pandoc.Writers.Shared
49+import Text.Pandoc.Walk
4950
5051type Refs = [([Inline], Target)]
5152
@@ -376,13 +377,9 @@ blockListToRST :: PandocMonad m
376377 -> RST m Doc
377378blockListToRST = blockListToRST' False
378379
379−-- | Convert list of Pandoc inline elements to RST.
380−inlineListToRST :: PandocMonad m => [Inline] -> RST m Doc
381−inlineListToRST lst =
382− mapM inlineToRST ((stripLeadingTrailingSpace .
383− removeSpaceAfterDisplayMath .
384− insertBS) lst) >>=
385− return . hcat
380+transformInlines :: [Inline] -> [Inline]
381+transformInlines =
382+ removeLeadingTrailingSpace . removeSpaceAfterDisplayMath . insertBS
386383 where -- remove spaces after displaymath, as they screw up indentation:
387384 removeSpaceAfterDisplayMath (Math DisplayMath x : zs) =
388385 Math DisplayMath x : dropWhile (==Space) zs
@@ -438,44 +435,51 @@ inlineListToRST lst =
438435 isComplex (Span _ (x:_)) = isComplex x
439436 isComplex _ = False
440437
438+inlineListToRST :: PandocMonad m => [Inline] -> RST m Doc
439+inlineListToRST = writeInlines . walk transformInlines
440+
441+-- | Convert list of Pandoc inline elements to RST.
442+writeInlines :: PandocMonad m => [Inline] -> RST m Doc
443+writeInlines lst = mapM inlineToRST lst >>= return . hcat
444+
441445-- | Convert Pandoc inline element to RST.
442446inlineToRST :: PandocMonad m => Inline -> RST m Doc
443447inlineToRST (Span (_,_,kvs) ils) = do
444− contents <- inlineListToRST ils
448+ contents <- writeInlines ils
445449 return $
446450 case lookup "role" kvs of
447451 Just role -> ":" <> text role <> ":`" <> contents <> "`"
448452 Nothing -> contents
449453inlineToRST (Emph lst) = do
450− contents <- inlineListToRST lst
454+ contents <- writeInlines lst
451455 return $ "*" <> contents <> "*"
452456inlineToRST (Strong lst) = do
453− contents <- inlineListToRST lst
457+ contents <- writeInlines lst
454458 return $ "**" <> contents <> "**"
455459inlineToRST (Strikeout lst) = do
456− contents <- inlineListToRST lst
460+ contents <- writeInlines lst
457461 return $ "[STRIKEOUT:" <> contents <> "]"
458462inlineToRST (Superscript lst) = do
459− contents <- inlineListToRST lst
463+ contents <- writeInlines lst
460464 return $ ":sup:`" <> contents <> "`"
461465inlineToRST (Subscript lst) = do
462− contents <- inlineListToRST lst
466+ contents <- writeInlines lst
463467 return $ ":sub:`" <> contents <> "`"
464−inlineToRST (SmallCaps lst) = inlineListToRST lst
468+inlineToRST (SmallCaps lst) = writeInlines lst
465469inlineToRST (Quoted SingleQuote lst) = do
466− contents <- inlineListToRST lst
470+ contents <- writeInlines lst
467471 opts <- gets stOptions
468472 if isEnabled Ext_smart opts
469473 then return $ "'" <> contents <> "'"
470474 else return $ "‘" <> contents <> "’"
471475inlineToRST (Quoted DoubleQuote lst) = do
472− contents <- inlineListToRST lst
476+ contents <- writeInlines lst
473477 opts <- gets stOptions
474478 if isEnabled Ext_smart opts
475479 then return $ "\"" <> contents <> "\""
476480 else return $ "“" <> contents <> "”"
477481inlineToRST (Cite _ lst) =
478− inlineListToRST lst
482+ writeInlines lst
479483inlineToRST (Code _ str) = do
480484 opts <- gets stOptions
481485 -- we trim the string because the delimiters must adjoin a
@@ -526,7 +530,7 @@ inlineToRST (Link _ [Image attr alt (imgsrc,imgtit)] (src, _tit)) = do
526530 return $ "|" <> label <> "|"
527531inlineToRST (Link _ txt (src, tit)) = do
528532 useReferenceLinks <- gets $ writerReferenceLinks . stOptions
529− linktext <- inlineListToRST $ B.toList . B.trimInlines . B.fromList $ txt
533+ linktext <- writeInlines $ B.toList . B.trimInlines . B.fromList $ txt
530534 if useReferenceLinks
531535 then do refs <- gets stLinks
532536 case lookup txt refs of