home · contact · privacy
Add HTML templating, extend tests.
[redo-blog] / processor / index.html.do
index 1bd4dd13115f32556b77e065b223e8e488eb584e..105bc74309cc2e177fafd508fb52da4829c70e71 100644 (file)
@@ -2,38 +2,45 @@
 
 # Pull in global dependencies.
 . ./helpers.sh
-title_file=title.meta
+metadata_dir=metadata
+srcdir=`pwd`
+title_file="$metadata_dir"/title
 redo-ifchange "$title_file"
+template_file="${metadata_dir}"/index.tmpl
+redo-ifchange "$template_file"
 
-# Write index head.
-cat << EOF
-<!DOCTYPE html>
-<html>
-<head>
-EOF
-blog_title=`read_and_escape_file "$title_file" | head -1`
-printf "<title>%s</title>\n</head>\n<body>\n" "$blog_title"
-printf "<h1>%s</h1>\n<ul>\n" "$blog_title"
+# Build blog title.
+title=$(read_and_escape_file "$title_file" | head -1 | prep_sed)
 
-# Iterate through entries sorted by lastmod of their source files, write entry.
-# FIXME: This ls parsing is a bad way to loop through the sorted files. Besides,
-# $'\0' is a bashism.
-first_run=0
-files=`ls -1t *.rst *.md | tr '\n' $'\0'`
-oldIFS="$IFS"
-IFS=$'\0'
-for file in $files; do
-  if [ "$first_run" -lt "1" ]; then
-    IFS="$oldIFS"
-    first_run=1
+# Generate link list entries.
+tmp_snippets_dir=.tmp_index_snippets
+mkdir -p "$tmp_snippets_dir"
+for file in ./*.rst ./*.md; do
+  if [ -e "$file" ]; then
+    uuid_file="${metadata_dir}/${file%.*}.uuid"
+    redo-ifchange "$uuid_file"
+    published=`stat -c%y "${uuid_file}"`
+    published_unix=$(date -u "+%s%N" -d "${published}")
+    snippet_file="${metadata_dir}/${file%.*}.index_snippet"
+    redo-ifchange "$snippet_file"
+    ln -s "$srcdir/$snippet_file" "./${tmp_snippets_dir}/${published_unix}"
   fi
-  intermediate_file="${file%.*}.intermediate"
-  html_file="${file%.*}.html"
-  redo-ifchange "$intermediate_file"
-  redo-ifchange "$html_file"
-  title_html=`cat "$intermediate_file" | head -1`
-  html_file_escaped=`escape_url "$html_file"`
-  printf "<li><a href=\"%s\" />%s</a></li>\n" "$html_file_escaped" "$title_html"
 done
 
-printf "</ul>\n</body>\n</html>"
+# Write link list.
+for file in ./${tmp_snippets_dir}/*; do
+  touch ./${tmp_snippets_dir}/list
+  cat "$file" ./${tmp_snippets_dir}/list > ./${tmp_snippets_dir}/tmp
+  mv ./${tmp_snippets_dir}/tmp ./${tmp_snippets_dir}/list
+done
+if [ -e "./${tmp_snippets_dir}/list" ]; then
+  list=$(cat ./${tmp_snippets_dir}/list | prep_sed)
+fi
+rm -rf "${tmp_snippets_dir}"
+
+# Put data into template.
+template=$(cat "$template_file")
+printf "%s" "$template" | \
+sed 's/%TITLE%/'"$title"'/g' | \
+sed 's/%LIST%/'"$list"'/g' | \
+tr '\a' '%'