Clean & Fix: cycle_bullets bug not defined key in dic: #911

This commit is contained in:
Tinmarino
2020-06-16 13:46:25 -04:00
parent a9f21c6d4a
commit 43951e5851
6 changed files with 219 additions and 55 deletions

View File

@ -26,7 +26,23 @@
" variables, not the underlying dicts!
" ------------------------------------------------------------------------------------------------
" Script variable
let s:margin_set_by_user = 0
" Helper, Init global and local variables
function! vimwiki#vars#init() abort
call s:populate_global_variables()
call s:populate_wikilocal_options()
endfunction
" ----------------------------------------------------------
" 1. Global
" ----------------------------------------------------------
" Populate global variable <- user & default
" Called: s:vimwiki#vars#init
function! s:populate_global_variables() abort
let g:vimwiki_global_vars = {}
@ -140,6 +156,8 @@ function! s:populate_global_variables() abort
endfunction
" Read user global settings
" Called: s:populate_global_variables
function! s:read_global_settings_from_user() abort
let global_settings = {
\ 'CJK_length': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
@ -244,6 +262,8 @@ function! s:read_global_settings_from_user() abort
endfunction
" Normalize user global settings
" Called: s:populate_global_variables
function! s:normalize_global_settings() abort
let keys = keys(g:vimwiki_global_vars.ext2syntax)
for ext in keys
@ -321,8 +341,17 @@ function! s:normalize_global_settings() abort
endfunction
let s:margin_set_by_user = 0
" ----------------------------------------------------------
" 2. Buffer local
" ----------------------------------------------------------
" Populate local variable <- user & default
" Called: s:vimwiki#vars#init
function! s:populate_wikilocal_options() abort
" Init local variable container
let g:vimwiki_wikilocal_vars = []
" Declare default values
let default_values = {
\ 'auto_diary_index': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
\ 'auto_export': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
@ -356,12 +385,12 @@ function! s:populate_wikilocal_options() abort
\ 'template_path': {'type': type(''), 'default': $HOME . '/vimwiki/templates/'},
\ 'html_filename_parameterization': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
\ 'bullet_types': {'type': type([]), 'default': []},
\ 'cycle_bullets': {'type': type(0), 'default': 0},
\ 'listsyms': {'type': type(''), 'default': vimwiki#vars#get_global('listsyms')},
\ 'listsym_rejected': {'type': type(''), 'default': vimwiki#vars#get_global('listsym_rejected')},
\ }
let g:vimwiki_wikilocal_vars = []
" Fill default setting <- user or plugin values
let default_wiki_settings = {}
for key in keys(default_values)
if exists('g:vimwiki_'.key)
@ -372,7 +401,7 @@ function! s:populate_wikilocal_options() abort
endif
endfor
" set the wiki-local variables according to g:vimwiki_list (or the default settings)
" Set the wiki-local variables according to g:vimwiki_list (or the default settings)
if exists('g:vimwiki_list')
for users_wiki_settings in g:vimwiki_list
let new_wiki_settings = {}
@ -408,10 +437,10 @@ function! s:populate_wikilocal_options() abort
if len(wiki.bullet_types) == 0
let wiki.bullet_types = vimwiki#vars#get_syntaxlocal('bullet_types', wiki.syntax)
endif
call vimwiki#vars#populate_list_vars(wiki)
call s:populate_list_vars(wiki)
endfor
" check some values individually
" Check some values individually
let key = 'nested_syntaxes'
for wiki_settings in g:vimwiki_wikilocal_vars
let users_value = wiki_settings[key]
@ -429,6 +458,12 @@ function! s:populate_wikilocal_options() abort
endfunction
" Helper, Check user setting
" warn user with echo message if not good type
" Param: 1: key <string>: varaible name
" Param: 2: vimwiki_key <obj>: user value
" Param: 3: value_infod <dict>: type and default value
" Param: 4: coming from a global variable <bool>
function! s:check_users_value(key, users_value, value_infos, comes_from_global_variable) abort
let type_code_to_name = {
\ type(0): 'number',
@ -487,6 +522,7 @@ function! s:check_users_value(key, users_value, value_infos, comes_from_global_v
endfunction
" Normalize local settings
function! s:normalize_wikilocal_settings() abort
for wiki_settings in g:vimwiki_wikilocal_vars
let wiki_settings['path'] = s:normalize_path(wiki_settings['path'])
@ -520,6 +556,7 @@ function! s:normalize_wikilocal_settings() abort
endfunction
" Helper path
" TODO move to path
function! s:normalize_path(path) abort
" trim trailing / and \ because otherwise resolve() doesn't work quite right
@ -532,20 +569,39 @@ function! s:normalize_path(path) abort
endfunction
" ----------------------------------------------------------
" 3. Syntax specific
" ----------------------------------------------------------
" Populate syntax variable
" Exported: syntax/vimwiki.vim
function! vimwiki#vars#populate_syntax_vars(syntax) abort
" Create is not exists
if !exists('g:vimwiki_syntax_variables')
let g:vimwiki_syntax_variables = {}
endif
" Clause: leave if already filled
if has_key(g:vimwiki_syntax_variables, a:syntax)
return
endif
" Init syntax variable dictionary
let g:vimwiki_syntax_variables[a:syntax] = {}
" Autoload default syntax file
execute 'runtime! syntax/vimwiki_'.a:syntax.'.vim'
" generic stuff
" TODO make that clean (i.e clearify what is local to syntax ot to buffer)
" Get from local vars
let bullet_types = vimwiki#vars#get_wikilocal('bullet_types')
if !empty(bullet_types)
let g:vimwiki_syntax_variables[a:syntax]['bullet_types'] = bullet_types
endif
let g:vimwiki_syntax_variables[a:syntax]['cycle_bullets'] =
\ vimwiki#vars#get_wikilocal('cycle_bullets')
" Populate generic stuff
let header_symbol = g:vimwiki_syntax_variables[a:syntax].rxH
if g:vimwiki_syntax_variables[a:syntax].symH
" symmetric headers
@ -605,7 +661,7 @@ function! vimwiki#vars#populate_syntax_vars(syntax) abort
let char_to_rx = {'1': '\d\+', 'i': '[ivxlcdm]\+', 'I': '[IVXLCDM]\+',
\ 'a': '\l\{1,2}', 'A': '\u\{1,2}'}
"create regexp for bulleted list items
" Create regexp for bulleted list items
if !empty(g:vimwiki_syntax_variables[a:syntax].bullet_types)
let g:vimwiki_syntax_variables[a:syntax].rxListBullet =
\ join( map(copy(g:vimwiki_syntax_variables[a:syntax].bullet_types),
@ -617,7 +673,7 @@ function! vimwiki#vars#populate_syntax_vars(syntax) abort
let g:vimwiki_syntax_variables[a:syntax].rxListBullet = '$^'
endif
"create regex for numbered list items
" Create regex for numbered list items
if !empty(g:vimwiki_syntax_variables[a:syntax].number_types)
let g:vimwiki_syntax_variables[a:syntax].rxListNumber = '\C\%('
for type in g:vimwiki_syntax_variables[a:syntax].number_types[:-2]
@ -674,13 +730,16 @@ function! vimwiki#vars#populate_syntax_vars(syntax) abort
\ . g:vimwiki_global_vars.rxWikiLinkDescr. '\ze\)\?'
\ . g:vimwiki_global_vars.rx_wikilink_suffix
" Work more if markdown
if a:syntax ==# 'markdown'
call s:populate_extra_markdown_vars()
endif
endfunction
function! vimwiki#vars#populate_list_vars(wiki) abort
" Populate list variable
" or how to search and treat list (ex: *,-, 1.)
function! s:populate_list_vars(wiki) abort
let syntax = a:wiki.syntax
let a:wiki.rx_bullet_char = '['.escape(join(a:wiki.bullet_types, ''), ']^-\').']'
@ -693,7 +752,7 @@ function! vimwiki#vars#populate_list_vars(wiki) abort
\ recurring_bullets
\ ? a:wiki.bullet_types : []
"create regexp for bulleted list items
" Create regexp for bulleted list items
if !empty(a:wiki.bullet_types)
let rxListBullet =
\ join( map(copy(a:wiki.bullet_types),
@ -705,7 +764,7 @@ function! vimwiki#vars#populate_list_vars(wiki) abort
let rxListBullet = '$^'
endif
"the user can set the listsyms as string, but vimwiki needs a list
" the user can set the listsyms as string, but vimwiki needs a list
let a:wiki.listsyms_list = split(a:wiki.listsyms, '\zs')
if match(a:wiki.listsyms, a:wiki.listsym_rejected) != -1
@ -737,8 +796,7 @@ function! vimwiki#vars#populate_list_vars(wiki) abort
endfunction
" Populate markdown specific syntax variables
function! s:populate_extra_markdown_vars() abort
let mkd_syntax = g:vimwiki_syntax_variables['markdown']
@ -908,27 +966,33 @@ function! s:populate_extra_markdown_vars() abort
endfunction
function! vimwiki#vars#init() abort
call s:populate_global_variables()
call s:populate_wikilocal_options()
endfunction
" ----------------------------------------------------------
" 4. Getter, Setter (exported)
" ----------------------------------------------------------
" Get syntax variable
" Param: 1: key (<string>)
" Param: (2): syntax name (<string> ex:'markdown')
function! vimwiki#vars#get_syntaxlocal(key, ...) abort
" Retrieve desired syntax name
if a:0
let syntax = a:1
else
let syntax = vimwiki#vars#get_wikilocal('syntax')
endif
" Create syntax varaible dict if not exists (lazy)
if !exists('g:vimwiki_syntax_variables') || !has_key(g:vimwiki_syntax_variables, syntax)
call vimwiki#vars#populate_syntax_vars(syntax)
endif
" Return d_syntax[a:key]
return g:vimwiki_syntax_variables[syntax][a:key]
endfunction
" Get a variable for the buffer we are currently in or for the given buffer (number or name).
" Return: buffer local variable
" for the buffer we are currently in or for the given buffer (number or name).
" Populate the variable, if it doesn't exist.
function! vimwiki#vars#get_bufferlocal(key, ...) abort
let buffer = a:0 ? a:1 : '%'
@ -962,24 +1026,29 @@ function! vimwiki#vars#get_bufferlocal(key, ...) abort
endfunction
" Set buffer local variable
function! vimwiki#vars#set_bufferlocal(key, value, ...) abort
let buffer = a:0 ? a:1 : '%'
call setbufvar(buffer, 'vimwiki_' . a:key, a:value)
endfunction
" Return: wiki global variable
function! vimwiki#vars#get_global(key) abort
return g:vimwiki_global_vars[a:key]
endfunction
" Set global variable
function! vimwiki#vars#set_global(key, value) abort
let g:vimwiki_global_vars[a:key] = a:value
return g:vimwiki_global_vars[a:key]
endfunction
" the second argument can be a wiki number. When absent, the wiki of the currently active buffer is
" Return: wiki local named varaible
" Param: 1: variable name (alias key, <string>)
" Param: (2): wiki number (<int>). When absent, the wiki of the currently active buffer is
" used
function! vimwiki#vars#get_wikilocal(key, ...) abort
if a:0
@ -990,11 +1059,13 @@ function! vimwiki#vars#get_wikilocal(key, ...) abort
endfunction
" Return: wiki local variable (of default wiki [index -1])
function! vimwiki#vars#get_wikilocal_default(key) abort
return g:vimwiki_wikilocal_vars[-1][a:key]
endfunction
" Set local variable
function! vimwiki#vars#set_wikilocal(key, value, wiki_nr) abort
if a:wiki_nr == len(g:vimwiki_wikilocal_vars) - 1
call insert(g:vimwiki_wikilocal_vars, {}, -1)
@ -1003,6 +1074,7 @@ function! vimwiki#vars#set_wikilocal(key, value, wiki_nr) abort
endfunction
" Append new wiki to wiki list
function! vimwiki#vars#add_temporary_wiki(settings) abort
let new_temp_wiki_settings = copy(g:vimwiki_wikilocal_vars[-1])
for [key, value] in items(a:settings)
@ -1013,7 +1085,7 @@ function! vimwiki#vars#add_temporary_wiki(settings) abort
endfunction
" number of registered wikis + temporary
" Return: number of registered wikis + temporary
function! vimwiki#vars#number_of_wikis() abort
return len(g:vimwiki_wikilocal_vars) - 1
endfunction