vimwiki

Personal wiki for vim
git clone https://github.com/vimwiki/vimwiki.git
Log | Files | Refs | README | LICENSE

commit f55e70082856cdd7b32fec555fac3fae21f14c31
parent 8bf4d6363cc51367bcd4180f1efc84528ebf0049
Author: Tinmarino <tinmarino@gmail.com>
Date:   Mon, 13 Mar 2023 19:43:28 -0300

Fix Math inline border cases (Issue #150)

Diffstat:
Mautoload/vimwiki/vars.vim | 12+++++++++---
Atest/issue_150_inline_math.vader | 35+++++++++++++++++++++++++++++++++++
2 files changed, 44 insertions(+), 3 deletions(-)

diff --git a/autoload/vimwiki/vars.vim b/autoload/vimwiki/vars.vim @@ -711,7 +711,7 @@ function! s:get_default_syntaxlocal() abort \ 'del': [['\~\~', '\~\~']], \ 'sup': [['\^', '\^']], \ 'sub': [[',,', ',,']], - \ 'eq': [['\%(^\|[^$\\]\)\@<=\$\%($\|[^$]\)\@=', '\%(^\|[^$\\]\)\@<=\$\%($\|[^$]\)\@=']], + \ 'eq': [[s:rx_inline_math_start, s:rx_inline_math_end]], \ }}, \ 'wikilink': {'type': type(''), 'default': '\[\[\zs[^\\\]|]\+\ze\%(|[^\\\]]\+\)\?\]\]'}, \ }) @@ -764,7 +764,7 @@ function! s:get_markdown_syntaxlocal() abort \ 'del': [['\~\~', '\~\~']], \ 'sup': [['\^', '\^']], \ 'sub': [[',,', ',,']], - \ 'eq': [['\%(^\|[^$]\)\@<=\$\%($\|[^$]\)\@=', '\%(^\|[^$]\)\@<=\$\%($\|[^$]\)\@=']], + \ 'eq': [[s:rx_inline_math_start, s:rx_inline_math_end]], \ }}, \ 'wikilink': {'type': type(''), 'default': '\[\[\zs[^\\\]|]\+\ze\%(|[^\\\]]\+\)\?\]\]'}, \ }) @@ -808,7 +808,7 @@ function! s:get_media_syntaxlocal() abort \ 'del': [['\~\~', '\~\~']], \ 'sup': [['\^', '\^']], \ 'sub': [[',,', ',,']], - \ 'eq': [['\%(^\|[^$]\)\@<=\$\%($\|[^$]\)\@=', '\%(^\|[^$]\)\@<=\$\%($\|[^$]\)\@=']], + \ 'eq': [[s:rx_inline_math_start, s:rx_inline_math_end]], \ }}, \ 'wikilink': {'type': type(''), 'default': '\[\[\zs[^\\\]|]\+\ze\%(|[^\\\]]\+\)\?\]\]'}, \ }) @@ -833,6 +833,12 @@ function! s:get_common_syntaxlocal() abort let res.rxTableSep = {'type': type(''), 'default': '|'} " See issue #1287 let res.yaml_metadata_block = {'type': type([]), 'default': a_yaml_region} + + + " Declare helper for inline math nested variable + let s:rx_inline_math_start = '\%(^\|[^$\\]\)\@<=\$\%($\|[^$[:space:]]\)\@=' + let s:rx_inline_math_end = '\%(^\|[^$\\[:space:]]\)\@<=\$\%($\|[^$0-9]\)\@=' + return res endfunction diff --git a/test/issue_150_inline_math.vader b/test/issue_150_inline_math.vader @@ -0,0 +1,35 @@ +# Non regression tests for issue: #150 +# -- How to turn off inline math highlights? + +# From: https://pandoc.org/MANUAL.html#math +# Anything between two $ characters will be treated as TeX math. The opening $ must have a non-space character immediately to its right, while the closing $ must have a non-space character immediately to its left, and must not be followed immediately by a digit. Thus, $20,000 and $30,000 won’t parse as math. If for some reason you need to enclose text in literal $ characters, backslash-escape them and they won’t be treated as math delimiters. + + +Given vimwiki (All math inline possible): + 12345678901234567890 # 01 Just a counter + This $math \sum{2, 3}$ # 02 Math no trap + $This math 3 \times 4 = 12$ # 03 Math all line + This $3 and $4 is not math # 04 Not math as the last $ is followed by 4 + This 3$ and 4$ is not math # 05 Not math as the first $ is folowed by space + This \$3 and $4 is not math at all # 06 Not math as first escaped + This $3 and \$4 is not math at all # 07 Not math as last escaped + This \$3 and \$4 is not math at all # 08 Not math as both escaped + This $is not math either $320 # 09 Not math as last followd by number (bis) + +Execute (Assert all lines): +# Hi + Log 'Normal: ' . string(GetSyntaxStack(1, 10)) + Log 'Math: ' . string(GetSyntaxStack(2, 10)) + AssertEqual '01', len(GetSyntaxStack(1, 10)) . 1 + +# Math + AssertEqual 'textSnipTEX2', GetSyntaxStack(2, 10)[0] . 2 + AssertEqual 'textSnipTEX3', GetSyntaxStack(3, 10)[0] . 3 + +# Not Math + AssertEqual '04', len(GetSyntaxStack(10, 4)) . 4 + AssertEqual '05', len(GetSyntaxStack(10, 5)) . 5 + AssertEqual '06', len(GetSyntaxStack(10, 6)) . 6 + AssertEqual '07', len(GetSyntaxStack(10, 7)) . 7 + AssertEqual '08', len(GetSyntaxStack(10, 8)) . 8 + AssertEqual '09', len(GetSyntaxStack(10, 9)) . 9