#!/bin/bash CONTENT_DIR="content/" 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" } 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:" for file in "${child_pages[@]}"; do link=$(target_url_rel "$basedir" "$file") echo -e "\033[0;90m[////////]\033[0m - $file -> rel. URL: $link" done fi } handle () { target=$(target_filename "$1") mkdir -p $(dirname "$target") if [ "${1#*.}" = "md" ]; then echo -e "\033[0;32m[COMPILE ]\033[0m $1 -> $target" subpages_meta=$(mktemp) # $(get_subpages "$1") > "$subpages_meta" get_subpages "$1" pandoc "$1" \ -f markdown \ -t html5 \ --template templates/base.html \ -o "$target" \ --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