From f1492fa2bd324baa857987d0c0f10c9b8dfb4222 Mon Sep 17 00:00:00 2001 From: Bolarinwa Balogun Date: Wed, 7 Aug 2019 10:38:00 -0400 Subject: [PATCH] Resolve error with code blocks in numbered lists (#3633) --- app/labor/markdown_parser.rb | 4 ++-- spec/labor/markdown_parser_spec.rb | 12 ++++++++++++ .../user_preview_article_body.approved.html | 4 +--- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/app/labor/markdown_parser.rb b/app/labor/markdown_parser.rb index 84d506a38..7ba1b91e1 100644 --- a/app/labor/markdown_parser.rb +++ b/app/labor/markdown_parser.rb @@ -161,8 +161,8 @@ class MarkdownParser def escape_liquid_tags_in_codeblock(content) # Escape codeblocks, code spans, and inline code - content.gsub(/`{3}.*?`{3}|`{2}.+?`{2}|`{1}.+?`{1}/m) do |codeblock| - if codeblock[0..2] == "```" + content.gsub(/[[:space:]]*`{3}.*?`{3}|`{2}.+?`{2}|`{1}.+?`{1}/m) do |codeblock| + if codeblock.match?(/[[:space:]]*`{3}/) "\n{% raw %}\n" + codeblock + "\n{% endraw %}\n" else "{% raw %}" + codeblock + "{% endraw %}" diff --git a/spec/labor/markdown_parser_spec.rb b/spec/labor/markdown_parser_spec.rb index b1f7b2876..396ee98a4 100644 --- a/spec/labor/markdown_parser_spec.rb +++ b/spec/labor/markdown_parser_spec.rb @@ -17,6 +17,18 @@ RSpec.describe MarkdownParser do expect(generate_and_parse_markdown(code_block)).to include("{% what %}") end + it "escapes codeblocks in numbered lists" do + code_block = "1. Define your hooks in config file `lefthook.yml`\n + ```yaml + pre-push:\n parallel: true\n commands:\n rubocop: + run: bundle exec rspec --fail-fast\n + ```" + escaped_codeblock = generate_and_parse_markdown(code_block) + expect(escaped_codeblock).not_to include("```") + expect(escaped_codeblock).not_to include("`") + expect(escaped_codeblock).to include("bundle exec rspec --fail-fast") + end + it "escapes liquid tags in code spans" do code_span = "``{% what %}``" expect(generate_and_parse_markdown(code_span)).to include("{% what %}") diff --git a/spec/support/fixtures/approvals/user_preview_article_body.approved.html b/spec/support/fixtures/approvals/user_preview_article_body.approved.html index 60ad61e7b..2167afe02 100644 --- a/spec/support/fixtures/approvals/user_preview_article_body.approved.html +++ b/spec/support/fixtures/approvals/user_preview_article_body.approved.html @@ -96,9 +96,7 @@ Format:

the present is our past.

-

I think you should use an <addr> element here instead.

- - +

I think you should use an <addr> element here instead.

function fancyAlert(arg) {
   if(arg) {