Lowdown requires a blank line before all preformatted blocks, or it doesn't recognize them. `tools/md2man.sh` contained some ad-hoc efforts at fixing up some locations where these required blank lines are absent from the output of `tools/fromschema.py`, but it missed some. Instead of playing Whack-a-Mole, use a blanket sed expression to ensure that a blank line precedes _every_ opening ```. `esc_underscores(…)` in `tools/fromschema.py` did not work correctly on strings containing an odd number of backticks, notably the ``` delimiters surrounding preformatted text blocks. Specifically, it was dropping the last backtick since none of the alternatives in the regex matched it. Add a new alternative that matches a whole preformatted block as a single unit. `output_member(…)` in `tools/fromschema.py` was passing each line of a member's description through `esc_underscores(…)` individually, but that breaks preformatted text blocks that are naturally multi-line and leads to mistakenly escaping underscores inside such blocks. Rewrite the code to make use of the `outputs(…)` utility function that joins all the provided lines together before passing the whole text through `esc_underscores(…)`. Drive-by fix a couple of flubbed preformatted blocks in schemas. [ Added shellcheck suppression for md2man.sh --RR ] Changelog-None
46 lines
1.6 KiB
Bash
Executable File
46 lines
1.6 KiB
Bash
Executable File
#! /bin/sh
|
|
|
|
if [ $# != 2 ]; then
|
|
echo "Usage: $0 <lowdown> <markdownpage>" >&2
|
|
exit 1
|
|
fi
|
|
LOWDOWN="$1"
|
|
SOURCE="$2"
|
|
|
|
TARGET="$SOURCE"
|
|
|
|
# Extract the directory and filename separately
|
|
DIR="$(dirname "$SOURCE")"
|
|
FILE="$(basename "$SOURCE" .md)"
|
|
|
|
# Check if the file doesn't already start with 'lightningd' or 'lightning-'
|
|
if [ "${FILE#lightningd}" = "$FILE" ] && [ "${FILE#lightning-}" = "$FILE" ]; then
|
|
TARGET="$DIR/lightning-$FILE"
|
|
fi
|
|
TARGET="${TARGET%.md}"
|
|
|
|
SECTION="$(basename "$SOURCE" .md | cut -d. -f2-)"
|
|
TITLE="$(basename "$(basename "$TARGET" .md)" ."$SECTION" | tr '[:lower:]' '[:upper:]')"
|
|
|
|
# First two lines are title, which needs to be turned into NAME for proper manpage
|
|
# format. mrkd used to do this for us, lowdown(1) doesn't.
|
|
TITLELINE="$(head -n1 "$SOURCE")"
|
|
|
|
# Replace lightning-cli with $ lightning-cli but do not replace it if it is preceded with (
|
|
# because it is used in the examples to run it in the shell, eg. $(lightning-cli listpeerchannels)
|
|
# shellcheck disable=SC2016 # These are not variables, shellcheck!
|
|
SOURCE=$(tail -n +3 "$SOURCE" | sed -E '
|
|
:a;N;$!ba;
|
|
s#(\(lightning-cli)#\x1#ig;
|
|
s#lightning-cli#$ lightning-cli#g;
|
|
s#\x1#(lightning-cli#g;
|
|
' |
|
|
# Lowdown requires a blank line before every preformatted text block
|
|
sed '
|
|
/^$/{:0;N;/\n$/b0};s/^[[:blank:]]*```/\n\0/;
|
|
/\n[[:blank:]]*```/{:1;n;/^[[:blank:]]*```/!b1}
|
|
')
|
|
|
|
# Output to the target file
|
|
(echo "NAME"; echo "----"; echo "$TITLELINE"; echo "$SOURCE") | $LOWDOWN -s --out-no-smarty -Tman -m "title:$TITLE" -m "section:$SECTION" -m "source:Core Lightning $VERSION" -m "shiftheadinglevelby:-1" > "$TARGET"
|