Render codespans properly in markdown (#1678)

* Explain test properly

* Add tests for codespan parsing

* Add codespan parsing logic
This commit is contained in:
Andy Zhao 2019-01-29 11:52:18 -05:00 committed by Ben Halpern
parent 4073b869d6
commit f5f206e40e
2 changed files with 23 additions and 6 deletions

View file

@ -120,10 +120,12 @@ class MarkdownParser
end
def escape_liquid_tags_in_codeblock(content)
# Escape BOTH codeblock and inline code
content.gsub(/`{3}.*?`{3}|`{1}.+?`{1}/m) do |codeblock|
if codeblock.include?("```")
# Escape codeblocks, code spans, and inline code
content.gsub(/`{3}.*?`{3}|`{2}.+?`{2}|`{1}.+?`{1}/m) do |codeblock|
if codeblock[0..2] == "```"
"\n{% raw %}\n" + codeblock + "\n{% endraw %}\n"
elsif codeblock[0..1] == "``"
"{% raw %}" + codeblock + "{% endraw %}"
else
"{% raw %}" + codeblock + "{% endraw %}"
end

View file

@ -8,16 +8,31 @@ RSpec.describe MarkdownParser do
described_class.new(raw_markdown).finalize
end
it "works" do
it "renders plain text as-is" do
expect(basic_parsed_markdown.finalize).to include(random_word)
end
it "escape liquid tags in codeblock" do
it "escapes liquid tags in codeblock" do
code_block = "```\n{% what %}\n```"
expect(generate_and_parse_markdown(code_block)).to include("{% what %}")
end
it "escape liquid tags in inline code" do
it "escapes liquid tags in code spans" do
code_span = "``{% what %}``"
expect(generate_and_parse_markdown(code_span)).to include("{% what %}")
end
it "renders double backtick code spans properly" do
code_span = "``#{random_word}``"
expect(generate_and_parse_markdown(code_span)).to include random_word
end
it "renders a double backtick codespan with a word wrapped in single backticks properly" do
code_span = "`` `#{random_word}` ``"
expect(generate_and_parse_markdown(code_span)).to include "`#{random_word}`"
end
it "escapes liquid tags in inline code" do
inline_code = "`{% what %}`"
expect(generate_and_parse_markdown(inline_code)).to include(inline_code[1..-2])
end