commit 19cc1b873ac0f359b7ee4a286b16dddc377b9200
parent 7f5e51716233756ab4aa6dee4bf94a34c76ccdff
Author: Ivan Tishchenko <ivan.tishchenko@dsr-company.con>
Date: Sat, 3 Jan 2015 00:59:18 +0300
Added placeholders for tags on-page-save analysis
Diffstat:
2 files changed, 62 insertions(+), 0 deletions(-)
diff --git a/autoload/vimwiki/base.vim b/autoload/vimwiki/base.vim
@@ -1928,6 +1928,61 @@ endfunction "}}}
" }}}
+" TAGS functions {{{
+" vimwiki#base#update_tags
+" Update tags metadata.
+" a:full_rebuild == 1: re-scan entire wiki
+" a:full_rebuild == 0: only re-scan current page
+function! vimwiki#base#update_tags(full_rebuild) "{{{
+ if a:full_rebuild
+ throw 'vimwiki#base#update_tags1: full rebuild not supported yet'
+ endif
+ "
+ let page_name = expand('%:t:r')
+ " Collect tags in current file
+ let tags = vimwiki#base#scan_tags(getline(1, '$'))
+ " Load metadata file
+ let metadata = vimwiki#base#load_tags_metadata()
+ " Drop old tags
+ let metadata = vimwiki#base#remove_page_from_tags(metadata, page_name)
+ " Merge in the new ones
+ let metadata = vimwiki#base#merge_tags(metadata, tags)
+ " Save
+ call vimwiki#base#write_tags_metadata(metadata)
+endfunction " }}}
+
+" vimwiki#base#scan_tags
+" Scans the list (argument) and produces tags metadata dictionary.
+function! vimwiki#base#scan_tags(lines) "{{{
+ return {}
+endfunction " }}}
+
+" vimwiki#base#load_tags_metadata
+" Loads tags metadata from file, returns a dictionary
+function! vimwiki#base#load_tags_metadata() "{{{
+ return []
+endfunction " }}}
+
+" vimwiki#base#remove_page_from_tags
+" Removes all entries for given page from metadata in-place. Returns updated
+" metadata (just in case).
+function! vimwiki#base#remove_page_from_tags(metadata, page_name) "{{{
+ return []
+endfunction " }}}
+
+" vimwiki#base#merge_tags
+" Merges two tags metadata objects into (new) one.
+function! vimwiki#base#merge_tags(metadata1, metadata2) "{{{
+ return []
+endfunction " }}}
+
+" vimwiki#base#write_tags_metadata
+" Saves metadata object into a file. Throws exceptions in case of problems.
+function! vimwiki#base#write_tags_metadata(metadata) "{{{
+endfunction " }}}
+
+" }}}
+
" Command completion functions {{{
" vimwiki#base#complete_links_escaped
diff --git a/ftplugin/vimwiki.vim b/ftplugin/vimwiki.vim
@@ -618,6 +618,13 @@ if VimwikiGet('auto_toc')
au BufWritePre <buffer> call vimwiki#base#table_of_contents(0)
augroup END
endif
+
+if VimwikiGet('auto_tags')
+ " Automatically update tags metadata on page write.
+ augroup vimwiki
+ au BufWritePost <buffer> call vimwiki#base#update_tags(0)
+ augroup END
+endif
" AUTOCOMMANDS }}}
" PASTE, CAT URL {{{