Don't allow backslash + newline to affect block structure.
Note that as a result of this change, the following, which formerly produced a header with two lines separated by a line break, will now produce a header followed by a paragraph: # Hi\ there This may affect some existing documents that relied on this undocumented and unintended behavior. This change makes pandoc more consistent with other Markdown implementations, and with itself (since the two-space version of a line break doesn't work inside ATX headers, and neither version works inside Setext headers). Closes #3730.
This commit is contained in:
parent
d1da54a4c3
commit
b466152d61
4 changed files with 30 additions and 8 deletions
|
@ -1451,6 +1451,7 @@ inline = choice [ whitespace
|
|||
, autoLink
|
||||
, spanHtml
|
||||
, rawHtmlInline
|
||||
, escapedNewline
|
||||
, escapedChar
|
||||
, rawLaTeXInline'
|
||||
, exampleRef
|
||||
|
@ -1467,16 +1468,20 @@ escapedChar' = try $ do
|
|||
(guardEnabled Ext_all_symbols_escapable >> satisfy (not . isAlphaNum))
|
||||
<|> (guardEnabled Ext_angle_brackets_escapable >>
|
||||
oneOf "\\`*_{}[]()>#+-.!~\"<>")
|
||||
<|> (guardEnabled Ext_escaped_line_breaks >> char '\n')
|
||||
<|> oneOf "\\`*_{}[]()>#+-.!~\""
|
||||
|
||||
escapedNewline :: PandocMonad m => MarkdownParser m (F Inlines)
|
||||
escapedNewline = try $ do
|
||||
guardEnabled Ext_escaped_line_breaks
|
||||
char '\\'
|
||||
lookAhead (char '\n') -- don't consume the newline (see #3730)
|
||||
return $ return B.linebreak
|
||||
|
||||
escapedChar :: PandocMonad m => MarkdownParser m (F Inlines)
|
||||
escapedChar = do
|
||||
result <- escapedChar'
|
||||
case result of
|
||||
' ' -> return $ return $ B.str "\160" -- "\ " is a nonbreaking space
|
||||
'\n' -> guardEnabled Ext_escaped_line_breaks >>
|
||||
return (return B.linebreak) -- "\[newline]" is a linebreak
|
||||
_ -> return $ return $ B.str [result]
|
||||
|
||||
ltSign :: PandocMonad m => MarkdownParser m (F Inlines)
|
||||
|
|
21
test/command/3730.md
Normal file
21
test/command/3730.md
Normal file
|
@ -0,0 +1,21 @@
|
|||
````
|
||||
% pandoc
|
||||
nice line\
|
||||
```
|
||||
code
|
||||
```
|
||||
^D
|
||||
<p>nice line<br />
|
||||
</p>
|
||||
<pre><code>code</code></pre>
|
||||
````
|
||||
|
||||
```
|
||||
% pandoc
|
||||
# hi\
|
||||
there
|
||||
^D
|
||||
<h1 id="hi">hi<br />
|
||||
</h1>
|
||||
<p>there</p>
|
||||
```
|
|
@ -1,3 +1,3 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink"><description><title-info /><document-info><program-used>pandoc</program-used></document-info></description><body><title><p /></title><annotation><p></p></annotation><section><title><p>Simple title</p></title><p>This example tests if Pandoc doesn’t insert forbidden elements in FictionBook titles.</p></section><section><title><p>Emphasized Strong Title</p></title></section><section><title><p>Title with</p><empty-line /><p>line break</p></title></section></body></FictionBook>
|
||||
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink"><description><title-info /><document-info><program-used>pandoc</program-used></document-info></description><body><title><p /></title><annotation><p></p></annotation><section><title><p>Simple title</p></title><p>This example tests if Pandoc doesn’t insert forbidden elements in FictionBook titles.</p></section><section><title><p>Emphasized Strong Title</p></title></section></body></FictionBook>
|
||||
|
||||
|
|
|
@ -4,7 +4,3 @@ This example tests if Pandoc doesn't insert forbidden elements in FictionBook ti
|
|||
|
||||
# *Emphasized* **Strong** Title
|
||||
|
||||
# Title with\
|
||||
line break
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue