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) {