X-Git-Url: https://git.plutz.net/?a=blobdiff_plain;f=macros%2Fcalendar;fp=macros%2Fcalendar;h=5a486756537b452d6e53143dff2223bbef2215c6;hb=d1513c4d506a8628fb6037bc504960c6a4734f29;hp=3d013f2a6a2d6acb47c21bc196c1d1a5789f30a0;hpb=621ce9f6f8d1371840630721f66a8f9c9ed895af;p=shellwiki diff --git a/macros/calendar b/macros/calendar index 3d013f2..5a48675 100755 --- a/macros/calendar +++ b/macros/calendar @@ -182,20 +182,40 @@ rrex_weekday() { nth=$(( ( $(date -ud @$start +%_d) - 1) / 7)) - nend=$(( 0 * 604800 - (dstart - end) % (rrfreq * 604800) + dstart )) + nend=$(( 0 * 604800 - (dstart - end) % 604800 + dstart )) nstart=$(( start - end + nend)) while [ "$nstart" -lt "$rrend" -a "$nstart" -lt "$dend" ]; do [ "$nstart" -ge "$start" -a "$nstart" -ge "$dstart" ] \ && [ "$(( ( $(date -ud @$nstart +%_d) -1) / 7 ))" -eq "$nth" ] \ && printf '%i %i %s %s\n' "$nstart" "$nend" "$evtitle" "$evlink" - nstart="$((nstart + rrfreq * 7 * 86400))" + nstart="$((nstart + 7 * 86400))" nend="$((nstart - start + end))" done } rrex_lastweekday() { -: + # helper for rrexpand: Nth last weekday of a month (e.g. 2nd last tuesday, etc.) + local nstart nend Y m d nth + + read Y m d <<-EOF + $(date -ud @$start +"%Y %_m %_d") + EOF + nth=$(( ( $(numdays $Y $m) - d ) / 7)) + + nend=$(( 0 * 604800 - (dstart - end) % 604800 + dstart )) + nstart=$(( start - end + nend)) + + while [ "$nstart" -lt "$rrend" -a "$nstart" -lt "$dend" ]; do + read Y m d <<-EOF + $(date -ud @$nstart +"%Y %_m %_d") + EOF + [ "$nstart" -ge "$start" -a "$nstart" -ge "$dstart" ] \ + && [ "$(( ( $(numdays $Y $m) - d ) / 7 ))" -eq "$nth" ] \ + && printf '%i %i %s %s\n' "$nstart" "$nend" "$evtitle" "$evlink" + nstart="$((nstart + 7 * 86400))" + nend="$((nstart - start + end))" + done } events="$(