diff options
| author | Volpeon <git@volpeon.ink> | 2020-12-29 21:05:48 +0100 |
|---|---|---|
| committer | Volpeon <git@volpeon.ink> | 2020-12-29 21:05:48 +0100 |
| commit | 1bea0b7b1ecf0b04f724e2cda575df8bdbb70ad2 (patch) | |
| tree | b3f1f5dcc11fd235521fd443cb39251eb8532f17 /scripts | |
| parent | Improved CSS classes for page content, added proper ref list macro, build scr... (diff) | |
| download | volpeon.ink-1bea0b7b1ecf0b04f724e2cda575df8bdbb70ad2.tar.gz volpeon.ink-1bea0b7b1ecf0b04f724e2cda575df8bdbb70ad2.tar.bz2 volpeon.ink-1bea0b7b1ecf0b04f724e2cda575df8bdbb70ad2.zip | |
Improved metadata generation, added ATOM feeds
Diffstat (limited to 'scripts')
| -rwxr-xr-x | scripts/build_content.sh | 171 | ||||
| -rwxr-xr-x | scripts/metadata_tpl.json | 3 |
2 files changed, 113 insertions, 61 deletions
diff --git a/scripts/build_content.sh b/scripts/build_content.sh index b258449..e2b3bb3 100755 --- a/scripts/build_content.sh +++ b/scripts/build_content.sh | |||
| @@ -1,13 +1,13 @@ | |||
| 1 | #!/bin/bash | 1 | #!/bin/bash |
| 2 | 2 | ||
| 3 | SITE="https://volpeon.ink/" | ||
| 4 | |||
| 3 | CONTENT_DIR="content/" | 5 | CONTENT_DIR="content/" |
| 4 | FILTERS_DIR="filters/" | 6 | FILTERS_DIR="filters/" |
| 5 | METADATA_DIR="metadata/" | 7 | METADATA_DIR="metadata/" |
| 6 | TEMPLATES_DIR="templates/" | 8 | TEMPLATES_DIR="templates/" |
| 7 | OUTPUT_DIR="output/" | 9 | OUTPUT_DIR="output/" |
| 8 | 10 | ||
| 9 | CATEGORY_MAP=$(cat "$METADATA_DIR/categories.json") | ||
| 10 | |||
| 11 | get_filters() { | 11 | get_filters() { |
| 12 | filters_args="" | 12 | filters_args="" |
| 13 | 13 | ||
| @@ -37,16 +37,22 @@ target_filename() { | |||
| 37 | target_url_rel() { | 37 | target_url_rel() { |
| 38 | basedir=$1 | 38 | basedir=$1 |
| 39 | filename=$2 | 39 | filename=$2 |
| 40 | ext=$3 | ||
| 40 | filename=$(realpath --relative-to="$basedir" "$filename") | 41 | filename=$(realpath --relative-to="$basedir" "$filename") |
| 41 | filename="${filename%.md}.html" | 42 | filename="${filename%.md}.$ext" |
| 42 | if [ "${filename##*/}" = "index.html" ]; then | 43 | filename=${filename%index.html} |
| 43 | filename=${filename%index.html} | ||
| 44 | fi | ||
| 45 | echo "$filename" | 44 | echo "$filename" |
| 46 | } | 45 | } |
| 47 | 46 | ||
| 48 | target_url_abs() { | 47 | target_url_abs() { |
| 49 | echo "/$(target_url_rel "$CONTENT_DIR" "$1")" | 48 | echo "/$(target_url_rel "$CONTENT_DIR" "$1" "$2")" |
| 49 | } | ||
| 50 | |||
| 51 | metadata() { | ||
| 52 | pandoc "$1" \ | ||
| 53 | -f markdown \ | ||
| 54 | -t plain \ | ||
| 55 | --template scripts/metadata_tpl.json | ||
| 50 | } | 56 | } |
| 51 | 57 | ||
| 52 | get_section() { | 58 | get_section() { |
| @@ -65,7 +71,7 @@ get_subpages_basedir() { | |||
| 65 | echo "$filename" | 71 | echo "$filename" |
| 66 | } | 72 | } |
| 67 | 73 | ||
| 68 | get_metadata() { | 74 | get_subpages_meta() { |
| 69 | basedir=$(get_subpages_basedir "$1") | 75 | basedir=$(get_subpages_basedir "$1") |
| 70 | child_pages=() | 76 | child_pages=() |
| 71 | 77 | ||
| @@ -86,42 +92,44 @@ get_metadata() { | |||
| 86 | child_pages=("${child_pages_1[@]}" "${child_pages_2[@]}") | 92 | child_pages=("${child_pages_1[@]}" "${child_pages_2[@]}") |
| 87 | fi | 93 | fi |
| 88 | 94 | ||
| 95 | pages=$(echo "{}" | jq ". + { \ | ||
| 96 | all: [], \ | ||
| 97 | by_year: {} \ | ||
| 98 | }") | ||
| 99 | |||
| 89 | if [ ${#child_pages[@]} -ne 0 ]; then | 100 | if [ ${#child_pages[@]} -ne 0 ]; then |
| 90 | #echo -e "\033[0;90m[////////]\033[0m Child pages:" | 101 | #echo -e "\033[0;90m[////////]\033[0m Child pages:" |
| 91 | 102 | ||
| 92 | pages=$(echo "{}" | jq ". + { \ | ||
| 93 | all: [], \ | ||
| 94 | by_year: {} \ | ||
| 95 | }") | ||
| 96 | |||
| 97 | categories="{}" | ||
| 98 | |||
| 99 | for file in "${child_pages[@]}"; do | 103 | for file in "${child_pages[@]}"; do |
| 100 | #echo -e "\033[0;90m[////////]\033[0m - $file" | 104 | #echo -e "\033[0;90m[////////]\033[0m - $file" |
| 101 | 105 | ||
| 102 | url_rel=$(target_url_rel "$basedir" "$file") | 106 | metadata=$(metadata "$file") |
| 103 | url_abs=$(target_url_abs "$file") | ||
| 104 | 107 | ||
| 105 | metadata=$(pandoc "$file" \ | 108 | url_rel=$(target_url_rel "$basedir" "$file" "html") |
| 106 | -f markdown \ | 109 | url_abs=$(target_url_abs "$file" "html") |
| 107 | -t plain \ | 110 | url_full="${SITE%/}$url_abs" |
| 108 | --template scripts/metadata_tpl.json) | ||
| 109 | 111 | ||
| 110 | date=$(echo "$metadata" | jq -r .date) | 112 | date=$(echo "$metadata" | jq -r .date) |
| 111 | category=$(echo "$metadata" | jq -r .category) | 113 | date_rfc3339="" |
| 112 | category_name=$(echo "$CATEGORY_MAP" | jq -r .$category) | ||
| 113 | 114 | ||
| 114 | metadata=$(echo "$metadata" | jq ". + { \ | 115 | if [ "$date" != "" ]; then |
| 115 | url_rel: \"$url_rel\", \ | 116 | date_rfc3339=$(date -d "$date" --rfc-3339=seconds | sed 's/ /T/') |
| 116 | url_abs: \"$url_abs\" \ | 117 | fi |
| 118 | |||
| 119 | metadata=$(echo "$metadata" | jq ". * { \ | ||
| 120 | date: { \ | ||
| 121 | yyyy_mm_dd: \"$date\", \ | ||
| 122 | rfc3339: \"$date_rfc3339\" \ | ||
| 123 | }, \ | ||
| 124 | url: { \ | ||
| 125 | rel: \"$url_rel\", \ | ||
| 126 | abs: \"$url_abs\", \ | ||
| 127 | full: \"$url_full\" \ | ||
| 128 | } \ | ||
| 117 | }") | 129 | }") |
| 118 | 130 | ||
| 119 | pages=$(echo "$pages" | jq ".all += [ $metadata ]") | 131 | pages=$(echo "$pages" | jq ".all += [ $metadata ]") |
| 120 | 132 | ||
| 121 | if [ "$category" != "" ]; then | ||
| 122 | categories=$(echo "$categories" | jq ". + { $category: \"$category_name\" }") | ||
| 123 | fi | ||
| 124 | |||
| 125 | if [ "$date" != "" ]; then | 133 | if [ "$date" != "" ]; then |
| 126 | date_year=$(date -d "$date" +%Y) | 134 | date_year=$(date -d "$date" +%Y) |
| 127 | #date_month=$(date -d "$date" +%m) | 135 | #date_month=$(date -d "$date" +%m) |
| @@ -135,58 +143,101 @@ get_metadata() { | |||
| 135 | | jq ".all |= (sort_by(.date) | reverse) \ | 143 | | jq ".all |= (sort_by(.date) | reverse) \ |
| 136 | | .by_year |= (to_entries | sort_by(.key) | reverse \ | 144 | | .by_year |= (to_entries | sort_by(.key) | reverse \ |
| 137 | | .[].value |= (sort_by(.date) | reverse))") | 145 | | .[].value |= (sort_by(.date) | reverse))") |
| 138 | |||
| 139 | categories=$(echo "$categories" | jq ". | to_entries | sort_by(.key)") | ||
| 140 | |||
| 141 | echo "{}" | jq ". + { \ | ||
| 142 | pages: $pages, \ | ||
| 143 | categories: $categories \ | ||
| 144 | }" | ||
| 145 | fi | 146 | fi |
| 147 | |||
| 148 | echo "{}" | jq ". + { \ | ||
| 149 | pages: $pages \ | ||
| 150 | }" | ||
| 146 | } | 151 | } |
| 147 | 152 | ||
| 148 | handle () { | 153 | handle () { |
| 149 | target=$(target_filename "$1") | 154 | target_file=$(target_filename "$1") |
| 150 | 155 | ||
| 151 | mkdir -p $(dirname "$target") | 156 | mkdir -p $(dirname "$target_file") |
| 152 | 157 | ||
| 153 | if [ "${1#*.}" = "md" ]; then | 158 | if [ "${1#*.}" = "md" ]; then |
| 154 | echo -e "\033[0;32m[COMPILE ]\033[0m $1 -> $target" | 159 | echo -e "\033[0;32m[COMPILE ]\033[0m $1 -> $target_file" |
| 160 | |||
| 161 | meta_file=$(mktemp) | ||
| 162 | |||
| 163 | metadata=$(metadata "$file") | ||
| 164 | metadata=$(echo "[ \ | ||
| 165 | $metadata, \ | ||
| 166 | $(get_subpages_meta "$1") \ | ||
| 167 | ]" | jq ".[0] * .[1]") | ||
| 168 | |||
| 169 | url_abs=$(target_url_abs "$1" "html") | ||
| 170 | url_full="${SITE%/}$url_abs" | ||
| 155 | 171 | ||
| 156 | is_home=false | ||
| 157 | section=$(get_section "$1") | 172 | section=$(get_section "$1") |
| 158 | 173 | ||
| 159 | if [ "$target" = "${OUTPUT_DIR}index.html" ]; then | 174 | is_home=false |
| 175 | if [ "$target_file" = "${OUTPUT_DIR}index.html" ]; then | ||
| 160 | is_home=true | 176 | is_home=true |
| 161 | fi | 177 | fi |
| 162 | 178 | ||
| 163 | subpages_meta_file=$(mktemp) | 179 | metadata=$(echo "$metadata" | jq ". * { \ |
| 180 | url: { \ | ||
| 181 | abs: \"$url_abs\", \ | ||
| 182 | full: \"$url_full\" \ | ||
| 183 | }, \ | ||
| 184 | section: { \ | ||
| 185 | id: \"$section\", \ | ||
| 186 | is_$section: true \ | ||
| 187 | }, \ | ||
| 188 | is_home: $is_home \ | ||
| 189 | }") | ||
| 164 | 190 | ||
| 165 | # echo "$(get_metadata "$1")" | 191 | create_feed=$(echo "$metadata" | jq -r ".create_feed") |
| 166 | echo "$(get_metadata "$1")" > "$subpages_meta_file" | ||
| 167 | 192 | ||
| 168 | # echo $(pandoc "$1" \ | 193 | if [ "$create_feed" = "true" ]; then |
| 169 | # -f markdown \ | 194 | feed_target_file="${target_file%.html}.xml" |
| 170 | # -t json) | 195 | feed_url_abs="$(target_url_abs "$1" "xml")" |
| 196 | feed_url_full="${SITE%/}$feed_url_abs" | ||
| 197 | last_update=$(echo "$metadata" | jq -r ".pages.all[0].date") | ||
| 198 | |||
| 199 | metadata=$(echo "$metadata" | jq ". * { \ | ||
| 200 | feed: { \ | ||
| 201 | last_update: $last_update, \ | ||
| 202 | url: { \ | ||
| 203 | abs: \"$feed_url_abs\", \ | ||
| 204 | full: \"$feed_url_full\" \ | ||
| 205 | } \ | ||
| 206 | } \ | ||
| 207 | }") | ||
| 208 | |||
| 209 | echo "$metadata" > "$meta_file" | ||
| 210 | |||
| 211 | pandoc "$1" \ | ||
| 212 | -f markdown \ | ||
| 213 | -t html5 \ | ||
| 214 | --template "${TEMPLATES_DIR}feed.xml" \ | ||
| 215 | -o "$feed_target_file" \ | ||
| 216 | --metadata-file metadata/metadata.yaml \ | ||
| 217 | --metadata-file "$meta_file" \ | ||
| 218 | $FILTERS | ||
| 219 | fi | ||
| 220 | |||
| 221 | echo "$metadata" > "$meta_file" | ||
| 171 | 222 | ||
| 172 | pandoc "$1" \ | 223 | pandoc "$1" \ |
| 173 | -f markdown \ | 224 | -f markdown \ |
| 174 | -t html5 \ | 225 | -t html5 \ |
| 175 | --template "${TEMPLATES_DIR}base.html" \ | 226 | --template "${TEMPLATES_DIR}base.html" \ |
| 176 | -o "$target" \ | 227 | -o "$target_file" \ |
| 177 | --metadata "ishome"=$is_home \ | ||
| 178 | --metadata section=$section \ | ||
| 179 | --metadata "is$section" \ | ||
| 180 | --metadata-file metadata/metadata.yaml \ | 228 | --metadata-file metadata/metadata.yaml \ |
| 181 | --metadata-file "$subpages_meta_file" \ | 229 | --metadata-file "$meta_file" \ |
| 182 | $FILTERS | 230 | $FILTERS |
| 183 | # --lua-filter "filters/add_refs.lua" | ||
| 184 | 231 | ||
| 185 | rm "$subpages_meta_file" | 232 | rm "$meta_file" |
| 233 | |||
| 234 | # echo $(pandoc "$1" \ | ||
| 235 | # -f markdown \ | ||
| 236 | # -t json) | ||
| 186 | else | 237 | else |
| 187 | echo -e "\033[0;32m[COPY ]\033[0m $1 -> $target" | 238 | echo -e "\033[0;32m[COPY ]\033[0m $1 -> $target_file" |
| 188 | 239 | ||
| 189 | cp "$1" "$target" | 240 | cp "$1" "$target_file" |
| 190 | fi | 241 | fi |
| 191 | } | 242 | } |
| 192 | 243 | ||
| @@ -215,9 +266,9 @@ elif [ "$1" = "delete" ]; then | |||
| 215 | if [ -z "$2" ]; then | 266 | if [ -z "$2" ]; then |
| 216 | echo -e "\033[0;31m[ERROR ]\033[0m \"delete\" operation requires file argument" | 267 | echo -e "\033[0;31m[ERROR ]\033[0m \"delete\" operation requires file argument" |
| 217 | else | 268 | else |
| 218 | TARGET=$(target_filename "$2") | 269 | target_file=$(target_filename "$2") |
| 219 | echo -e "\033[0;32m[DELETE ]\033[0m $2 -> $TARGET" | 270 | echo -e "\033[0;32m[DELETE ]\033[0m $2 -> $target_file" |
| 220 | rm -rf $TARGET | 271 | rm -rf $target_file |
| 221 | fi | 272 | fi |
| 222 | else | 273 | else |
| 223 | echo -e "\033[0;31m[ERROR ]\033[0m Unknown operation: \"$1\"" | 274 | echo -e "\033[0;31m[ERROR ]\033[0m Unknown operation: \"$1\"" |
diff --git a/scripts/metadata_tpl.json b/scripts/metadata_tpl.json index 76e4439..79eabe1 100755 --- a/scripts/metadata_tpl.json +++ b/scripts/metadata_tpl.json | |||
| @@ -1,5 +1,6 @@ | |||
| 1 | { | 1 | { |
| 2 | "title": "$title$", | 2 | "title": "$title$", |
| 3 | "date": "$date$", | 3 | "date": "$date$", |
| 4 | "category": "$category$" | 4 | "category": "$category$", |
| 5 | "create_feed": "$create_feed$" | ||
| 5 | } | 6 | } |
