1#! /bin/sh 2# 3# SPDX-License-Identifier: BSD-2-Clause 4# 5# Copyright (c) 2018-2021 Gavin D. Howard and contributors. 6# 7# Redistribution and use in source and binary forms, with or without 8# modification, are permitted provided that the following conditions are met: 9# 10# * Redistributions of source code must retain the above copyright notice, this 11# list of conditions and the following disclaimer. 12# 13# * Redistributions in binary form must reproduce the above copyright notice, 14# this list of conditions and the following disclaimer in the documentation 15# and/or other materials provided with the distribution. 16# 17# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 21# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27# POSSIBILITY OF SUCH DAMAGE. 28# 29 30usage() { 31 printf "usage: %s manpage\n" "$0" 1>&2 32 exit 1 33} 34 35print_manpage() { 36 37 _print_manpage_md="$1" 38 shift 39 40 _print_manpage_out="$1" 41 shift 42 43 cat "$manualsdir/header.txt" > "$_print_manpage_out" 44 cat "$manualsdir/header_${manpage}.txt" >> "$_print_manpage_out" 45 46 pandoc -f commonmark -t man "$_print_manpage_md" >> "$_print_manpage_out" 47 48} 49 50gen_manpage() { 51 52 _gen_manpage_args="$1" 53 shift 54 55 _gen_manpage_status="$ALL" 56 _gen_manpage_out="$manualsdir/$manpage/$_gen_manpage_args.1" 57 _gen_manpage_md="$manualsdir/$manpage/$_gen_manpage_args.1.md" 58 _gen_manpage_temp="$manualsdir/temp.1.md" 59 _gen_manpage_ifs="$IFS" 60 61 rm -rf "$_gen_manpage_out" "$_gen_manpage_md" 62 63 while IFS= read -r line; do 64 65 if [ "$line" = "{{ end }}" ]; then 66 67 if [ "$_gen_manpage_status" -eq "$ALL" ]; then 68 err_exit "{{ end }} tag without corresponding start tag" 2 69 fi 70 71 _gen_manpage_status="$ALL" 72 73 elif [ "${line#\{\{* $_gen_manpage_args *\}\}}" != "$line" ]; then 74 75 if [ "$_gen_manpage_status" -ne "$ALL" ]; then 76 err_exit "start tag nested in start tag" 3 77 fi 78 79 _gen_manpage_status="$NOSKIP" 80 81 elif [ "${line#\{\{*\}\}}" != "$line" ]; then 82 83 if [ "$_gen_manpage_status" -ne "$ALL" ]; then 84 err_exit "start tag nested in start tag" 3 85 fi 86 87 _gen_manpage_status="$SKIP" 88 89 else 90 if [ "$_gen_manpage_status" -ne "$SKIP" ]; then 91 printf '%s\n' "$line" >> "$_gen_manpage_temp" 92 fi 93 fi 94 95 done < "$manualsdir/${manpage}.1.md.in" 96 97 uniq "$_gen_manpage_temp" "$_gen_manpage_md" 98 rm -rf "$_gen_manpage_temp" 99 100 IFS="$_gen_manpage_ifs" 101 102 print_manpage "$_gen_manpage_md" "$_gen_manpage_out" 103} 104 105set -e 106 107script="$0" 108scriptdir=$(dirname "$script") 109manualsdir="$scriptdir/manuals" 110 111. "$scriptdir/functions.sh" 112 113ARGS="A E H N P EH EN EP HN HP NP EHN EHP ENP HNP EHNP" 114ALL=0 115NOSKIP=1 116SKIP=2 117 118test "$#" -eq 1 || usage 119 120manpage="$1" 121shift 122 123if [ "$manpage" != "bcl" ]; then 124 125 for a in $ARGS; do 126 gen_manpage "$a" 127 done 128 129else 130 print_manpage "$manualsdir/${manpage}.3.md" "$manualsdir/${manpage}.3" 131fi 132