commit 0b85dd1a7b91c91097c6a40ce8394f36b845fc6e
parent 22d9d012bae4bcfc64776ebef7111c6e51646d2c
Author: Tinmarino <tinmarino@gmail.com>
Date: Thu, 13 Aug 2020 01:59:21 -0400
Feature: Syntax typeface delimiters can end at punctuation
Diffstat:
3 files changed, 42 insertions(+), 19 deletions(-)
diff --git a/autoload/vimwiki/base.vim b/autoload/vimwiki/base.vim
@@ -697,19 +697,6 @@ function! vimwiki#base#get_anchors(filename, syntax) abort
endfunction
-" Helper to mutualize
-" Called: normalize and unnormalize anchor
-function! s:get_punctuaction_regex() abort
- " From: https://gist.github.com/asabaylus/3071099#gistcomment-2563127
- if v:version <= 703
- " Retrocompatibility: Get invalid range for vim 7.03
- return '[^0-9a-zA-Z_ \-]'
- else
- return '[^0-9a-zA-Z\u4e00-\u9fff_ \-]'
- endif
-endfunction
-
-
" :param: anchor <string> <= Heading line
" :param: (1) previous_anchors <dic[IN/OUT]> of previous normalized anchor
" -- to know if must append -2, updated on the fly
@@ -735,7 +722,7 @@ function! vimwiki#base#normalize_anchor(anchor, ...) abort
let anchor = tolower(anchor)
" 2 Remove anything that is not a letter, number, CJK character, hyphen or space
- let punctuation_rx = s:get_punctuaction_regex()
+ let punctuation_rx = vimwiki#u#get_punctuation_regex()
let anchor = substitute(anchor, punctuation_rx, '', 'g')
" 3 Change any space to a hyphen
@@ -777,7 +764,7 @@ function! vimwiki#base#unnormalize_anchor(anchor) abort
return [anchor, 1, '']
endif
- let punctuation_rx = s:get_punctuaction_regex()
+ let punctuation_rx = vimwiki#u#get_punctuation_regex()
" Permit url part of link: '](www.i.did.it.my.way.cl)'
let link_rx = '\%(\]([^)]*)\)'
let invisible_rx = '\%( \|-\|' . punctuation_rx . '\|' . link_rx . '\)'
diff --git a/autoload/vimwiki/u.vim b/autoload/vimwiki/u.vim
@@ -271,14 +271,40 @@ function! vimwiki#u#get_syntax_dic(...) abort
endfunction
+" Helper to mutualize
+" Called: normalize and unnormalize anchor
+function! vimwiki#u#get_punctuation_regex() abort
+ " From: https://gist.github.com/asabaylus/3071099#gistcomment-2563127
+ " Faster
+ " Unused now
+ if v:version <= 703
+ " Retrocompatibility: Get invalid range for vim 7.03
+ return '[^0-9a-zA-Z_ \-]'
+ else
+ return '[^0-9a-zA-Z\u4e00-\u9fff_ \-]'
+ endif
+endfunction
+
+
+" Faster
+function! vimwiki#u#get_punctuation_string() abort
+ " See: https://github.github.com/gfm/#ascii-punctuation-character
+ return '!"#$%&''()*+,-./:;<=>?@\[\\\]^`{}|~'
+endfunction
+
+
" Helper: Expand regex from reduced typeface delimiters
" :param: list<list,delimiters>> with reduced regex
" Return: list with extended regex delimiters (not inside a word)
" -- [['\*_', '_\*']] -> [['\*_\S\@=', '\S\@<=_\*\%(\s\|$\)\@=']]
+" See: https://github.github.com/gfm/#left-flanking-delimiter-run
function! vimwiki#u#hi_expand_regex(lst) abort
let res = []
+ let p = vimwiki#u#get_punctuation_string()
for delimiters in a:lst
- call add(res, [delimiters[0] . '\S\@=', '\S\@<=' . delimiters[1] . '\%(\s\|\n\)\@='])
+ call add(res, [
+ \ delimiters[0] . '\S\@=',
+ \ '\S\@<=' . delimiters[1] . '\%(\_[[:space:]' . p . ']\)\@='])
endfor
return res
endfunction
diff --git a/test/syntax.vader b/test/syntax.vader
@@ -5,6 +5,16 @@
# 1 Typeface {{{1
#################
+Given vimwiki (Markdown with punctuation #340 {{{2):
+ __bold__, not bold
+
+Execute (Set syntax markdown):
+ call SetSyntax('markdown')
+
+Execute (Assert Syntax (alpha)):
+ AssertEqual 'VimwikiBold1' , SyntaxAt(1, 5) . 1
+ AssertEqual '2' , SyntaxAt(1, 16) . 2
+
Given vimwiki (Markdown bad __this_not_it__ {{{2):
See here 14 |
s2n_error
@@ -26,7 +36,7 @@ Given vimwiki (Markdown bad __this_not_it__ {{{2):
Execute (Set syntax markdown):
call SetSyntax('markdown')
-Execute (Assert Syntax extended types x 1):
+Execute (Assert Syntax (bravo)):
AssertEqual 'VimwikiError2' , SyntaxAt(2, 4) . 2
AssertEqual 'VimwikiError3' , SyntaxAt(3, 4) . 3
AssertEqual '4' , SyntaxAt(4, 14) . 4
@@ -49,7 +59,7 @@ Given vimwiki (bold and pre {{{2):
Execute (Set syntax markdown):
call SetSyntax('markdown')
-Execute (Assert Syntax extended types x 1):
+Execute (Assert Syntax (charlie)):
AssertEqual 'VimwikiPre' , SyntaxAt(3, 1)
# Emphasis stricker {{{2
@@ -63,7 +73,7 @@ Given vimwiki (Emphasis and not):
Execute (Set syntax markdown):
call SetSyntax('markdown')
-Execute (Assert Syntax extended types x 1):
+Execute (Assert Syntax (delta)):
AssertEqual 'VimwikiBold' , SyntaxAt(1, 9)
AssertEqual 'VimwikiItalic' , SyntaxAt(2, 9)
AssertEqual '' , SyntaxAt(3, 9)