summary refs log tree commit diff
path: root/doc/rfc/rfc.in
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc.in')
-rw-r--r--doc/rfc/rfc.in35
1 files changed, 34 insertions, 1 deletions
diff --git a/doc/rfc/rfc.in b/doc/rfc/rfc.in
index 958b09da..abeb293f 100644
--- a/doc/rfc/rfc.in
+++ b/doc/rfc/rfc.in
@@ -1,8 +1,41 @@
 #!/bin/sh
 set -eu
 
+mktemp='mktemp -t rfc'
+[ "$(uname)" = 'OpenBSD' ] && mktemp="${mktemp}.XXXXXXXXXX"
+
+bib=
+while getopts 'b:' opt; do
+	case $opt in
+		(b) bib=$OPTARG;;
+		(?) exit 1;;
+	esac
+done
+shift $((OPTIND - 1))
+
+if test -n "${bib}"; then
+	exec jq -r '
+		".Rs",
+		(.authors[] | ".%A \(.)"),
+		".%T \(.title | ltrimstr(" "))",
+		".%I IETF",
+		".%R \(.doc_id)",
+		".%U https://tools.ietf.org/html/\(.doc_id | ascii_downcase)",
+		".%D \(.pub_date)",
+		".Re"
+	' %%PREFIX%%/share/rfc/"rfc${bib}.json"
+fi
+
 rfc=%%PREFIX%%/share/rfc/"rfc${1:--index}.txt"
-tags=$(mktemp -t rfc.XXXXXXXXXX)
+tags=$($mktemp)
 trap 'rm "${tags}"' EXIT
+
+if test -f "${rfc}.gz"; then
+	txt=$($mktemp)
+	trap 'rm "${txt}" "${tags}"' EXIT
+	gunzip -c "${rfc}.gz" >"${txt}"
+	rfc=$txt
+fi
+
 %%PREFIX%%/bin/rfctags "${rfc}" >"${tags}"
 ${PAGER:-less} -T "${tags}" "${rfc}"