From cf8224045bf927420ce4cb67f6fe703a95645fe6 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sun, 14 Oct 2018 13:02:36 -0700 Subject: Markdown reader: Fix awkward soft break movements before abbreviations. Closes #4635. --- src/Text/Pandoc/Readers/Markdown.hs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'src/Text/Pandoc/Readers') diff --git a/src/Text/Pandoc/Readers/Markdown.hs b/src/Text/Pandoc/Readers/Markdown.hs index 81c7cbaf9..5944ecf82 100644 --- a/src/Text/Pandoc/Readers/Markdown.hs +++ b/src/Text/Pandoc/Readers/Markdown.hs @@ -1717,19 +1717,24 @@ nonEndline = satisfy (/='\n') str :: PandocMonad m => MarkdownParser m (F Inlines) str = do + canRelocateSpace <- notAfterString result <- many1 (alphaNum <|> try (char '.' <* notFollowedBy (char '.'))) updateLastStrPos (do guardEnabled Ext_smart abbrevs <- getOption readerAbbreviations if not (null result) && last result == '.' && result `Set.member` abbrevs then try (do ils <- whitespace <|> endline - lookAhead alphaNum + -- ?? lookAhead alphaNum + -- replace space after with nonbreaking space + -- if softbreak, move before abbrev if possible (#4635) return $ do ils' <- ils - if ils' == B.space - then return (B.str result <> B.str "\160") - else -- linebreak or softbreak - return (ils' <> B.str result <> B.str "\160")) + case B.toList ils' of + [Space] -> + return (B.str result <> B.str "\160") + [SoftBreak] | canRelocateSpace -> + return (ils' <> B.str result <> B.str "\160") + _ -> return (B.str result <> ils')) <|> return (return (B.str result)) else return (return (B.str result))) <|> return (return (B.str result)) -- cgit v1.2.3