2021-10-20 19:35:46 +00:00
|
|
|
#!/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
|
|
|
|
|
2023-01-02 15:20:31 +00:00
|
|
|
# Use case-insensitive sorting, which will lead to more intuitive index pages.
|
|
|
|
SORT="sort -f"
|
|
|
|
|
2021-10-20 19:35:46 +00:00
|
|
|
# Prepare output directories
|
|
|
|
for d in "${MAN_DIR}"*/; do
|
|
|
|
dir_name=$(basename "$d")
|
|
|
|
section="${dir_name/man}"
|
2021-10-20 19:46:39 +00:00
|
|
|
mkdir -p "output/${dir_name}"
|
2021-10-20 19:35:46 +00:00
|
|
|
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.
|
|
|
|
|
2023-01-02 15:20:31 +00:00
|
|
|
for md_file in $(find "${MAN_DIR}" -iname '*.md' | ${SORT}); do
|
2021-10-20 19:46:39 +00:00
|
|
|
relative_path="$(realpath --relative-to="${MAN_DIR}" "${md_file}")"
|
|
|
|
section="${relative_path%%/*}"
|
|
|
|
section_number="${section#man}"
|
|
|
|
filename="${relative_path#*/}"
|
|
|
|
name="${filename%.md}"
|
2023-01-02 15:20:31 +00:00
|
|
|
output_file="output/${section}/${name}.html"
|
|
|
|
|
2023-01-02 15:22:55 +00:00
|
|
|
echo "Generating $md_file -> $output_file"
|
2023-01-02 15:20:31 +00:00
|
|
|
mkdir -p "$(dirname "${output_file}")"
|
2021-10-20 19:52:34 +00:00
|
|
|
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" \
|
2023-01-02 15:20:31 +00:00
|
|
|
-o "${output_file}" \
|
2023-01-02 15:30:21 +00:00
|
|
|
"${md_file}" &
|
2021-10-20 19:46:39 +00:00
|
|
|
done
|
2021-10-20 19:35:46 +00:00
|
|
|
|
2023-01-02 15:30:21 +00:00
|
|
|
# Wait for all pandoc executions to finish so that man page indices are always correct.
|
|
|
|
# shellcheck disable=SC2046 # Word splitting is intentional here
|
|
|
|
wait $(jobs -p)
|
|
|
|
|
2021-10-20 19:52:34 +00:00
|
|
|
# Generate man page listings through pandoc
|
2023-01-02 15:20:31 +00:00
|
|
|
for section_directory in output/*/; do
|
|
|
|
section=$(basename "${section_directory}")
|
2021-10-20 19:52:34 +00:00
|
|
|
section_number="${section#man}"
|
2021-10-20 19:52:34 +00:00
|
|
|
case "${section_number}" in
|
|
|
|
1) section_title="User Programs";;
|
|
|
|
2) section_title="System Calls";;
|
|
|
|
3) section_title="Library Functions";;
|
|
|
|
4) section_title="Special Files";;
|
2022-02-24 23:04:22 +00:00
|
|
|
5) section_title="File Formats";;
|
2023-01-02 15:20:31 +00:00
|
|
|
6) section_title="Games";;
|
2021-10-20 19:52:34 +00:00
|
|
|
7) section_title="Miscellanea";;
|
|
|
|
8) section_title="Sysadmin Tools";;
|
|
|
|
*) section_title="SerenityOS man pages"; echo "WARNING: Unrecognized section ${section_number}?!";;
|
|
|
|
esac
|
2023-01-02 15:20:31 +00:00
|
|
|
output="output/${section}/index.html"
|
2023-01-02 15:22:55 +00:00
|
|
|
|
|
|
|
echo "Generating section ${section_number} index -> ${output}"
|
2021-10-20 19:52:34 +00:00
|
|
|
pandoc -f gfm -t html5 -s \
|
|
|
|
-B Meta/Websites/man.serenityos.org/banner-preamble.inc \
|
2021-10-20 19:52:34 +00:00
|
|
|
--metadata title="Section ${section_number} - ${section_title}" \
|
2023-01-02 15:20:31 +00:00
|
|
|
-o "${output}" \
|
2021-10-20 19:52:34 +00:00
|
|
|
<(
|
2023-01-02 15:20:31 +00:00
|
|
|
for f in $(find "${section_directory}" -iname '*.html' | ${SORT}); do
|
|
|
|
filename=$(realpath --relative-to="${section_directory}" "$f")
|
2021-10-20 19:52:34 +00:00
|
|
|
name="${filename%.html}"
|
|
|
|
if [[ "$filename" == "index.html" ]]; then
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
echo "- [${name}](${filename})"
|
|
|
|
done
|
2023-01-02 15:30:21 +00:00
|
|
|
) &
|
2021-10-20 19:52:34 +00:00
|
|
|
done
|
|
|
|
|
|
|
|
# Generate main landing page listings through pandoc
|
2023-01-02 15:22:55 +00:00
|
|
|
echo 'Generating main pages'
|
2021-10-20 19:52:34 +00:00
|
|
|
pandoc -f gfm -t html5 -s \
|
|
|
|
-B Meta/Websites/man.serenityos.org/banner-preamble.inc \
|
|
|
|
--metadata title="SerenityOS man pages" \
|
|
|
|
-o output/index.html \
|
2023-01-02 15:30:21 +00:00
|
|
|
Meta/Websites/man.serenityos.org/index.md &
|
2022-01-10 21:28:43 +00:00
|
|
|
pandoc -f gfm -t html5 -s \
|
|
|
|
-B Meta/Websites/man.serenityos.org/banner-preamble.inc \
|
|
|
|
--metadata title="Can't run applications" \
|
|
|
|
-o output/cant-run-application.html \
|
2023-01-02 15:30:21 +00:00
|
|
|
Meta/Websites/man.serenityos.org/cant-run-application.md &
|
2021-10-20 19:52:34 +00:00
|
|
|
|
2021-10-20 19:35:46 +00:00
|
|
|
# Copy pre-made files
|
2023-01-02 15:22:55 +00:00
|
|
|
echo 'Copying images'
|
2023-01-02 15:39:41 +00:00
|
|
|
rsync -a Meta/Websites/man.serenityos.org/banner.png output/ &
|
|
|
|
rsync -a Base/usr/share/man/man7/LibDSP_classes.svg output/ &
|
|
|
|
rsync -a Base/usr/share/man/man1/*.png output/ &
|
2022-01-17 09:43:28 +00:00
|
|
|
|
|
|
|
# Copy icons
|
|
|
|
mkdir output/icons
|
|
|
|
|
|
|
|
while read -r p; do
|
|
|
|
rsync -a --relative Base/res/icons/./"$p" output/icons/
|
|
|
|
done < icons.txt
|
|
|
|
|
|
|
|
rm icons.txt
|
2023-01-02 15:30:21 +00:00
|
|
|
|
|
|
|
# shellcheck disable=SC2046 # Word splitting is intentional here
|
|
|
|
wait $(jobs -p)
|