feat(user/mw_create_year_journal):Add mediawiki page script
[BK-2020-03.git] / user / mw_create_month_journal.sh
CommitLineData
3cc8b063
SBS
1#!/usr/bin/env bash
2# Desc: Prints mediawiki code for a journal month in the bk4 wiki.
3# Usage: /bin/bash mw_create_month_journal.sh [int year] [int month]
4# Input: arg1: year
5# arg2: month
6# Example: /bin/bash mw_create_month_journal.sh 2023 03 > output.txt
7# Version: 0.0.1
8
9yyyy="$1";
10mm="$2";
11
12yell() { echo "$0: $*" >&2; } # print script path and all args to stderr
13die() { yell "$*"; exit 111; } # same as yell() but non-zero exit status
14must() { "$@" || die "cannot $*"; } # runs args as command, reports args if command fails
15
16# Check input
17## Check arg count
18if [[ $# -ne 2 ]]; then die "FATAL:Invalid arg count:$#"; fi;
19## Strip leading zeros (because August/octal)
20yyyy="$((10#${yyyy}))";
21mm="$((10#${mm}))";
22## Check year
23re="[0-9]+";
24if [[ ! $yyyy =~ $re ]]; then die "FATAL:Invalid year string:$yyyy"; fi;
25if [[ ! $yyyy -ge 1582 ]]; then die "FATAL:Invalid year string:$yyyy"; fi;
26## Check month
27if [[ $mm -lt 1 ]] || [[ $mm -gt 12 ]]; then die "FATAL:Invalid month:$mm"; fi;
28
29
30# Calc working vars
31## Years
32if [[ $mm -gt 1 ]]; then
33 yyyy_prev="$yyyy";
34else
35 yyyy_prev="$((yyyy - 1))";
36fi;
37if [[ $mm -lt 12 ]]; then
38 yyyy_next="$yyyy";
39else
40 yyyy_next="$((yyyy + 1))";
41fi;
42## Months
43mm_prev="$((mm - 1))";
44mm_next="$((mm + 1))";
45if [[ $mm_prev -lt 1 ]]; then mm_prev="$((mm_prev + 12))"; fi;
46if [[ $mm_next -gt 12 ]]; then mm_next="$((mm_next - 12))"; fi;
47## Leap Years
48if [[ ! $((yyyy % 4)) -eq 0 ]]; then
49 ### Year is not evenly divisible by 4.
50 leapyear="no";
51elif [[ ! $((yyyy % 100)) -eq 0 ]]; then
52 ### Year is not evenly divisible by 100.
53 leapyear="yes";
54elif [[ ! $((yyyy % 400)) -eq 0 ]]; then
55 ### year is not evenly divisible by 400.
56 leapyear="no";
57else
58 ### year is divisible by 4, 100, and 400
59 leapyear="yes";
60fi;
61
62# Form and print header
63printf "Journal for [[%d]]-%02d. " "$yyyy" "$mm";
64printf "Preceded by [[%d-%02d]]. " "$yyyy_prev" "$mm_prev";
65printf "Followed by [[%d-%02d]]. " "$yyyy_next" "$mm_next";
66printf "\n\n";
67
68printf "==Events==\n";
69printf "\n";
70
71printf "==Tasks==\n";
72printf "\n";
73
74# Form and print body
75for (( dd=1; dd <= 31; dd++ )); do
76 if [[ $mm -eq 2 ]] && [[ $dd -eq 29 ]] && \
77 [[ $leapyear == "no" ]]; then break; fi;
78 if [[ $mm -eq 2 ]] && [[ $dd -ge 30 ]]; then break; fi;
79 if [[ $mm -eq 4 ]] && [[ $dd -ge 31 ]]; then break; fi;
80 if [[ $mm -eq 6 ]] && [[ $dd -ge 31 ]]; then break; fi;
81 if [[ $mm -eq 9 ]] && [[ $dd -ge 31 ]]; then break; fi;
82 if [[ $mm -eq 11 ]] && [[ $dd -ge 31 ]]; then break; fi;
83 printf "==%4d-%02d-%02d==\n" "$yyyy" "$mm" "$dd";
84 fs_iso8601_alt="+%G-W%V-%u, %Y-%j, %a"; # alternate ISO-8601 dates
85 date_alt="$(date --date="$yyyy-$mm-$dd" "$fs_iso8601_alt")";
86 printf "%s\n" "$date_alt";
87 printf "\n";
88done;
89printf "\n";
90
91# Form and print footer
92s1="==References==";
93s2="<references>";
94s3="</references>";
95printf "%s\n%s\n%s\n" "$s1" "$s2" "$s3";
96printf "\n";
97
98printf "==See Also==\n";
99printf "\n";
100
101printf "==Ext. Links==\n";
102printf "\n";
103
104s1="[[Category:Journals by month]]";
105printf "%s\n" "$s1";
106printf "\n";