1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-03 07:00:05 +08:00
SpaceVim/bundle/calendar.vim/autoload/calendar/week.vim
2022-05-28 15:29:51 +08:00

63 lines
1.9 KiB
VimL
Vendored

" =============================================================================
" Filename: autoload/calendar/week.vim
" Author: itchyny
" License: MIT License
" Last Change: 2017/05/07 23:07:36.
" =============================================================================
let s:save_cpo = &cpo
set cpo&vim
let s:weeks = [ 'sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday' ]
let s:cache = {}
function! calendar#week#first_day_index() abort
let first_day = calendar#setting#get('first_day')
if has_key(s:cache, first_day)
return s:cache[first_day]
endif
let index = index(s:weeks, tolower(first_day))
let s:cache[first_day] = index >= 0 ? index : 0
return s:cache[first_day]
endfunction
function! calendar#week#last_day_index() abort
return (calendar#week#first_day_index() + 6) % 7
endfunction
function! calendar#week#is_first_day(day) abort
return a:day.week() == calendar#week#first_day_index()
endfunction
function! calendar#week#is_last_day(day) abort
return a:day.week() == calendar#week#last_day_index()
endfunction
function! calendar#week#week_index(day) abort
return (a:day.week() + 7 - calendar#week#first_day_index()) % 7
endfunction
function! calendar#week#week_count(month) abort
return (a:month.last_day().sub(a:month.head_day()) + 1 + calendar#week#week_index(a:month.head_day()) + 6) / 7
endfunction
function! calendar#week#week_number(day) abort
if calendar#setting#get('first_day') =~? 'monday'
let d = a:day.year().head_day().add(3)
let diff = a:day.sub(d) + calendar#week#week_index(d)
if diff >= 0
return (diff + 7) / 7
else
let day = d.add(-4)
let d = day.year().head_day().add(3)
return (day.sub(d) + calendar#week#week_index(d) + 7) / 7
endif
else
let d = a:day.year().head_day()
return (a:day.sub(d) + calendar#week#week_index(d) + 7) / 7
endif
endfunction
let &cpo = s:save_cpo
unlet s:save_cpo