summaryrefslogtreecommitdiffstats
path: root/scripts/build_content.sh
diff options
context:
space:
mode:
authorVolpeon <git@volpeon.ink>2021-01-05 10:58:04 +0100
committerVolpeon <git@volpeon.ink>2021-01-05 10:58:04 +0100
commit5db16a08a9726b67b5bb96fd17f813fa1b74f568 (patch)
tree8313cb28561f856da7782ff667ecabfdd1716222 /scripts/build_content.sh
parentUse Pygments for syntax highlighting, design adjustments, preload fonts (diff)
downloadvolpeon.ink-5db16a08a9726b67b5bb96fd17f813fa1b74f568.tar.gz
volpeon.ink-5db16a08a9726b67b5bb96fd17f813fa1b74f568.tar.bz2
volpeon.ink-5db16a08a9726b67b5bb96fd17f813fa1b74f568.zip
Moved all metadata processing from the build script into a Pandoc Lua filter
Diffstat (limited to 'scripts/build_content.sh')
-rwxr-xr-xscripts/build_content.sh200
1 files changed, 41 insertions, 159 deletions
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() {
23 23
24FILTERS=$(get_filters) 24FILTERS=$(get_filters)
25 25
26CATEGORIES=$(cat "$METADATA_DIR/categories.json")
27
28get_target_filename() { 26get_target_filename() {
29 filename=$1 27 filename=$1
30 filename=${filename#"$CONTENT_DIR"} 28 filename=${filename#"$CONTENT_DIR"}
@@ -34,43 +32,29 @@ get_target_filename() {
34 echo "$OUTPUT_DIR$filename" 32 echo "$OUTPUT_DIR$filename"
35} 33}
36 34
37get_url_rel() {
38 basedir=$1
39 filename=$2
40 ext=$3
41 filename=$(realpath --relative-to="$basedir" "$filename")
42 filename="${filename%.md}.$ext"
43 if [ "${filename##*/}" = "index.html" ]; then
44 filename=${filename%index.html}
45 fi
46 echo "$filename"
47}
48
49get_url_abs() {
50 echo "/$(get_url_rel "$CONTENT_DIR" "$1" "$2")"
51}
52
53get_metadata() { 35get_metadata() {
54 pandoc "$1" \ 36 pandoc "$2" \
55 -f markdown \ 37 -f markdown \
56 -t plain \ 38 -t plain \
39 --metadata content_dir="$CONTENT_DIR" \
40 --metadata base_file="$1" \
41 --metadata file="$2" \
42 --metadata-file metadata/metadata.yaml \
57 --no-highlight \ 43 --no-highlight \
58 --template scripts/metadata_tpl.json 44 --template scripts/metadata_tpl.json \
45 --lua-filter scripts/metadata_filter.lua
59} 46}
60 47
61get_content() { 48get_content() {
62 pandoc "$1" \ 49 pandoc "$2" \
63 -f markdown \ 50 -f markdown \
64 -t plain \ 51 -t plain \
65 --no-highlight 52 --metadata content_dir="$CONTENT_DIR" \
66} 53 --metadata base_file="$1" \
67 54 --metadata file="$2" \
68get_section() { 55 --metadata-file metadata/metadata.yaml \
69 filename=$1 56 --no-highlight \
70 filename=${filename#"$CONTENT_DIR"} 57 --lua-filter scripts/metadata_filter.lua
71 filename=${filename%.md}
72 filename=$(echo "$filename" | cut -f1 -d /)
73 echo "$filename"
74} 58}
75 59
76get_subpages_basedir() { 60get_subpages_basedir() {
@@ -82,7 +66,7 @@ get_subpages_basedir() {
82 echo "$filename" 66 echo "$filename"
83} 67}
84 68
85get_subpages_meta() { 69get_subpages_metadata() {
86 basedir=$(get_subpages_basedir "$1") 70 basedir=$(get_subpages_basedir "$1")
87 child_pages=() 71 child_pages=()
88 72
@@ -97,98 +81,25 @@ get_subpages_meta() {
97 -print0) 81 -print0)
98 fi 82 fi
99 83
100 pages=$(echo "{}" | jq ". + { \ 84 pages="[]"
101 all: [], \
102 by_year: {}, \
103 }")
104
105 categories="{}"
106 85
107 if [ ${#child_pages[@]} -ne 0 ]; then 86 if [ ${#child_pages[@]} -ne 0 ]; then
108 #echo -e "\033[0;90m[////////]\033[0m Child pages:"
109
110 for file in "${child_pages[@]}"; do 87 for file in "${child_pages[@]}"; do
111 #echo -e "\033[0;90m[////////]\033[0m - $file" 88 metadata=$(get_metadata "$1" "$file" | jq "{ \
112 89 url: .url, \
113 metadata=$(get_metadata "$file") 90 author: .author, \
114 91 title: .title, \
115 section=$(get_section "$file") 92 date: .date, \
116 93 last_update: .last_update, \
117 url_rel=$(get_url_rel "$basedir" "$file" "html") 94 category: .category, \
118 url_abs=$(get_url_abs "$file" "html") 95 content: \"$(get_content "$1" "$file" | sed -z 's/\\/\\\\/g;s/\n/\\n/g;s/"/\"/g')\" \
119 url_full="${SITE%/}$url_abs" 96 } | del(.[] | nulls)")
120 97
121 date=$(echo "$metadata" | jq -r .date) 98 pages=$(echo "$pages" | jq ". += [ $metadata ]")
122 date_rfc3339=""
123
124 if [ "$date" != "" ]; then
125 date_rfc3339=$(date -d "$date" --rfc-3339=seconds | sed 's/ /T/')
126 fi
127
128 last_update=$(echo "$metadata" | jq -r .last_update)
129 last_update_rfc3339=""
130
131 if [ "$last_update" != "" ]; then
132 last_update=$date
133 fi
134
135 if [ "$last_update" != "" ]; then
136 last_update_rfc3339=$(date -d "$last_update" --rfc-3339=seconds | sed 's/ /T/')
137 fi
138
139 category=$(echo "$metadata" | jq -r .category)
140 category_name=""
141
142 if [ "$section" != "" ] && [ "$category" != "" ]; then
143 category_name=$(echo "$CATEGORIES" | jq -r ".$section.$category")
144 fi
145
146 content=$(get_content "$file")
147
148 metadata=$(echo "$metadata" | jq ". + { \
149 content: \"$(echo "$content" | sed -z 's/\\/\\\\/g;s/\n/\\n/g;s/"/\"/g')\", \
150 date: { \
151 yyyy_mm_dd: \"$date\", \
152 rfc3339: \"$date_rfc3339\" \
153 }, \
154 last_update: { \
155 yyyy_mm_dd: \"$last_update\", \
156 rfc3339: \"$last_update_rfc3339\" \
157 }, \
158 url: { \
159 rel: \"$url_rel\", \
160 abs: \"$url_abs\", \
161 full: \"$url_full\" \
162 } \
163 }")
164
165 pages=$(echo "$pages" | jq ".all += [ $metadata ]")
166
167 if [ "$date" != "" ]; then
168 date_year=$(date -d "$date" +%Y)
169 #date_month=$(date -d "$date" +%m)
170 #date_day=$(date -d "$date" +%d)
171
172 pages=$(echo "$pages" | jq ".by_year.\"$date_year\" += [ $metadata ]")
173 fi
174
175 if [ "$category" != "" ]; then
176 categories=$(echo "$categories" | jq ".$category = { name: \"$category_name\", count: (.$category.count + 1) } ")
177 fi
178 done 99 done
179 fi 100 fi
180 101
181 pages=$(echo "$pages" \ 102 echo "{ \"pages\": $pages }"
182 | jq ".all |= (sort_by(.date) | reverse) \
183 | .by_year |= (to_entries | sort_by(.key) | reverse \
184 | .[].value |= (sort_by(.date) | reverse))")
185
186 categories=$(echo "$categories" | jq ". | to_entries | { by_id: (. | sort_by(.key)), by_count: (. | sort_by(.value.count) | reverse) }")
187
188 echo "{}" | jq ". + { \
189 pages: $pages, \
190 categories: $categories
191 }"
192} 103}
193 104
194handle () { 105handle () {
@@ -201,47 +112,10 @@ handle () {
201 112
202 echo -e "\033[0;90m[COMPILE ]\033[0m Getting metadata" 113 echo -e "\033[0;90m[COMPILE ]\033[0m Getting metadata"
203 114
204 included_metadata=$(get_metadata "$1") 115 included_metadata=$(get_metadata "$1" "$1")
116 added_metadata=$(get_subpages_metadata "$1")
205 117
206 create_feed=$(echo "$included_metadata" | jq -r .create_feed) 118 create_feed=$(echo "$included_metadata" | jq -r .create_feed)
207
208 url_abs=$(get_url_abs "$1" "html")
209 url_full="${SITE%/}$url_abs"
210
211 section=$(get_section "$1")
212
213 is_home=false
214 if [ "$target_file" = "${OUTPUT_DIR}index.html" ]; then
215 is_home=true
216 fi
217
218 added_metadata=$(echo "$(get_subpages_meta "$1")" | jq ". + { \
219 url: { \
220 abs: \"$url_abs\", \
221 full: \"$url_full\" \
222 }, \
223 section: { \
224 id: \"$section\", \
225 is_$section: true \
226 }, \
227 is_home: $is_home \
228 }")
229
230 if [ "$create_feed" = "true" ]; then
231 feed_url_abs="$(get_url_abs "$1" "xml")"
232 feed_url_full="${SITE%/}$feed_url_abs"
233 last_update=$(echo "$added_metadata" | jq -r ".pages.all[0].last_update")
234
235 added_metadata=$(echo "$added_metadata" | jq ". + { \
236 feed: { \
237 last_update: $last_update, \
238 url: { \
239 abs: \"$feed_url_abs\", \
240 full: \"$feed_url_full\" \
241 } \
242 } \
243 }")
244 fi
245 119
246 meta_file=$(mktemp) 120 meta_file=$(mktemp)
247 121
@@ -256,8 +130,13 @@ handle () {
256 --no-highlight \ 130 --no-highlight \
257 --template "${TEMPLATES_DIR}feed.xml" \ 131 --template "${TEMPLATES_DIR}feed.xml" \
258 -o "${target_file%.html}.xml" \ 132 -o "${target_file%.html}.xml" \
133 --metadata content_dir="$CONTENT_DIR" \
134 --metadata base_file="$1" \
135 --metadata file="$1" \
136 --metadata type=feed \
259 --metadata-file metadata/metadata.yaml \ 137 --metadata-file metadata/metadata.yaml \
260 --metadata-file "$meta_file" \ 138 --metadata-file "$meta_file" \
139 --lua-filter scripts/metadata_filter.lua \
261 $FILTERS 140 $FILTERS
262 fi 141 fi
263 142
@@ -269,15 +148,18 @@ handle () {
269 --no-highlight \ 148 --no-highlight \
270 --template "${TEMPLATES_DIR}base.html" \ 149 --template "${TEMPLATES_DIR}base.html" \
271 -o "$target_file" \ 150 -o "$target_file" \
151 --metadata content_dir="$CONTENT_DIR" \
152 --metadata base_file="$1" \
153 --metadata file="$1" \
272 --metadata-file metadata/metadata.yaml \ 154 --metadata-file metadata/metadata.yaml \
273 --metadata-file "$meta_file" \ 155 --metadata-file "$meta_file" \
156 --lua-filter scripts/metadata_filter.lua \
274 $FILTERS 157 $FILTERS
275 158
276 rm "$meta_file" 159 rm "$meta_file"
277 160
278 # echo $(pandoc "$1" \ 161 # echo "$included_metadata"
279 # -f markdown \ 162 # echo "$added_metadata"
280 # -t json)
281 163
282 echo -e "\033[0;90m[COMPILE ]\033[0m Done" 164 echo -e "\033[0;90m[COMPILE ]\033[0m Done"
283 else 165 else