summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--repo/www/Makefile22
-rw-r--r--repo/www/TODO3
-rwxr-xr-xrepo/www/generate-deps.py38
-rwxr-xr-xrepo/www/generate-index.py8
4 files changed, 46 insertions, 25 deletions
diff --git a/repo/www/Makefile b/repo/www/Makefile
index bc9933a..9050626 100644
--- a/repo/www/Makefile
+++ b/repo/www/Makefile
@@ -1,28 +1,30 @@
-# TODO: set dependencies to scripts correctly
+# TODO: add a target for the file tree; use it in generate-* scripts.
TOP_DIR = ../..
OUT_DIR = $(TOP_DIR)/public
TEXT_FILES = md org
dirname = $(patsubst %/,%,$(dir $(1)))
+dirnames = $(sort $(call dirname,$(1)))
text_patterns = $(foreach ext,$(TEXT_FILES),'$(TOP_DIR)/**.$(ext)')
-
-text_folders = $(sort $(call dirname,$(shell git ls-files $(text_patterns))))
-page_folders = $(patsubst $(TOP_DIR)%,$(OUT_DIR)%,$(text_folders))
-indices = $(addsuffix /index.html,$(page_folders))
+text_folders = $(call dirnames,$(shell git ls-files $(text_patterns)))
all: site
+# Defines $(pages) and $(indices).
dependencies = deps.mk
include $(dependencies)
-$(dependencies): generate-deps.py $(text_folders)
- python3 $< "$(TEXT_FILES)" $(OUT_DIR)
+$(dependencies): $(text_folders)
+ ./generate-deps.py "$(TEXT_FILES)" $(OUT_DIR)
site: $(pages) $(indices)
-$(page_folders):
+# $(text_folders) may be missing some intermediate folders since it
+# only contains folders that hold some text files. Rely on the full
+# list of HTML pages and indices.
+$(call dirnames,$(pages) $(indices)):
mkdir -p $@
$(pages):
@@ -30,8 +32,8 @@ $(pages):
# ⚠ When tweaking this rule, check whether it still works for the
# top-level index.html.
-$(indices): $(OUT_DIR)%/index.html: $(TOP_DIR)% generate-index.py | $(OUT_DIR)%
- python3 generate-index.py "$(TEXT_FILES)" "$<" $@
+$(indices): $(OUT_DIR)/%index.html:
+ ./generate-index.py "$(TEXT_FILES)" "$(patsubst %/,%,$*)" $@
clean:
-rm $(dependencies)
diff --git a/repo/www/TODO b/repo/www/TODO
index 5e9f2d2..55741c9 100644
--- a/repo/www/TODO
+++ b/repo/www/TODO
@@ -1,4 +1,3 @@
-- generate indices for folders containing only subfolders
- set HTML title to "${blog_title} - ${folder}"
- compute "leak count" on toplevel index
- autogenerate nav
@@ -6,4 +5,4 @@
- get stylin'
- pandoc template
- tufte css? at least sidenotes rather than footnotes
-- do something with "tags"
+- use tags somehow
diff --git a/repo/www/generate-deps.py b/repo/www/generate-deps.py
index f17e950..8388c40 100755
--- a/repo/www/generate-deps.py
+++ b/repo/www/generate-deps.py
@@ -5,11 +5,17 @@
We want to compute:
- a list of leaf pages,
-- a list of auto-generated indices,
-- dependencies for leaf pages:
+
+- a list of indices,
+
+- dependencies for leaf pages (READMEs excluded):
OUTPUT/foo/bar.html: foo/bar.txt | OUTPUT/foo
- - special case for READMEs:
- OUTPUT/foo/index.html: foo/README.txt foo | OUTPUT/foo
+
+- dependencies for READMEs:
+ OUTPUT/foo/index.html: foo/README.txt foo | OUTPUT/foo
+
+- dependencies for autogenerated indices:
+ OUTPUT/foo/index.html: foo | OUTPUT/foo
"""
from os import path
@@ -36,7 +42,8 @@ def pjoin(directory, item):
def write_dependencies(deps_file, directories, top_dir, out_dir):
- pages = list()
+ pages = []
+ readmes = {}
for dpath, d in directories.items():
src_dir = pjoin(top_dir, dpath)
@@ -47,8 +54,7 @@ def write_dependencies(deps_file, directories, top_dir, out_dir):
name, _ = path.splitext(f)
if name == 'README':
- html_path = path.join(html_dir, 'index.html')
- print(f'{html_path}: {src_path}', file=deps_file)
+ readmes[dpath] = f
continue
html_path = path.join(html_dir, name+'.html')
@@ -56,8 +62,26 @@ def write_dependencies(deps_file, directories, top_dir, out_dir):
pages.append(html_path)
print(file=deps_file)
+
+ for dpath in directories:
+ src_dir = pjoin(top_dir, dpath)
+ html_dir = pjoin(out_dir, dpath)
+ html_path = path.join(html_dir, 'index.html')
+
+ if dpath in readmes:
+ src_path = path.join(src_dir, readmes[dpath])
+ print(f'{html_path}: {src_path} {src_dir} | {html_dir}', file=deps_file)
+ continue
+
+ print(f'{html_path}: {src_dir} | {html_dir}', file=deps_file)
+
+ print(file=deps_file)
+
print(f'pages = {" ".join(pages)}', file=deps_file)
+ indices = (path.join(out_dir, dpath, 'index.html') for dpath in directories)
+ print(f'indices = {" ".join(indices)}', file=deps_file)
+
def main(arguments):
extensions, out_dir = parse_arguments(arguments)
diff --git a/repo/www/generate-index.py b/repo/www/generate-index.py
index 3f777b9..96c5dc6 100755
--- a/repo/www/generate-index.py
+++ b/repo/www/generate-index.py
@@ -16,7 +16,7 @@ def parse_arguments():
help='File extensions to consider when recording pages.'
)
parser.add_argument(
- 'target', help='Folder to generate an index for.'
+ 'target', help='Pathspec to generate an index for.'
)
parser.add_argument(
'output', help='Path to the output file.'
@@ -61,13 +61,9 @@ def convert_page(content, output):
def main(arguments):
repo = Repo(search_parent_directories=True)
- target_path = arguments.target
+ target = arguments.target
extensions = arguments.extensions
- target = path.relpath(target_path, repo.working_dir)
- if target == '.':
- target =''
-
folders, files = list_files(extensions, target, repo)
names = []