Turn help-from-md into an awk script.

This commit is contained in:
Wayne Davison
2020-06-15 18:14:08 -07:00
parent 353dec1102
commit 5496eda5d1
3 changed files with 41 additions and 33 deletions

View File

@@ -104,7 +104,7 @@ options.o: latest-year.h help-rsync.h help-rsyncd.h
flist.o: rounding.h
help-rsync.h help-rsyncd.h: rsync.1.md
./help-from-md "$(srcdir)/$<" $@
awk -f $(srcdir)/help-from-md.awk -v helpfile=$@ $(srcdir)/$<
rounding.h: rounding.c rsync.h proto.h
@for r in 0 1 3; do \

View File

@@ -1,32 +0,0 @@
#!/bin/bash
if [[ "$#" != 2 ]]; then
echo "Usage: $0 MD_FILE HELP_FILE.h"
exit 1
fi
mdfile="$1"
helpfile="$2"
newfile="$helpfile.new"
findfile="${helpfile/./\\.}"
sed '1,/^\[comment\].*'"$findfile"'/d' <"$mdfile" | \
sed '1,/^```/d' | \
sed '/^```/,$d' | \
sed 's/"/\\"/g' | \
sed 's/^/ rprintf(F,"/' | \
sed 's/$/\\n");/' >"$newfile"
if [[ ! -s "$newfile" ]]; then
rm "$newfile"
echo "Discarding empty output for $helpfile file from $mdfile"
exit 1
fi
(cat <<EOT
/* DO NOT EDIT THIS FILE! It is auto-generated from the option list in $mdfile! */
EOT
cat "$newfile"
) >"$helpfile"
rm "$newfile"

40
help-from-md.awk Executable file
View File

@@ -0,0 +1,40 @@
#!/usr/bin/awk -f
# The caller must set -v helpfile=help-NAME.h and pass arg NAME.NUM.md
BEGIN {
heading = "/* DO NOT EDIT THIS FILE! It is auto-generated from the option list in " ARGV[1] "! */"
findcomment = helpfile
sub("\\.", "\\.", findcomment)
findcomment = "\\[comment\\].*" findcomment
backtick_cnt = 0
prints = ""
}
/^```/ {
backtick_cnt++
next
}
foundcomment {
if (backtick_cnt > 1) exit
if (backtick_cnt == 1) {
gsub(/"/, "\\\"")
prints = prints "\n rprintf(F,\"" $0 "\\n\");"
}
next
}
$0 ~ findcomment {
foundcomment = 1
backtick_cnt = 0
}
END {
if (foundcomment && backtick_cnt > 1)
print heading "\n" prints > helpfile
else {
print "Failed to find " helpfile " section in " ARGV[1]
exit 1
}
}