cleaned
This commit is contained in:
@@ -163,33 +163,47 @@ function libdenote#fm_gen(ext, id, title, tags=[], md_type='yaml')
|
||||
endfunction
|
||||
|
||||
" Alter front matter
|
||||
" This function returns the (modified) a:fm front matter. For any of the
|
||||
" arguments a:id, a:title, and a:tags, if the argument is specified (for the
|
||||
" tag, it may also be an empty list), then the value of the argument is used as
|
||||
" a replacement in the input front matter a:fm.
|
||||
" This function returns the (modified) a:fm front matter. The argument a:mod
|
||||
" of type dict specifies the fields to be updated. If a:mod contains the key
|
||||
" 'date', then the date field will be updated. If it contains the key 'id',
|
||||
" then the identifier will be updated with the value a:mod.id. Similar for the
|
||||
" title (key 'title'), and the tags (key 'tags'). For the tags, the value type
|
||||
" is a list of strings.
|
||||
"
|
||||
" @argument a:fm list[string] List of strings describes a frontmatter
|
||||
" @argument a:ext string: Generate front matter for a file of this
|
||||
" extension
|
||||
" @argument a:id string: Identifier of the denote note
|
||||
" @argument a:title string: Title of the denote note
|
||||
" @argument a:tags list[string] or v:false:
|
||||
" List of strings that specify the tags
|
||||
" @argument a:mod dict Dictionary to control updates
|
||||
" @return: List of strings with a line-per item that describes the front matter
|
||||
function libdenote#fm_alter(fm, ext, id='', title='', tags=v:false)
|
||||
function libdenote#fm_alter(fm, mod)
|
||||
let l:md_type = a:fm[0] == '+++' ? 'toml' : 'yaml'
|
||||
let l:ext = { n -> n == 4 ? 'org' : n == 5 ? 'txt' : 'md'}(len(a:fm))
|
||||
let l:new = copy(a:fm)
|
||||
let l:repl = libdenote#fm(a:ext, a:id ?? '', a:title ?? '', a:tags ?? [])
|
||||
if a:id
|
||||
let l:repl = libdenote#fm_gen(l:ext,
|
||||
\ has_key(a:mod, 'id') ? a:mod.id : '',
|
||||
\ has_key(a:mod, 'title') ? a:mod.title : '',
|
||||
\ has_key(a:mod, 'tags') ? a:mod.tags : [])
|
||||
if has_key(a:mod, 'date')
|
||||
let l:ididx = indexof(l:repl, 'v:val =~ "^\\(#+\\)\\?date"')
|
||||
call map(l:new, {_, v -> v =~ "^\\(#+\\)\\?date" ? l:repl[l:ididx] : v})
|
||||
endif
|
||||
if has_key(a:mod, 'id')
|
||||
let l:ididx = indexof(l:repl, 'v:val =~ "^\\(#+\\)\\?identifier"')
|
||||
call map(l:new, {_, v -> v =~ "^\\(#+\\)\\?identifier" ? l:repl[l:ididx] : v})
|
||||
endif
|
||||
if a:title
|
||||
if has_key(a:mod, 'title')
|
||||
let l:titleidx = indexof(l:repl, 'v:val =~ "^\\(#+\\)\\?title"')
|
||||
call map(l:new, {_, v -> v =~ "^\\(#+\\)\\?title" ? l:repl[l:titleidx] : v})
|
||||
endif
|
||||
if type(a:tags) == v:t_list
|
||||
if has_key(a:mod, 'tags')
|
||||
let l:tagsidx = indexof(l:repl, 'v:val =~ "^\\(#+file\\)\\?tags"')
|
||||
call map(l:new, {_, v -> v =~ "^\\(#+file\\)\\?tags" ? l:repl[l:tagsidx] : v})
|
||||
endif
|
||||
return l:new
|
||||
endfunction
|
||||
|
||||
" Returns the length of a front matter (number of lines)
|
||||
" @argument a:ext string: File extension
|
||||
function libdenote#fm_len(ext)
|
||||
return a:ext == 'org' ? 4
|
||||
\ : a:ext == 'txt' ? 5
|
||||
\ : 6
|
||||
endfunction
|
||||
|
||||
Reference in New Issue
Block a user