Markdown reader: add newline when parsing blocks in YAML.
Otherwise last block gets parsed as a Plain rather than a Para. This is a regression in pandoc 2.x. This patch restores pandoc 1.19 behavior. Closes #5271.
This commit is contained in:
parent
ca4d308b60
commit
ccf4e23ee1
2 changed files with 22 additions and 9 deletions
|
@ -284,21 +284,22 @@ nodeToKey _ = fail "Non-string key in YAML mappi
|
|||
toMetaValue :: PandocMonad m
|
||||
=> Text -> MarkdownParser m (F MetaValue)
|
||||
toMetaValue x =
|
||||
parseFromString' parser' (T.unpack x)
|
||||
where parser' = (asInlines <$> ((trimInlinesF . mconcat)
|
||||
<$> try (guard (not endsWithNewline)
|
||||
*> manyTill inline eof)))
|
||||
<|> (asBlocks <$> parseBlocks)
|
||||
-- Note: a standard quoted or unquoted YAML value will
|
||||
-- not end in a newline, but a "block" set off with
|
||||
-- `|` or `>` will.
|
||||
if (T.pack "\n") `T.isSuffixOf` x
|
||||
then parseFromString' (asBlocks <$> parseBlocks) (xstring <> "\n")
|
||||
else parseFromString'
|
||||
((asInlines <$> try pInlines) <|> (asBlocks <$> parseBlocks))
|
||||
xstring
|
||||
where pInlines = trimInlinesF . mconcat <$> manyTill inline eof
|
||||
asBlocks p = do
|
||||
p' <- p
|
||||
return $ MetaBlocks (B.toList p')
|
||||
asInlines p = do
|
||||
p' <- p
|
||||
return $ MetaInlines (B.toList p')
|
||||
endsWithNewline = T.pack "\n" `T.isSuffixOf` x
|
||||
-- Note: a standard quoted or unquoted YAML value will
|
||||
-- not end in a newline, but a "block" set off with
|
||||
-- `|` or `>` will.
|
||||
xstring = T.unpack x
|
||||
|
||||
checkBoolean :: Text -> Maybe Bool
|
||||
checkBoolean t =
|
||||
|
|
12
test/command/5271.md
Normal file
12
test/command/5271.md
Normal file
|
@ -0,0 +1,12 @@
|
|||
```
|
||||
% pandoc -f markdown -t native -s
|
||||
---
|
||||
abstract: |
|
||||
This is the abstract.
|
||||
|
||||
It consists of two paragraphs.
|
||||
...
|
||||
^D
|
||||
Pandoc (Meta {unMeta = fromList [("abstract",MetaBlocks [Para [Str "This",Space,Str "is",Space,Str "the",Space,Str "abstract."],Para [Str "It",Space,Str "consists",Space,Str "of",Space,Str "two",Space,Str "paragraphs."]])]})
|
||||
[]
|
||||
```
|
Loading…
Reference in a new issue