summaryrefslogtreecommitdiff
path: root/daily_planner_generator.py
diff options
context:
space:
mode:
Diffstat (limited to 'daily_planner_generator.py')
-rwxr-xr-xdaily_planner_generator.py104
1 files changed, 104 insertions, 0 deletions
diff --git a/daily_planner_generator.py b/daily_planner_generator.py
new file mode 100755
index 0000000..80946d1
--- /dev/null
+++ b/daily_planner_generator.py
@@ -0,0 +1,104 @@
+#!/usr/bin/env python3
+
+import argparse
+import datetime
+import locale
+import logging
+import os
+import subprocess
+import sys
+
+import jinja2
+
+
+locale.setlocale(locale.LC_ALL, '')
+
+
+def main():
+ env = jinja2.Environment()
+ loader = jinja2.FileSystemLoader('templates')
+ template_verso = loader.load(env, 'daily-A6-v.svg')
+ template_recto = loader.load(env, 'daily-A6-r.svg')
+
+ destination_fname = "build/daily-A6-{year}-{page:03}.svg"
+
+ os.makedirs("build", exist_ok=True)
+
+ year = 2022
+
+ template_cover = loader.load(env, 'cover-A6-r.svg')
+ with open(destination_fname.format(
+ year=year,
+ page=0,
+ ), 'w') as fp:
+ fp.write(template_cover.render(year=year))
+
+ day = datetime.date(year, 1, 1)
+
+ page = 1
+ while day.year == year:
+ with open(destination_fname.format(
+ year=year,
+ page=page,
+ ), 'w') as fp:
+ fp.write(template_verso.render(day=day))
+ page += 1
+ day += datetime.timedelta(days=1)
+
+ if day.year > year:
+ break
+
+ with open(destination_fname.format(
+ year=year,
+ page=page,
+ ), 'w') as fp:
+ fp.write(template_recto.render(day=day))
+ page += 1
+ day += datetime.timedelta(days=1)
+
+ inkscape_commands = ";\n".join([
+ (
+ "file-open:build/{svg};"
+ + " export-type: pdf;"
+ + " export-filename:build/{pdf};"
+ + " export-text-to-path;"
+ + " export-do"
+ ).format(
+ svg = s,
+ pdf = os.path.splitext(s)[0] + ".pdf",
+ )
+ for s in os.listdir("build")
+ ])
+ try:
+ subprocess.run(
+ ["inkscape", "--shell" ],
+ input=inkscape_commands,
+ text=True,
+ )
+ except FileNotFoundError:
+ logging.warning("Inkscape is not installed, can't convert to pdf")
+ logging.warning("Stopping here, you can use the svgs as you like")
+ sys.exit(1)
+
+ pdf_pages = sorted([
+ os.path.join("build", p)
+ for p in os.listdir("build")
+ if p.endswith(".pdf")
+ ])
+ # insert an empty page on the second page, to start the year on a
+ # left page
+ pdf_pages.insert(1, "1, {}")
+ try:
+ subprocess.run([
+ "pdfjam",
+ "--outfile", "daily_planner_A6.pdf",
+ *pdf_pages
+ ])
+ except FileNotFoundError:
+ logging.warning("pdfjam is not installed")
+ logging.warning("you will have to join the pdf pages yourself")
+ sys.exit(1)
+
+
+if __name__ == '__main__':
+ main()