diff --git a/package/default.nix b/package/default.nix index 2d69e77..7b922db 100644 --- a/package/default.nix +++ b/package/default.nix @@ -261,6 +261,7 @@ in { "sentinèlla" = pkgs.callPackage (./. + "/sentinèlla") {}; shellplot = pkgs.callPackage ./shellplot {}; sops = pkgs.callPackage ./sops.nix {}; + onlinepubs2man = pkgs.callPackage ./onlinepubs2man {}; pg-17-ext-hemar = buildHemarExt pkgs "17"; pg-17-ext-http = buildHttpExt pkgs "17"; pg-17-ext-smtp-client = buildSmtpExt pkgs "17"; diff --git a/package/onlinepubs2man/build-man.sh b/package/onlinepubs2man/build-man.sh new file mode 100644 index 0000000..37bc4f3 --- /dev/null +++ b/package/onlinepubs2man/build-man.sh @@ -0,0 +1,41 @@ +# Batch-convert many HTML files to man(7) pages and install locally (~/.local/share/man) + +# nix shell nixpkgs#pandoc nixpkgs#man-db nixpkgs#gzip -c sh -eu <<'SH' + +sect=7 +dest="$HOME/.local/share/man/man$sect" +build="$(mktemp -d)" +mkdir -p "$dest" "$build" + +# post-process pandoc's roff so mandb can parse NAME +# +fix_name_section() { + awk 'BEGIN { inside=0 } + $0 ~ /^\.(SS|SH) NAME$/ { $0 = ".SH NAME"; inside=1 } + inside && /\\\[em]/ { gsub(/\\\[em]/,"\\-") } + inside && /^\.RE$/ { inside=0 } + { print }' $1 +} + +# find all *.html|*.htm under current dir (recursive) +find . -type f \( -iname '*.html' -o -iname '*.htm' \) | while IFS= read -r f; do + base="$(basename "${f%.*}")" + # sanitize name: lowercase, spaces->-, strip weird chars + name="$(printf '%s' "$base" | tr '[:upper:] ' '[:lower:]-' | tr -cd 'a-z0-9.-' | tr -s '-')" + out="$build/$name.$sect" + + # convert (pandoc will take