summaryrefslogtreecommitdiff
path: root/repo
diff options
context:
space:
mode:
Diffstat (limited to 'repo')
-rw-r--r--repo/www/Makefile10
-rw-r--r--repo/www/TODO2
-rwxr-xr-xrepo/www/generate-index.py74
3 files changed, 61 insertions, 25 deletions
diff --git a/repo/www/Makefile b/repo/www/Makefile
index 7ba566c..913aa65 100644
--- a/repo/www/Makefile
+++ b/repo/www/Makefile
@@ -1,3 +1,5 @@
+# TODO: set dependencies to scripts correctly
+
TOP_DIR = ../..
OUT_DIR = $(TOP_DIR)/public
TEXT_FILES = md org
@@ -23,15 +25,17 @@ site: $(pages) $(indices) $(autoindices)
$(page_folders):
mkdir -p $@
-$(pages) $(indices):
+$(pages):
pandoc -s $< -o $@
+$(indices):
+ python3 generate-index.py "$(TEXT_FILES)" $(dir $<) | pandoc -s > $@
+
# ⚠ When tweaking this rule, check whether it still works for the
# top-level index.html, i.e. when there is no top-level README.
$(autoindices): \
$(OUT_DIR)%/index.html: $(TOP_DIR)% generate-index.py | $(OUT_DIR)%
- python3 generate-index.py "$(TEXT_FILES)" "$(*:/%=%)" | \
- pandoc -s > $@
+ python3 generate-index.py "$(TEXT_FILES)" $< | pandoc -s > $@
clean:
-rm $(dependencies)
diff --git a/repo/www/TODO b/repo/www/TODO
index 1e1f181..96617e6 100644
--- a/repo/www/TODO
+++ b/repo/www/TODO
@@ -1,5 +1,5 @@
+- set HTML title to "${blog_title} - ${folder}"
- compute "leak count" on toplevel index
-- add index to READMEs
- autogenerate nav
- autogenerate breadcrumbs
- get stylin'
diff --git a/repo/www/generate-index.py b/repo/www/generate-index.py
index 23df192..d4b087c 100755
--- a/repo/www/generate-index.py
+++ b/repo/www/generate-index.py
@@ -1,48 +1,80 @@
#!/usr/bin/env python3
+from argparse import ArgumentParser
from os import path
-from sys import argv, exit
from git import Repo
from helpers import compute_directories
-def parse_arguments(args):
- if len(args) != 3:
- exit(f'Usage: {argv[0]} EXTENSIONS FOLDER')
-
- return argv[1].split(), argv[2]
+def parse_arguments():
+ parser = ArgumentParser()
+ parser.add_argument(
+ 'extensions', type=str.split,
+ help='File extensions to consider when recording pages.'
+ )
+ parser.add_argument(
+ 'target', help='Folder to generate an index for.'
+ )
+ return parser.parse_args()
-def list_files(extensions, folder):
- directories = compute_directories(
- extensions, Repo(search_parent_directories=True)
- )
+def list_files(extensions, folder, repo):
+ directories = compute_directories(extensions, repo)
return directories[folder].subfolders, directories[folder].files
-def generate_index_page(title, directories, files):
- lines = (f'% {title}',) + tuple(
+def generate_index_page(title, directories, files, intro_file):
+ intro_text = ''
+ if intro_file is not None:
+ with open(intro_file) as intro:
+ intro_text = intro.read()
+
+ dir_list = '\n'.join(
f'- [{d}/]({d}/index.html)' for d in directories
- ) + tuple(
+ )
+
+ file_list = '\n'.join(
f'- [{f}]({f}.html)' for f in files
)
- return '\n'.join(lines)
+
+ return f'''\
+% {title}
+
+{intro_text}
+
+{dir_list}
+{file_list}
+'''
def main(arguments):
- extensions, folder = parse_arguments(arguments)
+ repo = Repo(search_parent_directories=True)
+
+ target_path = arguments.target
+ extensions = arguments.extensions
+
+ target = path.relpath(target_path, repo.working_dir)
+ if target == '.':
+ target =''
+
+ folders, files = list_files(extensions, target, repo)
- title = path.basename(folder) if folder else 'index'
+ names = []
+ intro = None
- folders, files = list_files(extensions, folder)
+ for f in files:
+ name, _ = path.splitext(f)
+ if name == 'README':
+ intro = path.join(repo.working_dir, target, f)
+ else:
+ names.append(name)
- parsed_filenames = (path.splitext(f) for f in files)
- names = tuple(name for name, _ in parsed_filenames)
+ title = path.basename(target) if target else 'index'
- print(generate_index_page(title, folders, names))
+ print(generate_index_page(title, folders, names, intro))
if __name__ == '__main__':
- main(argv)
+ main(parse_arguments())