Compare commits
No commits in common. "main" and "2026-init" have entirely different histories.
3 changed files with 190 additions and 161 deletions
49
cal.lisp
49
cal.lisp
|
|
@ -1,6 +1,9 @@
|
|||
(load (sb-ext:posix-getenv "ASDF"))
|
||||
(asdf:load-system 'str)
|
||||
(asdf:load-system 'alexandria)
|
||||
(asdf:load-system 'cl-dates)
|
||||
|
||||
|
||||
;; week is 7 days
|
||||
;; 52 weeks in a year
|
||||
;; 13 weeks in a quarter
|
||||
|
|
@ -20,22 +23,20 @@
|
|||
(defun week-number (date)
|
||||
(mod (cl-dates:week-number date) 52))
|
||||
|
||||
(defun write-page-header (stream header-text)
|
||||
(defun write-page-cycle (stream cl-date year-number quarter-number cycle-number)
|
||||
(format stream "
|
||||
#set page(
|
||||
paper: \"a4\",
|
||||
flipped: true,
|
||||
header: align(bottom)[~A],
|
||||
margin: (
|
||||
top: 1.5cm,
|
||||
bottom: 0.5cm,
|
||||
x: 0.5cm
|
||||
))
|
||||
" header-text)
|
||||
)
|
||||
|
||||
(defun write-page-cycle (stream cl-date year-number quarter-number cycle-number)
|
||||
(write-page-header stream (format nil "Y~d #h(1fr) Q~d #h(1fr) C~d" year-number quarter-number cycle-number))
|
||||
header: [
|
||||
Y~d
|
||||
#h(1fr)
|
||||
Q~d
|
||||
#h(1fr)
|
||||
C~d
|
||||
],
|
||||
margin: 0.5cm)
|
||||
" year-number quarter-number cycle-number)
|
||||
(format stream "#table(
|
||||
columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr),
|
||||
rows: (auto, 1fr),
|
||||
|
|
@ -49,13 +50,25 @@
|
|||
(format stream ",[#h(1fr) ~A]" (cl-dates:month->string mm))
|
||||
(format stream ",[#h(1fr) ~d]" dd))))))
|
||||
(format stream ")~%"))
|
||||
|
||||
(defun write-page-reset-week (stream cl-date year-number quarter-number)
|
||||
(write-page-header stream (format nil "Y~d #h(1fr) Q~d #h(1fr) Reset Week" year-number quarter-number))
|
||||
(format stream "
|
||||
#set page(
|
||||
paper: \"a4\",
|
||||
flipped: true,
|
||||
header: [
|
||||
Y~d
|
||||
#h(1fr)
|
||||
Q~d
|
||||
#h(1fr)
|
||||
Reset Week
|
||||
],
|
||||
margin: 0.5cm)
|
||||
" year-number quarter-number)
|
||||
(format stream "#table(
|
||||
columns: (1fr, 1fr, 1fr),
|
||||
rows: (1fr),
|
||||
align(center)[_Going In_]")
|
||||
align(center)[_Going In_]
|
||||
")
|
||||
(loop for day from 0 to 6
|
||||
do (let* ((week-day (+ cl-date day))
|
||||
(day-of-week (cl-dates:dow->string (cl-dates:day-of-week week-day))))
|
||||
|
|
@ -65,19 +78,17 @@
|
|||
(format stream ",[~A #h(1fr) ~d]~%" day-of-week dd))
|
||||
)))
|
||||
(format stream ",align(center)[_Coming Out_]")
|
||||
(format stream ")~%"))
|
||||
|
||||
(format stream ")~%")
|
||||
)
|
||||
(defun write-pages-quarter (stream cl-date year-number quarter-number)
|
||||
(loop for c from 0 to 2 do (write-page-cycle stream (add-weeks cl-date (* c 4)) year-number quarter-number (+ c 1)))
|
||||
(write-page-reset-week stream (add-weeks cl-date 12) year-number quarter-number))
|
||||
|
||||
(with-open-file (stream "main.typ"
|
||||
:direction :output
|
||||
:if-exists :supersede
|
||||
:if-does-not-exist :create)
|
||||
(format stream "/* This is an auto-generated file
|
||||
You can run `sbcl --script ./cal.lisp` to create a new one */~%")
|
||||
(write-page-reset-week stream (cl-dates:ymd->date 2025 12 22) 2025 4)
|
||||
(let ((year-start (cl-dates:ymd->date 2025 12 29)))
|
||||
(loop for q from 0 to 3 do (write-pages-quarter stream (add-weeks year-start (* q 13)) 2026 (+ q 1)))
|
||||
))
|
||||
|
|
|
|||
|
|
@ -33,6 +33,9 @@
|
|||
inherit (pkgs) lib;
|
||||
|
||||
sbcl = pkgs.sbcl.withPackages (ps: [
|
||||
ps.str
|
||||
ps.cl-heap
|
||||
ps.alexandria
|
||||
inputs.cl-dates.packages.x86_64-linux.default
|
||||
]);
|
||||
|
||||
|
|
|
|||
257
main.typ
257
main.typ
|
|
@ -4,33 +4,14 @@
|
|||
#set page(
|
||||
paper: "a4",
|
||||
flipped: true,
|
||||
header: align(bottom)[Y2025 #h(1fr) Q4 #h(1fr) Reset Week],
|
||||
margin: (
|
||||
top: 1.5cm,
|
||||
bottom: 0.5cm,
|
||||
x: 0.5cm
|
||||
))
|
||||
#table(
|
||||
columns: (1fr, 1fr, 1fr),
|
||||
rows: (1fr),
|
||||
align(center)[_Going In_],[Monday #h(1fr) 22]
|
||||
,[Tuesday #h(1fr) 23]
|
||||
,[Wednesday #h(1fr) 24]
|
||||
,[Thursday #h(1fr) 25]
|
||||
,[Friday #h(1fr) 26]
|
||||
,[Saturday #h(1fr) 27]
|
||||
,[Sunday #h(1fr) 28]
|
||||
,align(center)[_Coming Out_])
|
||||
|
||||
#set page(
|
||||
paper: "a4",
|
||||
flipped: true,
|
||||
header: align(bottom)[Y2026 #h(1fr) Q1 #h(1fr) C1],
|
||||
margin: (
|
||||
top: 1.5cm,
|
||||
bottom: 0.5cm,
|
||||
x: 0.5cm
|
||||
))
|
||||
header: [
|
||||
Y2026
|
||||
#h(1fr)
|
||||
Q1
|
||||
#h(1fr)
|
||||
C1
|
||||
],
|
||||
margin: 0.5cm)
|
||||
#table(
|
||||
columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr),
|
||||
rows: (auto, 1fr),
|
||||
|
|
@ -43,12 +24,14 @@
|
|||
#set page(
|
||||
paper: "a4",
|
||||
flipped: true,
|
||||
header: align(bottom)[Y2026 #h(1fr) Q1 #h(1fr) C2],
|
||||
margin: (
|
||||
top: 1.5cm,
|
||||
bottom: 0.5cm,
|
||||
x: 0.5cm
|
||||
))
|
||||
header: [
|
||||
Y2026
|
||||
#h(1fr)
|
||||
Q1
|
||||
#h(1fr)
|
||||
C2
|
||||
],
|
||||
margin: 0.5cm)
|
||||
#table(
|
||||
columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr),
|
||||
rows: (auto, 1fr),
|
||||
|
|
@ -61,12 +44,14 @@
|
|||
#set page(
|
||||
paper: "a4",
|
||||
flipped: true,
|
||||
header: align(bottom)[Y2026 #h(1fr) Q1 #h(1fr) C3],
|
||||
margin: (
|
||||
top: 1.5cm,
|
||||
bottom: 0.5cm,
|
||||
x: 0.5cm
|
||||
))
|
||||
header: [
|
||||
Y2026
|
||||
#h(1fr)
|
||||
Q1
|
||||
#h(1fr)
|
||||
C3
|
||||
],
|
||||
margin: 0.5cm)
|
||||
#table(
|
||||
columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr),
|
||||
rows: (auto, 1fr),
|
||||
|
|
@ -79,16 +64,19 @@
|
|||
#set page(
|
||||
paper: "a4",
|
||||
flipped: true,
|
||||
header: align(bottom)[Y2026 #h(1fr) Q1 #h(1fr) Reset Week],
|
||||
margin: (
|
||||
top: 1.5cm,
|
||||
bottom: 0.5cm,
|
||||
x: 0.5cm
|
||||
))
|
||||
header: [
|
||||
Y2026
|
||||
#h(1fr)
|
||||
Q1
|
||||
#h(1fr)
|
||||
Reset Week
|
||||
],
|
||||
margin: 0.5cm)
|
||||
#table(
|
||||
columns: (1fr, 1fr, 1fr),
|
||||
rows: (1fr),
|
||||
align(center)[_Going In_],[Monday #h(1fr) 23]
|
||||
align(center)[_Going In_]
|
||||
,[Monday #h(1fr) 23]
|
||||
,[Tuesday #h(1fr) 24]
|
||||
,[Wednesday #h(1fr) 25]
|
||||
,[Thursday #h(1fr) 26]
|
||||
|
|
@ -100,12 +88,14 @@
|
|||
#set page(
|
||||
paper: "a4",
|
||||
flipped: true,
|
||||
header: align(bottom)[Y2026 #h(1fr) Q2 #h(1fr) C1],
|
||||
margin: (
|
||||
top: 1.5cm,
|
||||
bottom: 0.5cm,
|
||||
x: 0.5cm
|
||||
))
|
||||
header: [
|
||||
Y2026
|
||||
#h(1fr)
|
||||
Q2
|
||||
#h(1fr)
|
||||
C1
|
||||
],
|
||||
margin: 0.5cm)
|
||||
#table(
|
||||
columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr),
|
||||
rows: (auto, 1fr),
|
||||
|
|
@ -118,12 +108,14 @@
|
|||
#set page(
|
||||
paper: "a4",
|
||||
flipped: true,
|
||||
header: align(bottom)[Y2026 #h(1fr) Q2 #h(1fr) C2],
|
||||
margin: (
|
||||
top: 1.5cm,
|
||||
bottom: 0.5cm,
|
||||
x: 0.5cm
|
||||
))
|
||||
header: [
|
||||
Y2026
|
||||
#h(1fr)
|
||||
Q2
|
||||
#h(1fr)
|
||||
C2
|
||||
],
|
||||
margin: 0.5cm)
|
||||
#table(
|
||||
columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr),
|
||||
rows: (auto, 1fr),
|
||||
|
|
@ -136,12 +128,14 @@
|
|||
#set page(
|
||||
paper: "a4",
|
||||
flipped: true,
|
||||
header: align(bottom)[Y2026 #h(1fr) Q2 #h(1fr) C3],
|
||||
margin: (
|
||||
top: 1.5cm,
|
||||
bottom: 0.5cm,
|
||||
x: 0.5cm
|
||||
))
|
||||
header: [
|
||||
Y2026
|
||||
#h(1fr)
|
||||
Q2
|
||||
#h(1fr)
|
||||
C3
|
||||
],
|
||||
margin: 0.5cm)
|
||||
#table(
|
||||
columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr),
|
||||
rows: (auto, 1fr),
|
||||
|
|
@ -154,16 +148,19 @@
|
|||
#set page(
|
||||
paper: "a4",
|
||||
flipped: true,
|
||||
header: align(bottom)[Y2026 #h(1fr) Q2 #h(1fr) Reset Week],
|
||||
margin: (
|
||||
top: 1.5cm,
|
||||
bottom: 0.5cm,
|
||||
x: 0.5cm
|
||||
))
|
||||
header: [
|
||||
Y2026
|
||||
#h(1fr)
|
||||
Q2
|
||||
#h(1fr)
|
||||
Reset Week
|
||||
],
|
||||
margin: 0.5cm)
|
||||
#table(
|
||||
columns: (1fr, 1fr, 1fr),
|
||||
rows: (1fr),
|
||||
align(center)[_Going In_],[Monday #h(1fr) 22]
|
||||
align(center)[_Going In_]
|
||||
,[Monday #h(1fr) 22]
|
||||
,[Tuesday #h(1fr) 23]
|
||||
,[Wednesday #h(1fr) 24]
|
||||
,[Thursday #h(1fr) 25]
|
||||
|
|
@ -175,12 +172,14 @@
|
|||
#set page(
|
||||
paper: "a4",
|
||||
flipped: true,
|
||||
header: align(bottom)[Y2026 #h(1fr) Q3 #h(1fr) C1],
|
||||
margin: (
|
||||
top: 1.5cm,
|
||||
bottom: 0.5cm,
|
||||
x: 0.5cm
|
||||
))
|
||||
header: [
|
||||
Y2026
|
||||
#h(1fr)
|
||||
Q3
|
||||
#h(1fr)
|
||||
C1
|
||||
],
|
||||
margin: 0.5cm)
|
||||
#table(
|
||||
columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr),
|
||||
rows: (auto, 1fr),
|
||||
|
|
@ -193,12 +192,14 @@
|
|||
#set page(
|
||||
paper: "a4",
|
||||
flipped: true,
|
||||
header: align(bottom)[Y2026 #h(1fr) Q3 #h(1fr) C2],
|
||||
margin: (
|
||||
top: 1.5cm,
|
||||
bottom: 0.5cm,
|
||||
x: 0.5cm
|
||||
))
|
||||
header: [
|
||||
Y2026
|
||||
#h(1fr)
|
||||
Q3
|
||||
#h(1fr)
|
||||
C2
|
||||
],
|
||||
margin: 0.5cm)
|
||||
#table(
|
||||
columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr),
|
||||
rows: (auto, 1fr),
|
||||
|
|
@ -211,12 +212,14 @@
|
|||
#set page(
|
||||
paper: "a4",
|
||||
flipped: true,
|
||||
header: align(bottom)[Y2026 #h(1fr) Q3 #h(1fr) C3],
|
||||
margin: (
|
||||
top: 1.5cm,
|
||||
bottom: 0.5cm,
|
||||
x: 0.5cm
|
||||
))
|
||||
header: [
|
||||
Y2026
|
||||
#h(1fr)
|
||||
Q3
|
||||
#h(1fr)
|
||||
C3
|
||||
],
|
||||
margin: 0.5cm)
|
||||
#table(
|
||||
columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr),
|
||||
rows: (auto, 1fr),
|
||||
|
|
@ -229,16 +232,19 @@
|
|||
#set page(
|
||||
paper: "a4",
|
||||
flipped: true,
|
||||
header: align(bottom)[Y2026 #h(1fr) Q3 #h(1fr) Reset Week],
|
||||
margin: (
|
||||
top: 1.5cm,
|
||||
bottom: 0.5cm,
|
||||
x: 0.5cm
|
||||
))
|
||||
header: [
|
||||
Y2026
|
||||
#h(1fr)
|
||||
Q3
|
||||
#h(1fr)
|
||||
Reset Week
|
||||
],
|
||||
margin: 0.5cm)
|
||||
#table(
|
||||
columns: (1fr, 1fr, 1fr),
|
||||
rows: (1fr),
|
||||
align(center)[_Going In_],[Monday #h(1fr) 21]
|
||||
align(center)[_Going In_]
|
||||
,[Monday #h(1fr) 21]
|
||||
,[Tuesday #h(1fr) 22]
|
||||
,[Wednesday #h(1fr) 23]
|
||||
,[Thursday #h(1fr) 24]
|
||||
|
|
@ -250,12 +256,14 @@
|
|||
#set page(
|
||||
paper: "a4",
|
||||
flipped: true,
|
||||
header: align(bottom)[Y2026 #h(1fr) Q4 #h(1fr) C1],
|
||||
margin: (
|
||||
top: 1.5cm,
|
||||
bottom: 0.5cm,
|
||||
x: 0.5cm
|
||||
))
|
||||
header: [
|
||||
Y2026
|
||||
#h(1fr)
|
||||
Q4
|
||||
#h(1fr)
|
||||
C1
|
||||
],
|
||||
margin: 0.5cm)
|
||||
#table(
|
||||
columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr),
|
||||
rows: (auto, 1fr),
|
||||
|
|
@ -268,12 +276,14 @@
|
|||
#set page(
|
||||
paper: "a4",
|
||||
flipped: true,
|
||||
header: align(bottom)[Y2026 #h(1fr) Q4 #h(1fr) C2],
|
||||
margin: (
|
||||
top: 1.5cm,
|
||||
bottom: 0.5cm,
|
||||
x: 0.5cm
|
||||
))
|
||||
header: [
|
||||
Y2026
|
||||
#h(1fr)
|
||||
Q4
|
||||
#h(1fr)
|
||||
C2
|
||||
],
|
||||
margin: 0.5cm)
|
||||
#table(
|
||||
columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr),
|
||||
rows: (auto, 1fr),
|
||||
|
|
@ -286,12 +296,14 @@
|
|||
#set page(
|
||||
paper: "a4",
|
||||
flipped: true,
|
||||
header: align(bottom)[Y2026 #h(1fr) Q4 #h(1fr) C3],
|
||||
margin: (
|
||||
top: 1.5cm,
|
||||
bottom: 0.5cm,
|
||||
x: 0.5cm
|
||||
))
|
||||
header: [
|
||||
Y2026
|
||||
#h(1fr)
|
||||
Q4
|
||||
#h(1fr)
|
||||
C3
|
||||
],
|
||||
margin: 0.5cm)
|
||||
#table(
|
||||
columns: (auto ,1fr, 1fr, 1fr, 1fr, 1fr, 1fr, 1fr),
|
||||
rows: (auto, 1fr),
|
||||
|
|
@ -304,16 +316,19 @@
|
|||
#set page(
|
||||
paper: "a4",
|
||||
flipped: true,
|
||||
header: align(bottom)[Y2026 #h(1fr) Q4 #h(1fr) Reset Week],
|
||||
margin: (
|
||||
top: 1.5cm,
|
||||
bottom: 0.5cm,
|
||||
x: 0.5cm
|
||||
))
|
||||
header: [
|
||||
Y2026
|
||||
#h(1fr)
|
||||
Q4
|
||||
#h(1fr)
|
||||
Reset Week
|
||||
],
|
||||
margin: 0.5cm)
|
||||
#table(
|
||||
columns: (1fr, 1fr, 1fr),
|
||||
rows: (1fr),
|
||||
align(center)[_Going In_],[Monday #h(1fr) 21]
|
||||
align(center)[_Going In_]
|
||||
,[Monday #h(1fr) 21]
|
||||
,[Tuesday #h(1fr) 22]
|
||||
,[Wednesday #h(1fr) 23]
|
||||
,[Thursday #h(1fr) 24]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue