#!/bin/bash
#
# Handy script to rebuild the markdown version of the man pages.
# This uses pandoc if it is installed.
#
# For rendering the md, we can use a different command:
#
#   cd md; for x in *.md ; do pandoc -s $x --metadata pagetitle="${x%.md}" -o ${x%.md}.html --lua-filter=../md2html.lua ; done

if [[ -z "$(which pandoc)" ]]; then
    echo "pandoc not found - skipping conversion"
    exit 0
fi

outdir="$1"
if [[ -z "${outdir}" ]]; then
    echo "usage $0 <outdir>"
    exit 1
fi

mkdir -p "${outdir}"
if [[ $? -ne 0 ]]; then
    echo "failed to make output directory: ${outdir}"
    exit 1
fi

index="${outdir}/index.md"

function do_page () {
    m="$1"
    base="${m%.*}"
    sect="${m#*.}"
    output="${base}-${sect}.md"

    redir="$(grep '^.so man' "${m}")"
    if [[ $? -eq 0 ]]; then
	r="${redir#*/}"
	rbase="${r%.*}"
	rsect="${r#*.}"
	echo "* [${base}(${sect})](${rbase}-${rsect}.md)" >> "${index}"
	return
    fi

    pandoc -f man -t markdown < "${m}" | sed 's/\*\*\([^*]\+\)\*\*(\([138]\+\))/[\1(\2)](\1-\2.md)/g' > "${outdir}/${base}-${sect}.md"
    echo "* [${base}(${sect})](${base}-${sect}.md)" >> "${index}"
}

cat > "${index}" <<EOF
# Manpages for libcap and libpsx

## Individual reference pages
EOF

# Assumes the m's are listed alphabetically.
for n in 1 3 8 ; do
	cat >> "${index}" <<EOF

### Section ${n}

EOF
    for m in *.${n}; do
	do_page "${m}"
    done
done

cat >> "${index}" <<EOF

## More information

For further information, see the
[FullyCapable](https://sites.google.com/site/fullycapable/) homepage
for libcap.

## MD page generation

These official man pages for libcap and libpsx were converted to
markdown using [pandoc](https://pandoc.org).

EOF
