From 760012702cf091de29d208fc337c2b9c3fddb4b6 Mon Sep 17 00:00:00 2001 From: Rodrigo Arias Mallo Date: Sun, 24 Dec 2023 01:06:59 +0100 Subject: Initial commit --- man.filter.dpi | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100755 man.filter.dpi (limited to 'man.filter.dpi') diff --git a/man.filter.dpi b/man.filter.dpi new file mode 100755 index 0000000..798f293 --- /dev/null +++ b/man.filter.dpi @@ -0,0 +1,71 @@ +#!/bin/bash +# Copyright (c) 2023 Rodrigo Arias Mallo +# SPDX-License-Identifier: GPL-3.0-or-later + +IFS= read -d '>' auth # Ignore auth +IFS= read -d '>' cmd + +case "$cmd" in + "\n" + printf "Content-type: text/plain\r\n\r\n" + $manpage="$1" + $apropos="$2" + if [ -z "$1" ]; then + echo "Not found" + exit 0 + fi + echo "Manual page not found: $1" + if [ -n "$apropos" ]; then + printf "\nRelated pages:\n" + man -k "$apropos" + fi +} + +inject_css() { + css=$(cat "$(dirname $(readlink -f $0))/style.css" | tr '\n' ' ') + sed "s__$css\n_" +} + +link_xrefs() { + # Link references to other pages to a man:xyz link + + # mandoc(1) + sed 's_\([^<]*\)_\1_g' | + # bzip2(1) + sed 's_\([^<]*\)(\([0-9][^)]*\))_\1(\2)_g' | + # nroff(1) + sed 's_\([^<]*\)(\([0-9][^)]*\))_\1(\2)_g' +} + +serve_manpage() { + url="$1" + ref="${url#"man:"}" + # Reverse open(3) -> 3 open if given + manpage=$(echo "$ref" | sed 's/\(.*\)(\(.*\))/\2 \1/') + # If page not found, return 404 + if [ -z "$manpage" ]; then + serve_404 + exit 0 + fi + if ! man -w $manpage 2>/dev/null; then + apropos=$(echo "$ref" | sed 's/(.*)//') + serve_404 "$manpage" "$apropos" + else + printf "\n" + printf "Content-type: text/html\r\n\r\n" + man -T html $manpage | inject_css | link_xrefs 2>&1 + fi +} + +case "$url" in + man:*) serve_manpage "$url";; + *) serve_404;; +esac -- cgit v1.2.3