Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 23 Nov 2014 00:08:04 +0000 (UTC)
From:      Baptiste Daroussin <bapt@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r274901 - head/usr.bin/man
Message-ID:  <201411230008.sAN084xD088537@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: bapt
Date: Sun Nov 23 00:08:04 2014
New Revision: 274901
URL: https://svnweb.freebsd.org/changeset/base/274901

Log:
  Change man(1) to use mandoc to render manpages
  
  man(1) now first test the manpage to run with mandoc to make sure it can be
  rendered.
  In case groff cannot be found (because base has been built WITHOUT_GROFF) it
  recommands to install groff from the packages

Modified:
  head/usr.bin/man/man.sh

Modified: head/usr.bin/man/man.sh
==============================================================================
--- head/usr.bin/man/man.sh	Sat Nov 22 23:50:18 2014	(r274900)
+++ head/usr.bin/man/man.sh	Sun Nov 23 00:08:04 2014	(r274901)
@@ -276,11 +276,8 @@ man_check_for_so() {
 	return 0
 }
 
-# Usage: man_display_page
-# Display either the manpage or catpage depending on the use_cat variable
 man_display_page() {
-	local EQN NROFF PIC TBL TROFF REFER VGRIND
-	local IFS l nroff_dev pipeline preproc_arg tool
+	local IFS pipeline preconv_enc testline
 
 	# We are called with IFS set to colon. This causes really weird
 	# things to happen for the variables that have spaces in them.
@@ -312,6 +309,49 @@ man_display_page() {
 		return
 	fi
 
+	case "${manpage}" in
+	*.${man_charset}/*)
+		case "$man_charset" in
+		ISO8859-1) preconv_enc="latin-1" ;;
+		ISO8859-15) preconv_enc="latin-1" ;;
+		UTF-8) preconv_enc="utf-8" ;;
+		esac
+		;;
+	esac
+
+	if [ -n "$preconv_enc" ]; then
+		pipeline="preconv -e $preconv_enc |"
+	fi
+	testline="$pipeline mandoc -Tlint -Werror 2>/dev/null"
+	pipeline="$pipeline mandoc -Tlocale | $MANPAGER"
+
+	if ! eval "$cattool $manpage | $testline" ;then
+		if which -s groff2; then
+			man_display_page_groff
+		else
+			echo "This manpage needs groff(1) to be rendered" >&2
+			echo "First install groff(1): " >&2
+			echo "pkg install groff " >&2
+			ret=1
+		fi
+		return
+	fi
+
+	if [ $debug -gt 0 ]; then
+		decho "Command: $cattool $manpage | $pipeline"
+		ret=0
+	else
+		eval "$cattool $manpage | $pipeline"
+		ret=$?
+	fi
+}
+
+# Usage: man_display_page
+# Display either the manpage or catpage depending on the use_cat variable
+man_display_page_groff() {
+	local EQN NROFF PIC TBL TROFF REFER VGRIND
+	local IFS l nroff_dev pipeline preproc_arg tool
+
 	# So, we really do need to parse the manpage. First, figure out the
 	# device flag (-T) we have to pass to eqn(1) and groff(1). Then,
 	# setup the pipeline of commands based on the user's request.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201411230008.sAN084xD088537>