Markdown typeface: match closer to GFM specification, also add tests

This commit is contained in:
Tinmarino
2023-03-17 16:08:27 -03:00
parent f5399ffdfa
commit 8640988c5c
3 changed files with 102 additions and 30 deletions
+7 -7
View File
@@ -408,6 +408,13 @@ function! vimwiki#u#hi_typeface(dic) abort
let nested = vimwiki#u#get_syntax_dic().nested
" Bold Italic
if has_key(a:dic, 'bold_italic')
for bi in a:dic['bold_italic']
call vimwiki#u#hi_tag(bi[0], bi[1], 'VimwikiBoldItalic', nested . ',VimwikiBoldItalicUnderline')
endfor
endif
" Italic
for i in a:dic['italic']
" -- Italic 1
@@ -436,13 +443,6 @@ function! vimwiki#u#hi_typeface(dic) abort
call vimwiki#u#hi_tag(b[0], b[1], 'VimwikiUnderlineItalicBold', nested, 2)
endfor
" Bold Italic
if has_key(a:dic, 'bold_italic')
for bi in a:dic['bold_italic']
call vimwiki#u#hi_tag(bi[0], bi[1], 'VimwikiBoldItalic', nested . ',VimwikiBoldItalicUnderline')
endfor
endif
" Underline
for u in a:dic['underline']
" -- Underline 1
+36 -8
View File
@@ -753,19 +753,19 @@ function! s:get_markdown_syntaxlocal() abort
\ 'symH': {'type': type(0), 'default': 0},
\ 'typeface': {'type': type({}), 'default': {
\ 'bold': vimwiki#u#hi_expand_regex([
\ ['\%(\\\@<!_\)\@<!__\%(\\\@<!_\)\@!', '\%(\\\@<!_\)\@<!__\%(\\\@<!_\)\@!'],
\ ['\%(\\\@<!\*\)\@<!\*\*\%(\\\@<!\*\)\@!', '\%(\\\@<!\*\)\@<!\*\*\%(\\\@<!\*\)\@!'],
\ [s:expand_delimiter('__', 1), s:expand_delimiter('__', 1)],
\ [s:expand_delimiter('\*\*', 1), s:expand_delimiter('\*\*', 1)],
\ ]),
\ 'italic': vimwiki#u#hi_expand_regex([
\ ['\%(\\\@<!\*\)\@<!\*\%(\\\@<!\*\)\@!', '\%(\\\@<!\*\)\@<!\*\%(\\\@<!\*\)\@!'],
\ ['\%(\\\@<!_\)\@<!_\%(\\\@<!_\)\@!', '\%(\\\@<!_\)\@<!_\%(\\\@<!_\)\@!'],
\ [s:expand_delimiter('_', 0), s:expand_delimiter('_', 0)],
\ [s:expand_delimiter('\*', 0), s:expand_delimiter('\*', 0)],
\ [s:expand_delimiter('\*_', 1), s:expand_delimiter('_\*', 1)],
\ [s:expand_delimiter('_\*', 1), s:expand_delimiter('\*_', 1)],
\ ]),
\ 'underline': vimwiki#u#hi_expand_regex([]),
\ 'bold_italic': vimwiki#u#hi_expand_regex([
\ ['\*_', '_\*'],
\ ['_\*', '\*_'],
\ ['\%(\\\@<!\*\)\@<!\*\*\*\%(\\\@<!\*\)\@!', '\%(\\\@<!\*\)\@<!\*\*\*\%(\\\@<!\*\)\@!'],
\ ['\%(\\\@<!_\)\@<!___\%(\\\@<!_\)\@!', '\%(\\\@<!_\)\@<!___\%(\\\@<!_\)\@!']
\ [s:expand_delimiter('\*\*\*', 1), s:expand_delimiter('\*\*\*', 1)],
\ [s:expand_delimiter('___', 1), s:expand_delimiter('___', 1)],
\ ]),
\ 'code': [
\ ['\%(^\|[^`\\]\)\@<=`\%($\|[^`]\)\@=',
@@ -1344,6 +1344,34 @@ function! s:normalize_syntax_settings(syntax) abort
endfunction
function! s:expand_delimiter(delim, b_can_mult) abort
" Helper: From a delimiter to the lookhead defensive version
" See: also vimwiki#u#hi_expand_regex
" TODO: get some cache to avoid recrafting the same prefix always
" Clause: if nothing, return nothing
if len(a:delim) == 0
return '\%(\)'
endif
" let c_start = a:delim[0] ==# '\' ? a:delim[0:1] : a:delim[0]
" let c_end = (len(a:delim) > 1 && a:delim[-2:-2] ==# '\') ? a:delim[-2:-1] : a:delim[-1:]
" Hardcode for markdown
let c_start = '[_*]'
let c_end = '[_*]'
let rx_mult = a:b_can_mult ? '\+' : ''
let rx_start = '\%(^\|\%(\\\@<!' . c_start . '\)\@<!\)'
let rx_middle = '\%(\%(' . a:delim . '\)' . rx_mult . '\)'
let rx_end = '\%($\|\%(\\\@<!' . c_end . '\)\@!\)'
let res = '\%(' . rx_start . rx_middle . rx_end . '\)'
echom res
return res
endfunction
" ----------------------------------------------------------
" 4. Command (exported) {{{1
" ----------------------------------------------------------