diff options
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/build_content.sh | 33 | ||||
-rw-r--r-- | scripts/metadata_filter.lua | 17 |
2 files changed, 31 insertions, 19 deletions
diff --git a/scripts/build_content.sh b/scripts/build_content.sh index 8bcf7c2..c20eca8 100755 --- a/scripts/build_content.sh +++ b/scripts/build_content.sh | |||
@@ -32,6 +32,7 @@ get_metadata() { | |||
32 | --metadata content_dir="$CONTENT_DIR" \ | 32 | --metadata content_dir="$CONTENT_DIR" \ |
33 | --metadata output_dir="$OUTPUT_DIR" \ | 33 | --metadata output_dir="$OUTPUT_DIR" \ |
34 | --metadata file_in="$1" \ | 34 | --metadata file_in="$1" \ |
35 | --metadata relative_to="$2" \ | ||
35 | --metadata-file metadata/metadata.yaml \ | 36 | --metadata-file metadata/metadata.yaml \ |
36 | --no-highlight \ | 37 | --no-highlight \ |
37 | --template scripts/metadata_tpl.json \ | 38 | --template scripts/metadata_tpl.json \ |
@@ -50,37 +51,32 @@ get_content() { | |||
50 | --lua-filter scripts/metadata_filter.lua | 51 | --lua-filter scripts/metadata_filter.lua |
51 | } | 52 | } |
52 | 53 | ||
53 | get_subpages_basedir() { | ||
54 | local filename=$1 | ||
55 | filename=${filename%.md} | ||
56 | if [ "${filename##*/}" = "index" ]; then | ||
57 | filename=${filename%/index} | ||
58 | fi | ||
59 | echo "$filename" | ||
60 | } | ||
61 | |||
62 | get_subpages_metadata() { | 54 | get_subpages_metadata() { |
63 | local base_dir_in=$(get_subpages_basedir "$1") | 55 | local base_dir_in=${1%/index.md} |
56 | local relative_to="$2" | ||
57 | if [ -z "$2" ]; then | ||
58 | relative_to="$1" | ||
59 | fi | ||
64 | local child_pages=() | 60 | local child_pages=() |
65 | 61 | ||
66 | if [ -d "$base_dir_in" ]; then | 62 | if [ -d "$base_dir_in" ]; then |
67 | mapfile -d $'\0' child_pages < <(find "$base_dir_in" \ | 63 | mapfile -d $'\0' child_pages < <(find "$base_dir_in" \ |
68 | -maxdepth 2 \ | 64 | -maxdepth 2 \ |
69 | -type f \ | 65 | -type f \ |
70 | -name "*.md" \ | 66 | -wholename "$base_dir_in/*/index.md" \ |
71 | ! -name "_*.md" \ | 67 | ! -name "_*.md" \ |
72 | ! -wholename "$base_dir_in/index.md" \ | ||
73 | \( -wholename "$base_dir_in/*/index.md" -o ! -wholename "$base_dir_in/*/*.md" \) \ | ||
74 | -print0) | 68 | -print0) |
75 | fi | 69 | fi |
76 | 70 | ||
77 | local pages="[]" | 71 | local pages="[]" |
72 | local sections="{}" | ||
78 | 73 | ||
79 | for file_in in "${child_pages[@]}"; do | 74 | for file_in in "${child_pages[@]}"; do |
75 | local section=$(basename "${file_in%/index.md}") | ||
80 | local content=$(get_content "$file_in" | sed -z 's/\\/\\\\/g;s/\n/\\n/g;s/"/\\"/g') | 76 | local content=$(get_content "$file_in" | sed -z 's/\\/\\\\/g;s/\n/\\n/g;s/"/\\"/g') |
81 | |||
82 | local metadata=$(get_metadata "$file_in" | jq "{ \ | 77 | local metadata=$(get_metadata "$file_in" | jq "{ \ |
83 | file_out: .file_out, \ | 78 | file_out: .file_out, \ |
79 | url: .url, \ | ||
84 | author: .author, \ | 80 | author: .author, \ |
85 | title: .title, \ | 81 | title: .title, \ |
86 | date: .date, \ | 82 | date: .date, \ |
@@ -88,11 +84,18 @@ get_subpages_metadata() { | |||
88 | category: .category, \ | 84 | category: .category, \ |
89 | content: \"$content\" \ | 85 | content: \"$content\" \ |
90 | } | del(.[] | nulls)") | 86 | } | del(.[] | nulls)") |
87 | local title=$(echo "$metadata" | jq ".title") | ||
88 | local subpages="[]" | ||
89 | |||
90 | if [ -z "$2" ]; then | ||
91 | subpages=$(get_subpages_metadata "$file_in" "$1" | jq ".pages") | ||
92 | fi | ||
91 | 93 | ||
92 | pages=$(echo "$pages" | jq ". += [ $metadata ]") | 94 | pages=$(echo "$pages" | jq ". += [ $metadata ]") |
95 | sections=$(echo "$sections" | jq ". += { \"$section\": { title: $title, pages: $subpages } }") | ||
93 | done | 96 | done |
94 | 97 | ||
95 | echo "{ \"pages\": $pages }" | 98 | echo "{ \"pages\": $pages, \"sections\": $sections }" |
96 | } | 99 | } |
97 | 100 | ||
98 | handle () { | 101 | handle () { |
diff --git a/scripts/metadata_filter.lua b/scripts/metadata_filter.lua index 7823130..499cf3e 100644 --- a/scripts/metadata_filter.lua +++ b/scripts/metadata_filter.lua | |||
@@ -260,8 +260,14 @@ function Meta(meta) | |||
260 | 260 | ||
261 | meta.file_out = get_file_out(meta.rewrites, meta.content_dir, | 261 | meta.file_out = get_file_out(meta.rewrites, meta.content_dir, |
262 | meta.output_dir, meta.file_in) | 262 | meta.output_dir, meta.file_in) |
263 | if meta.relative_to == nil then | ||
264 | meta.relative_to = meta.file_in | ||
265 | end | ||
266 | meta.relative_to_out = get_file_out(meta.rewrites, meta.content_dir, | ||
267 | meta.output_dir, meta.relative_to) | ||
263 | 268 | ||
264 | meta.url = resolve_url(meta.site.url, meta.output_dir, meta.file_out, meta.file_out) | 269 | meta.url = resolve_url(meta.site.url, meta.output_dir, meta.relative_to_out, |
270 | meta.file_out) | ||
265 | 271 | ||
266 | meta.date = format_date(meta.date) | 272 | meta.date = format_date(meta.date) |
267 | if meta.last_update ~= nil then | 273 | if meta.last_update ~= nil then |
@@ -276,14 +282,16 @@ function Meta(meta) | |||
276 | 282 | ||
277 | if meta.page_type == "feed" then | 283 | if meta.page_type == "feed" then |
278 | meta.page = pandoc.MetaMap({ | 284 | meta.page = pandoc.MetaMap({ |
279 | url = resolve_url(meta.site.url, meta.output_dir, meta.file_out, | 285 | url = resolve_url(meta.site.url, meta.output_dir, |
286 | meta.relative_to_out, | ||
280 | meta.file_out:gsub("%.xml$", ".html")) | 287 | meta.file_out:gsub("%.xml$", ".html")) |
281 | }) | 288 | }) |
282 | end | 289 | end |
283 | 290 | ||
284 | if meta.create_feed then | 291 | if meta.create_feed then |
285 | meta.feed = pandoc.MetaMap({ | 292 | meta.feed = pandoc.MetaMap({ |
286 | url = resolve_url(meta.site.url, meta.output_dir, meta.file_out, | 293 | url = resolve_url(meta.site.url, meta.output_dir, |
294 | meta.relative_to_out, | ||
287 | meta.file_out:gsub("%.html$", ".xml")) | 295 | meta.file_out:gsub("%.html$", ".xml")) |
288 | }) | 296 | }) |
289 | end | 297 | end |
@@ -296,7 +304,8 @@ function Meta(meta) | |||
296 | if meta.pages then | 304 | if meta.pages then |
297 | local pages, categories = organize_subpages(meta.site.url, | 305 | local pages, categories = organize_subpages(meta.site.url, |
298 | meta.output_dir, | 306 | meta.output_dir, |
299 | meta.file_out, meta.pages) | 307 | meta.relative_to_out, |
308 | meta.pages) | ||
300 | meta.pages = pages | 309 | meta.pages = pages |
301 | meta.categories = categories | 310 | meta.categories = categories |
302 | end | 311 | end |