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:
parent
e5845f33ad
commit
ba965d1736
2 changed files with 29 additions and 10 deletions
|
@ -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
|
||||
|
|
|
@ -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" =:
|
||||
|
|
Loading…
Reference in a new issue