From 5c9ce6b5230654c73d3bc3311f9dff7c4404f228 Mon Sep 17 00:00:00 2001
From: Hiroshi Shirosaki <h.shirosaki@gmail.com>
Date: Thu, 17 Jan 2019 14:12:44 +0900
Subject: [PATCH] Fix code quotes when ending with backslash

Backslash inside of a backtick should not escape a backtick.
Fix #311
---
 syntax/markdown.vim |  2 +-
 test/syntax.vader   | 17 +++++++++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/syntax/markdown.vim b/syntax/markdown.vim
index 86b10b0..d0077a4 100644
--- a/syntax/markdown.vim
+++ b/syntax/markdown.vim
@@ -98,7 +98,7 @@ syn match  htmlH2       /^.\+\n-\+$/ contains=mkdLink,mkdInlineURL,@Spell
 "define Markdown groups
 syn match  mkdLineBreak    /  \+$/
 syn region mkdBlockquote   start=/^\s*>/                   end=/$/ contains=mkdLink,mkdInlineURL,mkdLineBreak,@Spell
-execute 'syn region mkdCode matchgroup=mkdCodeDelimiter start=/\(\([^\\]\|^\)\\\)\@<!`/                     end=/\(\([^\\]\|^\)\\\)\@<!`/'  . s:concealcode
+execute 'syn region mkdCode matchgroup=mkdCodeDelimiter start=/\(\([^\\]\|^\)\\\)\@<!`/                     end=/`/'  . s:concealcode
 execute 'syn region mkdCode matchgroup=mkdCodeDelimiter start=/\(\([^\\]\|^\)\\\)\@<!``/ skip=/[^`]`[^`]/   end=/\(\([^\\]\|^\)\\\)\@<!``/' . s:concealcode
 execute 'syn region mkdCode matchgroup=mkdCodeDelimiter start=/^\s*\z(`\{3,}\)[^`]*$/                       end=/^\s*\z1`*\s*$/'            . s:concealcode
 execute 'syn region mkdCode matchgroup=mkdCodeDelimiter start=/\(\([^\\]\|^\)\\\)\@<!\~\~/  end=/\(\([^\\]\|^\)\\\)\@<!\~\~/'               . s:concealcode
diff --git a/test/syntax.vader b/test/syntax.vader
index fdf9c0b..3baa41f 100644
--- a/test/syntax.vader
+++ b/test/syntax.vader
@@ -882,6 +882,23 @@ a
 Execute (not code block in escaped code tag):
   AssertNotEqual SyntaxOf('a'), 'mkdCode'
 
+# Code quotes
+
+Given markdown;
+`a`
+
+Execute (code in code quotes):
+  AssertEqual SyntaxOf('a'), 'mkdCode'
+
+Given markdown;
+`a\` b `c\` d
+
+Execute (code quotes not escaped ending with backslash):
+  AssertEqual SyntaxOf('a\'), 'mkdCode'
+  AssertNotEqual SyntaxOf('b'), 'mkdCode'
+  AssertEqual SyntaxOf('c\'), 'mkdCode'
+  AssertNotEqual SyntaxOf('d'), 'mkdCode'
+
 # Math
 
 Given markdown;
-- 
2.39.5