@@ -40,6 +40,7 @@ import Data.Char ( isSpace, isAlphaNum, toLower )
40import Data.Maybe
40import Data.Maybe
41import Text.Pandoc.Definition
41import Text.Pandoc.Definition
42import Text.Pandoc.Emoji (emojis)
42import Text.Pandoc.Emoji (emojis)
43+import Text.Pandoc.Generic (bottomUp)
43import qualified Data.Text as T
44import qualified Data.Text as T
44import Data.Text (Text)
45import Data.Text (Text)
45import qualified Data.Yaml as Yaml
46import qualified Data.Yaml as Yaml
@@ -51,6 +52,7 @@ import qualified Data.Vector as V
51import Text.Pandoc.Builder (Inlines, Blocks, trimInlines)
52import Text.Pandoc.Builder (Inlines, Blocks, trimInlines)
52import Text.Pandoc.Options
53import Text.Pandoc.Options
53import Text.Pandoc.Shared
54import Text.Pandoc.Shared
55+import Text.Pandoc.Pretty (charWidth)
54import Text.Pandoc.XML (fromEntities)
56import Text.Pandoc.XML (fromEntities)
55import Text.Pandoc.Parsing hiding (tableWith)
57import Text.Pandoc.Parsing hiding (tableWith)
56import Text.Pandoc.Readers.LaTeX ( rawLaTeXInline, rawLaTeXBlock )
58import Text.Pandoc.Readers.LaTeX ( rawLaTeXInline, rawLaTeXBlock )
@@ -356,7 +358,19 @@ parseMarkdown = do
356 st <- getState
358 st <- getState
357 let meta = runF (stateMeta' st) st
359 let meta = runF (stateMeta' st) st
358 let Pandoc _ bs = B.doc $ runF blocks st
360 let Pandoc _ bs = B.doc $ runF blocks st
361+ eastAsianLineBreaks <- option False $
362+ True <$ guardEnabled Ext_east_asian_line_breaks
363+ return $ (if eastAsianLineBreaks
364+ then bottomUp softBreakFilter
359− return $ Pandoc meta bs
365+ else id) $ Pandoc meta bs
367+softBreakFilter :: [Inline] -> [Inline]
368+softBreakFilter (x:SoftBreak:y:zs) =
369+ case (stringify x, stringify y) of
371+ | charWidth (last xs) == 2 && charWidth c == 2 -> x:y:zs
372+ _ -> x:SoftBreak:y:zs
373+softBreakFilter xs = xs
361referenceKey :: MarkdownParser (F Blocks)
375referenceKey :: MarkdownParser (F Blocks)
362referenceKey = try $ do
376referenceKey = try $ do