summaryrefslogtreecommitdiff
path: root/Meta/build-manpages-website.sh
blob: b7dd56209fd38fc5385663b65b7e9fec828877e5 (plain)
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
#!/bin/bash
# shellcheck disable=SC1004 # literal backslash+linefeed is intended

set -e

script_path=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
cd "${script_path}/.."

export LC_ALL=C  # Make the directory order reproducible
export MAN_DIR=Base/usr/share/man/

if [[ -e output ]]; then
    echo "Directory 'output/' already exists. Delete it first."
    exit 1
fi

# Prepare output directories
for d in "${MAN_DIR}"*/; do
    dir_name=$(basename "$d")
    section="${dir_name/man}"
    mkdir -p "output/${dir_name}"
done

# Convert markdown to html

# If you're here because your local results are different from the website:
# Check that your pandoc version matches the pandoc-version specified in manpages.yaml.

for md_file in "${MAN_DIR}"*/*.md; do
    relative_path="$(realpath --relative-to="${MAN_DIR}" "${md_file}")"
    section="${relative_path%%/*}"
    section_number="${section#man}"
    filename="${relative_path#*/}"
    name="${filename%.md}"
    pandoc -f gfm -t html5 -s \
        -B Meta/Websites/man.serenityos.org/banner-preamble.inc \
        --lua-filter=Meta/convert-markdown-links.lua \
        --metadata title="${name}(${section_number}) - SerenityOS man pages" \
        -o "output/${section}/${name}.html" \
        "${md_file}"
done

# Generate man page listings through pandoc
for d in output/*/; do
    section=$(basename "$d")
    section_number="${section#man}"
    pandoc -f gfm -t html5 -s \
        -B Meta/Websites/man.serenityos.org/banner-preamble.inc \
        --metadata title="Section ${section_number} - SerenityOS man pages" \
        -o "output/${section}/index.html" \
        <(
            for f in "$d"/*; do
                filename=$(basename "$f")
                name="${filename%.html}"
                if [[ "$filename" == "index.html" ]]; then
                    continue
                fi
                echo "- [${name}](${filename})"
            done
        )
done

# Generate man page listings through pandoc
for d in output/*/; do
    section=$(basename "$d")
    section_number="${section#man}"
    case "${section_number}" in
        1) section_title="User Programs";;
        2) section_title="System Calls";;
        3) section_title="Library Functions";;
        4) section_title="Special Files";;
        5) section_title="User Programs";;
        6) section_title="Games";; # TODO: Populate this section
        7) section_title="Miscellanea";;
        8) section_title="Sysadmin Tools";;
        *) section_title="SerenityOS man pages"; echo "WARNING: Unrecognized section ${section_number}?!";;
    esac
    pandoc -f gfm -t html5 -s \
        -B Meta/Websites/man.serenityos.org/banner-preamble.inc \
        --metadata title="Section ${section_number} - ${section_title}" \
        -o "output/${section}/index.html" \
        <(
            for f in "$d"/*; do
                filename=$(basename "$f")
                name="${filename%.html}"
                if [[ "$filename" == "index.html" ]]; then
                    continue
                fi
                echo "- [${name}](${filename})"
            done
        )
done

# Generate main landing page listings through pandoc
pandoc -f gfm -t html5 -s \
    -B Meta/Websites/man.serenityos.org/banner-preamble.inc \
    --metadata title="SerenityOS man pages" \
    -o output/index.html \
    Meta/Websites/man.serenityos.org/index.md

# Copy pre-made files
cp Meta/Websites/man.serenityos.org/banner.png output/