commit 6b34e954e8fd669e302e7ad5d679b8448dc128f1
parent 3a8743700581923c6fd2684510dad48a8b2b8c64
Author: EinfachToll <istjanichtzufassen@googlemail.com>
Date: Wed, 21 Dec 2016 17:09:25 +0100
Add new functions for variable access
Ref #256
Diffstat:
1 file changed, 203 insertions(+), 0 deletions(-)
diff --git a/autoload/vimwiki/vars.vim b/autoload/vimwiki/vars.vim
@@ -0,0 +1,203 @@
+" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
+" Vimwiki autoload plugin file
+" Desc: stuff concerning Vimwiki's state
+" Home: https://github.com/vimwiki/vimwiki/
+
+
+" copy the user's settings from variables of the form g:vimwiki_<option> into g:vimwiki_global_vars
+" (or set a default value)
+function! s:populate_global_variables()
+ let g:vimwiki_global_vars = {
+ \ 'CJK_length': 0,
+ \ 'auto_chdir': 0,
+ \ 'autowriteall': 1,
+ \ 'conceallevel': 2,
+ \ 'diary_months':
+ \ {
+ \ 1: 'January', 2: 'February', 3: 'March',
+ \ 4: 'April', 5: 'May', 6: 'June',
+ \ 7: 'July', 8: 'August', 9: 'September',
+ \ 10: 'October', 11: 'November', 12: 'December'
+ \ },
+ \ 'dir_link': '',
+ \ 'ext2syntax': {},
+ \ 'folding': '',
+ \ 'global_ext': 1,
+ \ 'hl_cb_checked': 0,
+ \ 'hl_headers': 0,
+ \ 'html_header_numbering': 0,
+ \ 'html_header_numbering_sym': '',
+ \ 'list_ignore_newline': 1,
+ \ 'listsyms': ' .oOX',
+ \ 'map_prefix': '<Leader>w',
+ \ 'menu': 'Vimwiki',
+ \ 'table_auto_fmt': 1,
+ \ 'table_mappings': 1,
+ \ 'toc_header': 'Contents',
+ \ 'url_maxsave': 15,
+ \ 'use_calendar': 1,
+ \ 'use_mouse': 0,
+ \ 'user_htmls': '',
+ \ 'valid_html_tags': 'b,i,s,u,sub,sup,kbd,br,hr,div,center,strong,em',
+ \ 'w32_dir_enc': '',
+ \ }
+
+ for key in keys(g:vimwiki_global_vars)
+ if exists('g:vimwiki_'.key)
+ let g:vimwiki_global_vars[key] = g:vimwiki_{key}
+ endif
+ endfor
+endfunction
+
+
+function! s:normalize_path(path) "{{{
+ " trim trailing / and \ because otherwise resolve() doesn't work quite right
+ let path = substitute(a:path, '[/\\]\+$', '', '')
+ if path !~# '^scp:'
+ return resolve(expand(path)).'/'
+ else
+ return path.'/'
+ endif
+endfunction "}}}
+
+
+" g:vimwiki_wikilocal_vars is a list of dictionaries. One dict for every registered wiki. The last
+" dictionary contains default values (used for temporary wikis)
+function! s:populate_wikilocal_options()
+ let default_values = {
+ \ 'auto_export': 0,
+ \ 'auto_tags': 0,
+ \ 'auto_toc': 0,
+ \ 'css_name': 'style.css',
+ \ 'custom_wiki2html': '',
+ \ 'diary_header': 'Diary',
+ \ 'diary_index': 'diary',
+ \ 'diary_link_fmt': '%Y-%m-%d',
+ \ 'diary_rel_path': 'diary/',
+ \ 'diary_sort': 'desc',
+ \ 'ext': '.wiki',
+ \ 'index': 'index',
+ \ 'list_margin': -1,
+ \ 'maxhi': 0,
+ \ 'nested_syntaxes': {},
+ \ 'path': '~/vimwiki/',
+ \ 'path_html': '',
+ \ 'syntax': 'default',
+ \ 'template_default': 'default',
+ \ 'template_ext': '.tpl',
+ \ 'template_path': '~/vimwiki/templates/',
+ \ }
+
+ let g:vimwiki_wikilocal_vars = []
+
+ if exists('g:vimwiki_list')
+ for users_options in g:vimwiki_list
+ let new_options_dict = {}
+ for key in keys(default_values)
+ if has_key(users_options, key)
+ let new_options_dict[key] = users_options[key]
+ elseif exists('g:vimwiki_'.key)
+ let new_options_dict[key] = g:vimwiki_{key}
+ else
+ let new_options_dict[key] = default_values[key]
+ endif
+ endfor
+ call add(g:vimwiki_wikilocal_vars, new_options_dict)
+ endfor
+ endif
+
+ " default values for temporary wikis
+ let temporary_options_dict = {}
+ for key in keys(default_values)
+ if exists('g:vimwiki_'.key)
+ let temporary_options_dict[key] = g:vimwiki_{key}
+ else
+ let temporary_options_dict[key] = default_values[key]
+ endif
+ endfor
+ call add(g:vimwiki_wikilocal_vars, default_values)
+
+ call s:validate_options()
+endfunction
+
+
+function! s:validate_options()
+ for options_dict in g:vimwiki_wikilocal_vars
+ let options_dict['path'] = s:normalize_path(options_dict['path'])
+
+ let path_html = options_dict['path_html']
+ if !empty(path_html)
+ let options_dict['path_html'] = s:normalize_path(path_html)
+ else
+ let options_dict['path_html'] = s:normalize_path(
+ \ substitute(options_dict['path'], '[/\\]\+$', '', '').'_html/')
+ endif
+
+ let options_dict['template_path'] = s:normalize_path(options_dict['template_path'])
+ let options_dict['diary_rel_path'] = s:normalize_path(options_dict['diary_rel_path'])
+ endfor
+endfunction
+
+
+" TODO
+function! s:populate_syntax_vars(syntax)
+ if !exists('g:vimwiki_syntax_variables')
+ let g:vimwiki_syntax_variables = {}
+ endif
+endfunction
+
+
+function! vimwiki#vars#init()
+ call s:populate_global_variables()
+ call s:populate_wikilocal_options()
+endfunction
+
+
+function! vimwiki#vars#get_syntaxlocal(syntax, key)
+ if !exists('g:vimwiki_syntax_variables') || !has_key(g:vimwiki_syntax_variables, a:syntax)
+ call s:populate_syntax_vars(a:syntax)
+ endif
+
+ return g:vimwiki_syntax_variables[a:syntax][a:key]
+endfunction
+
+
+" Get a variable for the buffer we are currently in.
+" Populate the variable, if it doesn't exist.
+function! vimwiki#vars#get_bufferlocal(key)
+ if exists('b:vimwiki_'.a:key)
+ return b:vimwiki_{a:key}
+ elseif a:key ==# 'wiki_nr'
+ let b:vimwiki_wiki_nr = vimwiki#base#find_wiki(expand('%:p'))
+ return b:vimwiki_wiki_nr
+ endif
+endfunction
+
+
+function! vimwiki#vars#set_buffer_var(key, value)
+ let b:vimwiki_{a:key} = a:value
+endfunction
+
+
+function! vimwiki#vars#get_global(key)
+ return g:vimwiki_global_vars[a:key]
+endfunction
+
+
+function! vimwiki#vars#get_wikilocal(wiki_nr, key)
+ return g:vimwiki_wikilocal_vars[a:wiki_nr][a:key]
+endfunction
+
+
+function! vimwiki#vars#set_wikilocal(wiki_nr, key, value)
+ if a:wiki_nr == len(g:vimwiki_wikilocal_vars) - 1
+ call insert(g:vimwiki_wikilocal_vars, {}, -1)
+ endif
+ let g:vimwiki_wikilocal_vars[a:wiki_nr][a:key] = a:value
+endfunction
+
+
+" number of registered wikis + temporary
+function! vimwiki#vars#number_of_wikis()
+ return len(g:vimwiki_wikilocal_vars) - 1
+endfunction