crispypin.cc_old/html-combiner.py

78 lines
1.9 KiB
Python
Raw Normal View History

#!/bin/env python3
import os
PAGE_DIR = "./pages/"
TEMPLATE_DIR = "./templates/"
TARGET_DIR = "./docs/"
INCLUDE_MARKER = "<include "
INCLUDE_MARKER_END = "/>"
2023-01-11 22:44:28 +01:00
def process_dir(path: str = "") -> None:
items = os.listdir(PAGE_DIR + path)
2021-06-25 00:21:46 +02:00
for name in items:
2021-06-25 00:42:16 +02:00
if os.path.isdir(PAGE_DIR + path + name):
2021-06-25 00:21:46 +02:00
process_dir(path + name + "/")
else:
2021-06-25 00:21:46 +02:00
process_file(path + name)
2023-01-11 22:44:28 +01:00
def process_file(filepath: str) -> None:
2021-06-25 00:42:16 +02:00
print("processing " + filepath)
2021-06-25 00:21:46 +02:00
contents = read_file(PAGE_DIR + filepath)
while INCLUDE_MARKER in contents:
contents = apply_include(contents)
2023-01-11 22:44:28 +01:00
2021-06-25 00:42:16 +02:00
ensure_dir(TARGET_DIR + filepath)
with open(TARGET_DIR + filepath, "w") as f:
f.write(contents)
2021-06-25 00:42:16 +02:00
def ensure_dir(filepath: str):
i = len(filepath) - filepath[::-1].find("/")
dir = filepath[:i]
if not os.path.exists(dir):
os.mkdir(dir)
2021-06-25 00:21:46 +02:00
def apply_include(contents: str) -> str:
included_file = get_included_name(contents)
inserted_text = read_file(TEMPLATE_DIR + included_file)
2021-06-25 00:21:46 +02:00
index_start, index_end = get_marker_indices(contents)
index_end += len(INCLUDE_MARKER_END)
prefix = contents[:index_start]
suffix = contents[index_end:]
indent = prefix.split("\n")[-1]
inserted_text = inserted_text.replace("\n", "\n" + indent)
return prefix + inserted_text + suffix
2021-06-25 00:21:46 +02:00
def get_included_name(contents):
marker_start, marker_end = get_marker_indices(contents)
name_start = marker_start + len(INCLUDE_MARKER)
name_end = marker_end
2023-01-14 20:43:48 +01:00
return contents[name_start:name_end].strip()
2021-06-25 00:21:46 +02:00
def get_marker_indices(contents: str) -> tuple:
index_start = contents.find(INCLUDE_MARKER)
2023-01-11 22:44:28 +01:00
index_end = contents.find(INCLUDE_MARKER_END, index_start)
return (index_start, index_end)
2021-06-25 00:21:46 +02:00
def read_file(filepath: str):
contents = ""
2021-06-25 00:21:46 +02:00
with open(filepath, "r") as f:
contents = f.read()
return contents
2023-01-11 22:44:28 +01:00
if __name__ == "__main__":
process_dir()