Compare commits
26 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5fdf73f61d | |||
| dec6a9ecab | |||
| 57107c7c56 | |||
| 72d02207b0 | |||
| f4bd841a4c | |||
| 5eb5c9c71f | |||
| 8640988c5c | |||
| f5399ffdfa | |||
| a7aa5eb1ea | |||
| 1d35ff035d | |||
| c9af9c7807 | |||
| 8374bcfccf | |||
| cde5dbc92a | |||
| 6993610585 | |||
| 29ac6ee589 | |||
| 035b2f15c7 | |||
| eab70aedaa | |||
| 91fe25ad5f | |||
| 5db16850da | |||
| 87c44caef9 | |||
| 7f1357472d | |||
| 2f1f497f88 | |||
| f55e700828 | |||
| 8bf4d6363c | |||
| 34ceee8aaa | |||
| cd5ef6c4c7 |
@@ -1,14 +1,16 @@
|
||||
---
|
||||
# Copied from previous .travis.yml by tinmarino the 2023-03-09
|
||||
|
||||
# Commented out to avoid verbosity on github commit status
|
||||
#name: Main
|
||||
#description: Vimwiki CI test bank
|
||||
name: CI
|
||||
|
||||
# yamllint disable-line rule:truthy
|
||||
on: [push, pull_request, workflow_dispatch]
|
||||
|
||||
jobs:
|
||||
Typos:
|
||||
# Copyed from: https://github.com/junegunn/fzf/blob/master/.github/workflows/typos.yml
|
||||
# Copied from: https://github.com/junegunn/fzf/blob/master/
|
||||
# -- .github/workflows/typos.yml
|
||||
name: Typos
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
@@ -20,9 +22,23 @@ jobs:
|
||||
config: ./test/resources/typos_config.toml
|
||||
|
||||
|
||||
Yamllint:
|
||||
# Copied from: https://github.com/junegunn/fzf/blob/master/
|
||||
# -- .github/workflows/typos.yml
|
||||
name: Yamllint
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- uses: ibiqlik/action-yamllint@v3
|
||||
with:
|
||||
file_or_dir: .github/workflows/test-vader-action.yml
|
||||
|
||||
|
||||
Vint:
|
||||
# Copyed from: https://github.com/LudvigHz/vint-action
|
||||
# And local test/run_test.sh
|
||||
# Copied from: https://github.com/LudvigHz/vint-action
|
||||
# And local ./test/run_test.sh
|
||||
name: Vint
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
@@ -46,7 +62,7 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
opt: [
|
||||
#"vint",
|
||||
# "vint",
|
||||
|
||||
"-n vim_7.3.429",
|
||||
"-n vim_8.1.0519",
|
||||
|
||||
@@ -125,10 +125,21 @@ endfunction
|
||||
|
||||
function! vimwiki#base#resolve_link(link_text, ...) abort
|
||||
" Extract infos about the target from a link.
|
||||
" THE central function of Vimwiki.
|
||||
" If the second parameter is present, which should be an absolute file path, it
|
||||
" is assumed that the link appears in that file. Without it, the current file
|
||||
" is used.
|
||||
"
|
||||
" THE central function of Vimwiki. Here be dragons!
|
||||
"
|
||||
" This has become confusing and extremely brittle. Don't change it unless
|
||||
" you know exactly what you're doing and test every code path. It is safe
|
||||
" to assume that at least one user relies on everything this does, whether
|
||||
" it was intentional or not. Do not make breaking changes here, or you will
|
||||
" hear about it. If you want to add extra link syntax or behavior, please
|
||||
" consult with other maintainers first!
|
||||
"
|
||||
" See doc/specification.wiki for a draft spec that covers link syntax.
|
||||
|
||||
" a:0 is set to the number of extra arguments. If the second parameter is
|
||||
" present, which should be an absolute file path, it is assumed that the
|
||||
" link appears in that file. Without it, the current file is used.
|
||||
if a:0
|
||||
let source_wiki = vimwiki#base#find_wiki(a:1)
|
||||
let source_file = a:1
|
||||
@@ -298,8 +309,20 @@ endfunction
|
||||
|
||||
|
||||
function! vimwiki#base#system_open_link(url) abort
|
||||
" Open Link with OS handler (like gx)
|
||||
" handlers
|
||||
" Open Link with OS handler (like gx).
|
||||
"
|
||||
" This handles all supported URI-like links, including http:, file:, etc.,
|
||||
" unless a custom VimwikiLinkHandler() does something with them first.
|
||||
"
|
||||
" It can be a source of OS-specific bugs, since behavior differs across
|
||||
" operating systems and this makes some fairly basic assumptions about
|
||||
" what's available.
|
||||
"
|
||||
" TODO: The easiest way for a user to change this behavior at present is to
|
||||
" write a VimwikiLinkHandler(). This is probably fine, but there might be a
|
||||
" use case for being able to explicitly set a handler just for system links.
|
||||
|
||||
" Handlers
|
||||
function! s:win32_handler(url) abort
|
||||
"Disable shellslash for cmd and command.com, but enable for all other shells
|
||||
"See Issue #560
|
||||
@@ -329,12 +352,15 @@ function! vimwiki#base#system_open_link(url) abort
|
||||
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! s:macunix_handler(url) abort
|
||||
call system('open ' . shellescape(a:url).' &')
|
||||
endfunction
|
||||
|
||||
function! s:linux_handler(url) abort
|
||||
call system('xdg-open ' . shellescape(a:url).' >/dev/null 2>&1 &')
|
||||
endfunction
|
||||
|
||||
try
|
||||
if vimwiki#u#is_windows()
|
||||
call s:win32_handler(a:url)
|
||||
@@ -492,7 +518,7 @@ endfunction
|
||||
function! vimwiki#base#goto(...) abort
|
||||
" Jump: to other wikifile, specified on command mode
|
||||
" Called: by command VimwikiGoto (Exported)
|
||||
let key = a:0 > 0 ? a:1 : input('Enter name: ', '',
|
||||
let key = a:0 > 0 && a:1 !=# '' ? a:1 : input('Enter name: ', '',
|
||||
\ 'customlist,vimwiki#base#complete_links_escaped')
|
||||
|
||||
let anchor = a:0 > 1 ? a:2 : ''
|
||||
@@ -1639,16 +1665,19 @@ function! vimwiki#base#follow_link(split, ...) abort
|
||||
" Try WikiLink
|
||||
let lnk = matchstr(vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink')),
|
||||
\ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'))
|
||||
|
||||
" Try WikiIncl
|
||||
if lnk ==? ''
|
||||
let lnk = matchstr(vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWikiIncl')),
|
||||
\ vimwiki#vars#get_global('rxWikiInclMatchUrl'))
|
||||
endif
|
||||
|
||||
" Try Weblink
|
||||
if lnk ==? ''
|
||||
let lnk = matchstr(vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWeblink')),
|
||||
\ vimwiki#vars#get_syntaxlocal('rxWeblinkMatchUrl'))
|
||||
endif
|
||||
|
||||
" Try markdown image ![]()
|
||||
if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown' && lnk ==# ''
|
||||
let lnk = matchstr(vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxImage')),
|
||||
@@ -2236,7 +2265,7 @@ function! vimwiki#base#AddHeaderLevel(...) abort
|
||||
" Clause, argument must be <= 1
|
||||
" Actually argument is not used :-)
|
||||
if a:1 > 1
|
||||
call vimwiki#base#AddHeaderLevel(1)
|
||||
call vimwiki#base#AddHeaderLevel(a:1 - 1)
|
||||
endif
|
||||
let lnum = line('.')
|
||||
let line = getline(lnum)
|
||||
@@ -2270,7 +2299,7 @@ function! vimwiki#base#RemoveHeaderLevel(...) abort
|
||||
" Clause, argument must be <= 1
|
||||
" Actually argument is not used :-)
|
||||
if a:1 > 1
|
||||
call vimwiki#base#RemoveHeaderLevel(1)
|
||||
call vimwiki#base#RemoveHeaderLevel(a:1 - 1)
|
||||
endif
|
||||
let lnum = line('.')
|
||||
let line = getline(lnum)
|
||||
|
||||
+48
-10
@@ -1,9 +1,18 @@
|
||||
" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
|
||||
" Vimwiki autoload plugin file
|
||||
" Description: Everything concerning lists and checkboxes
|
||||
" Title: Vimwiki list functions
|
||||
"
|
||||
" Description:
|
||||
" Everything concerning lists and checkboxes
|
||||
"
|
||||
" Also helpers for blockquotes as this file has intelligence and map (issue #1274)
|
||||
" i <Cr>
|
||||
" n o
|
||||
" n O
|
||||
" Which also got exploited for blocquotes
|
||||
"
|
||||
" Home: https://github.com/vimwiki/vimwiki/
|
||||
|
||||
|
||||
|
||||
if exists('g:loaded_vimwiki_list_auto') || &compatible
|
||||
finish
|
||||
endif
|
||||
@@ -145,11 +154,24 @@ function! s:line_has_marker(lnum) abort
|
||||
" Returns: 2 if there is a marker and text
|
||||
" 1 for a marker and no text
|
||||
" 0 for no marker at all (empty line or only text)
|
||||
if getline(a:lnum) =~# vimwiki#vars#get_wikilocal('rxListItem').'\s*$'
|
||||
|
||||
" Concatenate regex list and blockquote item
|
||||
let rx_list_or_blockquote =
|
||||
\ '\%('
|
||||
\ . vimwiki#vars#get_wikilocal('rxListItem')
|
||||
\ . '\|'
|
||||
\ . vimwiki#vars#get_wikilocal('rxBlockquoteItem')
|
||||
\ . '\)'
|
||||
|
||||
" Search for marker
|
||||
if getline(a:lnum) =~# rx_list_or_blockquote . '\s*$'
|
||||
" Found without text
|
||||
return 1
|
||||
elseif getline(a:lnum) =~# vimwiki#vars#get_wikilocal('rxListItem').'\s*\S'
|
||||
elseif getline(a:lnum) =~# rx_list_or_blockquote . '\s*\S'
|
||||
" Found with text
|
||||
return 2
|
||||
else
|
||||
" Not found
|
||||
return 0
|
||||
endif
|
||||
endfunction
|
||||
@@ -178,12 +200,17 @@ endfunction
|
||||
" ---------------------------------------------------------
|
||||
|
||||
function! s:get_item(lnum) abort
|
||||
" Returns: the mainly used data structure in this file
|
||||
" Return: the mainly used data structure in this file
|
||||
" An item represents a single list item and is a dictionary with the keys
|
||||
" lnum - the line number of the list item
|
||||
" type - 1 for bulleted item, 2 for numbered item, 0 for a regular line (default)
|
||||
" type - the type of marker at current line
|
||||
" - 0 for a regular line (default)
|
||||
" - 1 for bulleted item
|
||||
" - 2 for numbered item
|
||||
" - 3 a blockquote item (see #1274 to add line-continuation trick to blockquotes)
|
||||
" mrkr - the concrete marker, e.g. '**' or 'b)' (default '')
|
||||
" cb - the char in the checkbox or '' if there is no checkbox
|
||||
|
||||
" Init default
|
||||
let item = {'lnum': a:lnum}
|
||||
let item.type = 0
|
||||
@@ -195,7 +222,15 @@ function! s:get_item(lnum) abort
|
||||
return item
|
||||
endif
|
||||
|
||||
" Search for list on current line
|
||||
" Clause: Search for blockquotes (#1274) and return it if found
|
||||
let matches = matchlist(getline(a:lnum), vimwiki#vars#get_wikilocal('rxBlockquoteItem'))
|
||||
if len(matches) >= 1 && matches[1] !=? ''
|
||||
let item.type = 3
|
||||
let item.mrkr = matches[1]
|
||||
return item
|
||||
endif
|
||||
|
||||
" List: Search for list on current line if no blockquotes
|
||||
let matches = matchlist(getline(a:lnum), vimwiki#vars#get_wikilocal('rxListItem'))
|
||||
" Clause: If not on a list line => do not work
|
||||
if matches == [] ||
|
||||
@@ -205,6 +240,7 @@ function! s:get_item(lnum) abort
|
||||
endif
|
||||
|
||||
" Fill item
|
||||
" The checkbox inner is the last match
|
||||
let item.cb = matches[3]
|
||||
if matches[1] !=? ''
|
||||
let item.type = 1
|
||||
@@ -1117,7 +1153,7 @@ function! s:remove_done_in_list(item, recursive) abort
|
||||
if a:item.type == 0
|
||||
return
|
||||
endif
|
||||
|
||||
|
||||
" Recurse self on list item
|
||||
let first_item = s:get_first_item_in_list(a:item, 0)
|
||||
let total_lines_removed = 0
|
||||
@@ -1183,7 +1219,7 @@ function! vimwiki#lst#remove_done_in_range(first_line, last_line) abort
|
||||
endif
|
||||
let cur_ln = s:get_next_line(cur_ln)
|
||||
endwhile
|
||||
|
||||
|
||||
" Update all parent state (percentage of done)
|
||||
for parent_item in parent_items_of_lines
|
||||
call s:update_state(parent_item)
|
||||
@@ -1842,3 +1878,5 @@ function! vimwiki#lst#fold_level(lnum) abort
|
||||
endif
|
||||
return '='
|
||||
endfunction
|
||||
|
||||
" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
|
||||
|
||||
@@ -117,7 +117,8 @@ function! s:scan_tags(lines, page_name) abort
|
||||
endfor
|
||||
let current_complete_anchor .= header
|
||||
endif
|
||||
continue " tags are not allowed in headers
|
||||
" See: issue #1316 to allow tags in header
|
||||
" continue " tags are not allowed in headers
|
||||
endif
|
||||
|
||||
" Scan line for tags. There can be many of them.
|
||||
@@ -448,3 +449,21 @@ function! vimwiki#tags#complete_tags(ArgLead, CmdLine, CursorPos) abort
|
||||
let taglist = vimwiki#tags#get_tags()
|
||||
return join(taglist, "\n")
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#tags#search_tags(tag_pattern) abort
|
||||
" See #1316 and rxTags in vars.vim
|
||||
let tf = vimwiki#vars#get_syntaxlocal('tag_format')
|
||||
|
||||
" Craft regex
|
||||
let rx_this_tag = '/'
|
||||
let rx_this_tag .= tf.pre . '\@<=' . tf.pre_mark
|
||||
let rx_this_tag .= '\%(' . tf.in . tf.sep . '\)*'
|
||||
let rx_this_tag .= a:tag_pattern
|
||||
let rx_this_tag .= '\%(' . tf.sep . tf.in . '\)*'
|
||||
let rx_this_tag .= tf.post_mark . tf.post . '\@='
|
||||
let rx_this_tag .= '/'
|
||||
|
||||
" Search in current wiki folder
|
||||
return vimwiki#base#search(rx_this_tag)
|
||||
endfunction
|
||||
|
||||
+36
-25
@@ -295,13 +295,19 @@ endfunction
|
||||
function! vimwiki#u#get_punctuation_string() abort
|
||||
" Faster
|
||||
" See: https://github.github.com/gfm/#ascii-punctuation-character
|
||||
return '!"#$%&''()*+,-./:;<=>?@\[\\\]^`{}|~'
|
||||
" res = '!"#$%&''()*+,-./:;<=>?@\[\\\]^`{}|~'
|
||||
" But I removed the * as it is treated as a special case
|
||||
return '!"#$%&''()+,-./:;<=>?@\[\\\]^`{}|~'
|
||||
endfunction
|
||||
|
||||
|
||||
function! vimwiki#u#hi_expand_regex(lst) abort
|
||||
" Helper: Expand regex from reduced typeface delimiters
|
||||
" :param: list<list,delimiters>> with reduced regex
|
||||
" 1: Left delimiter
|
||||
" 2: right delimiter
|
||||
" 3: possible characters to ignore (default '$^' => never match)
|
||||
" 4: can multiply delimiter (boolean) (default 0 => do not repeat)
|
||||
" Return: list with extended regex delimiters (not inside a word)
|
||||
" -- [['\*_', '_\*']] -> [['\*_\S\@=', '\S\@<=_\*\%(\s\|$\)\@=']]
|
||||
" Note: For purposes of this definition, the beginning and the end of the line count as Unicode whitespace.
|
||||
@@ -313,42 +319,46 @@ function! vimwiki#u#hi_expand_regex(lst) abort
|
||||
for a_delimiter in a:lst
|
||||
let r_left_del = a_delimiter[0]
|
||||
let r_right_del = a_delimiter[1]
|
||||
let r_repeat_del = len(a_delimiter) >= 3 ? a_delimiter[2] : '$^'
|
||||
let b_can_mult = len(a_delimiter) >= 4 ? a_delimiter[3] : 0
|
||||
|
||||
" Craft the repeatable middle
|
||||
let r_mult = b_can_mult ? '\+' : ''
|
||||
let r_left_repeat = '\%(\%(' . r_left_del . '\)' . r_mult . '\)'
|
||||
let r_right_repeat = '\%(\%(' . r_right_del . '\)' . r_mult . '\)'
|
||||
let r_unescaped_repeat = '\%(\\\|\\\@<!' . r_repeat_del . '\)'
|
||||
|
||||
" Regex Start:
|
||||
" Left-Flanking is not followed by space (or need of line)
|
||||
let r_left_prefix = '\%(^\|[[:space:]]\@<=\)'
|
||||
let r_left_prefix = '\\\@<!'
|
||||
" -- not followed by Unicode whitespace,
|
||||
let r_left_suffix = '\%([^[:space:]]\@=\)'
|
||||
|
||||
" Left Case1: not followed by punctuation
|
||||
let r_left_suffix1 = '\%(\%([^[:space:]' . punctuation . ']\)\@=\)'
|
||||
" Left Case1: not followed by punctuation, start with blacklist
|
||||
" -- Can escape the leftflank
|
||||
let r_left_prefix1 = '\%(^\|\\\@<!\)'
|
||||
let r_left_prefix1 = '\%(^\|' . r_unescaped_repeat . '\@<!\)'
|
||||
let r_left_suffix1 = '\%(\%([[:space:]\n' . punctuation . ']\|' . r_unescaped_repeat . '\)\@!\)'
|
||||
|
||||
" Left Case2: followed by punctuation so must be preceded by Unicode whitespace or start of line or a punctuation character.
|
||||
" Left Case2: followed by punctuation so must be preceded by whitelisted Unicode whitespace or start of line or a punctuation character.
|
||||
let r_left_prefix2 = '\%(\%(^\|[[:space:]\n' . punctuation . ']\)\@<=\)'
|
||||
let r_left_suffix2 = '\%([' . punctuation . ']\@=\)'
|
||||
let r_left_prefix2 = '\%(\%(^\|[[:space:]' . punctuation . ']\)\@<=\)'
|
||||
|
||||
" Left Concatenate
|
||||
let r_start = '\%(' . r_left_prefix1 . r_left_del . r_left_suffix1
|
||||
let r_start .= '\|' . r_left_prefix2 . r_left_del . r_left_suffix2 . '\)'
|
||||
let r_start = '\%(' . r_left_prefix1 . '\zs' . r_left_repeat . '\ze' . r_left_suffix1
|
||||
let r_start .= '\|' . r_left_prefix2 . '\zs' . r_left_repeat . '\ze' . r_left_suffix2 . '\)'
|
||||
|
||||
" Regex End:
|
||||
" not preceded by Unicode whitespace
|
||||
let r_right_prefix = '\(^\|[^[:space:]]\@<=\)'
|
||||
|
||||
" Right Case1: not preceded by a punctuation character (or start of line)
|
||||
let r_right_prefix1 = '\%(\%(^\|[^[:space:]' . punctuation . ']\)\@<=\)'
|
||||
let r_right_suffix1 = ''
|
||||
let r_right_prefix1 = '\%(^\|\%([[:space:]\n' . punctuation . ']\|' . r_unescaped_repeat . '\)\@<!\)'
|
||||
let r_right_suffix1 = '\%($\|' . r_unescaped_repeat . '\@!\)'
|
||||
|
||||
" Right Case2: preceded by a punctuation character and followed by Unicode whitespace or end of line or a punctuation character
|
||||
" Right Case2: preceded by a punctuation character and followed by Unicode whitespace or end of line or a punctuation character
|
||||
let r_right_prefix2 = '\%([' . punctuation . ']\@<=\)'
|
||||
let r_right_suffix2 = '\%(\%($\|[[:space:]' . punctuation . ']\)\@<=\)'
|
||||
|
||||
" Right Concatenate
|
||||
let r_end = '\%(' . r_right_prefix1 . r_right_del . r_right_suffix1
|
||||
let r_end .= '\|' . r_right_prefix2 . r_right_del . r_right_suffix2 . '\)'
|
||||
let r_end = '\%(' . r_right_prefix1 . r_right_repeat . r_right_suffix1
|
||||
let r_end .= '\|' . r_right_prefix2 . r_right_repeat . r_right_suffix2 . '\)'
|
||||
|
||||
call add(res, [r_start, r_end])
|
||||
endfor
|
||||
@@ -359,7 +369,8 @@ endfunction
|
||||
|
||||
function! vimwiki#u#hi_tag(tag_pre, tag_post, syntax_group, contains, ...) abort
|
||||
" Helper: Create highlight region between two tags
|
||||
" :param: tag <string> example '<b>'
|
||||
" :param: tag_pre <string>: opening tag example '<b>'
|
||||
" :param: tag_post <string>: closing tag example '</b>'
|
||||
" :param: syntax_group <string> example: VimwikiBold
|
||||
" :param: contains <string> coma separated and prefixed, default VimwikiHTMLTag
|
||||
" :param: (1) <boolean> is contained
|
||||
@@ -407,6 +418,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
|
||||
@@ -435,13 +453,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
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
|
||||
" Vimwiki autoload plugin file
|
||||
" Description: Vimwiki variable definition and manipulation
|
||||
" Title: Vimwiki variable definition and manipulation functions
|
||||
"
|
||||
" Home: https://github.com/vimwiki/vimwiki/
|
||||
|
||||
" ------------------------------------------------------------------------------------------------
|
||||
@@ -610,6 +609,8 @@ function! s:normalize_wikilocal_settings() abort
|
||||
endif
|
||||
call s:populate_list_vars(wiki_settings)
|
||||
|
||||
call s:populate_blockquote_vars(wiki_settings)
|
||||
|
||||
" Check nested syntax
|
||||
for keyword in keys(wiki_settings.nested_syntaxes)
|
||||
if type(keyword) != type('') || empty(keyword) || type(wiki_settings.nested_syntaxes[keyword]) != type('') ||
|
||||
@@ -673,6 +674,7 @@ endfunction
|
||||
function! s:get_default_syntaxlocal() abort
|
||||
" Get default syntaxlocal variable dictionary
|
||||
" type, default, min, max, possible_values, min_length
|
||||
|
||||
return extend(s:get_common_syntaxlocal(), {
|
||||
\ 'bold_match': {'type': type(''), 'default': '\%(^\|\s\|[[:punct:]]\)\@<=\*__Text__\*\%([[:punct:]]\|\s\|$\)\@='},
|
||||
\ 'bold_search': {'type': type(''), 'default': '\%(^\|\s\|[[:punct:]]\)\@<=\*\zs\%([^*`[:space:]][^*`]*[^*`[:space:]]\|[^*`[:space:]]\)\ze\*\%([[:punct:]]\|\s\|$\)\@='},
|
||||
@@ -710,7 +712,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\%(|[^\\\]]\+\)\?\]\]'},
|
||||
\ })
|
||||
@@ -750,10 +752,21 @@ function! s:get_markdown_syntaxlocal() abort
|
||||
\ 'post_mark': '\%(`\{3,}\|\~\{3,}\)'}},
|
||||
\ 'symH': {'type': type(0), 'default': 0},
|
||||
\ 'typeface': {'type': type({}), 'default': {
|
||||
\ 'bold': vimwiki#u#hi_expand_regex([['__', '__'], ['\*\*', '\*\*']]),
|
||||
\ 'italic': vimwiki#u#hi_expand_regex([['\*', '\*'], ['_', '_']]),
|
||||
\ 'bold': vimwiki#u#hi_expand_regex([
|
||||
\ ['__', '__', '[_*]', 1],
|
||||
\ ['\*\*', '\*\*', '[_*]', 1],
|
||||
\ ]),
|
||||
\ 'italic': vimwiki#u#hi_expand_regex([
|
||||
\ ['_', '_', '[_*]', 0],
|
||||
\ ['\*', '\*', '[_*]', 0],
|
||||
\ ['\*_', '_\*', '[_*]', 1],
|
||||
\ ['_\*', '\*_', '[_*]', 1],
|
||||
\ ]),
|
||||
\ 'underline': vimwiki#u#hi_expand_regex([]),
|
||||
\ 'bold_italic': vimwiki#u#hi_expand_regex([['\*_', '_\*'], ['_\*', '\*_'], ['\*\*\*', '\*\*\*'], ['___', '___']]),
|
||||
\ 'bold_italic': vimwiki#u#hi_expand_regex([
|
||||
\ ['___', '___', '[_*]', 1],
|
||||
\ ['\*\*\*', '\*\*\*', '[_*]', 1],
|
||||
\ ]),
|
||||
\ 'code': [
|
||||
\ ['\%(^\|[^`\\]\)\@<=`\%($\|[^`]\)\@=',
|
||||
\ '\%(^\|[^`]\)\@<=`\%($\|[^`]\)\@='],
|
||||
@@ -763,7 +776,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\%(|[^\\\]]\+\)\?\]\]'},
|
||||
\ })
|
||||
@@ -807,7 +820,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\%(|[^\\\]]\+\)\?\]\]'},
|
||||
\ })
|
||||
@@ -815,10 +828,28 @@ endfunction
|
||||
|
||||
function! s:get_common_syntaxlocal() abort
|
||||
let res = {}
|
||||
|
||||
" Declare helper: a line with only --- or ...
|
||||
let rx_yaml_start_pre = '\%(^\%(\%1l\|^$\n\)\@<=\)'
|
||||
let rx_yaml_start_post = '\%(\%(\n^$\)\@!$\)'
|
||||
let rx_yaml_start = rx_yaml_start_pre . '---' . rx_yaml_start_post
|
||||
let rx_yaml_stop = '^' . '\%(---\|\.\.\.\)' . '$'
|
||||
|
||||
let res.nested_extended = {'type': type(''), 'default': 'VimwikiError,VimwikiPre,VimwikiCode,VimwikiEqIn,VimwikiSuperScript,VimwikiSubScript,textSnipTEX'}
|
||||
let res.nested_typeface = {'type': type(''), 'default': 'VimwikiBold,VimwikiItalic,VimwikiUnderline,VimwikiDelText'}
|
||||
let res.nested = {'type': type(''), 'default': res.nested_extended.default . ',' . res.nested_typeface.default}
|
||||
let res.rxTableSep = {'type': type(''), 'default': '|'}
|
||||
" See issue #1287
|
||||
let res.yaml_metadata_block = {'type': type([]), 'default': [[rx_yaml_start, rx_yaml_stop]]}
|
||||
|
||||
" Declare helper for inline math nested variable
|
||||
let s:rx_inline_math_start = '\%(^\|[^$\\]\)\@<=\$\%($\|[^$[:space:]]\)\@='
|
||||
let s:rx_inline_math_end = '\%(^\|[^$\\[:space:]]\)\@<=\$\%($\|[^$0-9]\)\@='
|
||||
|
||||
" Blockquote marker (#1274)
|
||||
" -- it should not be changed but let's avoid hardcoding
|
||||
let res.blockquote_markers = {'type': type([]), 'default': ['>']}
|
||||
|
||||
return res
|
||||
endfunction
|
||||
|
||||
@@ -1106,6 +1137,22 @@ function! s:populate_list_vars(wiki) abort
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:populate_blockquote_vars(wiki) abort
|
||||
" Populate blockquote variable
|
||||
" Start being more intelligent on blockquote line continuation
|
||||
" See: issue #1274
|
||||
|
||||
" Start of line and spaces
|
||||
let a:wiki.rxBlockquoteItem = '^\s*\('
|
||||
|
||||
" Content
|
||||
let blockquote_markers = vimwiki#vars#get_syntaxlocal('blockquote_markers')
|
||||
let a:wiki.rxBlockquoteItem .= join(blockquote_markers, '\|')
|
||||
|
||||
let a:wiki.rxBlockquoteItem .= '\)'
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:populate_extra_markdown_vars() abort
|
||||
" Populate markdown specific syntax variables
|
||||
let mkd_syntax = g:vimwiki_syntaxlocal_vars['markdown']
|
||||
@@ -1666,3 +1713,4 @@ function! vimwiki#vars#number_of_wikis() abort
|
||||
" Return: number of registered wikis + temporary
|
||||
return len(g:vimwiki_wikilocal_vars) - 1
|
||||
endfunction
|
||||
" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
|
||||
|
||||
@@ -0,0 +1,171 @@
|
||||
= Contents =
|
||||
- [[#VimWiki file link resolution]]
|
||||
- [[#context]]
|
||||
- [[#possible solutions]]
|
||||
- [[#revert to original behavior]]
|
||||
- [[#check if a file exists on disk when following link]]
|
||||
- [[#add a link scheme that means "open in vim"]]
|
||||
- [[#add a configuration toggle for opening file: links in vim]]
|
||||
- [[#add configuration for a set of filetypes to open in vim]]
|
||||
- [[#open questions]]
|
||||
|
||||
= VimWiki file link resolution =
|
||||
|
||||
A decision document started by Brennen Bearnes on 2023-03-23.
|
||||
|
||||
== context ==
|
||||
|
||||
https://github.com/vimwiki/vimwiki/issues/950
|
||||
|
||||
https://github.com/vimwiki/vimwiki/commit/d7ec12645a0460a7d200279c52915e6e080e9869
|
||||
|
||||
Commit d7ec126 applies the wiki extension to files containing a `.`, thus
|
||||
allowing page names to contain a literal period. This is correct behavior,
|
||||
insofar as pages like `Franklin D. Roosevelt` should be able to exist and get
|
||||
mapped to e.g. `Franklin D. Roosevelt.wiki`.
|
||||
|
||||
Unfortunately, this broke behavior that a number of users rely on:
|
||||
|
||||
https://github.com/vimwiki/vimwiki/issues/1271
|
||||
|
||||
I have some latex files stored and linked to in my wiki.
|
||||
|
||||
Before d7ec126 I could omit the file: part of a link to have vim open the file
|
||||
directly.
|
||||
|
||||
After d7ec126 vimwiki adds a `md` extension when opening any file which
|
||||
results in a `filename.tex.md` being created alongside the original tex
|
||||
file. Using `file:` is not a solution since this can only be configured to
|
||||
open a second instance of vim.
|
||||
|
||||
It makes sense that this is useful.
|
||||
|
||||
Sidebar: `file:` _can_ be configured to do just about anything with a custom
|
||||
handler, but that doesn't mean it's a very good user experience.
|
||||
|
||||
= possible solutions =
|
||||
|
||||
== revert to original behavior ==
|
||||
|
||||
As a default, I personally think this is a non-starter. Not being able to use
|
||||
`.` in page names is broken. I also suspect other things break if you treat
|
||||
those files as wiki pages.
|
||||
|
||||
We could make it configurable, though.
|
||||
|
||||
*Pro:*
|
||||
|
||||
- People can go back to their expected behavior by setting one config
|
||||
variable.
|
||||
|
||||
*Con:*
|
||||
|
||||
- Adds an extra branch to link handling code.
|
||||
- I haven't thought through the implications of treating it as fully
|
||||
supported behavior. What else will people expect to work right?
|
||||
|
||||
== check if a file exists on disk when following link ==
|
||||
|
||||
The idea is that if a link is `[[foo.txt]]` and `foo.txt` already exists, we
|
||||
should edit the existing file instead of creating a `foo.txt.md`.
|
||||
|
||||
*Pro:*
|
||||
|
||||
- Might be the closest to expectations of people who rely on the old
|
||||
behavior.
|
||||
- Doesn't expand the language itself.
|
||||
|
||||
*Con:*
|
||||
|
||||
- Complicates link handling code.
|
||||
- Parsing a page requires knowing about external files.
|
||||
- Might be surprising / confusing. You can write `foo.txt` and wind up with
|
||||
two different outcomes depending on whether `foo.txt` already exists.
|
||||
- It's very Do What I Mean, which isn't necessarily bad. But if I write a
|
||||
link to `foo.txt` and wind up at `foo.txt.md`, it's not obvious that's
|
||||
what I meant.
|
||||
|
||||
== add a link scheme that means "open in vim" ==
|
||||
|
||||
Something like `[[edit:foo.txt]]`.
|
||||
|
||||
I vaguely think there's prior art for this in some older browsers? I could
|
||||
swear Lynx had something like it, although I couldn't find anything under:
|
||||
|
||||
- [[https://en.wikipedia.org/wiki/List_of_URI_schemes|wp:List of URI schemes]]
|
||||
- [[https://lynx.invisible-island.net/lynx_help/lynx_url_support.html|list of Lynx URL schemes]].
|
||||
|
||||
I may just be thinking of `lynxexec:`.
|
||||
|
||||
*Pro:*
|
||||
|
||||
- People want this anyway, and a `VimwikiLinkHandler()` for using `file:` or
|
||||
some custom prefix to handle it is a common tweak to configurations which
|
||||
we already document.
|
||||
- It doesn't need a file existence check.
|
||||
|
||||
*Con:*
|
||||
|
||||
- Expands the language.
|
||||
- How is this converted to HTML?
|
||||
- What will Markdown parsers do with it?
|
||||
- Right now there are at least 3 high-level paths for opening a link:
|
||||
- Open in VimWiki
|
||||
- Hand off to custom link handler
|
||||
- Open with `vimwiki#base#system_open_link()`
|
||||
- ...this would introduce a 4th.
|
||||
- Unless there is prior art, this would be something that _looks_ like a
|
||||
URL/URI, but isn't recognized outside the wiki. That seems fine for
|
||||
custom prefixes, but is it ok to introduce here?
|
||||
|
||||
== add a configuration toggle for opening file: links in vim ==
|
||||
|
||||
Add a boolean that says "just open `file:` and `local:` links in the editor".
|
||||
|
||||
*Pro:*
|
||||
|
||||
- Probably a relatively simple change.
|
||||
- Might meet some users' needs.
|
||||
|
||||
*Con:*
|
||||
|
||||
- Loses the utility in linking to binary filetypes which are best opened via
|
||||
the system handler (images, PDFs, etc.).
|
||||
- Users are explicitly already relying on `file:` links to be distinct from
|
||||
`[[file.foo]]` links.
|
||||
|
||||
== add configuration for a set of filetypes to open in vim ==
|
||||
|
||||
A variation on the toggle for `file:` links would be to allow configuring a
|
||||
_list_ of file extensions which should be opened with Vim rather than passed on
|
||||
to the system handler.
|
||||
|
||||
Something like:
|
||||
|
||||
{{{vim
|
||||
let wiki.file_link_edit_ext = ['txt', 'csv']
|
||||
}}}
|
||||
|
||||
*Pro:*
|
||||
|
||||
- Doesn't expand the language.
|
||||
- Doesn't have any implications for HTML rendering.
|
||||
- A lot of `VimwikiLinkHandler()` boilerplate that is just used for making
|
||||
links open in Vim could go away.
|
||||
- I have this in my own config, so it's an appealing feature.
|
||||
|
||||
*Con:*
|
||||
|
||||
- Does require people to rewrite existing link collections, but that's
|
||||
true of other solutions as well.
|
||||
|
||||
*Unanswered:*
|
||||
|
||||
- Would there be any sensible default for this besides an empty list?
|
||||
My guess is not.
|
||||
|
||||
= open questions =
|
||||
|
||||
- What is the actual current behavior with Markdown?
|
||||
- Does it differ meaningfully from vimwiki syntax?
|
||||
- If so, why?
|
||||
@@ -4,6 +4,9 @@ This file is meant to document design decisions and algorithms inside Vimwiki
|
||||
which are too large for code comments, and not necessarily interesting to
|
||||
users. Please create a new section to document each behavior.
|
||||
|
||||
## Link resolution
|
||||
|
||||
See [VimWiki file link resolution](./2023-03-23-file-link-resolution.wiki).
|
||||
|
||||
## Formatting tables
|
||||
|
||||
|
||||
+63
-19
@@ -964,9 +964,9 @@ Vimwiki file.
|
||||
and links to external files actually exist. Check also if all wiki files
|
||||
are reachable from the index file. The results are shown in the quickfix
|
||||
window.
|
||||
|
||||
|
||||
This can be used to find "Orphaned" wiki files/pages.
|
||||
|
||||
|
||||
With range: the wiki number, by default current wiki
|
||||
|
||||
|
||||
@@ -1190,13 +1190,13 @@ in HTML: >
|
||||
alt="Vimwiki"/>
|
||||
|
||||
Transclude image with alternate text and some style: >
|
||||
{{http://.../vimwiki_logo.png|cool stuff|style="width:150px;height:120px;"}}
|
||||
{{https://.../vimwiki_logo.png|cool stuff|style="width:150px;height:120px;"}}
|
||||
in HTML: >
|
||||
<img src="https://raw.githubusercontent.com/vimwiki/vimwiki/master/doc/splash.png"
|
||||
alt="cool stuff" style="width:150px; height:120px"/>
|
||||
|
||||
Transclude image _without_ alternate text and with a CSS class: >
|
||||
{{http://.../vimwiki_logo.png||class="center flow blabla"}}
|
||||
{{https://.../vimwiki_logo.png||class="center flow blabla"}}
|
||||
in HTML: >
|
||||
<img src="https://raw.githubusercontent.com/vimwiki/vimwiki/master/doc/splash.png"
|
||||
alt="" class="center flow blabla"/>
|
||||
@@ -1207,16 +1207,16 @@ See |VimwikiWikiIncludeHandler|.
|
||||
Thumbnail links~
|
||||
>
|
||||
Thumbnail links are constructed like this: >
|
||||
[[http://someaddr.com/bigpicture.jpg|{{http://someaddr.com/thumbnail.jpg}}]]
|
||||
[[https://someaddr.com/bigpicture.jpg|{{https://someaddr.com/thumbnail.jpg}}]]
|
||||
|
||||
in HTML: >
|
||||
<a href="http://someaddr.com/ ... /.jpg">
|
||||
<img src="http://../thumbnail.jpg /></a>
|
||||
<a href="https://someaddr.com/ ... /.jpg">
|
||||
<img src="https://../thumbnail.jpg /></a>
|
||||
|
||||
Markdown Links~
|
||||
|
||||
These links are only available for Markdown syntax. See
|
||||
http://daringfireball.net/projects/markdown/syntax#link.
|
||||
https://daringfireball.net/projects/markdown/syntax#link.
|
||||
|
||||
Inline link: >
|
||||
[Looks like this](URL)
|
||||
@@ -1456,7 +1456,7 @@ See |vimwiki-option-nested_syntaxes| and
|
||||
5.8. Mathematical formulae *vimwiki-syntax-math*
|
||||
|
||||
Mathematical formulae are highlighted, and can be rendered in HTML using the
|
||||
powerful open source display engine MathJax (http://www.mathjax.org/).
|
||||
powerful open source display engine MathJax (https://www.mathjax.org/).
|
||||
|
||||
There are three supported syntaxes, which are inline, block display and
|
||||
block environment.
|
||||
@@ -2029,7 +2029,7 @@ If you have Calendar.vim installed you can use it to create diary notes.
|
||||
Just open calendar with :Calendar and tap <Enter> on the date. A wiki file
|
||||
will be created in the default wiki's diary.
|
||||
|
||||
Get it from http://www.vim.org/scripts/script.php?script_id=52
|
||||
Get it from https://www.vim.org/scripts/script.php?script_id=52
|
||||
|
||||
See |g:vimwiki_use_calendar| option to turn it off/on.
|
||||
|
||||
@@ -2938,7 +2938,9 @@ color. (See autoload/vimwiki/vars.vim)
|
||||
|
||||
Syntax options are configured using the following pattern: >
|
||||
|
||||
let g:vimwiki_syntax_list['markdown']['bullet_type'] = ['*', '-', '+']
|
||||
let g:vimwiki_syntaxlocal_vars = {}
|
||||
let g:vimwiki_syntaxlocal_vars['markdown'] = []
|
||||
let g:vimwiki_syntaxlocal_vars['markdown']['bullet_type'] = ['*', '-', '+']
|
||||
|
||||
Where:
|
||||
- `markdown` is the syntax name. It can be (`default`, `markdown` or `media`)
|
||||
@@ -2946,6 +2948,24 @@ Where:
|
||||
- `['*', '-', '+']` is the option value
|
||||
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
*blockquote_markers*
|
||||
|
||||
List of markers to define the blockquote regrion
|
||||
|
||||
Default: ['>']
|
||||
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
*yaml_metadata_block*
|
||||
|
||||
List of (start, end) regex region delimiters to define the YAML header
|
||||
More information in #1287 and https://pandoc.org/MANUAL.html#extension-yaml_metadata_block
|
||||
|
||||
Default: [['^---$', '^\%(---\|\.\.\.$']]
|
||||
or similar with stricter anchors
|
||||
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
12.5 Global Options *vimwiki-global-options*
|
||||
|
||||
@@ -3805,7 +3825,7 @@ generate and follow_link
|
||||
----------------------------------------------------- ReGeX
|
||||
| pre | '^\|\s' | Limitations to tag precedence
|
||||
| pre_mark | ':' | Tag list opener
|
||||
| in | '[:space:]]\+' | Tag permitted characters
|
||||
| in | '[[:space:]]\+' | Tag permitted characters
|
||||
| sep | ':' | Tag separators in a tag list
|
||||
| post_mark | ':' | Tag list closer
|
||||
| post | '\s\|$' | Limitations to tag following
|
||||
@@ -3849,15 +3869,15 @@ See CONTRIBUTING.md for info about how to file bugs etc.
|
||||
==============================================================================
|
||||
15. Development *vimwiki-development*
|
||||
|
||||
Homepage: http://vimwiki.github.io/
|
||||
Homepage: https://vimwiki.github.io/
|
||||
Github: https://github.com/vimwiki/vimwiki/
|
||||
Vim plugins: http://www.vim.org/scripts/script.php?script_id=2226
|
||||
Old homepage: http://code.google.com/p/vimwiki/
|
||||
Vim plugins: https://www.vim.org/scripts/script.php?script_id=2226
|
||||
Old homepage: https://code.google.com/p/vimwiki/
|
||||
|
||||
Contributors and their Github usernames in roughly chronological order:
|
||||
|
||||
- Maxim Kim (@habamax) <habamax@gmail.com> as original author
|
||||
- the people here: http://code.google.com/p/vimwiki/people/list
|
||||
- the people here: https://code.google.com/p/vimwiki/people/list
|
||||
- Stuart Andrews (@tub78)
|
||||
- Tomas Pospichal
|
||||
- Daniel Schemala (@EinfachToll) as current maintainer
|
||||
@@ -3989,7 +4009,7 @@ Contributors and their Github usernames in roughly chronological order:
|
||||
|
||||
Issue numbers starting with '#' are issues from
|
||||
https://github.com/vimwiki/vimwiki/issues/, all others from
|
||||
http://code.google.com/p/vimwiki/issues/list. They may be accessible from
|
||||
https://code.google.com/p/vimwiki/issues/list. They may be accessible from
|
||||
https://github.com/vimwiki-backup/vimwiki/issues.
|
||||
|
||||
From version 2022.12.02, what would have been 2.6.0 under the prior versioning
|
||||
@@ -3999,6 +4019,30 @@ master is retained as a legacy mirror of the dev branch.
|
||||
|
||||
This is somewhat experimental, and will probably be refined over time.
|
||||
|
||||
New:~
|
||||
* Issue #1261: Feature: Support for <mark> in Markdown
|
||||
highlighting with yellow background and back foreground
|
||||
* Issue #1274: Feature: Continue blockquote when <CR>
|
||||
is pressed in insert mode
|
||||
Also add the |blockquote_markers| variable
|
||||
|
||||
Fixed:~
|
||||
* Issue #1229: Bug: VimwikiGoto without argument creates empty page
|
||||
* Issue #1316: Permit tags in heading
|
||||
and improve |VimwikiSearchTags| and |VimwikiRebuildTags|
|
||||
* Issue #1270: |VimwikiAddHeaderLevel| map (3=) was broken by a previous
|
||||
refactoring commit
|
||||
|
||||
|
||||
2023.03.15~
|
||||
|
||||
New:~
|
||||
* Issue #150 Fix Math border cases
|
||||
according to https://pandoc.org/MANUAL.html#math
|
||||
* Issue #1287 Highlight YAML header with |yaml_metadata_block|
|
||||
configuration variable holding region delimiters
|
||||
|
||||
|
||||
2022.12.02~
|
||||
|
||||
New:~
|
||||
@@ -4457,7 +4501,7 @@ Summary ~
|
||||
* Option to disable table mappings. See |g:vimwiki_table_mappings|.
|
||||
|
||||
For detailed information see issues list on
|
||||
http://code.google.com/p/vimwiki/issues/list
|
||||
https://code.google.com/p/vimwiki/issues/list
|
||||
|
||||
|
||||
1.2~
|
||||
@@ -4536,7 +4580,7 @@ http://code.google.com/p/vimwiki/issues/list
|
||||
17. License *vimwiki-license*
|
||||
|
||||
The MIT License
|
||||
http://www.opensource.org/licenses/mit-license.php
|
||||
https://www.opensource.org/licenses/mit-license.php
|
||||
|
||||
Copyright (c) 2008-2010 Maxim Kim
|
||||
2013-2017 Daniel Schemala
|
||||
|
||||
@@ -363,7 +363,7 @@ command! -buffer VimwikiDiaryPrevDay call vimwiki#diary#goto_prev_day()
|
||||
" tags commands
|
||||
command! -buffer -bang VimwikiRebuildTags call vimwiki#tags#update_tags(1, '<bang>')
|
||||
command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags
|
||||
\ VimwikiSearchTags VimwikiSearch /:<args>:/
|
||||
\ VimwikiSearchTags call vimwiki#tags#search_tags(<q-args>)
|
||||
command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags
|
||||
\ VimwikiGenerateTagLinks call vimwiki#tags#generate_tags(1, <f-args>)
|
||||
command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags
|
||||
@@ -452,6 +452,8 @@ if str2nr(vimwiki#vars#get_global('key_mappings').links)
|
||||
call vimwiki#u#map_key('n', '+', '<Plug>VimwikiNormalizeLink')
|
||||
call vimwiki#u#map_key('v', '+', '<Plug>VimwikiNormalizeLinkVisual')
|
||||
call vimwiki#u#map_key('v', '<CR>', '<Plug>VimwikiNormalizeLinkVisualCR')
|
||||
call vimwiki#u#map_key('n', '<D-CR>', '<Plug>VimwikiTabDropLink')
|
||||
call vimwiki#u#map_key('n', '<C-S-CR>', '<Plug>VimwikiTabDropLink', 1)
|
||||
call vimwiki#u#map_key('n', '<BS>', '<Plug>VimwikiGoBackLink')
|
||||
call vimwiki#u#map_key('n', '<TAB>', '<Plug>VimwikiNextLink')
|
||||
call vimwiki#u#map_key('n', '<S-TAB>', '<Plug>VimwikiPrevLink')
|
||||
|
||||
+39
-18
@@ -150,6 +150,25 @@ let s:target = vimwiki#base#apply_template(
|
||||
call s:add_target_syntax_ON(s:target, 'VimwikiLink')
|
||||
|
||||
|
||||
" List:
|
||||
execute 'syntax match VimwikiList /'.vimwiki#vars#get_wikilocal('rxListItemWithoutCB').'/'
|
||||
execute 'syntax match VimwikiList /'.vimwiki#vars#get_syntaxlocal('rxListDefine').'/'
|
||||
execute 'syntax match VimwikiListTodo /'.vimwiki#vars#get_wikilocal('rxListItem').'/'
|
||||
|
||||
" Task List Done:
|
||||
if vimwiki#vars#get_global('hl_cb_checked') == 1
|
||||
execute 'syntax match VimwikiCheckBoxDone /'.vimwiki#vars#get_wikilocal('rxListItemWithoutCB')
|
||||
\ . '\s*\[['.vimwiki#vars#get_wikilocal('listsyms_list')[-1]
|
||||
\ . vimwiki#vars#get_global('listsym_rejected')
|
||||
\ . ']\]\s\(.*\)$/ '
|
||||
\ . 'contains=' . syntax_dic.nested . ',VimwikiNoExistsLink,VimwikiLink,VimwikiWeblink1,VimwikiWikiLink1,@Spell'
|
||||
elseif vimwiki#vars#get_global('hl_cb_checked') == 2
|
||||
execute 'syntax match VimwikiCheckBoxDone /'
|
||||
\ . vimwiki#vars#get_wikilocal('rxListItemAndChildren')
|
||||
\ .'/ contains=VimwikiNoExistsLink,VimwikiLink,VimwikiWeblink1,VimwikiWikiLink1,@Spell'
|
||||
endif
|
||||
|
||||
|
||||
" Header Level: 1..6
|
||||
for s:i in range(1,6)
|
||||
" WebLink are for markdown but putting them here avoidcode duplication
|
||||
@@ -236,24 +255,6 @@ syntax match VimwikiTableRow /^\s*|.\+|\s*$/
|
||||
|
||||
syntax match VimwikiCellSeparator /\%(|\)\|\%(-\@<=+\-\@=\)\|\%([|+]\@<=-\+\)/ contained
|
||||
|
||||
" List:
|
||||
execute 'syntax match VimwikiList /'.vimwiki#vars#get_wikilocal('rxListItemWithoutCB').'/'
|
||||
execute 'syntax match VimwikiList /'.vimwiki#vars#get_syntaxlocal('rxListDefine').'/'
|
||||
execute 'syntax match VimwikiListTodo /'.vimwiki#vars#get_wikilocal('rxListItem').'/'
|
||||
|
||||
" Task List Done:
|
||||
if vimwiki#vars#get_global('hl_cb_checked') == 1
|
||||
execute 'syntax match VimwikiCheckBoxDone /'.vimwiki#vars#get_wikilocal('rxListItemWithoutCB')
|
||||
\ . '\s*\[['.vimwiki#vars#get_wikilocal('listsyms_list')[-1]
|
||||
\ . vimwiki#vars#get_global('listsym_rejected')
|
||||
\ . ']\]\s\(.*\)$/ '
|
||||
\ . 'contains=' . syntax_dic.nested . ',VimwikiNoExistsLink,VimwikiLink,VimwikiWeblink1,VimwikiWikiLink1,@Spell'
|
||||
elseif vimwiki#vars#get_global('hl_cb_checked') == 2
|
||||
execute 'syntax match VimwikiCheckBoxDone /'
|
||||
\ . vimwiki#vars#get_wikilocal('rxListItemAndChildren')
|
||||
\ .'/ contains=VimwikiNoExistsLink,VimwikiLink,VimwikiWeblink1,VimwikiWikiLink1,@Spell'
|
||||
endif
|
||||
|
||||
|
||||
" Horizontal Rule: <hr>
|
||||
execute 'syntax match VimwikiHR /'.vimwiki#vars#get_syntaxlocal('rxHR').'/'
|
||||
@@ -327,6 +328,13 @@ for [color_key, color_value] in items(color_dic)
|
||||
execute cmd
|
||||
endfor
|
||||
|
||||
" Html mark tag, feature request in issue #1261
|
||||
let cmd = 'syntax region VimwikiMarkTag matchgroup=VimwikiDelimiterColor'
|
||||
\ . ' start=/<mark>/'
|
||||
\ . ' end=+</mark>+'
|
||||
\ . ' ' . b:vimwiki_syntax_concealends
|
||||
execute cmd
|
||||
|
||||
|
||||
" Comment: home made
|
||||
execute 'syntax match VimwikiComment /'.vimwiki#vars#get_syntaxlocal('comment_regex').
|
||||
@@ -416,6 +424,8 @@ hi def link VimwikiUnderlineItalicBold VimwikiBoldItalicUnderline
|
||||
hi def link VimwikiCode PreProc
|
||||
hi def link VimwikiCodeT VimwikiCode
|
||||
|
||||
" Mark
|
||||
hi def VimwikiMarkTag term=bold ctermbg=yellow ctermfg=black guibg=yellow guifg=black
|
||||
hi def link VimwikiPre PreProc
|
||||
hi def link VimwikiPreT VimwikiPre
|
||||
hi def link VimwikiPreDelim VimwikiPre
|
||||
@@ -508,6 +518,17 @@ if !empty(s:nested)
|
||||
endfor
|
||||
endif
|
||||
|
||||
" Include: Yaml metadata block for pandoc
|
||||
let a_yaml_delimiter = vimwiki#vars#get_syntaxlocal('yaml_metadata_block')
|
||||
for [rx_start, rx_end] in a_yaml_delimiter
|
||||
call vimwiki#base#nested_syntax(
|
||||
\ 'yaml',
|
||||
\ rx_start,
|
||||
\ rx_end,
|
||||
\ 'VimwikiPre')
|
||||
endfor
|
||||
|
||||
|
||||
" LaTex: Load
|
||||
if !empty(globpath(&runtimepath, 'syntax/tex.vim'))
|
||||
execute 'syntax include @textGrouptex syntax/tex.vim'
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
# Issue: #1261: Feature: Support for <mark> in Markdown
|
||||
|
||||
|
||||
Given vimwiki (Single line mark):
|
||||
<mark>Single line</mark>
|
||||
01234567890
|
||||
|
||||
|
||||
Execute (Set syntax markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
|
||||
Execute (Assert all is yaml except after the closing ---):
|
||||
AssertEqual 'VimwikiMarkTag1', GetSyntaxStack(1, 7)[0] . 1
|
||||
AssertEqual '02', len(GetSyntaxStack(2, 7)) . 2
|
||||
|
||||
|
||||
Given vimwiki (Multiple line mark):
|
||||
<mark>Start
|
||||
Multiple
|
||||
Line
|
||||
end</mark>
|
||||
01234567890
|
||||
|
||||
|
||||
Execute (Set syntax markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
|
||||
Execute (Assert all is yaml except after the closing ---):
|
||||
AssertEqual 'VimwikiMarkTag1', GetSyntaxStack(1, 7)[0] . 1
|
||||
AssertEqual 'VimwikiMarkTag2', GetSyntaxStack(2, 2)[0] . 2
|
||||
AssertEqual 'VimwikiMarkTag3', GetSyntaxStack(3, 2)[0] . 3
|
||||
AssertEqual 'VimwikiMarkTag4', GetSyntaxStack(4, 2)[0] . 4
|
||||
AssertEqual '05', len(GetSyntaxStack(5, 7)) . 5
|
||||
@@ -0,0 +1,41 @@
|
||||
# Non regression tests for issue: #1270
|
||||
|
||||
|
||||
Given vimwiki (Dummy heading):
|
||||
# Test
|
||||
|
||||
Execute (Set syntax markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (call add header 1):
|
||||
call vimwiki#base#AddHeaderLevel(1)
|
||||
|
||||
Expect (Heading 2):
|
||||
## Test
|
||||
|
||||
Execute (call add header 2):
|
||||
call vimwiki#base#AddHeaderLevel(2)
|
||||
|
||||
Expect (Heading 3):
|
||||
### Test
|
||||
|
||||
Execute (call add header 5):
|
||||
call vimwiki#base#AddHeaderLevel(5)
|
||||
|
||||
Expect (Heading6):
|
||||
###### Test
|
||||
|
||||
Do (5=):
|
||||
5=
|
||||
|
||||
Expect (Heading6):
|
||||
###### Test
|
||||
|
||||
Given vimwiki (Dummy heading 6):
|
||||
###### Test
|
||||
|
||||
Do (5-):
|
||||
5-
|
||||
|
||||
Expect (Heading decreased by 5):
|
||||
# Test
|
||||
@@ -0,0 +1,75 @@
|
||||
# Issue: #1274
|
||||
# Feature: Markdown -- Continue blockquote when <CR> is pressed in insert mode.
|
||||
|
||||
|
||||
Given vimwiki (Blockquote with test {{{1):
|
||||
> Dummy text 1
|
||||
|
||||
|
||||
Execute (Set syntax markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
|
||||
Do (Press insert, enter and type):
|
||||
A
|
||||
\<Cr>
|
||||
Dummy text 2
|
||||
|
||||
|
||||
Expect(Marker added 1):
|
||||
> Dummy text 1
|
||||
> Dummy text 2
|
||||
|
||||
|
||||
Do (Press o and type):
|
||||
o
|
||||
Dummy text 2
|
||||
|
||||
|
||||
Expect(Marker added 2):
|
||||
> Dummy text 1
|
||||
> Dummy text 2
|
||||
|
||||
|
||||
Do (Press O and type):
|
||||
O
|
||||
Dummy text 2
|
||||
|
||||
|
||||
Expect(Marker added 3, above):
|
||||
> Dummy text 2
|
||||
> Dummy text 1
|
||||
|
||||
|
||||
Given vimwiki (Blockquote without test {{{1):
|
||||
>
|
||||
|
||||
|
||||
Do (Press insert, enter and type):
|
||||
A
|
||||
\<Cr>
|
||||
Dummy text 2
|
||||
|
||||
|
||||
Expect(Marker removed):
|
||||
Dummy text 2
|
||||
|
||||
|
||||
Do (Press o):
|
||||
o
|
||||
Dummy text 2
|
||||
|
||||
|
||||
Expect(Marker appended, below):
|
||||
>
|
||||
> Dummy text 2
|
||||
|
||||
|
||||
Do (Press O):
|
||||
O
|
||||
Dummy text 2
|
||||
|
||||
|
||||
Expect(Marker appended, above):
|
||||
> Dummy text 2
|
||||
>
|
||||
@@ -0,0 +1,99 @@
|
||||
# Non regression tests for issue: #1287
|
||||
|
||||
|
||||
Before(Define function for yaml inspection):
|
||||
function! Issue1287Yaml(line)
|
||||
" The line where the yaml delimiter is: 1 if at top
|
||||
let l = a:line
|
||||
|
||||
Log "1: " . string(GetSyntaxStack(l + 0, 2))
|
||||
AssertEqual 'textSnipYAML', GetSyntaxStack(l + 0, 2)[0]
|
||||
Log '2: ' . string(GetSyntaxStack(l + 0, 2))
|
||||
AssertEqual 'VimwikiPre', GetSyntaxStack(l + 0, 2)[1]
|
||||
|
||||
Log '3: ' . string(GetSyntaxStack(l + 1, 2))
|
||||
AssertEqual 'textSnipYAML', GetSyntaxStack(l + 1, 2)[0]
|
||||
Log '4: ' . string(GetSyntaxStack(l + 2, 2))
|
||||
AssertEqual 'textSnipYAML', GetSyntaxStack(l + 2, 2)[0]
|
||||
Log '5: ' . string(GetSyntaxStack(l + 2, 20))
|
||||
AssertEqual 'textSnipYAML', GetSyntaxStack(l + 2, 20)[0]
|
||||
|
||||
Log '6: ' . string(GetSyntaxStack(l + 3, 2))
|
||||
AssertEqual 'VimwikiPre', GetSyntaxStack(l + 3, 2)[-1]
|
||||
endfunction
|
||||
|
||||
|
||||
Given vimwiki (Yaml with --- at top):
|
||||
---
|
||||
title: my title
|
||||
description: my description
|
||||
---
|
||||
|
||||
Execute (Assert delimiter with --- at top):
|
||||
call Issue1287Yaml(1)
|
||||
|
||||
Given vimwiki (Yaml with --- at bottom):
|
||||
---
|
||||
title: my title
|
||||
description: my description
|
||||
...
|
||||
|
||||
Execute (Assert delimiter with ... at bottom):
|
||||
call Issue1287Yaml(1)
|
||||
|
||||
Given vimwiki (Yaml with --- after empty line):
|
||||
A stupid block
|
||||
of 2 lines
|
||||
|
||||
---
|
||||
title: my title
|
||||
description: my description
|
||||
---
|
||||
|
||||
Execute (Assert delimiter with --- after empty line):
|
||||
call Issue1287Yaml(4)
|
||||
|
||||
|
||||
Given vimwiki (Yaml with --- mixed with ...):
|
||||
---
|
||||
title: my title
|
||||
...
|
||||
comment: my comment
|
||||
description: my description
|
||||
---
|
||||
|
||||
And a text follows
|
||||
|
||||
Execute (Assert all is yaml except after the closing ---):
|
||||
AssertEqual 'textSnipYAML1', GetSyntaxStack(1, 2)[0] . 1
|
||||
AssertEqual 'VimwikiPre1', GetSyntaxStack(1, 2)[1] . 1
|
||||
|
||||
AssertEqual 'textSnipYAML1', GetSyntaxStack(1, 2)[0] . 1
|
||||
AssertEqual 'textSnipYAML2', GetSyntaxStack(2, 2)[0] . 2
|
||||
AssertEqual 'VimwikiPre3', GetSyntaxStack(3, 2)[0] . 3
|
||||
|
||||
AssertEqual 0, len(GetSyntaxStack(7, 2))
|
||||
AssertEqual 0, len(GetSyntaxStack(8, 2))
|
||||
|
||||
|
||||
Given vimwiki (Yaml with --- with a --- not a start of line):
|
||||
---
|
||||
title: my title
|
||||
comment: my comment ---
|
||||
description: my description
|
||||
---
|
||||
|
||||
And a text follows
|
||||
|
||||
Execute (Assert all is yaml except after the closing ---):
|
||||
AssertEqual 'textSnipYAML1', GetSyntaxStack(1, 2)[0] . 1
|
||||
AssertEqual 'VimwikiPre1', GetSyntaxStack(1, 2)[1] . 1
|
||||
|
||||
AssertEqual 'textSnipYAML1', GetSyntaxStack(1, 2)[0] . 1
|
||||
AssertEqual 'textSnipYAML2', GetSyntaxStack(2, 2)[0] . 2
|
||||
AssertEqual 'textSnipYAML3', GetSyntaxStack(3, 2)[0] . 3
|
||||
AssertEqual 'textSnipYAML4', GetSyntaxStack(4, 2)[0] . 4
|
||||
AssertEqual 'VimwikiPre5', GetSyntaxStack(5, 2)[-1] . 5
|
||||
|
||||
AssertEqual 0, len(GetSyntaxStack(6, 2))
|
||||
AssertEqual 0, len(GetSyntaxStack(7, 2))
|
||||
@@ -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
|
||||
+235
-192
@@ -1,24 +1,18 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck disable=SC2155 # Declare and assign separately to avoid masking return values
|
||||
|
||||
# credit to https://github.com/w0rp/ale for script ideas and the color vader
|
||||
# output function.
|
||||
: '
|
||||
Vimwiki vader test script
|
||||
|
||||
# Say Hi
|
||||
echo -en "Starting $(basename "$0") for VimWiki\n"
|
||||
start_time=$(date +%s)
|
||||
Credit: https://github.com/w0rp/ale for script ideas and the color vader output function.
|
||||
'
|
||||
|
||||
red='\033[0;31m'
|
||||
green='\033[0;32m'
|
||||
nc='\033[0m'
|
||||
# Capture start time now
|
||||
declare -g start_time=$(date +%s)
|
||||
|
||||
# For windows: Cmder bash is appending busybox to the path and
|
||||
# and a smlll vim is included, so that override the windows path vim
|
||||
if [[ -v OLD_PATH ]]; then
|
||||
echo "Setting path from OLD_PATH : $OLD_PATH"
|
||||
export PATH="$OLD_PATH"
|
||||
fi
|
||||
|
||||
printHelp() {
|
||||
: 'Print usage to stdout'
|
||||
cat << ' EOF' | sed -e 's/^ //'
|
||||
Usage: bash run_tests.sh [OPTIONS]
|
||||
|
||||
@@ -56,8 +50,144 @@ printHelp() {
|
||||
}
|
||||
|
||||
|
||||
run_test(){
|
||||
: 'Main function'
|
||||
local -i res=0
|
||||
|
||||
# Hi
|
||||
echo -en "Starting $(basename "$0") for VimWiki\n"
|
||||
|
||||
# Hook ctrl-c or ctrl-z to stop tests
|
||||
trap exit 1 SIGINT SIGTERM
|
||||
|
||||
# For windows: Cmder bash is appending busybox to the path and
|
||||
# and a smlll vim is included, so that override the windows path vim
|
||||
if [[ -v OLD_PATH ]]; then
|
||||
echo "Setting path from OLD_PATH : $OLD_PATH"
|
||||
export PATH="$OLD_PATH"
|
||||
fi
|
||||
|
||||
# WORK
|
||||
parse_argument "$@"; ((res |= $?))
|
||||
execute_test_argument; ((res |= $?))
|
||||
|
||||
# Print ellapsed time (after calculate it)
|
||||
end_time=$(date +%s)
|
||||
sec_time=$((end_time - start_time))
|
||||
printf -v script_time '%dh:%dm:%ds' $((sec_time/3600)) $((sec_time%3600/60)) $((sec_time%60))
|
||||
echo -ne "Script $(basename "$0"), in $script_time, Returned -> $res\n\n"
|
||||
|
||||
return "$res"
|
||||
}
|
||||
|
||||
|
||||
parse_argument(){
|
||||
: 'Parse user argument'
|
||||
# Declare color helper
|
||||
declare -g red='\033[0;31m'
|
||||
declare -g green='\033[0;32m'
|
||||
declare -g nc='\033[0m'
|
||||
|
||||
# Declare: Path of the script, supposing no spaces
|
||||
declare -g g_script_file=$(dirname "$0")
|
||||
declare -g g_script_path=$(realpath "$g_script_file")
|
||||
declare -g g_wiki_path=$(realpath "$g_script_path/..")
|
||||
declare -g g_tmp_dir=$(dirname "$(mktemp -u)")
|
||||
|
||||
# Declare: list of vim/nvim versions
|
||||
declare -g g_vers="$(print_versions)"
|
||||
|
||||
# Declare: type of tests to run - vader/vint/all
|
||||
declare -g g_type="all"
|
||||
|
||||
# Declare: verbose output flag
|
||||
declare -g g_verbose=0
|
||||
|
||||
# Declare: only run these tests
|
||||
declare -g g_file_test=""
|
||||
|
||||
# Declare: docker flags
|
||||
declare -g flags=(--rm -v "$PWD/../:/testplugin" -v "$PWD/../test:/home" -w /testplugin vimwiki)
|
||||
|
||||
# Parse all argument options
|
||||
while getopts ":hvn:lt:f:" opt; do
|
||||
case ${opt} in
|
||||
h)
|
||||
printHelp
|
||||
;;
|
||||
n)
|
||||
g_vers="$OPTARG"
|
||||
;;
|
||||
v)
|
||||
g_verbose=1
|
||||
;;
|
||||
l)
|
||||
print_versions
|
||||
;;
|
||||
t)
|
||||
g_type="$OPTARG"
|
||||
;;
|
||||
f)
|
||||
g_file_test="$OPTARG"
|
||||
;;
|
||||
\?)
|
||||
echo "Invalid option: $OPTARG" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
:)
|
||||
echo "Invalid option: $OPTARG requires an argument" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Shift out parameters already processed
|
||||
shift $((OPTIND -1))
|
||||
|
||||
# Handle error for non-option arguments
|
||||
if [[ $# -ne 0 ]]; then
|
||||
echo "Error: Got $# non-option arguments." 1>&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
execute_test_argument(){
|
||||
: 'Execute test according to global variable'
|
||||
# Global error return of the script
|
||||
local -i res=0 ret=0
|
||||
|
||||
# Select and run tests
|
||||
case $g_type in
|
||||
vader)
|
||||
run_vader; ret=$?
|
||||
echo "Main Vader: returned $ret"
|
||||
((res |= ret))
|
||||
;;
|
||||
vint)
|
||||
run_vint; ret=$?
|
||||
echo "Main Vint: returned $ret"
|
||||
((res |= ret))
|
||||
;;
|
||||
all)
|
||||
run_vint; ret=$?
|
||||
echo "Main Vint: returned $ret"
|
||||
((res |= ret))
|
||||
run_vader; ret=$?
|
||||
echo "Main Vader: returned $ret"
|
||||
((res |= ret))
|
||||
;;
|
||||
*)
|
||||
echo "Error: invalid type - '$g_type'" 1>&2
|
||||
exit 1
|
||||
esac
|
||||
|
||||
return "$res"
|
||||
}
|
||||
|
||||
|
||||
print_versions() {
|
||||
# Print the names of all vim/nvim versions
|
||||
: 'Print the names of all vim/nvim versions'
|
||||
# Get all possible version <- Dockerfile
|
||||
sed -n 's/.* -name \([^ ]*\) .*/\1/p' ../Dockerfile
|
||||
exit 0
|
||||
@@ -65,33 +195,36 @@ print_versions() {
|
||||
|
||||
|
||||
run_vader() {
|
||||
# Run Vader tests
|
||||
: 'Run Vader tests'
|
||||
echo -e "\nStarting Vader tests."
|
||||
local err=0
|
||||
local -i res=0
|
||||
local opt='' current_test=''
|
||||
|
||||
echo "Tin 1 $g_file_test"
|
||||
# Parse tests files to execute
|
||||
if [[ -z $file_test ]]; then
|
||||
res="test/*"
|
||||
if [[ -z "$g_file_test" ]]; then
|
||||
opt="test/*"
|
||||
else
|
||||
read -ra TEST <<< "$file_test"
|
||||
for i in "${TEST[@]}"; do
|
||||
read -ra TEST <<< "$g_file_test"
|
||||
for current_test in "${TEST[@]}"; do
|
||||
# Remove quotes
|
||||
i=${i#\'}
|
||||
i=${i%\'}
|
||||
if [[ "$i" == *"*"* ]]; then
|
||||
res="$res test/${i}"
|
||||
elif [[ -f "$i" ]]; then
|
||||
res="$res test/${i}"
|
||||
elif [[ -f "${i}.vader" ]]; then
|
||||
res="$res test/${i}.vader"
|
||||
current_test=${current_test#\'}
|
||||
current_test=${current_test%\'}
|
||||
if [[ "$current_test" == *"*"* ]]; then
|
||||
opt+=" test/${current_test}"
|
||||
elif [[ -f "$current_test" ]]; then
|
||||
opt+=" test/${current_test}"
|
||||
elif [[ -f "${current_test}.vader" ]]; then
|
||||
opt+=" test/${current_test}.vader"
|
||||
else
|
||||
printf "WARNING: Test \"%s\" not found.\n", "$i"
|
||||
printf "WARNING: Test \"%s\" not found.\n", "$current_test"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
echo "Tin 2 $opt"
|
||||
|
||||
# Run tests for each specified version
|
||||
for v in $vers; do
|
||||
for v in $g_vers; do
|
||||
echo -e "\n\nRunning version: $v"
|
||||
echo -e "============================="
|
||||
|
||||
@@ -101,14 +234,14 @@ run_vader() {
|
||||
home_save="$HOME"
|
||||
|
||||
# Create temporary root
|
||||
mkdir -p "$tmp_dir/vader_wiki"
|
||||
mkdir -p "$tmp_dir/vader_wiki/home"
|
||||
mkdir -p "$tmp_dir/vader_wiki/home/test"
|
||||
mkdir -p "$tmp_dir/vader_wiki/testplugin"
|
||||
mkdir -p "$g_tmp_dir/vader_wiki"
|
||||
mkdir -p "$g_tmp_dir/vader_wiki/home"
|
||||
mkdir -p "$g_tmp_dir/vader_wiki/home/test"
|
||||
mkdir -p "$g_tmp_dir/vader_wiki/testplugin"
|
||||
|
||||
# Set vars
|
||||
export ROOT="$tmp_dir/vader_wiki/"
|
||||
export HOME="$tmp_dir/vader_wiki/home"
|
||||
export ROOT="$g_tmp_dir/vader_wiki/"
|
||||
export HOME="$g_tmp_dir/vader_wiki/home"
|
||||
vim="vim"
|
||||
vim_opt="-u ~/test/vimrc"
|
||||
else
|
||||
@@ -134,11 +267,11 @@ run_vader() {
|
||||
# flags=(--rm -v "$PWD/../:/testplugin" -v "$PWD/../test:/home" -w /testplugin vimwiki)
|
||||
echo -e "\nCopying resources to $ROOT"
|
||||
# Copy testplugin
|
||||
cp -rf "$wiki_path/"* "$ROOT/testplugin/"
|
||||
cp -rf "$g_wiki_path/"* "$ROOT/testplugin/"
|
||||
# Copy home
|
||||
cp -rf "$script_path/"* "$HOME/test/"
|
||||
cp -rf "$g_script_path/"* "$HOME/test/"
|
||||
# Copy rtp.vim
|
||||
cp -rf "$script_path/resources/rtp_local.vim" "$ROOT/rtp.vim"
|
||||
cp -rf "$g_script_path/resources/rtp_local.vim" "$ROOT/rtp.vim"
|
||||
# Copy vader <- internet
|
||||
echo 'Cloning Vader (git, do not care the fatal)'
|
||||
git clone --depth 10 https://github.com/junegunn/vader.vim /tmp/vader_wiki/vader 2>&1
|
||||
@@ -146,113 +279,119 @@ run_vader() {
|
||||
|
||||
# Run batch of tests
|
||||
# shellcheck disable=SC2086,SC2206
|
||||
if [[ "$res" != "" ]]; then
|
||||
if [[ "$opt" != "" ]]; then
|
||||
if [[ "$v" == "local" ]]; then
|
||||
pushd "$tmp_dir/vader_wiki/testplugin" \
|
||||
pushd "$g_tmp_dir/vader_wiki/testplugin" \
|
||||
|| echo 'Warning pushd testplugin failed'
|
||||
|
||||
# Run the tests
|
||||
fcmd(){
|
||||
$vim $vim_opt "+Vader! ${res}" 2>&1 \
|
||||
$vim $vim_opt "+Vader! ${opt}" 2>&1 \
|
||||
| vader_filter | vader_color
|
||||
return ${PIPESTATUS[1]}
|
||||
}
|
||||
echo -e "\nStarting Batch Vim/Vader:\n<- $res\n"
|
||||
echo -e "\nStarting Batch Vim/Vader:\n<- $opt\n"
|
||||
type fcmd | sed -n '/^ /{s/^ //p}' | sed '$s/.*/&;/' ; shift ;
|
||||
fcmd; ret=$?
|
||||
err=$(( err + ret ))
|
||||
echo -e "\nReturned Batch Vim/Vader -> $ret"
|
||||
(( res |= ret ))
|
||||
|
||||
popd \
|
||||
|| echo 'Warning popd also failed'
|
||||
popd || echo 'Warning popd failed'
|
||||
else
|
||||
# In docker
|
||||
fcmd() {
|
||||
docker run -a stderr -e "VADER_OUTPUT_FILE=/dev/stderr" \
|
||||
"${flags[@]}" "$v" $vim_opt "+Vader! ${res}" 2>&1 \
|
||||
"${flags[@]}" "$v" $vim_opt "+Vader! ${opt}" 2>&1 \
|
||||
| vader_filter | vader_color
|
||||
return ${PIPESTATUS[1]}
|
||||
}
|
||||
echo -e "\nStarting Batch Vim/Vader:\n<- $res\n"
|
||||
echo -e "\nStarting Batch Vim/Vader with: $opt\n"
|
||||
type fcmd | sed -n '/^ /{s/^ //p}' | sed '$s/.*/&;/' ; shift ;
|
||||
fcmd; ret=$?
|
||||
err=$(( err + ret ))
|
||||
echo -e "\nReturned Batch Docker/Vim/Vader -> $ret : ${PIPESTATUS[*]}"
|
||||
(( res |= ret ))
|
||||
fi
|
||||
fi
|
||||
|
||||
#set +o pipefail
|
||||
|
||||
# Restore what must (I know it should be refactored in a while)
|
||||
if [[ "$v" == "local" ]]; then
|
||||
if [[ "$v" == local ]]; then
|
||||
export HOME=$home_save
|
||||
fi
|
||||
done
|
||||
return $err
|
||||
return "$res"
|
||||
}
|
||||
|
||||
|
||||
run_vint() {
|
||||
local err=0
|
||||
cmd="vint -s . && vint -s test/vimrc"
|
||||
if echo "$vers" | grep "local" > /dev/null; then
|
||||
echo -e "\nRunning Vint: $cmd : in $wiki_path"
|
||||
pushd "$wiki_path" > /dev/null \
|
||||
: 'Run Vint test'
|
||||
local -i res=0
|
||||
|
||||
local cmd="vint -s . && vint -s test/vimrc"
|
||||
|
||||
if echo "$g_vers" | grep "local" > /dev/null; then
|
||||
echo -e "\nRunning Vint: $cmd : in $g_wiki_path"
|
||||
pushd "$g_wiki_path" > /dev/null \
|
||||
|| echo 'Warning pushd wiki_path failed'
|
||||
$cmd
|
||||
err=$(( err | $? ))
|
||||
res=$(( res | $? ))
|
||||
popd > /dev/null \
|
||||
|| echo 'Warning popd also failed'
|
||||
else
|
||||
echo -e "\nStarting Docker container and running Vint: $cmd"
|
||||
docker run -a stdout "${flags[@]}" bash -c "$cmd"
|
||||
err=$(( err | $? ))
|
||||
res=$(( res | $? ))
|
||||
fi
|
||||
return $err
|
||||
|
||||
return "$res"
|
||||
}
|
||||
|
||||
|
||||
vader_filter() {
|
||||
# Filter Vader Stdout
|
||||
local err=0
|
||||
# Keep indentation
|
||||
local IFS=''
|
||||
while read -r REPLY; do
|
||||
# Print only possible error cases
|
||||
if [[ "$REPLY" = *'docker:'* ]] || \
|
||||
[[ "$REPLY" = *'Starting Vader:'* ]] || \
|
||||
[[ "$REPLY" = *'Vader error:'* ]] || \
|
||||
[[ "$REPLY" = *'Vim: Error '* ]]; then
|
||||
echo "$REPLY"
|
||||
elif [[ "$REPLY" = *'[EXECUTE] (X)'* ]] || \
|
||||
[[ "$REPLY" = *'[ DO] (X)'* ]] || \
|
||||
[[ "$REPLY" = *'[ EXPECT] (X)'* ]]; then
|
||||
echo -e "$red$REPLY$nc"
|
||||
err=1
|
||||
elif [[ "$REPLY" = *'Success/Total:'* ]]; then
|
||||
success="$(echo -n "$REPLY" | grep -o '[0-9]\+/' | head -n1 | cut -d/ -f1)"
|
||||
total="$(echo -n "$REPLY" | grep -o '/[0-9]\+' | head -n1 | cut -d/ -f2)"
|
||||
if [ "$success" -lt "$total" ]; then
|
||||
err=1
|
||||
fi
|
||||
echo "$REPLY"
|
||||
elif [[ "$verbose" != 0 ]]; then
|
||||
# just print everything
|
||||
echo "$REPLY"
|
||||
fi
|
||||
done
|
||||
: 'Pipe Helper: Filter Vader Stdout'
|
||||
local -i res=0
|
||||
# Keep indentation
|
||||
local IFS=''
|
||||
|
||||
if [[ "$err" == 1 ]]; then
|
||||
echo -e "\033[0;31m"
|
||||
echo -e "!---------Failed tests detected---------!"
|
||||
echo -e "Run with the '-v' flag for verbose output"
|
||||
echo -e "\033[0m"
|
||||
while read -r REPLY; do
|
||||
# Print only possible error cases
|
||||
if [[ "$REPLY" = *'docker:'* ]] || \
|
||||
[[ "$REPLY" = *'Starting Vader:'* ]] || \
|
||||
[[ "$REPLY" = *'Vader error:'* ]] || \
|
||||
[[ "$REPLY" = *'Vim: Error '* ]]; then
|
||||
echo "$REPLY"
|
||||
elif [[ "$REPLY" = *'[EXECUTE] (X)'* ]] || \
|
||||
[[ "$REPLY" = *'[ DO] (X)'* ]] || \
|
||||
[[ "$REPLY" = *'[ EXPECT] (X)'* ]]; then
|
||||
echo -e "$red$REPLY$nc"
|
||||
res=1
|
||||
elif [[ "$REPLY" = *'Success/Total:'* ]]; then
|
||||
success="$(echo -n "$REPLY" | grep -o '[0-9]\+/' | head -n1 | cut -d/ -f1)"
|
||||
total="$(echo -n "$REPLY" | grep -o '/[0-9]\+' | head -n1 | cut -d/ -f2)"
|
||||
if [ "$success" -lt "$total" ]; then
|
||||
res=1
|
||||
fi
|
||||
echo "$REPLY"
|
||||
elif [[ "$g_verbose" != 0 ]]; then
|
||||
# just print everything
|
||||
echo "$REPLY"
|
||||
fi
|
||||
return $err
|
||||
done
|
||||
|
||||
if (( res == 1 )); then
|
||||
echo -e "\033[0;31m"
|
||||
echo -e "!---------Failed tests detected---------!"
|
||||
echo -e "Run with the '-v' flag for verbose output"
|
||||
echo -e "\033[0m"
|
||||
fi
|
||||
|
||||
return "$res"
|
||||
}
|
||||
|
||||
|
||||
vader_color() {
|
||||
: 'Pipe Helper: Filter to add color to Vader'
|
||||
while read -r; do
|
||||
if [[ "$REPLY" = *'[EXECUTE] (X)'* ]] || \
|
||||
[[ "$REPLY" = *'[ EXPECT] (X)'* ]] || \
|
||||
@@ -283,103 +422,7 @@ vader_color() {
|
||||
echo -en "$nc"
|
||||
}
|
||||
|
||||
# path of the script, supposing no spaces
|
||||
script_file="$(dirname "$0")"
|
||||
script_path="$( realpath "$script_file" )"
|
||||
wiki_path="$( realpath "$script_path/.." )"
|
||||
tmp_dir="$(dirname "$(mktemp -u)")"
|
||||
|
||||
# list of vim/nvim versions
|
||||
vers="$(print_versions)"
|
||||
|
||||
# type of tests to run - vader/vint/all
|
||||
type="all"
|
||||
|
||||
# verbose output flag
|
||||
verbose=0
|
||||
|
||||
# only run these tests
|
||||
file_test=""
|
||||
|
||||
# docker flags
|
||||
flags=(--rm -v "$PWD/../:/testplugin" -v "$PWD/../test:/home" -w /testplugin vimwiki)
|
||||
|
||||
while getopts ":hvn:lt:f:" opt; do
|
||||
case ${opt} in
|
||||
h)
|
||||
printHelp
|
||||
;;
|
||||
n)
|
||||
vers="$OPTARG"
|
||||
;;
|
||||
v)
|
||||
verbose=1
|
||||
;;
|
||||
l)
|
||||
print_versions
|
||||
;;
|
||||
t)
|
||||
type="$OPTARG"
|
||||
;;
|
||||
f)
|
||||
file_test="$OPTARG"
|
||||
;;
|
||||
\?)
|
||||
echo "Invalid option: $OPTARG" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
:)
|
||||
echo "Invalid option: $OPTARG requires an argument" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# shift out processed parameters
|
||||
shift $((OPTIND -1))
|
||||
|
||||
# error handling for non-option arguments
|
||||
if [[ $# -ne 0 ]]; then
|
||||
echo "Error: Got $# non-option arguments." 1>&2
|
||||
exit 1
|
||||
if ! (return 0 2>/dev/null); then
|
||||
run_test "$@"; exit $?
|
||||
fi
|
||||
|
||||
# stop tests on ctrl-c or ctrl-z
|
||||
trap exit 1 SIGINT SIGTERM
|
||||
|
||||
# Global error return of the script
|
||||
o_error=0
|
||||
|
||||
# Select which tests should run
|
||||
case $type in
|
||||
vader)
|
||||
run_vader ; err=$?
|
||||
echo "Main Vader: returned $err"
|
||||
o_error=$(( err | o_error ))
|
||||
;;
|
||||
vint)
|
||||
run_vint ; err=$?
|
||||
echo "Main Vint: returned $err"
|
||||
o_error=$(( err | o_error ))
|
||||
;;
|
||||
all)
|
||||
run_vint ; err=$?
|
||||
echo "Main Vint: returned $err"
|
||||
o_error=$(( err | o_error ))
|
||||
run_vader ; err=$?
|
||||
echo "Main Vader: returned $err"
|
||||
o_error=$(( err | o_error ))
|
||||
;;
|
||||
*)
|
||||
echo "Error: invalid type - '$type'" 1>&2
|
||||
exit 1
|
||||
esac
|
||||
|
||||
# Calcultate time
|
||||
end_time=$(date +%s)
|
||||
sec_time=$((end_time - start_time))
|
||||
printf -v script_time '%dh:%dm:%ds' $((sec_time/3600)) $((sec_time%3600/60)) $((sec_time%60))
|
||||
|
||||
# Exit
|
||||
echo -ne "Script $(basename "$0"), in $script_time, Returned -> $o_error\n\n"
|
||||
exit $o_error
|
||||
|
||||
+6
-1
@@ -7,10 +7,16 @@ Execute (Setup search testing wrapper):
|
||||
Log 'Cheating for old vim version, do not want to reverse bug'
|
||||
return
|
||||
endif
|
||||
|
||||
" Execute command and grab output
|
||||
redir => output
|
||||
silent execute a:search_command
|
||||
redir END
|
||||
|
||||
" The location list should not be empty
|
||||
Assert !empty(getloclist(0)), a:test_name.": no location list result"
|
||||
|
||||
" The location list should contains entries
|
||||
Assert match(output, '\d of \d') > -1, a:test_name.": no result message"
|
||||
|
||||
" Tests that VimwikiSearch is quoting the pattern correctly.
|
||||
@@ -30,7 +36,6 @@ Execute (Search test wiki):
|
||||
AssertEqual "= Test Wiki =", getline(1)
|
||||
AssertEqual "vimwiki", &filetype
|
||||
|
||||
|
||||
call TestSearch('VimwikiSearch foo', 'pattern with no spaces')
|
||||
call TestSearch('VimwikiSearch foo bar', 'pattern with spaces')
|
||||
call TestSearch('VimwikiSearch foo\bar', 'pattern with ''\''')
|
||||
|
||||
+30
-7
@@ -4,6 +4,27 @@
|
||||
# 0 Escape {{{1
|
||||
#################
|
||||
|
||||
Given vimwiki (Most easy typeface):
|
||||
1. 567890123
|
||||
2. __bold__
|
||||
3. *Italic*
|
||||
4. ***Bold Italic***
|
||||
5. ~~Strikethrough~~
|
||||
6. <sub>Subscript</sub>
|
||||
7. <sup>Superscript</sup>
|
||||
|
||||
Execute (Set syntax markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax basic typeface):
|
||||
AssertEqual '1' , SyntaxAt(1, 9) . 1
|
||||
AssertEqual 'VimwikiBold2' , SyntaxAt(2, 9) . 2
|
||||
AssertEqual 'VimwikiItalic3' , SyntaxAt(3, 9) . 3
|
||||
AssertEqual 'VimwikiBoldItalic4' , SyntaxAt(4, 9) . 4
|
||||
AssertEqual 'VimwikiDelText5' , SyntaxAt(5, 9) . 5
|
||||
AssertEqual 'VimwikiSubScript6' , SyntaxAt(6, 9) . 6
|
||||
AssertEqual 'VimwikiSuperScript7', SyntaxAt(7, 9) . 7
|
||||
|
||||
Given vimwiki (Markdown typeface with escape sequence #1044: _ __ * ** {{{2):
|
||||
This is 14 | 1
|
||||
__bold from begining__ 2
|
||||
@@ -16,6 +37,7 @@ Given vimwiki (Markdown typeface with escape sequence #1044: _ __ * ** {{{2):
|
||||
a ~~staaill deleted~~ Del 9
|
||||
$$Eq\$$ uation follows$ Math 10
|
||||
`code \` not finished inline` Code 11
|
||||
012345678901234567890
|
||||
|
||||
Execute (Set syntax markdown):
|
||||
call SetSyntax('markdown')
|
||||
@@ -27,7 +49,8 @@ Execute (Assert Syntax of escape typeface):
|
||||
AssertEqual 'VimwikiBold4' , SyntaxAt(4, 14) . 4
|
||||
AssertEqual 'VimwikiItalic5' , SyntaxAt(5, 14) . 5
|
||||
" See: #1303 where an escape start can close the region
|
||||
AssertEqual '6' , SyntaxAt(6, 14) . 6
|
||||
" Fixed removing vars.vim::expand_delimiter
|
||||
AssertEqual 'VimwikiItalic6' , SyntaxAt(6, 14) . 6
|
||||
AssertEqual 'VimwikiSuperScript7', SyntaxAt(7, 14) . 7
|
||||
AssertEqual 'VimwikiSubScript8' , SyntaxAt(8, 14) . 8
|
||||
AssertEqual 'VimwikiDelText9' , SyntaxAt(9, 14) . 9
|
||||
@@ -172,7 +195,7 @@ Execute (Assert Done Syntax 2):
|
||||
Given vimwiki (Extended Types mono):
|
||||
`code `
|
||||
~~ strike ~~
|
||||
$ equation $
|
||||
$equation$
|
||||
^superscript ^
|
||||
,, subscript ,,
|
||||
|
||||
@@ -190,7 +213,7 @@ Execute (Assert Syntax extended types x 1):
|
||||
Given vimwiki (Extended Types nested in basic):
|
||||
From __bold `code in bold ` end of bold__ morF
|
||||
From _it and ~~ strieout in i~~ end of it_ morF
|
||||
From __bold $ equation $ end bold __
|
||||
From __bold $equation$ end bold __
|
||||
**bold ^superscript ^ end of bold morF**
|
||||
From normal ,, subscript ,, still normal morF
|
||||
|
||||
@@ -207,7 +230,7 @@ Execute (Assert Syntax extended types x 2):
|
||||
Given vimwiki (Extended Types nested in extended):
|
||||
From ^super to`code this ` is crazy but^ morF
|
||||
From ,,sub to~~ strike ~~why not,, morF
|
||||
From ~~strike $ equation $ end of strike~~morF
|
||||
From ~~strike $eequationeeeee$ end of strike~~morF
|
||||
From $eq to ^super ^ Just inline morF$
|
||||
From ^super t,,sub ,, end super eol ^
|
||||
|
||||
@@ -224,7 +247,7 @@ Execute (Assert Syntax extended types nested in extended):
|
||||
Given vimwiki (Basic Types nested in extended):
|
||||
From ^super __bold __ is crazy but^ morF
|
||||
From ,,sub _italic with en_ aaaaaaa,, morF
|
||||
From $eq to **boldboldboldbo** aaaaaaaaa $
|
||||
From $eq to **boldboldboldbo** aaaaaaaaa$ $
|
||||
From ^super *italic aaaaaaa*aaaaaaaaaaaaaaaaaaaaa
|
||||
From ~~strik __bbbbbbbbbbbbb__ssssssssssssssssss~~
|
||||
|
||||
@@ -721,7 +744,7 @@ Execute (Assert Code syntax):
|
||||
#######################
|
||||
|
||||
Given vimwiki (Math markdown):
|
||||
math inline: $ aaaaaaaaaaaaaa \sum_i a_i^2 = 1 $
|
||||
math inline: $aaaaaaaaaaaaaaa \sum_i a_i^2 = 1 end$
|
||||
|
||||
math block:
|
||||
$$
|
||||
@@ -751,7 +774,7 @@ Execute (Assert math syntax 1):
|
||||
##############################
|
||||
|
||||
Given vimwiki (Math wiki):
|
||||
math inline: $aaaaaaaaaaaaaaaaaaaaaaaaaa \sum_i a_i^2 = 1 $
|
||||
math inline: $aaaaaaaaaaaaaaaaaaaaaaaaaa \sum_i a_i^2 = 1$
|
||||
|
||||
math block:
|
||||
{{$
|
||||
|
||||
@@ -166,6 +166,718 @@ Execute (Assert Syntax):
|
||||
|
||||
|
||||
# Rule 3 {{{1
|
||||
# TODO Test 3
|
||||
# A single * character can close emphasis iff it is part of a right-flanking delimiter run.
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-374):
|
||||
_foo*
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'This is not emphasis, in theory (1), IDEA change that'
|
||||
Log 'But Vim reion implementation is highlitghing it anyway, it would be nice to change that'
|
||||
Log 'Note: The decision to start a region is only based on a matching start pattern. There is no check for a matching end pattern.'
|
||||
AssertEqual 'VimwikiItalic', SyntaxAt(1, 3)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-375):
|
||||
*foo bar *
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'This is not emphasis, in theory (2), IDEA change that'
|
||||
AssertEqual 'VimwikiItalic', SyntaxAt(1, 3)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-376):
|
||||
*foo bar
|
||||
*
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'This is not emphasis, in theory (2), IDEA change that'
|
||||
AssertEqual 'VimwikiItalic', SyntaxAt(1, 3)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-377):
|
||||
*(*foo)
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'This is not emphasis, because the second * is preceded by punctuation and followed by an alphanumeric (hence it is not part of a right-flanking delimiter, in theory, IDEA Change that'
|
||||
AssertEqual 'VimwikiItalic', SyntaxAt(1, 2)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-378):
|
||||
*(*foo*)*
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'The point of this restriction is more easily appreciated with this example, IDEA Change that'
|
||||
AssertEqual 'VimwikiItalic', SyntaxAt(1, 2)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-379):
|
||||
*foo*bar
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Intraword emphasis with * is allowed'
|
||||
AssertEqual 'VimwikiItalic', SyntaxAt(1, 3)
|
||||
|
||||
|
||||
# Rule 4 {{{1
|
||||
# A single _ character can close emphasis iff it is part of a right-flanking delimiter run and either (a) not part of a left-flanking delimiter run or (b) part of a left-flanking delimiter run followed by punctuation.
|
||||
|
||||
|
||||
# Rule 5 {{{1
|
||||
# A double ** can open strong emphasis iff it is part of a left-flanking delimiter run.
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-387):
|
||||
**foo bar**
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Easy bold'
|
||||
AssertEqual 'VimwikiBold', SyntaxAt(1, 3)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-388):
|
||||
** foo bar**
|
||||
12345
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'This is not strong emphasis, because the opening delimiter is followed by whitespace'
|
||||
AssertEqual '', SyntaxAt(1, 5)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-389):
|
||||
a**"foo"**
|
||||
123456
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'This is not strong emphasis, because the opening ** is preceded by an alphanumeric and followed by punctuation, and hence not part of a left-flanking delimiter'
|
||||
AssertEqual '', SyntaxAt(1, 5)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-390):
|
||||
foo**bar**
|
||||
1234567890
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Intraword strong emphasis with ** is permitted'
|
||||
AssertEqual 'VimwikiBold', SyntaxAt(1, 7)
|
||||
AssertEqual '', SyntaxAt(2, 7)
|
||||
|
||||
|
||||
# Rule 6 {{{1
|
||||
# A double __ can open strong emphasis iff it is part of a left-flanking delimiter run and either (a) not part of a right-flanking delimiter run or (b) part of a right-flanking delimiter run preceded by punctuation.
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-391):
|
||||
__foo bar__
|
||||
1234567890
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Bold with __'
|
||||
AssertEqual 'VimwikiBold', SyntaxAt(1, 4)
|
||||
AssertEqual '', SyntaxAt(2, 7)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-392):
|
||||
__ foo bar__
|
||||
1234567890
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'This is not strong emphasis, because the opening delimiter is followed by whitespace'
|
||||
AssertEqual '', SyntaxAt(1, 4)
|
||||
AssertEqual '', SyntaxAt(2, 7)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-393):
|
||||
__
|
||||
foo bar__
|
||||
1234567890
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'A newline counts as whitespace'
|
||||
AssertEqual '', SyntaxAt(2, 4)
|
||||
AssertEqual '', SyntaxAt(3, 7)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-394):
|
||||
a__"foo"__
|
||||
1234567890
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'This is not strong emphasis, because the opening __ is preceded by an alphanumeric and followed by punctuation'
|
||||
AssertEqual '', SyntaxAt(1, 6)
|
||||
AssertEqual '', SyntaxAt(2, 7)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-395):
|
||||
foo__bar__
|
||||
1234567890
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Intraword strong emphasis is forbidden with __'
|
||||
AssertEqual '', SyntaxAt(1, 7)
|
||||
AssertEqual '', SyntaxAt(2, 7)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-395):
|
||||
5__6__78
|
||||
1234567890
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Intraword strong emphasis is forbidden with __ (2)'
|
||||
AssertEqual '', SyntaxAt(1, 4)
|
||||
AssertEqual '', SyntaxAt(2, 7)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-397):
|
||||
пристаням__стремятся__
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Intraword strong emphasis is forbidden with __ (3)'
|
||||
AssertEqual '', SyntaxAt(1, 13)
|
||||
AssertEqual '', SyntaxAt(2, 7)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-398):
|
||||
__foo, __bar__, baz__
|
||||
1234567890
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
AssertEqual 'VimwikiBold', SyntaxAt(1, 4)
|
||||
AssertEqual '', SyntaxAt(2, 7)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-399):
|
||||
foo-__(bar)__
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'This is strong emphasis, even though the opening delimiter is both left- and right-flanking, because it is preceded by punctuation'
|
||||
AssertEqual 'VimwikiBold', SyntaxAt(1, 9)
|
||||
AssertEqual '', SyntaxAt(2, 7)
|
||||
|
||||
|
||||
# Rule 7 {{{1
|
||||
# A double ** can close strong emphasis iff it is part of a right-flanking delimiter run.
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-400):
|
||||
**foo bar **
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Rule 7: Passed: IDEA improve that'
|
||||
AssertEqual 0, 0
|
||||
|
||||
|
||||
# Rule 8 {{{1
|
||||
# A double __ can close strong emphasis iff it is part of a right-flanking delimiter run and either (a) not part of a left-flanking delimiter run or (b) part of a left-flanking delimiter run followed by punctuation.
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-406):
|
||||
__foo bar __
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Rule 8: Passed: IDEA improve that'
|
||||
AssertEqual 0, 0
|
||||
|
||||
|
||||
# Rule 9 {{{1
|
||||
# Emphasis begins with a delimiter that can open emphasis and ends with a delimiter that can close emphasis, and that uses the same character (_ or *) as the opening delimiter. The opening and closing delimiters must belong to separate delimiter runs. If one of the delimiters can both open and close emphasis, then the sum of the lengths of the delimiter runs containing the opening and closing delimiters must not be a multiple of 3 unless both lengths are multiples of 3.
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-413):
|
||||
*foo [bar](/url)*
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Any nonempty sequence of inline elements can be the contents of an emphasized span'
|
||||
AssertEqual 'VimwikiItalic', SyntaxAt(1, 9)
|
||||
AssertEqual '', SyntaxAt(2, 7)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-414):
|
||||
*foo
|
||||
bar*
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Any nonempty sequence of inline elements can be the contents of an emphasized span (2)'
|
||||
AssertEqual 'VimwikiItalic', SyntaxAt(1, 3)
|
||||
AssertEqual 'VimwikiItalic', SyntaxAt(2, 3)
|
||||
AssertEqual '', SyntaxAt(3, 7)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-415):
|
||||
_foo __bar__ baz_
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'In particular, emphasis and strong emphasis can be nested inside emphasis'
|
||||
AssertEqual 'VimwikiItalic', SyntaxAt(1, 3)
|
||||
AssertEqual 'VimwikiItalicBold', SyntaxAt(1, 9)
|
||||
AssertEqual 'VimwikiItalic', SyntaxAt(1, 14)
|
||||
AssertEqual '', SyntaxAt(2, 7)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-416):
|
||||
_foo _bar_ baz_
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'TODO not implemented nested Italic, as the close of one region closes the other'
|
||||
AssertEqual 0, 0
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-425):
|
||||
foo***bar***baz
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Italic Bold'
|
||||
AssertEqual 'VimwikiBoldItalic', SyntaxAt(1, 8)
|
||||
AssertEqual '', SyntaxAt(2, 7)
|
||||
|
||||
|
||||
# Rule 10 {{{1
|
||||
# Strong emphasis begins with a delimiter that can open strong emphasis and ends with a delimiter that can close strong emphasis, and that uses the same character (_ or *) as the opening delimiter. The opening and closing delimiters must belong to separate delimiter runs. If one of the delimiters can both open and close strong emphasis, then the sum of the lengths of the delimiter runs containing the opening and closing delimiters must not be a multiple of 3 unless both lengths are multiples of 3.
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-431):
|
||||
**foo [bar](/url)**
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Any nonempty sequence of inline elements can be the contents of an strongly emphasized span'
|
||||
AssertEqual 'VimwikiBold', SyntaxAt(1, 8)
|
||||
AssertEqual '', SyntaxAt(2, 7)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-432):
|
||||
**foo
|
||||
bar**
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
AssertEqual 'VimwikiBold', SyntaxAt(1, 3)
|
||||
AssertEqual 'VimwikiBold', SyntaxAt(2, 3)
|
||||
AssertEqual '', SyntaxAt(3, 7)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-433):
|
||||
__foo _bar_ baz__
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'In particular, emphasis and strong emphasis can be nested inside strong emphasis'
|
||||
AssertEqual 'VimwikiBold', SyntaxAt(1, 4)
|
||||
AssertEqual 'VimwikiBoldItalic', SyntaxAt(1, 9)
|
||||
AssertEqual 'VimwikiBold', SyntaxAt(1, 14)
|
||||
AssertEqual '', SyntaxAt(2, 7)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-434):
|
||||
__foo __bar__ baz__
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'TODO passed as nested bold is hard'
|
||||
AssertEqual 0, 0
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-437):
|
||||
**foo *bar* baz**
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Same as 433 but with *'
|
||||
AssertEqual 'VimwikiBold', SyntaxAt(1, 4)
|
||||
AssertEqual 'VimwikiBoldItalic', SyntaxAt(1, 9)
|
||||
AssertEqual 'VimwikiBold', SyntaxAt(1, 14)
|
||||
AssertEqual '', SyntaxAt(2, 7)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-443):
|
||||
__ is not an empty emphasis
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'There can be no empty emphasis or strong emphasis:'
|
||||
AssertEqual '', SyntaxAt(1, 4)
|
||||
AssertEqual '', SyntaxAt(2, 7)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-444):
|
||||
____ is not an empty strong emphasis
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'TODO: There can be no empty emphasis or strong emphasis (2)'
|
||||
AssertEqual 0, 0
|
||||
|
||||
|
||||
# Rule 11 {{{1
|
||||
# A literal * character cannot occur at the beginning or end of *-delimited emphasis or **-delimited strong emphasis, unless it is backslash-escaped.
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-445):
|
||||
foo ***
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Empty emphasis'
|
||||
AssertEqual '1', SyntaxAt(1, 1) . 1
|
||||
AssertEqual '2', SyntaxAt(2, 1) . 2
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-446):
|
||||
foo *\**
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Emphasis an escaped *'
|
||||
AssertEqual '', SyntaxAt(1, 1)
|
||||
AssertEqual 'VimwikiItalic', SyntaxAt(1, 7)
|
||||
AssertEqual '', SyntaxAt(2, 1)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-447):
|
||||
foo *_*
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Emphasis a lonely _'
|
||||
Log 'TODO, this is bold italic for now as we got it as special case'
|
||||
AssertEqual 0, 0
|
||||
# AssertEqual 'VimwikiItalic', SyntaxAt(1, 6)
|
||||
# AssertEqual '', SyntaxAt(2, 1)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-448):
|
||||
foo *****
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Nothing happen'
|
||||
let var = SyntaxAt(1, 7)
|
||||
AssertEqual 1, var == '' || var == 'VimwikiDelimiter'
|
||||
AssertEqual '', SyntaxAt(2, 1)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-449):
|
||||
foo **\***
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Emphasis a lonely *'
|
||||
AssertEqual 'VimwikiBold', SyntaxAt(1, 8)
|
||||
AssertEqual '', SyntaxAt(2, 1)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-450):
|
||||
foo **_**
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'TODO'
|
||||
AssertEqual 0, 0
|
||||
# CommentLine 'Bold a single _ between **'
|
||||
# AssertEqual 'VimwikiBold', SyntaxAt(1, 7)
|
||||
# AssertEqual '', SyntaxAt(2, 1)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-451):
|
||||
**foo*
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'IDEA: the rest is for haskell or yacc more than vim'
|
||||
AssertEqual 0, 0
|
||||
# AssertEqual '', SyntaxAt(2, 1)
|
||||
|
||||
|
||||
|
||||
# Rule 12 {{{1
|
||||
# A literal _ character cannot occur at the beginning or end of _-delimited emphasis or __-delimited strong emphasis, unless it is backslash-escaped.
|
||||
|
||||
|
||||
# Rule 13 {{{1
|
||||
# The number of nestings should be minimized. Thus, for example, an interpretation <strong>...</strong> is always preferred to <em><em>...</em></em>.
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-469):
|
||||
**foo**
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Basic bold'
|
||||
AssertEqual 'VimwikiBold', SyntaxAt(1, 4)
|
||||
AssertEqual '', SyntaxAt(2, 1)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-470):
|
||||
*_foo_*
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'TODO Change that'
|
||||
AssertEqual 0, 0
|
||||
# CommentLine 'Double italic'
|
||||
# AssertEqual 'VimwikiItalic', SyntaxAt(1, 4)
|
||||
# AssertEqual '', SyntaxAt(2, 1)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-471):
|
||||
__foo__
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Basic bold (2)'
|
||||
AssertEqual 'VimwikiBold', SyntaxAt(1, 4)
|
||||
AssertEqual '', SyntaxAt(2, 1)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-472):
|
||||
_*foo*_
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Double italic (2)'
|
||||
AssertEqual 'VimwikiItalic', SyntaxAt(1, 4)
|
||||
AssertEqual '', SyntaxAt(2, 4)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-473):
|
||||
****foo****
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Double bold with ****'
|
||||
AssertEqual 'VimwikiBold', SyntaxAt(1, 6)
|
||||
AssertEqual '', SyntaxAt(2, 1)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-474):
|
||||
____foo____
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Double bold with ____'
|
||||
AssertEqual 'VimwikiBold', SyntaxAt(1, 6)
|
||||
AssertEqual '', SyntaxAt(2, 1)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-475):
|
||||
******foo******
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Triple bold with ******'
|
||||
AssertEqual 'VimwikiBold', SyntaxAt(1, 8)
|
||||
AssertEqual '', SyntaxAt(2, 1)
|
||||
|
||||
|
||||
# Rule 14 {{{1
|
||||
# An interpretation <em><strong>...</strong></em> is always preferred to <strong><em>...</em></strong>.
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-476):
|
||||
***foo***
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Bold Italic normal, with 3 *'
|
||||
AssertEqual 'VimwikiBoldItalic', SyntaxAt(1, 5)
|
||||
AssertEqual '', SyntaxAt(2, 1)
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-477):
|
||||
_____foo_____
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'Bold Italic with 5 _'
|
||||
CommentLine 'TODO Passed'
|
||||
# AssertEqual 'VimwikiBoldItalic', SyntaxAt(1, 7)
|
||||
# AssertEqual '', SyntaxAt(2, 1)
|
||||
|
||||
|
||||
# Rule 15 {{{1
|
||||
# When two potential emphasis or strong emphasis spans overlap, so that the second begins before the first ends and ends after the first ends, the first takes precedence. Thus, for example, *foo _bar* baz_ is parsed as <em>foo _bar</em> baz_ rather than *foo <em>bar* baz</em>.
|
||||
|
||||
|
||||
# Rule 16 {{{1
|
||||
# When there are two potential emphasis or strong emphasis spans with the same closing delimiter, the shorter one (the one that opens later) takes precedence. Thus, for example, **foo **bar baz** is parsed as **foo <strong>bar baz</strong> rather than <strong>foo **bar baz</strong>.
|
||||
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-480):
|
||||
**foo **bar baz**
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'All bold as the ** inside is not closing, Passed as vimwiki do not follow the spec'
|
||||
AssertEqual 0, 0
|
||||
# CommentLine 'Double bold (2)'
|
||||
# AssertEqual 'VimwikiBold', SyntaxAt(1, 6)
|
||||
# AssertEqual '', SyntaxAt(2, 1)
|
||||
|
||||
# Rule 17 {{{1
|
||||
# Inline code spans, links, images, and HTML tags group more tightly than emphasis. So, when there is a choice between an interpretation that contains one of these elements and one that does not, the former always wins. Thus, for example, *[foo*](bar) is parsed as *<a href="bar">foo*</a> rather than as <em>[foo</em>](bar).
|
||||
|
||||
Given vimwiki (Typeface: https://github.github.com/gfm/#example-485):
|
||||
*a `*` b*
|
||||
*a `a a*a a` b*
|
||||
12345678901234
|
||||
|
||||
Execute (Set Markdown):
|
||||
call SetSyntax('markdown')
|
||||
|
||||
Execute (Assert Syntax):
|
||||
CommentLine 'TODO with a * as unique code, a nice trap'
|
||||
AssertEqual 0, 0
|
||||
|
||||
|
||||
# vim: foldmethod=marker foldlevel=30 sw=2
|
||||
|
||||
+250
@@ -4,6 +4,95 @@
|
||||
Execute (Setup):
|
||||
set sw=4
|
||||
AssertEqual 4, &sw
|
||||
call system("rm $HOME/testmarkdown/.vimwiki_tags")
|
||||
|
||||
|
||||
######################################################################
|
||||
Do (Create File Content with default tags {{{1):
|
||||
:edit $HOME/testmarkdown/Test-Tag-default.md\<CR>
|
||||
I
|
||||
:tag1:tag2:\<CR>
|
||||
\<Esc>
|
||||
:write\<CR>
|
||||
:VimwikiRebuildTags!\<CR>
|
||||
:VimwikiGenerateTagLinks\<CR>
|
||||
gg
|
||||
|
||||
|
||||
Execute (Generate tags for default):
|
||||
edit $HOME/testmarkdown/Test-Tag-default.md
|
||||
AssertEqual 'VimwikiTag', SyntaxAt(1, 2)
|
||||
1
|
||||
VimwikiGenerateTagLinks
|
||||
write
|
||||
|
||||
|
||||
Expect (Tags default):
|
||||
:tag1:tag2:
|
||||
|
||||
|
||||
# Generated Tags
|
||||
|
||||
## tag1
|
||||
|
||||
- [Test-Tag-default](Test-Tag-default)
|
||||
|
||||
## tag2
|
||||
|
||||
- [Test-Tag-default](Test-Tag-default)
|
||||
|
||||
|
||||
Execute (Clean tag file for default):
|
||||
call system("rm $HOME/testmarkdown/.vimwiki_tags")
|
||||
|
||||
|
||||
Do (Create File Content with default tags):
|
||||
:edit $HOME/testmarkdown/Test-Tag-default.md\<CR>
|
||||
ggdG
|
||||
I
|
||||
# Generated Tags\<Cr>
|
||||
\<Cr>
|
||||
# Heading with my tags\<Cr>
|
||||
\<Cr>
|
||||
:tag1:tag2:\<CR>
|
||||
\<Cr>
|
||||
Dummy content 1
|
||||
\<Cr>
|
||||
# Another heading\<Cr>
|
||||
\<Cr>
|
||||
Dummy content 2
|
||||
\<Esc>
|
||||
:write\<CR>
|
||||
:VimwikiRebuildTags!\<CR>
|
||||
:VimwikiGenerateTagLinks\<CR>
|
||||
gg
|
||||
|
||||
|
||||
Expect (Tags default with Generated Tags heading):
|
||||
# Generated Tags
|
||||
|
||||
## tag1
|
||||
|
||||
- [Heading with my tags](Test-Tag-default#heading-with-my-tags)
|
||||
|
||||
## tag2
|
||||
|
||||
- [Heading with my tags](Test-Tag-default#heading-with-my-tags)
|
||||
|
||||
# Heading with my tags
|
||||
|
||||
:tag1:tag2:
|
||||
|
||||
Dummy content 1
|
||||
# Another heading
|
||||
|
||||
Dummy content 2
|
||||
|
||||
|
||||
Execute (Clean file for tag default):
|
||||
call system("rm $HOME/testmarkdown/.vimwiki_tags")
|
||||
call system("rm $HOME/testmarkdown/Test-Tag-default.md")
|
||||
|
||||
|
||||
|
||||
######################################################################
|
||||
@@ -16,6 +105,7 @@ Execute (Change delimiter <tag1|tag2> {{{1):
|
||||
AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax')
|
||||
AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')
|
||||
|
||||
|
||||
Do (Create File Content with <>):
|
||||
:edit $HOME/testmarkdown/Test-Tag.md\<CR>
|
||||
I
|
||||
@@ -40,6 +130,7 @@ Execute (Generate tags):
|
||||
VimwikiGenerateTagLinks
|
||||
set tw=200
|
||||
|
||||
|
||||
Expect (Correctly generated tags section {{{3):
|
||||
<tag-bar-1>
|
||||
|
||||
@@ -77,12 +168,14 @@ Do (Write a quick tag for a quick jump):
|
||||
ggl\<Cr>A __HERE1__\<Esc>
|
||||
ggjl\<Cr>A __HERE2__\<Esc>
|
||||
|
||||
|
||||
Expect (Good jump {{{3):
|
||||
[go1](Test-Tag#tag-bar-1)
|
||||
[go2](#tag-bar-1)
|
||||
bla
|
||||
<tag-bar-1> __HERE1__ __HERE2__
|
||||
|
||||
|
||||
Execute (Clean Test-Tag and .vimwiki_tags -2):
|
||||
let g:vimwiki_tag_format = {}
|
||||
unlet g:vimwiki_syntaxlocal_vars
|
||||
@@ -101,6 +194,7 @@ Execute (Default tag generation {{{1):
|
||||
AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')
|
||||
set tw=200
|
||||
|
||||
|
||||
Do (Single file Part1):
|
||||
:edit $HOME/testmarkdown/Test-Tag.md\<Cr>
|
||||
ggdGO
|
||||
@@ -108,12 +202,14 @@ Do (Single file Part1):
|
||||
:write\<Cr>
|
||||
:VimwikiRebuildTags!\<Cr>
|
||||
|
||||
|
||||
Execute (Generate tags):
|
||||
edit $HOME/testmarkdown/Test-Tag.md
|
||||
AssertEqual 'VimwikiTag', SyntaxAt(1, 1)
|
||||
VimwikiGenerateTagLinks
|
||||
write
|
||||
|
||||
|
||||
Expect (Single tags toc):
|
||||
:single-tag:
|
||||
|
||||
@@ -145,12 +241,14 @@ Do (Create File Content):
|
||||
:write\<CR>
|
||||
:VimwikiRebuildTags\<CR>
|
||||
|
||||
|
||||
Execute (Edit tags file):
|
||||
edit $HOME/testmarkdown/.vimwiki_tags
|
||||
AssertEqual $HOME . '/testmarkdown/.vimwiki_tags', expand('%')
|
||||
AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax')
|
||||
AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')
|
||||
|
||||
|
||||
# Note: tags file uses tabs
|
||||
Expect (Correctly formatted tags file):
|
||||
!_TAG_FILE_FORMAT 2
|
||||
@@ -164,10 +262,12 @@ Expect (Correctly formatted tags file):
|
||||
test-tag Test-Tag.md 5;" vimwiki:Test-Tag\tTest-Tag#a-header\tA header
|
||||
top-tag Test-Tag.md 1;" vimwiki:Test-Tag\tTest-Tag\tTest-Tag
|
||||
|
||||
|
||||
Execute (Generate tags):
|
||||
edit $HOME/testmarkdown/Test-Tag.md
|
||||
VimwikiGenerateTagLinks
|
||||
|
||||
|
||||
Expect (Correctly generated tags section):
|
||||
:top-tag:
|
||||
|
||||
@@ -198,6 +298,7 @@ Expect (Correctly generated tags section):
|
||||
|
||||
- [Test-Tag](Test-Tag)
|
||||
|
||||
|
||||
Execute (Clean Test-Tag and .vimwiki_tags -1 ):
|
||||
call system("rm $HOME/testmarkdown/Test.md")
|
||||
call system("rm $HOME/testmarkdown/.vimwiki_tags")
|
||||
@@ -214,6 +315,7 @@ Execute (Check first tags file):
|
||||
AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax')
|
||||
AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')
|
||||
|
||||
|
||||
Do (Build first tags file):
|
||||
:edit $HOME/testmarkdown/Test-Tag-1.md\<Cr>
|
||||
ggI
|
||||
@@ -228,12 +330,14 @@ Do (Build first tags file):
|
||||
:write\<Cr>
|
||||
:VimwikiRebuildTags!\<CR>
|
||||
|
||||
|
||||
Execute (Check second tags file):
|
||||
edit $HOME/testmarkdown/subdir1/Test-Tag-2.md
|
||||
AssertEqual $HOME . '/testmarkdown/subdir1/Test-Tag-2.md', expand('%')
|
||||
AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax')
|
||||
AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')
|
||||
|
||||
|
||||
Do (Build second tags file):
|
||||
:edit $HOME/testmarkdown/subdir1/Test-Tag-2.md\<Cr>
|
||||
ggI
|
||||
@@ -248,6 +352,7 @@ Do (Build second tags file):
|
||||
:write\<Cr>
|
||||
:VimwikiRebuildTags!\<CR>
|
||||
|
||||
|
||||
Execute (Build tag links in third file):
|
||||
edit $HOME/testmarkdown/subdir1/subdir11/Test-Tag-Links.md
|
||||
AssertEqual $HOME . '/testmarkdown/subdir1/subdir11/Test-Tag-Links.md', expand('%')
|
||||
@@ -256,6 +361,7 @@ Execute (Build tag links in third file):
|
||||
VimwikiGenerateTagLinks
|
||||
write
|
||||
|
||||
|
||||
Expect (Tag links relative to current file):
|
||||
|
||||
|
||||
@@ -276,6 +382,7 @@ Expect (Tag links relative to current file):
|
||||
- [standalone-tag-1](../../Test-Tag-1#standalone-tag-1)
|
||||
- [standalone-tag-1](../Test-Tag-2#standalone-tag-1)
|
||||
|
||||
|
||||
Do (Delete some existing links to test updating generated tag links):
|
||||
:edit $HOME/testmarkdown/subdir1/subdir11/Test-Tag-Links.md\<Cr>
|
||||
7G
|
||||
@@ -285,6 +392,7 @@ Do (Delete some existing links to test updating generated tag links):
|
||||
:write\<Cr>
|
||||
:call vimwiki#tags#generate_tags(0)\<Cr>
|
||||
|
||||
|
||||
Expect (Only update generated tag links for tags already existing in the file):
|
||||
|
||||
|
||||
@@ -300,6 +408,148 @@ Expect (Only update generated tag links for tags already existing in the file):
|
||||
- [Another Header](../../Test-Tag-1#another-header)
|
||||
- [Another Header](../Test-Tag-2#another-header)
|
||||
|
||||
|
||||
Execute (Clean relative tag setup):
|
||||
call system("rm $HOME/testmarkdown/.vimwiki_tags")
|
||||
call system("rm -rf $HOME/testmarkdown/subdir1")
|
||||
call system("rm $HOME/testmarkdown/Test-Tag-1.md")
|
||||
|
||||
|
||||
######################################################################
|
||||
Execute (Change delimiter #tag1content1|content2#tag2 as for issue #1316 {{{1):
|
||||
let g:vimwiki_tag_format = {'pre_mark': '#tag1', 'post_mark': '#tag2', 'sep': '|'}
|
||||
unlet g:vimwiki_syntaxlocal_vars
|
||||
call vimwiki#vars#init()
|
||||
edit $HOME/testmarkdown/Test-Tag-1316.md
|
||||
AssertEqual $HOME . '/testmarkdown/Test-Tag-1316.md', expand('%')
|
||||
AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax')
|
||||
AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')
|
||||
|
||||
|
||||
Do (Create File Content with #tag1 #tag2 as for issue #1316):
|
||||
:edit $HOME/testmarkdown/Test-Tag-issue-1316.md\<CR>
|
||||
I
|
||||
# Line1: Heading
|
||||
# A header\<CR>
|
||||
# Line2: Tag not in header
|
||||
bla #tag1content01|content02#tag2\<CR>
|
||||
# Line3: Tag in header
|
||||
#tag1content11|content12#tag2\<CR>
|
||||
# Line4: empty
|
||||
\<CR>
|
||||
# Line5: dummy content
|
||||
Words here.
|
||||
\<Esc>
|
||||
:write\<CR>
|
||||
:VimwikiRebuildTags!\<CR>
|
||||
gg
|
||||
|
||||
|
||||
Execute (Generate tags for issue #1316):
|
||||
edit $HOME/testmarkdown/Test-Tag-issue-1316.md
|
||||
AssertEqual 'VimwikiTag', SyntaxAt(2, 5)
|
||||
1
|
||||
VimwikiGenerateTagLinks
|
||||
write
|
||||
|
||||
|
||||
Expect (Single tags toc):
|
||||
# A header
|
||||
bla #tag1content01|content02#tag2
|
||||
#tag1content11|content12#tag2
|
||||
|
||||
Words here.
|
||||
|
||||
# Generated Tags
|
||||
|
||||
## content01
|
||||
|
||||
- [A header](Test-Tag-issue-1316#a-header)
|
||||
|
||||
## content02
|
||||
|
||||
- [A header](Test-Tag-issue-1316#a-header)
|
||||
|
||||
## content11
|
||||
|
||||
- [tag2](Test-Tag-issue-1316#tag1content11content12tag2)
|
||||
|
||||
## content12
|
||||
|
||||
- [tag2](Test-Tag-issue-1316#tag1content11content12tag2)
|
||||
|
||||
|
||||
Execute (Clean file for tag #1316):
|
||||
call system("rm $HOME/testmarkdown/.vimwiki_tags")
|
||||
call system("rm $HOME/testmarkdown/Test-Tag-issue-1316.md")
|
||||
|
||||
|
||||
Execute (Change delimiter #first_tag #vim #mo as for issue #1316 (2) {{{1):
|
||||
let g:vimwiki_tag_format = {'pre_mark': '#\w\@=', 'post_mark': '', 'sep': '[#[:space:]]\+', 'in': '[^#:[:space:]]\+' }
|
||||
unlet g:vimwiki_syntaxlocal_vars
|
||||
call vimwiki#vars#init()
|
||||
edit $HOME/testmarkdown/Test-Tag-issue-1316-bis.md
|
||||
AssertEqual $HOME . '/testmarkdown/Test-Tag-issue-1316-bis.md', expand('%')
|
||||
AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax')
|
||||
AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')
|
||||
|
||||
|
||||
Do (Create File Content with #tag1 #tag2 as for issue #1316):
|
||||
:edit $HOME/testmarkdown/Test-Tag-issue-1316-bis.md\<CR>
|
||||
I
|
||||
# Line1: Heading
|
||||
# A header\<CR>
|
||||
# Line2: Tag not in header
|
||||
bla #first_tag\<Cr>
|
||||
# Line3: Tag in header
|
||||
#vim #mono\<Cr>
|
||||
# Line4: empty
|
||||
\<CR>
|
||||
# Line5: dummy content
|
||||
Words here.
|
||||
\<Esc>
|
||||
:write\<CR>
|
||||
:VimwikiRebuildTags!\<CR>
|
||||
gg
|
||||
|
||||
|
||||
Execute (Assert some file info for #1316):
|
||||
edit $HOME/testmarkdown/Test-Tag-issue-1316-bis.md
|
||||
AssertEqual $HOME . '/testmarkdown/Test-Tag-issue-1316-bis.md', expand('%')
|
||||
AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax')
|
||||
AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')
|
||||
AssertEqual 'VimwikiTag', SyntaxAt(2, 6)
|
||||
|
||||
|
||||
Do (Append something at first_tag):
|
||||
:edit $HOME/testmarkdown/Test-Tag-issue-1316-bis.md\<CR>
|
||||
# Some bug with loclist for vim7.3 and vim8.0
|
||||
:if v:version > 810\<Cr>
|
||||
VimwikiSearchTags first_tag\<Cr>
|
||||
else\<Cr>
|
||||
2\<Cr>
|
||||
endif\<Cr>
|
||||
A Content1\<Esc>
|
||||
|
||||
|
||||
Do (Append something at mono tag):
|
||||
:edit $HOME/testmarkdown/Test-Tag-issue-1316-bis.md\<CR>
|
||||
:if v:version > 810\<Cr>
|
||||
VimwikiSearchTags mono\<Cr>
|
||||
else\<Cr>
|
||||
3\<Cr>
|
||||
endif\<Cr>
|
||||
A Content2\<Esc>
|
||||
|
||||
|
||||
Expect (Content appended at tags):
|
||||
# A header
|
||||
bla #first_tag Content1
|
||||
#vim #mono Content2
|
||||
|
||||
Words here.
|
||||
|
||||
|
||||
Execute (Clean file for tag #1316):
|
||||
call system("rm $HOME/testmarkdown/.vimwiki_tags")
|
||||
call system("rm $HOME/testmarkdown/Test-Tag-issue-1316-bis.md")
|
||||
|
||||
+22
-6
@@ -343,21 +343,37 @@
|
||||
0d
|
||||
endfunction
|
||||
|
||||
function! GetSyntaxGroup(line, col)
|
||||
function! GetSyntaxGroup(...)
|
||||
" Get normalized syntax group: usefull for boldItalic Vs italicBold
|
||||
" Arg1: line
|
||||
" Arg2: column
|
||||
" -- Here, Vader's SyntaxAt is not enough
|
||||
" From: https://stackoverflow.com/questions/9464844
|
||||
let l:s = synID(a:line, a:col, 1)
|
||||
let line = a:0 >= 1 ? a:1 : '.'
|
||||
let col = a:0 >= 2 ? a:2 : '.'
|
||||
|
||||
let l:s = synID(line, col, 1)
|
||||
return synIDattr(synIDtrans(l:s), 'name')
|
||||
endfun
|
||||
|
||||
function! GetSyntaxStack()
|
||||
function! GetSyntaxStack(...)
|
||||
" Debug helper
|
||||
" Arg1: line
|
||||
" Arg2: column
|
||||
let line = a:0 >= 1 ? a:1 : '.'
|
||||
let col = a:0 >= 2 ? a:2 : '.'
|
||||
if !exists('*synstack')
|
||||
return
|
||||
return []
|
||||
endif
|
||||
return map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
|
||||
endfunc
|
||||
let res = map(synstack(line, col), 'synIDattr(v:val, "name")')
|
||||
|
||||
" For old vim version returning 0
|
||||
if type(res) == type(0) && res == 0
|
||||
return []
|
||||
endif
|
||||
|
||||
return res
|
||||
endfunction
|
||||
|
||||
function! AssertIfVersion(version, one, two)
|
||||
" Run Assert only if vim version is high enough
|
||||
|
||||
Reference in New Issue
Block a user