From 9e142c66436ce716fa5f26647ad843a1dc527a3a Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Tue, 18 Sep 2018 19:21:28 +1000 Subject: [PATCH] markdown.kak: Use lookahead/lookbehind assertions for formatting spans. Previously, one of the syntaxes for italic was (greatly summarized) something like this: [^_]_[^_]+_[^_] That is to say, the regex matched the blanks on both sides of the italic span, as well as the actual span content. That means that if you had consecutive italic words: _some_ _italic_ _words_ ...only the odd-numbered words would be highlighted: the space after "_some_" was counted as part of that span, so it wasn't available as part of "_italic_" and therefore "_italic_" wouldn't be highlighted. Likewise, if the first word in a buffer was italic, it wouldn't be highlighted because the first underscore was not preceded by a non-underscore character! Now we use lookahead/lookbehind assertions, which don't count as part of the matched span, so consecutive spans don't interfere with one another. Fixes #2111. --- rc/base/markdown.kak | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rc/base/markdown.kak b/rc/base/markdown.kak index 6fcc4624..d7dc65e2 100644 --- a/rc/base/markdown.kak +++ b/rc/base/markdown.kak @@ -44,10 +44,10 @@ add-highlighter shared/markdown/content/ regex ^(#+)(\h+)([^\n]+) 1:header add-highlighter shared/markdown/content/ regex ^\h?((?:[\s\t]+)?[-\*])\h+[^\n]*(\n\h+[^-\*]\S+[^\n]*\n)*$ 0:list 1:bullet add-highlighter shared/markdown/content/ regex \B\+[^\n]+?\+\B 0:mono -add-highlighter shared/markdown/content/ regex [^*](\*([^\s*]|([^\s*](\n?[^\n*])*[^\s*]))\*)[^*] 1:italic -add-highlighter shared/markdown/content/ regex [^_](_([^\s_]|([^\s_](\n?[^\n_])*[^\s_]))_)[^_] 1:italic -add-highlighter shared/markdown/content/ regex [^*](\*\*([^\s*]|([^\s*](\n?[^\n*])*[^\s*]))\*\*)[^*] 1:bold -add-highlighter shared/markdown/content/ regex [^_](__([^\s_]|([^\s_](\n?[^\n_])*[^\s_]))__)[^_] 1:bold +add-highlighter shared/markdown/content/ regex (? 0:link add-highlighter shared/markdown/content/ regex ^\[[^\]\n]*\]:\h*([^\n]*) 1:link add-highlighter shared/markdown/content/ regex ^\h*(>\h*)+ 0:comment