diff options
Diffstat (limited to 'scripts/build_content.sh')
-rwxr-xr-x | scripts/build_content.sh | 200 |
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 | ||
24 | FILTERS=$(get_filters) | 24 | FILTERS=$(get_filters) |
25 | 25 | ||
26 | CATEGORIES=$(cat "$METADATA_DIR/categories.json") | ||
27 | |||
28 | get_target_filename() { | 26 | get_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 | ||
37 | get_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 | |||
49 | get_url_abs() { | ||
50 | echo "/$(get_url_rel "$CONTENT_DIR" "$1" "$2")" | ||
51 | } | ||
52 | |||
53 | get_metadata() { | 35 | get_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 | ||
61 | get_content() { | 48 | get_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" \ | |
68 | get_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 | ||
76 | get_subpages_basedir() { | 60 | get_subpages_basedir() { |
@@ -82,7 +66,7 @@ get_subpages_basedir() { | |||
82 | echo "$filename" | 66 | echo "$filename" |
83 | } | 67 | } |
84 | 68 | ||
85 | get_subpages_meta() { | 69 | get_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 | ||
194 | handle () { | 105 | handle () { |
@@ -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 |