diff options
Diffstat (limited to 'scripts/build_content.sh')
-rwxr-xr-x | scripts/build_content.sh | 33 |
1 files changed, 18 insertions, 15 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 () { |