+#! /bin/sh
+
+set -e
+
+VERSION="0.3.1"
+USAGE="Usage: $0 [-p papersize] [-r revoked-style] keyid-or-name"
+
+
+if [ -z "$*" ]; then
+ echo $USAGE
+ exit 1
+fi
+
+KEYIDS=
+REVOKESTYLE=hide
+
+while [ -n "$1" ]; do
+ case "$1" in
+ -p)
+ PAPERSIZE=$2
+ export PAPERSIZE
+ shift 2
+ ;;
+ -p*)
+ PAPERSIZE=`echo $1 | sed -e 's/^-p//'`
+ export PAPERSIZE
+ shift 1
+ ;;
+ -r)
+ REVOKESTYLE=$2
+ shift 2
+ ;;
+ -r*)
+ REVOKESTYLE=`echo $1 | sed -e 's/^-r//'`
+ shift 1
+ ;;
+ -*)
+ echo $USAGE
+ exit 1
+ ;;
+ *)
+ KEYIDS=$1
+ shift 1
+ ;;
+ esac
+done
+
+case "$REVOKESTYLE" in
+grey|hide|note|show|strike)
+ ;;
+*)
+ echo >&2 "Unknown style \"$REVOKESTYLE\". Please use one of"
+ echo >&2 " grey - Print text in grey"
+ echo >&2 " hide - Don't show revoked uids"
+ echo >&2 " note - Add \"(revoked)\""
+ echo >&2 " show - List revoked uids normally"
+ echo >&2 " strike - Strike through lines"
+ exit 1
+ ;;
+esac
+
+TMPFILE=`mktemp -t gpg-key2ps.XXXXXX`
+
+if ! gpg --fingerprint --with-colons $KEYIDS 2>/dev/null >$TMPFILE; then
+ echo >&2 "Key not found. Try 'gpg --list-keys'"
+ rm $TMPFILE
+ exit 1
+fi
+
+NUMLINES=$((`wc -l <$TMPFILE` + `grep '^pub:' $TMPFILE | wc -l` - 1))
+
+if test -x /usr/bin/paperconf; then
+ w=`paperconf -w`
+ h=`paperconf -h`
+else
+ # Default to A4.
+ w=596
+ h=842
+fi
+
+cat <<EOF
+%!PS-Adobe-3.0
+%%BoundingBox: 0 0 $w $h
+%%Title:
+%%Creator: gpg-key2ps $VERSION
+EOF
+echo "%%CreationDate: `date`"
+cat <<EOF
+%%Pages: 1
+%%EndComments
+
+%%Page: 1 1
+
+/w $w def
+/h $h def
+
+/Times-Roman findfont 9 scalefont setfont
+
+/newline {
+ /y y 10 sub def
+} def
+
+/hline {
+ 30 y 3 add moveto
+ w 2 div 30 sub y 3 add lineto stroke
+ newline
+} def
+
+/needhline {
+ /condhline { hline } def
+} def
+
+/noneedhline {
+ /condhline { } def
+} def
+
+/pub {
+ condhline
+ 50 y moveto (pub) show
+ 70 y moveto show show (/) show show
+ 150 y moveto show
+ 200 y moveto show
+ newline
+ needhline
+} def
+
+/fpr {
+ 70 y moveto (Key fingerprint = ) show show
+ newline
+} def
+
+/uid {
+ 50 y moveto (uid) show
+ 200 y moveto show
+ newline
+} def
+
+EOF
+
+case "$REVOKESTYLE" in
+grey)
+ echo "/revuid {"
+ echo " .5 setgray"
+ echo " uid"
+ echo " 0 setgray"
+ echo "} def"
+ ;;
+hide)
+ echo "/revuid {} def"
+ ;;
+note)
+ echo "/revuid {"
+ echo " 50 y moveto (uid) show"
+ echo " 200 y moveto show ([revoked]) show"
+ echo " newline"
+ echo "} def"
+ ;;
+show)
+ echo "/revuid { uid } def"
+ ;;
+strike)
+ echo "/revuid {"
+ echo " uid"
+ echo " 45 y 9 add moveto h 2 div 45 sub y 18 add lineto stroke"
+ echo "} def"
+ ;;
+esac
+
+cat <<EOF
+
+/sbk {
+ 50 y moveto (sub) show
+ 70 y moveto show show (/) show show
+ 150 y moveto show
+ newline
+} def
+
+/key {
+ noneedhline
+EOF
+sed -e '/^tru:/d' \
+ -e '/^uat:/d' \
+ -e 's/^pub:[^:]*:\([^:]*\):1:.\{8,8\}\(.\{8,8\}\):\([^:]*\):[^:]*:[^:]*:[^:]*:\([^:]*\):[^:]*:[^:]*:.*/ (\4) (\3) (\2) (R) (\1) pub/' \
+ -e 's/^pub:[^:]*:\([^:]*\):17:.\{8,8\}\(.\{8,8\}\):\([^:]*\):[^:]*:[^:]*:[^:]*:\([^:]*\):[^:]*:[^:]*:.*/ (\4) (\3) (\2) (D) (\1) pub/' \
+ -e 's/^fpr:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\):.*/ (\1) fpr/' \
+ -e 's/(\(.\{16,16\}\)\(.\{16,16\}\)) fpr/(@split@\1@ @split@\2@) fpr/' \
+ -e 's/@split@\(.\{2,2\}\)\(.\{2,2\}\)\(.\{2,2\}\)\(.\{2,2\}\)\(.\{2,2\}\)\(.\{2,2\}\)\(.\{2,2\}\)\(.\{2,2\}\)@/\1 \2 \3 \4 \5 \6 \7 \8/g' \
+ -e 's/(\(.\{20,20\}\)\(.\{20,20\}\)) fpr/(@split@\1@ @split@\2@) fpr/' \
+ -e 's/@split@\(.\{4,4\}\)\(.\{4,4\}\)\(.\{4,4\}\)\(.\{4,4\}\)\(.\{4,4\}\)@/\1 \2 \3 \4 \5/g' \
+ -e 's/^uid:[^:r]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\):.*/ (\1) uid/' \
+ -e 's/^uid:r[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\):.*/ (\1) revuid/' \
+ -e 's/^sub:[^:]*:\([^:]*\):16:.\{8,8\}\(.\{8,8\}\):\([^:]*\):[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:.*/ (\3) (\2) (g) (\1) sbk/' \
+ <$TMPFILE
+cat <<EOF
+} def
+
+EOF
+echo "/numlines $(($NUMLINES + 1)) def"
+cat <<EOF
+/num w 16 sub 10 div numlines div def
+
+/column {
+ /y w 20 sub def
+ 1 1 num {
+ gsave
+ 0 0 h 2 div w rectclip
+ /upper y 11 add def
+ key
+ newline
+ /lower y 11 add def
+ 0 upper h 2 div upper h 2 div lower 0 lower 0 upper moveto lineto lineto lineto lineto stroke
+ grestore
+ } for
+} def
+
+w 0 translate
+90 rotate
+column
+h 2 div 0 translate
+column
+
+showpage
+
+%%Trailer
+%%EOF
+EOF
+
+rm $TMPFILE