summaryrefslogtreecommitdiffstats
path: root/scripts/build_content.sh
blob: 1344be1059347362e25ab2efa220217ad25b1238 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#!/bin/bash

target_filename () {
    if [ "${1#*.}" = "md" ]; then
        echo "output/$(echo "${1%.md}.html" | cut -sd / -f 2-)"
    else
        echo "output/$(echo "$1" | cut -sd / -f 2-)"
    fi
}

get_subpages_basedir() {
    filename=$(basename "$1")
    if [ "$filename" = "index.md" ]; then
        dirname "$1"
    else
        echo "${1%.md}"
    fi
}

get_subpages() {
    basedir=$(get_subpages_basedir "$1")
    child_pages=()

    if [ -d "$basedir" ]; then
        mapfile -d $'\0' child_pages_1 < <(find $basedir/ \
            -type f \
            -name "*.md" ! -name "index.md" \
            -maxdepth 1 \
            -print0)

        mapfile -d $'\0' child_pages_2 < <(find $basedir/ \
            -type f \
            -name "index.md" \
            -mindepth 2 \
            -maxdepth 2 \
            -print0)

        child_pages=("${child_pages_1[@]}" "${child_pages_2[@]}")
    fi

    if [ ${#child_pages[@]} -ne 0 ]; then
        echo -e "\033[0;90m[////////]\033[0m     Child pages:"

        for file in "${child_pages[@]}"; do
            echo -e "\033[0;90m[////////]\033[0m     - $file"
        done
    fi
}

handle () {
    target=$(target_filename "$1")
    mkdir -p $(dirname "$target")

    if [ "${1#*.}" = "md" ]; then
        echo -e "\033[0;32m[COMPILE ]\033[0m $1 -> $target"

        subpages_meta=$(mktemp)

        # $(get_subpages "$1") > "$subpages_meta"

        get_subpages "$1"

        pandoc "$1" \
            -f markdown \
            -t html5 \
            --template templates/base.html \
            -o "$target" \
            --metadata-file metadata/metadata.yaml \
            --metadata-file "$subpages_meta"

        rm "$subpages_meta"
    else
        echo -e "\033[0;32m[COPY    ]\033[0m $1 -> $target"

        cp "$1" "$target"
    fi
}

if [ -z "$1" ]; then
    find content/ \
        -type f \
        | while read file
            do
                handle "$file"
            done
elif [ "$1" = "all_md" ]; then
    find content/ \
        -type f \
        -name "*.md" \
        | while read file
            do
                handle "$file"
            done
elif [ "$1" = "single" ]; then
    if [ -z "$2" ]; then
        echo -e "\033[0;31m[ERROR   ]\033[0m \"single\" operation requires file argument"
    else
        handle "$2"
    fi
elif [ "$1" = "delete" ]; then
    if [ -z "$2" ]; then
        echo -e "\033[0;31m[ERROR   ]\033[0m \"delete\" operation requires file argument"
    else
        TARGET=$(target_filename "$2")
        echo -e "\033[0;32m[DELETE  ]\033[0m $2 -> $TARGET"
        rm -rf $TARGET
    fi
else
    echo -e "\033[0;31m[ERROR   ]\033[0m Unknown operation: \"$1\""
fi