From bfaa3d29bbc6e485da1923afb1cebfcf9f0a1477 Mon Sep 17 00:00:00 2001 From: Elena ``of Valhalla'' Grandi Date: Sat, 25 Dec 2021 18:43:57 +0100 Subject: Daily planner --- daily_planner_generator.py | 104 ++++++++++++++++++++++++++++++++++++++++++ templates/daily-A6-r.svg | 109 +++++++++++++++++++++++++++++++++++++++++++++ templates/daily-A6-v.svg | 109 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 322 insertions(+) create mode 100755 daily_planner_generator.py create mode 100644 templates/daily-A6-r.svg create mode 100644 templates/daily-A6-v.svg 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() diff --git a/templates/daily-A6-r.svg b/templates/daily-A6-r.svg new file mode 100644 index 0000000..4e80bff --- /dev/null +++ b/templates/daily-A6-r.svg @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + {{ day.strftime("%A") }} + {{ day.strftime("%d %B %Y").strip('0') }} + + diff --git a/templates/daily-A6-v.svg b/templates/daily-A6-v.svg new file mode 100644 index 0000000..bdc4d56 --- /dev/null +++ b/templates/daily-A6-v.svg @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + {{ day.strftime("%A") }} + {{ day.strftime("%d %B %Y").strip('0') }} + + -- cgit v1.2.3