From d8a9778f0deb47d283d648ff630bbbcb9e699ec2 Mon Sep 17 00:00:00 2001 From: Alexander Fisher Date: Mon, 4 Nov 2019 14:43:39 +0000 Subject: [PATCH] Don't escape special chars when they are in `inline_code` Fixes #742 --- lib/github_changelog_generator/generator/section.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/github_changelog_generator/generator/section.rb b/lib/github_changelog_generator/generator/section.rb index 538b2b15b..5d12f0018 100644 --- a/lib/github_changelog_generator/generator/section.rb +++ b/lib/github_changelog_generator/generator/section.rb @@ -95,7 +95,10 @@ def encapsulate_string(string) string = string.gsub('\\', '\\\\') ENCAPSULATED_CHARACTERS.each do |char| - string = string.gsub(char, "\\#{char}") + # Only replace char with escaped version if it isn't inside backticks (markdown inline code). + # This relies on each opening '`' being closed (ie an even number in total). + # A char is *outside* backticks if there is an even number of backticks following it. + string = string.gsub(%r{#{Regexp.escape(char)}(?=([^`]*`[^`]*`)*[^`]*$)}, "\\#{char}") end string