#!/bin/bash
#
# cs_man2pdf
#
# (c) 2011-2017 SUSE Linux GmbH, Germany.
# (c) 2018-2019 SUSE LLC
# Author: L.Pinne.
# GNU General Public License v2. No warranty.
# http://www.gnu.org/licenses/gpl.html
#
# Version: 2019-12-05 SLES12
#
# TODO handle perl man pages with "::" in filenames

EXE="$0"

function show_help(){
	echo "usage: $(basename "$EXE") --help | --version"
	echo "usage: $(basename "$EXE") --dir <dir>"
	echo "usage: $(basename "$EXE") --rpm <rpm>"
	echo "usage: $(basename "$EXE") <man_pag> <section>"
	echo
	echo " --dir <dir>	convert man pages from directory"
	echo " --rpm <rpm>	convert man pages from installed RPM"
	echo " --help		show help"
	echo " --version	show version"
}


function from_dir(){
	# TODO .gz.pdf -> .pdf
	R=${1}
	# shellcheck disable=SC2010
	ls "${R}" | grep -v "pdf$" | while read -r; do echo "${REPLY}" |\
		man -Tps "${R}"/"${REPLY}" 2>/dev/null |\
		ps2pdf - >"${REPLY}".pdf 2>/dev/null
	done
}


function from_rpm(){
	R=${1}
	# shellcheck disable=SC2086
	rpm -ql ${R} | grep "/man/" | while read -r; do basename "$REPLY"; done |\
	awk -F"." 'NF==2 && $2!="gz" {print $1,$2}
		   NF==3 && $3=="gz" {print $1,$2}
		   NF==4 && $4=="gz" {print $1"."$2,$3}
		   NF==3 && $3!="gz" {print $1"."$2,$3}' |\
	while read -r; do do_man2pdf $REPLY; done
}


function do_man2pdf(){
	M=${1}
	S=${2}
	man -Tps "${M}" "${S}" 2>/dev/null | ps2pdf - >"${M}"."${S}".pdf 2>/dev/null
}


# main()

case $1 in
	-v|--version)
		echo -n "$(basename "$EXE") "
		head -11 "$EXE" | grep "^# Version: "
		exit
	;;
	-h|--help)
		show_help
		exit
	;;
	-d|--dir)
		from_dir "$2"
		exit
	;;
	-r|--rpm)
		from_rpm "$2"
		exit
	;;
	*)
		# TODO better checks
		test $# -eq 2 || show_help
		do_man2pdf "$1" "$2"
		exit
	;;
esac
#
