" ============================================================================= " 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