aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn MacFarlane <[email protected]>2022-01-07 15:57:05 -0800
committerJohn MacFarlane <[email protected]>2022-01-07 15:58:26 -0800
commita965111680c49f879abdc5f1dad1a03f0c7e1180 (patch)
treed21dc486a297d846de99600389d80b521774c044 /src
parent4a2a068a8b6cadd1e77f77e2a90f25f569d83a10 (diff)
Fix parsing of footnotes in `--metadata-file`.
Closes #7813.
Diffstat (limited to 'src')
-rw-r--r--src/Text/Pandoc/Readers/Markdown.hs30
1 files changed, 22 insertions, 8 deletions
diff --git a/src/Text/Pandoc/Readers/Markdown.hs b/src/Text/Pandoc/Readers/Markdown.hs
index 989cfeb4d..ac6be7729 100644
--- a/src/Text/Pandoc/Readers/Markdown.hs
+++ b/src/Text/Pandoc/Readers/Markdown.hs
@@ -81,8 +81,12 @@ yamlToMeta opts mbfp bstr = do
oldPos <- getPosition
setPosition $ initialPos (fromMaybe "" mbfp)
meta <- yamlBsToMeta (fmap B.toMetaValue <$> parseBlocks) bstr
+ checkNotes
setPosition oldPos
- return $ runF meta defaultParserState
+ st <- getState
+ let result = runF meta st
+ reportLogMessages
+ return result
parsed <- readWithM parser def{ stateOptions = opts } ("" :: Text)
case parsed of
Right result -> return result
@@ -103,7 +107,11 @@ yamlToRefs idpred opts mbfp bstr = do
Nothing -> return ()
Just fp -> setPosition $ initialPos fp
refs <- yamlBsToRefs (fmap B.toMetaValue <$> parseBlocks) idpred bstr
- return $ runF refs defaultParserState
+ checkNotes
+ st <- getState
+ let result = runF refs st
+ reportLogMessages
+ return result
parsed <- readWithM parser def{ stateOptions = opts } ("" :: Text)
case parsed of
Right result -> return result
@@ -308,7 +316,17 @@ parseMarkdown = do
optional titleBlock
blocks <- parseBlocks
st <- getState
- -- check for notes with no corresponding note references
+ checkNotes
+ let doc = runF (do Pandoc _ bs <- B.doc <$> blocks
+ meta <- stateMeta' st
+ return $ Pandoc meta bs) st
+ reportLogMessages
+ return doc
+
+-- check for notes with no corresponding note references
+checkNotes :: PandocMonad m => MarkdownParser m ()
+checkNotes = do
+ st <- getState
let notesUsed = stateNoteRefs st
let notesDefined = M.keys (stateNotes' st)
mapM_ (\n -> unless (n `Set.member` notesUsed) $
@@ -317,11 +335,7 @@ parseMarkdown = do
Nothing -> throwError $
PandocShouldNeverHappenError "note not found")
notesDefined
- let doc = runF (do Pandoc _ bs <- B.doc <$> blocks
- meta <- stateMeta' st
- return $ Pandoc meta bs) st
- reportLogMessages
- return doc
+
referenceKey :: PandocMonad m => MarkdownParser m (F Blocks)
referenceKey = try $ do