1
0
mirror of https://github.com/SerenityOS/serenity synced 2024-07-09 02:10:45 +00:00
serenity/Meta/build-manpages-website.sh
kleines Filmröllchen 76e601d758 Meta/build-manpages-website: Copy all manpage PNGs
This will allow using images in manpages elsewhere in the future without
adjusting the PNG copying command.

rsync unfortunately cannot place all files into the root folder when
receiving a list of files via --files-from=-.
2023-01-08 13:35:29 +01:00

122 lines
4.3 KiB
Bash
Executable File

#!/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
# Use case-insensitive sorting, which will lead to more intuitive index pages.
SORT="sort -f"
# 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 $(find "${MAN_DIR}" -iname '*.md' | ${SORT}); do
relative_path="$(realpath --relative-to="${MAN_DIR}" "${md_file}")"
section="${relative_path%%/*}"
section_number="${section#man}"
filename="${relative_path#*/}"
name="${filename%.md}"
output_file="output/${section}/${name}.html"
echo "Generating $md_file -> $output_file"
mkdir -p "$(dirname "${output_file}")"
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_file}" \
"${md_file}" &
done
# 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)
# Generate man page listings through pandoc
for section_directory in output/*/; do
section=$(basename "${section_directory}")
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="File Formats";;
6) section_title="Games";;
7) section_title="Miscellanea";;
8) section_title="Sysadmin Tools";;
*) section_title="SerenityOS man pages"; echo "WARNING: Unrecognized section ${section_number}?!";;
esac
output="output/${section}/index.html"
echo "Generating section ${section_number} index -> ${output}"
pandoc -f gfm -t html5 -s \
-B Meta/Websites/man.serenityos.org/banner-preamble.inc \
--metadata title="Section ${section_number} - ${section_title}" \
-o "${output}" \
<(
for f in $(find "${section_directory}" -iname '*.html' | ${SORT}); do
filename=$(realpath --relative-to="${section_directory}" "$f")
if [[ "$filename" == "index.html" ]]; then
continue
fi
filename_no_extension="${filename%.html}"
# Generate indentation by subdirectory count: Replace each slash by the two Markdown indentation spaces, then remove all non-space characters.
indentation=$(echo "${filename_no_extension}" | sed -e 's/ //g' -e 's/\// /g' -e 's/[^ ]//g')
name="$(basename "${filename}")"
name="${name%.html}"
echo "${indentation}- [${name}](${filename})"
done
) &
done
# Generate main landing page listings through pandoc
echo 'Generating main pages'
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 &
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 \
Meta/Websites/man.serenityos.org/cant-run-application.md &
# Copy pre-made files
echo 'Copying images'
rsync -a Meta/Websites/man.serenityos.org/banner.png output/ &
rsync -a Base/usr/share/man/man7/LibDSP_classes.svg output/ &
find Base/usr/share/man/ -iname '*.png' -exec rsync -a {} output/ \; &
# 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
# shellcheck disable=SC2046 # Word splitting is intentional here
wait $(jobs -p)