RST writer: filter out empty inline containers (#4434).

There is nothing in RST that corresponds to e.g. `Emph []`, so we just filter out elements like this.
This commit is contained in:
Francesco Occhipinti 2018-03-18 04:39:26 +01:00 committed by John MacFarlane
parent e5845f33ad
commit ba965d1736
2 changed files with 29 additions and 10 deletions

View file

@ -378,9 +378,24 @@ blockListToRST :: PandocMonad m
blockListToRST = blockListToRST' False
transformInlines :: [Inline] -> [Inline]
transformInlines =
removeLeadingTrailingSpace . removeSpaceAfterDisplayMath . insertBS
where -- remove spaces after displaymath, as they screw up indentation:
transformInlines = removeLeadingTrailingSpace . insertBS
. filter hasContents . removeSpaceAfterDisplayMath
where -- empty inlines are not valid RST syntax
hasContents :: Inline -> Bool
hasContents (Str "") = False
hasContents (Emph []) = False
hasContents (Strong []) = False
hasContents (Strikeout []) = False
hasContents (Superscript []) = False
hasContents (Subscript []) = False
hasContents (SmallCaps []) = False
hasContents (Quoted _ []) = False
hasContents (Cite _ []) = False
hasContents (Span _ []) = False
hasContents (Link _ [] ("", "")) = False
hasContents (Image _ [] ("", "")) = False
hasContents _ = True
-- remove spaces after displaymath, as they screw up indentation:
removeSpaceAfterDisplayMath (Math DisplayMath x : zs) =
Math DisplayMath x : dropWhile (==Space) zs
removeSpaceAfterDisplayMath (x:xs) = x : removeSpaceAfterDisplayMath xs

View file

@ -50,14 +50,18 @@ tests = [ testGroup "rubrics"
, ""
, " quoted"]
]
, testGroup "spaces are stripped within inlines"
-- pandoc issue 4327 "The text within inline markup may not
-- begin or end with whitespace"
-- http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#inline-markup
[ "multiple" =:
, testGroup "inlines"
[ "are removed when empty" =: -- #4434
plain (strong (str "")) =?> ""
, "do not cause the introduction of extra spaces when removed" =:
plain (strong (str "") <> emph (str "text")) =?> "*text*"
, "spaces are stripped at beginning and end" =:
-- pandoc issue 4327 "The text within inline markup may not
-- begin or end with whitespace"
-- http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#inline-markup
strong (space <> str "text" <> space <> space) =?> "**text**"
, "single" =:
strong (space) =?> "****"
, "single space stripped" =:
strong (space) =?> ""
]
, testGroup "headings"
[ "normal heading" =: