From 864a9195a9c799db8a4054c72241837f86e8e609 Mon Sep 17 00:00:00 2001 From: Andy Zhao <17884966+Zhao-Andy@users.noreply.github.com> Date: Mon, 24 May 2021 14:19:04 -0400 Subject: [PATCH] [15-min-fix] Add option for triple tildes for fenced codeblocks (#13810) * Add option for triple tildes for fenced codeblocks Note that this doesn't account for all triple backticks in fenced codeblocks situations. * Add commented out but failing test case for the future? * Add tests from QA instructions --- app/services/markdown_processor/parser.rb | 2 +- spec/services/markdown_processor/parser_spec.rb | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/services/markdown_processor/parser.rb b/app/services/markdown_processor/parser.rb index e897dfdc1..f88a725ca 100644 --- a/app/services/markdown_processor/parser.rb +++ b/app/services/markdown_processor/parser.rb @@ -114,7 +114,7 @@ module MarkdownProcessor def escape_liquid_tags_in_codeblock(content) # Escape codeblocks, code spans, and inline code - content.gsub(/[[:space:]]*`{3}.*?`{3}|`{2}.+?`{2}|`{1}.+?`{1}/m) do |codeblock| + content.gsub(/[[:space:]]*~{3}.*?~{3}|[[:space:]]*`{3}.*?`{3}|`{2}.+?`{2}|`{1}.+?`{1}/m) do |codeblock| codeblock.gsub!("{% endraw %}", "{----% endraw %----}") codeblock.gsub!("{% raw %}", "{----% raw %----}") if codeblock.match?(/[[:space:]]*`{3}/) diff --git a/spec/services/markdown_processor/parser_spec.rb b/spec/services/markdown_processor/parser_spec.rb index be6fbe315..c9c22f957 100644 --- a/spec/services/markdown_processor/parser_spec.rb +++ b/spec/services/markdown_processor/parser_spec.rb @@ -27,6 +27,19 @@ RSpec.describe MarkdownProcessor::Parser, type: :service do expect(generate_and_parse_markdown(code_block)).not_to include("----") end + it "escapes some triple backticks within a codeblock when using tildes" do + code_block = "​~~~\nhello\n// ```\nwhatever\n// ```\n~~~" + number_of_triple_backticks = generate_and_parse_markdown(code_block).scan("```").count + expect(number_of_triple_backticks).to eq(2) + end + + # TODO: @zhao-andy this should fail if this issue is solved: https://github.com/forem/forem/issues/13823 + it "escapes triple backticks within a codeblock when using tildes" do + code_block = "~~~\nhello\n```\nwhatever\n```\n~~~" + number_of_triple_backticks = generate_and_parse_markdown(code_block).scan("```").count + expect(number_of_triple_backticks).to eq(0) + end + it "does not remove the non-'raw tag related' four dashes" do code_block = "```\n----\n```" expect(generate_and_parse_markdown(code_block)).to include("----")