@@ -40,6 +40,7 @@ import Data.Char ( isSpace, isAlphaNum, toLower )
4040import Data.Maybe
4141import Text.Pandoc.Definition
4242import Text.Pandoc.Emoji (emojis)
43+import Text.Pandoc.Generic (bottomUp)
4344import qualified Data.Text as T
4445import Data.Text (Text)
4546import qualified Data.Yaml as Yaml
@@ -51,6 +52,7 @@ import qualified Data.Vector as V
5152import Text.Pandoc.Builder (Inlines, Blocks, trimInlines)
5253import Text.Pandoc.Options
5354import Text.Pandoc.Shared
55+import Text.Pandoc.Pretty (charWidth)
5456import Text.Pandoc.XML (fromEntities)
5557import Text.Pandoc.Parsing hiding (tableWith)
5658import Text.Pandoc.Readers.LaTeX ( rawLaTeXInline, rawLaTeXBlock )
@@ -356,7 +358,19 @@ parseMarkdown = do
356358 st <- getState
357359 let meta = runF (stateMeta' st) st
358360 let Pandoc _ bs = B.doc $ runF blocks st
359− return $ Pandoc meta bs
361+ eastAsianLineBreaks <- option False $
362+ True <$ guardEnabled Ext_east_asian_line_breaks
363+ return $ (if eastAsianLineBreaks
364+ then bottomUp softBreakFilter
365+ else id) $ Pandoc meta bs
366+
367+softBreakFilter :: [Inline] -> [Inline]
368+softBreakFilter (x:SoftBreak:y:zs) =
369+ case (stringify x, stringify y) of
370+ (xs@(_:_), (c:_))
371+ | charWidth (last xs) == 2 && charWidth c == 2 -> x:y:zs
372+ _ -> x:SoftBreak:y:zs
373+softBreakFilter xs = xs
360374
361375referenceKey :: MarkdownParser (F Blocks)
362376referenceKey = try $ do