Org reader: fix parsers relying on parseFromString

Emphasis was not parsed when it followed directly after some block types
(e.g., lists).

The org reader uses a wrapper for the `parseFromString` function to
handle org-specific state. The last position of a character allowed
before emphasis was reset incorrectly in this wrapper. Emphasized text
was not recognized when placed directly behind a block which the reader
parses using `parseFromString`.

Fixes: #4784
This commit is contained in:
Albert Krewinkel
2018-07-23 22:05:41 +02:00
parent a85877424b
commit 4e899eb9c8
2 changed files with 14 additions and 4 deletions
+3 -4
View File
@@ -137,14 +137,13 @@ anyLine =
<* updateLastPreCharPos
<* updateLastForbiddenCharPos
-- The version Text.Pandoc.Parsing cannot be used, as we need additional parts
-- of the state saved and restored.
-- | Like @'Text.Pandoc.Parsing'@, but resets the position of the last character
-- allowed before emphasised text.
parseFromString :: Monad m => OrgParser m a -> String -> OrgParser m a
parseFromString parser str' = do
oldLastPreCharPos <- orgStateLastPreCharPos <$> getState
updateState $ \s -> s{ orgStateLastPreCharPos = Nothing }
result <- P.parseFromString parser str'
updateState $ \s -> s{ orgStateLastPreCharPos = oldLastPreCharPos }
updateState $ \s -> s { orgStateLastPreCharPos = Nothing }
return result
-- | Skip one or more tab or space characters.
+11
View File
@@ -243,4 +243,15 @@ tests =
mconcat [ para "CLOSED: [2015-10-19 Mon 15:03]"
, bulletList [ plain "Note taken on [2015-10-19 Mon 13:24]" ]
]
, "Markup after header and list" =:
T.unlines [ "* headline"
, "- list"
, ""
, "~variable name~"
] =?>
mconcat [ headerWith ("headline", [], []) 1 "headline"
, bulletList [ plain "list" ]
, para (code "variable name")
]
]