From 5db16a08a9726b67b5bb96fd17f813fa1b74f568 Mon Sep 17 00:00:00 2001 From: Volpeon Date: Tue, 5 Jan 2021 10:58:04 +0100 Subject: Moved all metadata processing from the build script into a Pandoc Lua filter --- scripts/build_content.sh | 200 ++++++++++------------------------------------- 1 file changed, 41 insertions(+), 159 deletions(-) (limited to 'scripts/build_content.sh') diff --git a/scripts/build_content.sh b/scripts/build_content.sh index c640b12..c88ea86 100755 --- a/scripts/build_content.sh +++ b/scripts/build_content.sh @@ -23,8 +23,6 @@ get_filters() { FILTERS=$(get_filters) -CATEGORIES=$(cat "$METADATA_DIR/categories.json") - get_target_filename() { filename=$1 filename=${filename#"$CONTENT_DIR"} @@ -34,43 +32,29 @@ get_target_filename() { echo "$OUTPUT_DIR$filename" } -get_url_rel() { - basedir=$1 - filename=$2 - ext=$3 - filename=$(realpath --relative-to="$basedir" "$filename") - filename="${filename%.md}.$ext" - if [ "${filename##*/}" = "index.html" ]; then - filename=${filename%index.html} - fi - echo "$filename" -} - -get_url_abs() { - echo "/$(get_url_rel "$CONTENT_DIR" "$1" "$2")" -} - get_metadata() { - pandoc "$1" \ + pandoc "$2" \ -f markdown \ -t plain \ + --metadata content_dir="$CONTENT_DIR" \ + --metadata base_file="$1" \ + --metadata file="$2" \ + --metadata-file metadata/metadata.yaml \ --no-highlight \ - --template scripts/metadata_tpl.json + --template scripts/metadata_tpl.json \ + --lua-filter scripts/metadata_filter.lua } get_content() { - pandoc "$1" \ + pandoc "$2" \ -f markdown \ -t plain \ - --no-highlight -} - -get_section() { - filename=$1 - filename=${filename#"$CONTENT_DIR"} - filename=${filename%.md} - filename=$(echo "$filename" | cut -f1 -d /) - echo "$filename" + --metadata content_dir="$CONTENT_DIR" \ + --metadata base_file="$1" \ + --metadata file="$2" \ + --metadata-file metadata/metadata.yaml \ + --no-highlight \ + --lua-filter scripts/metadata_filter.lua } get_subpages_basedir() { @@ -82,7 +66,7 @@ get_subpages_basedir() { echo "$filename" } -get_subpages_meta() { +get_subpages_metadata() { basedir=$(get_subpages_basedir "$1") child_pages=() @@ -97,98 +81,25 @@ get_subpages_meta() { -print0) fi - pages=$(echo "{}" | jq ". + { \ - all: [], \ - by_year: {}, \ - }") - - categories="{}" + pages="[]" if [ ${#child_pages[@]} -ne 0 ]; then - #echo -e "\033[0;90m[////////]\033[0m Child pages:" - for file in "${child_pages[@]}"; do - #echo -e "\033[0;90m[////////]\033[0m - $file" - - metadata=$(get_metadata "$file") - - section=$(get_section "$file") - - url_rel=$(get_url_rel "$basedir" "$file" "html") - url_abs=$(get_url_abs "$file" "html") - url_full="${SITE%/}$url_abs" - - date=$(echo "$metadata" | jq -r .date) - date_rfc3339="" - - if [ "$date" != "" ]; then - date_rfc3339=$(date -d "$date" --rfc-3339=seconds | sed 's/ /T/') - fi - - last_update=$(echo "$metadata" | jq -r .last_update) - last_update_rfc3339="" - - if [ "$last_update" != "" ]; then - last_update=$date - fi - - if [ "$last_update" != "" ]; then - last_update_rfc3339=$(date -d "$last_update" --rfc-3339=seconds | sed 's/ /T/') - fi - - category=$(echo "$metadata" | jq -r .category) - category_name="" - - if [ "$section" != "" ] && [ "$category" != "" ]; then - category_name=$(echo "$CATEGORIES" | jq -r ".$section.$category") - fi - - content=$(get_content "$file") - - metadata=$(echo "$metadata" | jq ". + { \ - content: \"$(echo "$content" | sed -z 's/\\/\\\\/g;s/\n/\\n/g;s/"/\"/g')\", \ - date: { \ - yyyy_mm_dd: \"$date\", \ - rfc3339: \"$date_rfc3339\" \ - }, \ - last_update: { \ - yyyy_mm_dd: \"$last_update\", \ - rfc3339: \"$last_update_rfc3339\" \ - }, \ - url: { \ - rel: \"$url_rel\", \ - abs: \"$url_abs\", \ - full: \"$url_full\" \ - } \ - }") - - pages=$(echo "$pages" | jq ".all += [ $metadata ]") - - if [ "$date" != "" ]; then - date_year=$(date -d "$date" +%Y) - #date_month=$(date -d "$date" +%m) - #date_day=$(date -d "$date" +%d) - - pages=$(echo "$pages" | jq ".by_year.\"$date_year\" += [ $metadata ]") - fi - - if [ "$category" != "" ]; then - categories=$(echo "$categories" | jq ".$category = { name: \"$category_name\", count: (.$category.count + 1) } ") - fi + metadata=$(get_metadata "$1" "$file" | jq "{ \ + url: .url, \ + author: .author, \ + title: .title, \ + date: .date, \ + last_update: .last_update, \ + category: .category, \ + content: \"$(get_content "$1" "$file" | sed -z 's/\\/\\\\/g;s/\n/\\n/g;s/"/\"/g')\" \ + } | del(.[] | nulls)") + + pages=$(echo "$pages" | jq ". += [ $metadata ]") done fi - pages=$(echo "$pages" \ - | jq ".all |= (sort_by(.date) | reverse) \ - | .by_year |= (to_entries | sort_by(.key) | reverse \ - | .[].value |= (sort_by(.date) | reverse))") - - categories=$(echo "$categories" | jq ". | to_entries | { by_id: (. | sort_by(.key)), by_count: (. | sort_by(.value.count) | reverse) }") - - echo "{}" | jq ". + { \ - pages: $pages, \ - categories: $categories - }" + echo "{ \"pages\": $pages }" } handle () { @@ -201,47 +112,10 @@ handle () { echo -e "\033[0;90m[COMPILE ]\033[0m Getting metadata" - included_metadata=$(get_metadata "$1") + included_metadata=$(get_metadata "$1" "$1") + added_metadata=$(get_subpages_metadata "$1") create_feed=$(echo "$included_metadata" | jq -r .create_feed) - - url_abs=$(get_url_abs "$1" "html") - url_full="${SITE%/}$url_abs" - - section=$(get_section "$1") - - is_home=false - if [ "$target_file" = "${OUTPUT_DIR}index.html" ]; then - is_home=true - fi - - added_metadata=$(echo "$(get_subpages_meta "$1")" | jq ". + { \ - url: { \ - abs: \"$url_abs\", \ - full: \"$url_full\" \ - }, \ - section: { \ - id: \"$section\", \ - is_$section: true \ - }, \ - is_home: $is_home \ - }") - - if [ "$create_feed" = "true" ]; then - feed_url_abs="$(get_url_abs "$1" "xml")" - feed_url_full="${SITE%/}$feed_url_abs" - last_update=$(echo "$added_metadata" | jq -r ".pages.all[0].last_update") - - added_metadata=$(echo "$added_metadata" | jq ". + { \ - feed: { \ - last_update: $last_update, \ - url: { \ - abs: \"$feed_url_abs\", \ - full: \"$feed_url_full\" \ - } \ - } \ - }") - fi meta_file=$(mktemp) @@ -256,8 +130,13 @@ handle () { --no-highlight \ --template "${TEMPLATES_DIR}feed.xml" \ -o "${target_file%.html}.xml" \ + --metadata content_dir="$CONTENT_DIR" \ + --metadata base_file="$1" \ + --metadata file="$1" \ + --metadata type=feed \ --metadata-file metadata/metadata.yaml \ --metadata-file "$meta_file" \ + --lua-filter scripts/metadata_filter.lua \ $FILTERS fi @@ -269,15 +148,18 @@ handle () { --no-highlight \ --template "${TEMPLATES_DIR}base.html" \ -o "$target_file" \ + --metadata content_dir="$CONTENT_DIR" \ + --metadata base_file="$1" \ + --metadata file="$1" \ --metadata-file metadata/metadata.yaml \ --metadata-file "$meta_file" \ + --lua-filter scripts/metadata_filter.lua \ $FILTERS rm "$meta_file" - # echo $(pandoc "$1" \ - # -f markdown \ - # -t json) + # echo "$included_metadata" + # echo "$added_metadata" echo -e "\033[0;90m[COMPILE ]\033[0m Done" else -- cgit v1.2.3-54-g00ecf