diff options
author | Brian Leung <29217594+leungbk@users.noreply.github.com> | 2019-07-06 14:14:21 -0700 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2019-07-06 23:14:21 +0200 |
commit | 9c4ba81357ab0d72d41c3e69c87a3939f90e9751 (patch) | |
tree | 15d99a8ee264f850050b9ac2a97bd2f07a8a7a33 | |
parent | 1e80288606ba0f0b33a11bf2625850ef070492a0 (diff) | |
download | pandoc-9c4ba81357ab0d72d41c3e69c87a3939f90e9751.tar.gz |
Markdown reader: handle inline code more eagerly within lists. (#5628)
Closes #5627.
-rw-r--r-- | src/Text/Pandoc/Readers/Markdown.hs | 12 | ||||
-rw-r--r-- | test/command/5627.md | 83 |
2 files changed, 90 insertions, 5 deletions
diff --git a/src/Text/Pandoc/Readers/Markdown.hs b/src/Text/Pandoc/Readers/Markdown.hs index ab5aa6b05..3d2ba490d 100644 --- a/src/Text/Pandoc/Readers/Markdown.hs +++ b/src/Text/Pandoc/Readers/Markdown.hs @@ -857,7 +857,8 @@ listLine continuationIndent = try $ do listLineCommon :: PandocMonad m => MarkdownParser m String listLineCommon = concat <$> manyTill - ( many1 (satisfy $ \c -> c /= '\n' && c /= '<') + ( many1 (satisfy $ \c -> c `notElem` ['\n', '<', '`']) + <|> fmap snd (withRaw code) <|> fmap snd (htmlTag isCommentTag) <|> count 1 anyChar ) newline @@ -932,14 +933,14 @@ listItem :: PandocMonad m -> MarkdownParser m a -> MarkdownParser m (F Blocks) listItem fourSpaceRule start = try $ do - (first, continuationIndent) <- rawListItem fourSpaceRule start - continuations <- many (listContinuation continuationIndent) -- parsing with ListItemState forces markers at beginning of lines to -- count as list item markers, even if not separated by blank space. -- see definition of "endline" state <- getState let oldContext = stateParserContext state setState $ state {stateParserContext = ListItemState} + (first, continuationIndent) <- rawListItem fourSpaceRule start + continuations <- many (listContinuation continuationIndent) -- parse the extracted block, which may contain various block elements: let raw = concat (first:continuations) contents <- parseFromString' parseBlocks raw @@ -1583,8 +1584,9 @@ code = try $ do starts <- many1 (char '`') skipSpaces result <- (trim . concat) <$> - manyTill (many1 (noneOf "`\n") <|> many1 (char '`') <|> - (char '\n' >> notFollowedBy' blankline >> return " ")) + manyTill (notFollowedBy (inList >> listStart) >> + (many1 (noneOf "`\n") <|> many1 (char '`') <|> + (char '\n' >> notFollowedBy' blankline >> return " "))) (try (skipSpaces >> count (length starts) (char '`') >> notFollowedBy (char '`'))) rawattr <- diff --git a/test/command/5627.md b/test/command/5627.md new file mode 100644 index 000000000..0f67a083f --- /dev/null +++ b/test/command/5627.md @@ -0,0 +1,83 @@ +``` +% pandoc -t html +## Example + +1. One +2. Two `-->something<!--` +3. Three + +~~~html +--><!--<script>alert('Escaped!')</script> +~~~ + +~~~html +Something +~~~ +^D +<h2 id="example">Example</h2> +<ol type="1"> +<li>One</li> +<li>Two <code>-->something<!--</code></li> +<li>Three</li> +</ol> +<div class="sourceCode" id="cb1"><pre class="sourceCode html"><code class="sourceCode html"><span id="cb1-1"><a href="#cb1-1"></a>--><span class="co"><!--<script>alert('Escaped!')</script></span></span></code></pre></div> +<div class="sourceCode" id="cb2"><pre class="sourceCode html"><code class="sourceCode html"><span id="cb2-1"><a href="#cb2-1"></a>Something</span></code></pre></div> +``` + +``` +% pandoc -t html +## Example 2 + +- `-->something<!--` +- `-->something<!--` +- bye `-->something else<!--` + +~~~html +--><!--<script>alert('Escaped!')</script> +~~~ + +~~~html +Something +~~~ +^D +<h2 id="example-2">Example 2</h2> +<ul> +<li><code>-->something<!--</code></li> +<li><code>-->something<!--</code></li> +<li>bye <code>-->something else<!--</code></li> +</ul> +<div class="sourceCode" id="cb1"><pre class="sourceCode html"><code class="sourceCode html"><span id="cb1-1"><a href="#cb1-1"></a>--><span class="co"><!--<script>alert('Escaped!')</script></span></span></code></pre></div> +<div class="sourceCode" id="cb2"><pre class="sourceCode html"><code class="sourceCode html"><span id="cb2-1"><a href="#cb2-1"></a>Something</span></code></pre></div> +``` + +``` +% pandoc -t html +## Example 3 + +1. `-->one<!--` +5. bye `-->two <!--` +3. ` three, not in block +1. four, not in block ` +2. five +5. six +6. seven ` +- separate unordered list ` +42. forty-two, separate ordered list +^D +<h2 id="example-3">Example 3</h2> +<ol type="1"> +<li><code>-->one<!--</code></li> +<li>bye <code>-->two <!--</code></li> +<li>` three, not in block</li> +<li>four, not in block `</li> +<li>five</li> +<li>six</li> +<li>seven `</li> +</ol> +<ul> +<li>separate unordered list `</li> +</ul> +<ol start="42" type="1"> +<li>forty-two, separate ordered list</li> +</ol> +``` |