#!/bin/bash CONTENT_DIR="content/" TEMPLATES_DIR="templates/" OUTPUT_DIR="output/" target_filename () { filename=$1 filename=${filename#"$CONTENT_DIR"} if [ "${filename##*.}" = "md" ]; then filename="${filename%.md}.html" fi echo "$OUTPUT_DIR$filename" } target_url_rel () { basedir=$1 filename=$2 filename=$(realpath --relative-to="$basedir" "$filename") filename="${filename%.md}.html" if [ "${filename##*/}" = "index.html" ]; then filename=${filename%index.html} fi echo "$filename" } target_url_abs () { url=$(target_url_rel "$CONTENT_DIR" "$1") echo "/$url" } get_section() { filename=$1 filename=${filename#"$CONTENT_DIR"} filename=${filename%.md} filename=$(echo "$filename" | cut -f1 -d /) if [ "$filename" = "index.md" ]; then filename="home" fi echo "$filename" } get_subpages_basedir() { filename=$1 if [ "${filename##*/}" = "index.md" ]; then filename=$(dirname "$filename") fi echo "$filename" } get_subpages() { basedir=$(get_subpages_basedir "$1") child_pages=() if [ -d "$basedir" ]; then mapfile -d $'\0' child_pages_1 < <(find $basedir/ \ -type f \ -name "*.md" ! -name "index.md" \ -maxdepth 1 \ -print0) mapfile -d $'\0' child_pages_2 < <(find $basedir/ \ -type f \ -name "index.md" \ -mindepth 2 \ -maxdepth 2 \ -print0) child_pages=("${child_pages_1[@]}" "${child_pages_2[@]}") fi if [ ${#child_pages[@]} -ne 0 ]; then echo -e "\033[0;90m[////////]\033[0m Child pages:" collected_metadata="[]" for file in "${child_pages[@]}"; do echo -e "\033[0;90m[////////]\033[0m - $file" url_rel=$(target_url_rel "$basedir" "$file") url_abs=$(target_url_abs "$file") metadata=$(pandoc "$file" \ -f markdown \ -t plain \ --template scripts/metadata_tpl.json) metadata=$(echo "$metadata" | jq ". + { url_rel: \"$url_rel\", url_abs: \"$url_abs\" }") collected_metadata=$(echo "$collected_metadata" | jq ". + [ $metadata ]") done collected_metadata=$(echo "$collected_metadata" | jq "sort_by(.date)") echo "$collected_metadata" fi } handle () { target=$(target_filename "$1") mkdir -p $(dirname "$target") if [ "${1#*.}" = "md" ]; then echo -e "\033[0;32m[COMPILE ]\033[0m $1 -> $target" is_home=false section=$(get_section "$1") if [ "$target" = "${OUTPUT_DIR}index.html" ]; then is_home=true fi subpages_meta=$(mktemp) # $(get_subpages "$1") > "$subpages_meta" get_subpages "$1" pandoc "$1" \ -f markdown \ -t html5 \ --template "${TEMPLATES_DIR}base.html" \ -o "$target" \ --metadata isHome=$is_home \ --metadata section=$section \ --metadata-file metadata/metadata.yaml \ --metadata-file "$subpages_meta" rm "$subpages_meta" else echo -e "\033[0;32m[COPY ]\033[0m $1 -> $target" cp "$1" "$target" fi } if [ -z "$1" ]; then find "$CONTENT_DIR" \ -type f \ | while read file do handle "$file" done elif [ "$1" = "all_md" ]; then find "$CONTENT_DIR" \ -type f \ -name "*.md" \ | while read file do handle "$file" done elif [ "$1" = "single" ]; then if [ -z "$2" ]; then echo -e "\033[0;31m[ERROR ]\033[0m \"single\" operation requires file argument" else handle "$2" fi elif [ "$1" = "delete" ]; then if [ -z "$2" ]; then echo -e "\033[0;31m[ERROR ]\033[0m \"delete\" operation requires file argument" else TARGET=$(target_filename "$2") echo -e "\033[0;32m[DELETE ]\033[0m $2 -> $TARGET" rm -rf $TARGET fi else echo -e "\033[0;31m[ERROR ]\033[0m Unknown operation: \"$1\"" fi