39407014c8
Fix: Syntax bug precode nested in bold apperead bold Problem: 1. `that_ HERE _was` italic 2. `__that ``HERE`` was__ bold => PreCode should not receive typeface region changes Solution: 1. Stricter regex (and add \* to VimwikiError) 2. Add VikiError and WikiPre to nestables syntaxes
278 lines
7.8 KiB
VimL
278 lines
7.8 KiB
VimL
" TODO treat if local (see $HOME in all tests)
|
|
" TODO mutualise call CopyResources()
|
|
" TODO mutualise (to prettify output) mode(1) to check if in -Es or not
|
|
" TODO test tabnext in at least one travis job (without -Es)
|
|
" TODO (idea) fasten travis difefrent job with the same vimwiki git (-8s)
|
|
|
|
" Declare tipical Vim preambule
|
|
" vint: -ProhibitSetNoCompatible
|
|
set nocompatible
|
|
filetype plugin indent on
|
|
syntax enable
|
|
|
|
" Usefull var: for one day, making tests on local
|
|
let $TPLUGIN = '/testplugin'
|
|
let $THOME = $HOME
|
|
|
|
" Set chrooted virtual runtime path
|
|
let rtp=$ROOT.'/rtp.vim'
|
|
exe 'source '.rtp
|
|
|
|
|
|
" Load Vader
|
|
let vader=$ROOT.'/vader'
|
|
exe 'set runtimepath+='.vader
|
|
|
|
|
|
" Wikis configuration
|
|
" Declare default syntax
|
|
let vimwiki_default = {}
|
|
let vimwiki_default.path = $HOME . '/testwiki'
|
|
let vimwiki_default.path_html = $HOME . '/html/default'
|
|
let vimwiki_default.syntax = 'default'
|
|
let vimwiki_default.ext = '.wiki'
|
|
let vimwiki_default.name = 'DefaultSyntax'
|
|
let vimwiki_default.base_url = 'https://example.com/'
|
|
|
|
" Declare markdown syntax - https://github.github.com/gfm/
|
|
let vimwiki_markdown = {}
|
|
let vimwiki_markdown.path = $HOME . '/testmarkdown'
|
|
let vimwiki_markdown.path_html = $HOME . '/html/markdown'
|
|
let vimwiki_markdown.syntax = 'markdown'
|
|
let vimwiki_markdown.ext = '.md'
|
|
let vimwiki_markdown.name = 'MarkdownSyntax'
|
|
|
|
" Declare mediawiki syntax - https://www.mediawiki.org/wiki/Help:Formatting
|
|
let vimwiki_mediawiki = {}
|
|
let vimwiki_mediawiki.path = $HOME . '/testmediawiki'
|
|
let vimwiki_mediawiki.path_html = $HOME . '/html/mediawiki'
|
|
let vimwiki_mediawiki.syntax = 'media'
|
|
let vimwiki_mediawiki.ext = '.mw'
|
|
let vimwiki_mediawiki.name = 'MediaWikiSyntax'
|
|
|
|
" Register the 3 wikis
|
|
let g:vimwiki_list = [vimwiki_default, vimwiki_markdown, vimwiki_mediawiki]
|
|
let g:vimwiki_list_vimrc = [vimwiki_default, vimwiki_markdown, vimwiki_mediawiki]
|
|
|
|
|
|
" Set basic settings
|
|
" Avoid more prompt
|
|
set nomore
|
|
set backspace=indent,eol,start
|
|
set wildmode=longest:full,full
|
|
set wildmenu
|
|
set wildignorecase
|
|
set splitbelow
|
|
set splitright
|
|
set timeoutlen=600
|
|
set ignorecase
|
|
set smartcase
|
|
set hidden
|
|
set laststatus=2
|
|
set hlsearch
|
|
|
|
|
|
" Map
|
|
" Map ctrl-p/n for history completion instead of up/down arrows
|
|
cnoremap <C-p> <Up>
|
|
cnoremap <C-n> <Down>
|
|
|
|
" Map jj to go back to command mode
|
|
inoremap jj <esc>
|
|
|
|
" Use <C-L> to clear the highlighting of :set hlsearch and also preserve the
|
|
" default behavior of redrawing the screen
|
|
if maparg('<C-L>', 'n') ==# ''
|
|
nnoremap <silent> <C-L> :nohlsearch<C-R>=has('diff')?'<Bar>diffupdate':''<CR><CR><C-L>
|
|
endif
|
|
|
|
" Define functions
|
|
" Change the syntax using a temporary wiki
|
|
function! SetSyntax(vw_syn)
|
|
if a:vw_syn ==# 'default'
|
|
let ext = 'wiki'
|
|
elseif a:vw_syn ==# 'markdown'
|
|
let ext = 'md'
|
|
elseif a:vw_syn ==# 'media'
|
|
let ext = 'mw'
|
|
else
|
|
Log 'ERROR: Invalid syntax "' . a:vw_syn . '" in SetSyntax()'
|
|
Log 'NOTE: function only accepts "media" for setting mediawiki syntax'
|
|
return
|
|
endif
|
|
let path = expand('%:p:h')
|
|
let new_temp_wiki_settings = {'path': path,
|
|
\ 'ext': ext,
|
|
\ 'syntax': a:vw_syn,
|
|
\ }
|
|
|
|
" Remove any temporary wikis each time this function is called.
|
|
" This is necessary to ensure syntax is properly set when running multiple tests
|
|
" NOTE: this assumes there are 3 defined wikis in the vimrc. The last wiki
|
|
" contains default settings for temporary wikis (so there are always
|
|
" num wikis in vimrc + 1)
|
|
let num_wikis = len(g:vimwiki_wikilocal_vars)
|
|
while num_wikis > 4
|
|
call remove(g:vimwiki_wikilocal_vars, num_wikis - 1)
|
|
let num_wikis = num_wikis - 1
|
|
endwhile
|
|
|
|
" Add the new wiki
|
|
call vimwiki#vars#add_temporary_wiki(new_temp_wiki_settings)
|
|
call vimwiki#vars#set_bufferlocal('wiki_nr', 3)
|
|
|
|
" Verify syntax was set correctly
|
|
Assert vimwiki#vars#get_wikilocal('syntax') ==# a:vw_syn, 'ERROR: Vimwiki syntax not set correctly.'
|
|
endfunction
|
|
|
|
" Reload plugin to change settings
|
|
function! ReloadVimwiki()
|
|
" Clear mappings so plugin can be reloaded
|
|
" this is needed if running manually multiple times
|
|
nmapclear
|
|
|
|
" UNlet what can be
|
|
for i in ['g:vimwiki_commentstring',
|
|
\ 'b:did_ftplugin',
|
|
\ 'g:loaded_vimwiki',
|
|
\ 'g:vimwiki_global_vars',
|
|
\ 'g:vimwiki_wikilocal_vars',
|
|
\ 'g:vimwiki_syntax_variables',
|
|
\ ]
|
|
if exists(i)
|
|
exe 'unlet ' . i
|
|
endif
|
|
endfor
|
|
|
|
" Reset list
|
|
let g:vimwiki_list = g:vimwiki_list_vimrc
|
|
|
|
" Source plugin: Go
|
|
runtime! plugin/vimwiki.vim
|
|
endfunction
|
|
|
|
function! ReloadVars()
|
|
" vars#init will not reload syntax varaible if not set
|
|
unlet g:vimwiki_syntax_variables
|
|
call vimwiki#vars#init()
|
|
endfunction
|
|
|
|
" Copy wiki test resources so that vimtest user can write them
|
|
function! CopyResources()
|
|
call system('cp -r /testplugin/test/resources/* $HOME/')
|
|
" Make diary directory
|
|
call system('mkdir $HOME/testwiki/diary')
|
|
call system('mkdir $HOME/testmarkdown/diary')
|
|
endfunction
|
|
|
|
" Delete Hidden buffer, usefull to clean
|
|
" Stole from: https://stackoverflow.com/a/8459043/2544873
|
|
function! DeleteHiddenBuffers()
|
|
let tpbl=[]
|
|
call map(range(1, tabpagenr('$')), 'extend(tpbl, tabpagebuflist(v:val))')
|
|
for buf in filter(range(1, bufnr('$')), 'bufexists(v:val) && index(tpbl, v:val)==-1')
|
|
if bufname(buf) =~? 'Vader'
|
|
continue
|
|
endif
|
|
silent execute 'bwipeout!' buf
|
|
endfor
|
|
endfunction
|
|
|
|
" Write current file: helper to hide `set bt=`
|
|
function! WriteMe()
|
|
set buftype=
|
|
write %
|
|
endfunction
|
|
|
|
" Delete a file <- path <string>
|
|
function! DeleteFile(path)
|
|
let path = expand(a:path)
|
|
" Delete file
|
|
try
|
|
call delete(path)
|
|
catch | endtry
|
|
" Delete Buffer
|
|
try
|
|
execute 'bwipeout! ' . path
|
|
catch | endtry
|
|
endfunction
|
|
|
|
" Print a command output to the buffer
|
|
function! PrintCommand(cmd)
|
|
redir => message
|
|
silent execute a:cmd
|
|
redir END
|
|
if empty(message)
|
|
Log 'no output'
|
|
else
|
|
silent put=message
|
|
endif
|
|
endfunction
|
|
|
|
" Destroy a variable is exists (unlet)
|
|
function! DestroyVar(var)
|
|
if ! exists(a:var) | return | endif
|
|
execute 'unlet ' . a:var
|
|
endfunction
|
|
|
|
" Assert current tab is desired tab
|
|
function! AssertTab(nr)
|
|
" Vader is creating 2 tabs
|
|
AssertEqual a:nr + 2, tabpagenr()
|
|
endfunction
|
|
|
|
" Convert current buffer: wiki -> html
|
|
" No side effect (if no bug)
|
|
function! ConvertWiki2Html()
|
|
" Save fbuffer number (to come back)
|
|
let g:buf_vader = bufnr('%')
|
|
|
|
" Cut wiki content
|
|
let wiki_content = getline(1, '$')
|
|
1,$delete
|
|
|
|
" Paste to a named file
|
|
" Edit a new file in wiki_root
|
|
edit $HOME/testwiki/test_Convert2Html.wiki
|
|
" Ensure it is void
|
|
1,$delete
|
|
" Write wiki content
|
|
call setline(1, wiki_content)
|
|
" Dump buffer to disk
|
|
call WriteMe()
|
|
|
|
" Convert
|
|
"""""""""
|
|
Vimwiki2HTML
|
|
|
|
" Cut output
|
|
edit $HOME/html/default/test_Convert2Html.html
|
|
let html_content = getline(1, '$')
|
|
1,$delete
|
|
|
|
" Paste output in [Vader] buffer
|
|
execute 'buffer ' . g:buf_vader
|
|
call setline(1, html_content)
|
|
|
|
" Delete files
|
|
call DeleteFile('$HOME/html/default/test_Convert2Html.html')
|
|
call DeleteFile('$HOME/testwiki/test_Convert2Html.wiki')
|
|
endfunction
|
|
|
|
|
|
" Get normalized syntax group: usefull for boldItalic Vs italicBold
|
|
" -- Here, Vader's SyntaxAt is not enough
|
|
" From: https://stackoverflow.com/questions/9464844
|
|
function! GetSyntaxGroup(line, col)
|
|
let l:s = synID(a:line, a:col, 1)
|
|
return synIDattr(synIDtrans(l:s), 'name')
|
|
endfun
|
|
|
|
" Run Assert only if vim version higth enough
|
|
function! AssertIfVersion(version, one, two)
|
|
if v:version < a:version | return | endif
|
|
AssertEqual a:one, a:two
|
|
endfunction
|
|
|
|
" vim: ft=vim:sw=2
|