@@ -78,6 +78,7 @@ data MuseState = MuseState { museMeta :: F Meta -- ^ Document metadata
7878 , museOptions :: ReaderOptions
7979 , museHeaders :: M.Map Inlines String -- ^ List of headers and ids (used for implicit ref links)
8080 , museIdentifierList :: Set.Set String
81+ , museLastSpacePos :: Maybe SourcePos -- ^ Position after last space or newline parsed
8182 , museLastStrPos :: Maybe SourcePos -- ^ Position after last str parsed
8283 , museLogMessages :: [LogMessage]
8384 , museNotes :: M.Map String (SourcePos, F Blocks)
@@ -89,6 +90,7 @@ instance Default MuseState where
8990 , museHeaders = M.empty
9091 , museIdentifierList = Set.empty
9192 , museLastStrPos = Nothing
93+ , museLastSpacePos = Nothing
9294 , museLogMessages = []
9395 , museNotes = M.empty
9496 }
@@ -124,6 +126,10 @@ instance HasLogMessages MuseState where
124126 addLogMessage m s = s{ museLogMessages = m : museLogMessages s }
125127 getLogMessages = reverse . museLogMessages
126128
129+updateLastSpacePos :: Monad m => MuseParser m ()
130+updateLastSpacePos = getPosition >>= \pos ->
131+ updateState $ \s -> s { museLastSpacePos = Just pos }
132+
127133-- | Parse Muse document
128134parseMuse :: PandocMonad m => MuseParser m Pandoc
129135parseMuse = do
@@ -159,6 +165,12 @@ atStart = do
159165 st <- getState
160166 guard $ museLastStrPos st /= Just pos
161167
168+noSpaceBefore :: PandocMonad m => MuseParser m ()
169+noSpaceBefore = do
170+ pos <- getPosition
171+ st <- getState
172+ guard $ museLastSpacePos st /= Just pos
173+
162174firstColumn :: PandocMonad m => MuseParser m ()
163175firstColumn = getPosition >>= \pos -> guard (sourceColumn pos == 1)
164176
@@ -738,7 +750,7 @@ inline = endline <|> inline'
738750
739751-- | Parse a soft break.
740752endline :: PandocMonad m => MuseParser m (F Inlines)
741−endline = try $ pure B.softbreak <$ newline <* notFollowedBy blankline
753+endline = try $ pure B.softbreak <$ newline <* notFollowedBy blankline <* updateLastSpacePos
742754
743755parseAnchor :: PandocMonad m => MuseParser m String
744756parseAnchor = try $ (:)
@@ -769,7 +781,7 @@ footnote = try $ do
769781 return $ B.note contents'
770782
771783whitespace :: PandocMonad m => MuseParser m (F Inlines)
772−whitespace = try $ pure B.space <$ skipMany1 spaceChar
784+whitespace = try $ pure B.space <$ skipMany1 spaceChar <* updateLastSpacePos
773785
774786-- | Parse @\<br>@ tag.
775787br :: PandocMonad m => MuseParser m (F Inlines)
@@ -781,8 +793,8 @@ emphasisBetween :: (PandocMonad m, Show a)
781793emphasisBetween p = try $ trimInlinesF . mconcat
782794 <$ atStart
783795 <* p
784− <* notFollowedBy spaceChar
785− <*> many1Till inline p
796+ <* notFollowedBy space
797+ <*> many1Till inline (try $ noSpaceBefore *> p)
786798 <* notFollowedBy alphaNum
787799
788800-- | Parse an inline tag, such as @\<em>@ and @\<strong>@.