wok diff man2html/stuff/man2html-slitaz.diff @ rev 22278

updated xorg-xf86-video-s3 (0.6.5 -> 0.7.0)
author Hans-G?nter Theisgen
date Wed Nov 13 14:12:45 2019 +0100 (2019-11-13)
parents
children
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/man2html/stuff/man2html-slitaz.diff	Wed Nov 13 14:12:45 2019 +0100
     1.3 @@ -0,0 +1,2357 @@
     1.4 +--- /dev/null
     1.5 ++++ b/Makefile
     1.6 +@@ -0,0 +1,89 @@
     1.7 ++CFLAGS  += -Wall -Wstrict-prototypes -Wmissing-prototypes -DGUNZIP='"gunzip"' `pkg-config --cflags --libs glib-2.0`
     1.8 ++# -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -lglib-2.0
     1.9 ++OBJECTS  = man2html.o cgibase.o abbrev.o strdefs.o
    1.10 ++bindir   = $(DESTDIR)$(PREFIX)/usr/bin
    1.11 ++mandir   = $(DESTDIR)$(PREFIX)/usr/share/man
    1.12 ++vardir   = $(DESTDIR)$(PREFIX)/var
    1.13 ++httpdir  = $(DESTDIR)$(PREFIX)/home/httpd
    1.14 ++cgidir   = $(DESTDIR)$(PREFIX)/var/www
    1.15 ++sharedir = $(DESTDIR)$(PREFIX)/usr/share/man2html
    1.16 ++cgiowner = www
    1.17 ++cgigroup = www
    1.18 ++CC ?= gcc
    1.19 ++
    1.20 ++all: man2html hman
    1.21 ++
    1.22 ++man2html:	$(OBJECTS)
    1.23 ++	$(CC) -o man2html $(OBJECTS) $(CFLAGS)
    1.24 ++
    1.25 ++pot:
    1.26 ++	mkdir -p po
    1.27 ++	xgettext -o po/man2html.pot -k_ -kN_ \
    1.28 ++		--package-name="man2html" \
    1.29 ++		--from-code="UTF-8" \
    1.30 ++		cgibase.c man2html.c hman.sh man.sh
    1.31 ++
    1.32 ++msgmerge:
    1.33 ++	@for l in $(LINGUAS); do \
    1.34 ++		echo -n "Updating $$l po file."; \
    1.35 ++		msgmerge -U po/$$l.po po/man2html.pot; \
    1.36 ++	done;
    1.37 ++
    1.38 ++msgfmt:
    1.39 ++	@for l in $(LINGUAS); do \
    1.40 ++		echo "Compiling $$l mo file..."; \
    1.41 ++		mkdir -p po/mo/$$l/LC_MESSAGES; \
    1.42 ++		msgfmt -o po/mo/$$l/LC_MESSAGES/man2html.mo po/$$l.po; \
    1.43 ++	done;
    1.44 ++
    1.45 ++
    1.46 ++# man2html:	../src/version.h
    1.47 ++
    1.48 ++# This installs the man2html utility
    1.49 ++install:	man2html
    1.50 ++	mkdir -p $(bindir)
    1.51 ++	install -m 755 man2html $(bindir)
    1.52 ++	mkdir -p $(mandir)/man1
    1.53 ++	install -m 644 man2html.1 $(mandir)/man1/man2html.1
    1.54 ++
    1.55 ++install-scripts: install-man-scripts install-glimpse-stuff install-hman
    1.56 ++
    1.57 ++# These are the scripts that allow pointing a browser at
    1.58 ++#   http://localhost/cgi-bin/man/man2html
    1.59 ++# to work.
    1.60 ++install-man-scripts:
    1.61 ++	mkdir -p $(cgidir)
    1.62 ++	mkdir -p $(sharedir)
    1.63 ++	install -m 755 scripts/cgi-bin/man/* $(cgidir)
    1.64 ++	install -m 644 scripts/cgi-aux/man/* $(sharedir)
    1.65 ++	install -d -o $(cgiowner) -g $(cgigroup) -m 775 $(vardir)/man2html
    1.66 ++# (aux was renamed to cgi-aux since aux causes problems under DOS)
    1.67 ++
    1.68 ++# If you have installed glimpse, and have compressed man pages,
    1.69 ++# then perhaps you also want these filters.
    1.70 ++install-glimpse-stuff:
    1.71 ++	install -m 644 glimpse_filters $(vardir)/man2html/.glimpse_filters
    1.72 ++
    1.73 ++# In order not to have to type a long command like
    1.74 ++#   netscape http://localhost/cgi-bin/man/man2html?section+topic
    1.75 ++# or
    1.76 ++#   lynx lynxcgi:/home/httpd/cgi-bin/man/man2html?section+topic
    1.77 ++# it is convenient to have some shell script as a wrapper.
    1.78 ++# The script hman can be aliased to man. It uses an environment
    1.79 ++# variable MANHTMLPAGER to find out which browser you use, and
    1.80 ++# you can set MANHTMLHOST if the pages are not on localhost.
    1.81 ++hman: hman.sh
    1.82 ++	rm -f hman
    1.83 ++	sed -e 's,%version%,1.6g-7,' hman.sh > hman
    1.84 ++
    1.85 ++install-hman: hman
    1.86 ++	install -m 555 hman $(bindir)/hman
    1.87 ++	install -m 644 hman.1 $(mandir)/man1/hman.1
    1.88 ++
    1.89 ++clean:
    1.90 ++	rm -f core hman man2html $(OBJECTS) *~
    1.91 ++
    1.92 ++spotless:	clean
    1.93 ++	rm -f Makefile
    1.94 ++
    1.95 ++$(OBJECTS): defs.h
    1.96 +--- a/abbrev.c
    1.97 ++++ b/abbrev.c
    1.98 +@@ -27,7 +27,7 @@
    1.99 +     "SSO", "System Services Overview",
   1.100 +     "TEXT", "Editing Text Files",
   1.101 +     "DOCS", "Formatting Documents",
   1.102 +-    "TROFF", "Using <B>nroff</B> and <B>troff</B>",
   1.103 ++    "TROFF", "Using <b>nroff</b> and <b>troff</b>",
   1.104 +     "INDEX", "Global Index",
   1.105 +     "CPG", "C Programmer's Guide",
   1.106 +     "CREF", "C Reference Manual",
   1.107 +@@ -46,7 +46,7 @@
   1.108 +     "CGI", "SunCGI Reference Manual",
   1.109 +     "CORE", "SunCore Reference Manual",
   1.110 +     "4ASSY", "Sun-4 Assembly Language Reference",
   1.111 +-    "SARCH", "<FONT SIZE=\"-1\">SPARC</FONT> Architecture Manual",
   1.112 ++    "SARCH", "SPARC Architecture Manual",
   1.113 +     "KR", "The C Programming Language",
   1.114 +     0, 0 };
   1.115 + 
   1.116 +--- a/cgibase.c
   1.117 ++++ b/cgibase.c
   1.118 +@@ -8,6 +8,8 @@
   1.119 + #include <ctype.h>		/* tolower() */
   1.120 + #include <string.h>		/* strlen() */
   1.121 + #include "defs.h"
   1.122 ++#include <glib.h>
   1.123 ++#include <glib/gi18n.h>
   1.124 + 
   1.125 + /*
   1.126 +  * The default is to use cgibase. With relative html style
   1.127 +@@ -21,8 +23,8 @@
   1.128 +  * and uses lynx, and we use lynxcgi:/usr/lib/cgi-bin.
   1.129 +  */
   1.130 + 
   1.131 +-static char *man2htmlpath = "/cgi-bin/man/man2html"; 	/* default */
   1.132 +-static char *cgibase_format = "http://%s"; 		/* host.domain:port */
   1.133 ++static char *man2htmlpath = ""; 	/* default */
   1.134 ++static char *cgibase_format = "%s"; 		/* host.domain:port */
   1.135 + static char *cgibase_ll_format = "lynxcgi:%s"; 		/* directory */
   1.136 + static char *cgibase = "";				/* default */
   1.137 + 
   1.138 +@@ -68,76 +70,46 @@
   1.139 +      relat_html_style = 1;
   1.140 + }
   1.141 + 
   1.142 +-/* What shall we say in case of relat_html_style? */
   1.143 +-static char *signature = "<HR>\n"
   1.144 +-"This document was created by\n"
   1.145 +-"<A HREF=\"%s%s\">man2html</A>,\n"
   1.146 +-"using the manual pages.<BR>\n"
   1.147 +-"%s\n";
   1.148 +-
   1.149 +-#define TIMEFORMAT "%T GMT, %B %d, %Y"
   1.150 +-#define TIMEBUFSZ	500
   1.151 +-
   1.152 + void print_sig()
   1.153 + {
   1.154 +-    char timebuf[TIMEBUFSZ];
   1.155 +-    struct tm *timetm;
   1.156 +-    time_t now;
   1.157 +-
   1.158 +-    timebuf[0] = 0;
   1.159 +-#ifdef TIMEFORMAT
   1.160 +-    sprintf(timebuf, "Time: ");
   1.161 +-    now=time(NULL);
   1.162 +-    timetm=gmtime(&now);
   1.163 +-    strftime(timebuf+6, TIMEBUFSZ-6, TIMEFORMAT, timetm);
   1.164 +-    timebuf[TIMEBUFSZ-1] = 0;
   1.165 +-#endif
   1.166 +-    printf(signature, cgibase, man2htmlpath, timebuf);
   1.167 ++	printf("</section>\n<footer>\n<p>%s</p>\n</footer>\n",
   1.168 ++		_("This document was created by <b>man2html</b> using the manual pages."));
   1.169 + }
   1.170 + 
   1.171 + void
   1.172 + include_file_html(char *g) {
   1.173 +-     printf("<A HREF=\"file:///usr/include/%s\">%s</A>&gt;", g,g);
   1.174 ++     printf("<a href=\"file:///usr/include/%s\">%s</a>&gt;", g,g);
   1.175 + }
   1.176 + 
   1.177 + void
   1.178 + man_page_html(char *sec, char *h) {
   1.179 +-	if (relat_html_style) {
   1.180 +-		if (!h)
   1.181 +-			printf("<A HREF=\"../index.html\">"
   1.182 +-			       "Return to Main Contents</A>");
   1.183 +-		else
   1.184 +-			printf("<A HREF=\"../man%s/%s.%s.html\">%s</A>",
   1.185 +-			       sec, h, sec, h);
   1.186 +-	} else {
   1.187 +-		if (!h)
   1.188 +-			printf("<A HREF=\"%s%s\">Return to Main Contents</A>",
   1.189 +-			       cgibase, man2htmlpath);
   1.190 +-		else if (!sec)
   1.191 +-			printf("<A HREF=\"%s%s%c%s\">%s</A>",
   1.192 +-			       cgibase, man2htmlpath, sep, h, h);
   1.193 +-		else
   1.194 +-			printf("<A HREF=\"%s%s%c%s+%s\">%s</A>",
   1.195 +-			       cgibase, man2htmlpath, sep, sec, h, h);
   1.196 +-	}
   1.197 ++	if (!h)
   1.198 ++		printf("<a href=\"?\">%s</a>",
   1.199 ++			_("Return to Main Contents"));
   1.200 ++	else if (!sec)
   1.201 ++		printf("<a href=\"?%s\">%s</a>",
   1.202 ++			h, h);
   1.203 ++	else
   1.204 ++		printf("<a href=\"?%s+%s\">%s</a>",
   1.205 ++			sec, h, h);
   1.206 + }
   1.207 + 
   1.208 + void
   1.209 + ftp_html(char *f) {
   1.210 +-     printf("<A HREF=\"ftp://%s\">%s</A>", f, f);
   1.211 ++     printf("<a href=\"ftp://%s\">%s</a>", f, f);
   1.212 + }
   1.213 + 
   1.214 + void
   1.215 + www_html(char *f) {
   1.216 +-     printf("<A HREF=\"http://%s\">%s</A>", f, f);
   1.217 ++     printf("<a href=\"http://%s\">%s</a>", f, f);
   1.218 + }
   1.219 + 
   1.220 + void
   1.221 + mailto_html(char *g) {
   1.222 +-     printf("<A HREF=\"mailto:%s\">%s</A>", g, g);
   1.223 ++     printf("<a href=\"mailto:%s\">%s</a>", g, g);
   1.224 + }
   1.225 + 
   1.226 + void
   1.227 + url_html(char *g) {
   1.228 +-     printf("<A HREF=\"%s\">%s</A>", g, g);
   1.229 ++     printf("<a href=\"%s\">%s</a>", g, g);
   1.230 + }
   1.231 +--- a/hman.sh
   1.232 ++++ b/hman.sh
   1.233 +@@ -8,99 +8,83 @@
   1.234 + # Usage examples:
   1.235 + #        hman                    - get start page
   1.236 + #        hman man2html           - get man page for man2html
   1.237 +-#        hman 7 locale           - get section 7 man page for locale 
   1.238 ++#        hman 7 locale           - get section 7 man page for locale
   1.239 + #        hman 1                  - section 1 index of names only
   1.240 + #        hman 3 index            - section 3 index names+descriptions
   1.241 + #        hman -k editor          - search all man pages for some string
   1.242 +-#	 hman -P arena ./twm.man - specify browser; specify man page
   1.243 ++#        hman -P arena ./twm.man - specify browser; specify man page
   1.244 + #
   1.245 +-# hman from %version%
   1.246 ++# hman from 1.6g-7
   1.247 + #
   1.248 + 
   1.249 +-if [ x"$1" = x"-v" ] || [ x"$1" = x"-V" ]; then
   1.250 +-	echo "`basename $0` from %version%"
   1.251 ++. /usr/lib/slitaz/httphelper.sh
   1.252 ++. /lib/libtaz.sh
   1.253 ++
   1.254 ++# Internationalization
   1.255 ++export TEXTDOMAIN='man2html'
   1.256 ++_()  { local T="$1"; shift; printf "$(gettext "$T")" "$@"; echo; }
   1.257 ++
   1.258 ++
   1.259 ++if [ "$1" == '-v' ] || [ "$1" == '-V' ]; then
   1.260 ++	echo "$(basename $0) v. 1.6g-slitaz"
   1.261 + 	exit 0
   1.262 + fi
   1.263 + 
   1.264 + # The user has to set MANHTMLPAGER (or he will get httpd-free lynx).
   1.265 + # Pick your favorite browser: lynx, xmosaic, netscape, arena, amaya, grail, ...
   1.266 +-if [ x"$MANHTMLPAGER" = x ]  && ! which lynx > /dev/null ; then
   1.267 +-	HMAN_BROWSER=sensible-browser
   1.268 +-else
   1.269 +-	HMAN_BROWSER=${MANHTMLPAGER-lynxcgi}
   1.270 +-fi
   1.271 ++HMAN_BROWSER="${MANHTMLPAGER:-tazweb}"
   1.272 + 
   1.273 +-#
   1.274 + # If the man pages are on a remote host, specify it in MANHTMLHOST.
   1.275 +-HOST=${MANHTMLHOST-localhost}
   1.276 ++HOST=${MANHTMLHOST:-localhost}
   1.277 + 
   1.278 + # Perhaps the browser was specified on the command line?
   1.279 +-if [ "$#" -gt 1 ] && [ x"$1" = x"-P" ]; then
   1.280 +-    HMAN_BROWSER="$2"
   1.281 +-    shift; shift
   1.282 ++if [ "$#" -gt 1 ] && [ "$1" == '-P' ]; then
   1.283 ++	HMAN_BROWSER="$2"
   1.284 ++	shift; shift
   1.285 + fi
   1.286 + 
   1.287 + # Perhaps the host was specified on the command line?
   1.288 +-if [ "$#" -gt 1 ] && [ x"$1" = x"-H" ]; then
   1.289 +-    HOST="$2"
   1.290 +-    shift; shift
   1.291 ++if [ "$#" -gt 1 ] && [ "$1" == '-H' ]; then
   1.292 ++	HOST="$2"
   1.293 ++	shift; shift
   1.294 + fi
   1.295 + 
   1.296 +-# Interface to a live (already running) netscape browser.
   1.297 +-nsfunc () {
   1.298 +-	if ( /bin/ps xc | grep -q 'netscape$' ) ; then
   1.299 +-		if [ -x  netscape-remote ] ; then
   1.300 +-			exec netscape-remote  -remote "openURL($1,new_window)"
   1.301 +-		else
   1.302 +-			exec netscape -remote "openURL($1,new_window)"
   1.303 +-		fi
   1.304 +-	else
   1.305 +-		netscape $1 &
   1.306 +-	fi
   1.307 +-}
   1.308 ++CGI="http://$HOST/man.cgi"
   1.309 + 
   1.310 +-urlencode() {
   1.311 +-	echo "$@" | perl -pe 'chomp(); s/([^A-Za-z0-9\ \_\-\.\/])/"%" . unpack("H*", $1)/eg; tr/ /+/;'
   1.312 ++enc() {
   1.313 ++	echo "$@" | sed -e 's|+|%2B|g; s| |+|g';
   1.314 + }
   1.315 + 
   1.316 +-
   1.317 +-case "$HMAN_BROWSER" in
   1.318 +-     lynxcgi)
   1.319 +-	HMAN_BROWSER=lynx
   1.320 +-	CG="lynxcgi:/usr/lib/cgi-bin/man"
   1.321 +-	;;
   1.322 +-     netscape)
   1.323 +-        HMAN_BROWSER=nsfunc
   1.324 +-        CG="http://$HOST/cgi-bin/man"
   1.325 +-	;;
   1.326 +-     *)
   1.327 +-	CG="http://$HOST/cgi-bin/man"
   1.328 +-	;;
   1.329 ++case "$#" in
   1.330 ++	0)
   1.331 ++		$HMAN_BROWSER "$CGI";;
   1.332 ++	1)
   1.333 ++		case "$1" in
   1.334 ++			1|2|3|4|5|6|7|8|l|n)
   1.335 ++				$HMAN_BROWSER "$CGI?$1";;
   1.336 ++			/*)
   1.337 ++				$HMAN_BROWSER "$CGI?$(enc "$1")";;
   1.338 ++			*/*)
   1.339 ++				$HMAN_BROWSER "$CGI?$(enc "$(realpath "$PWD/$1")")";;
   1.340 ++			*)
   1.341 ++				$HMAN_BROWSER "$CGI?$(enc "$1")";;
   1.342 ++		esac
   1.343 ++		;;
   1.344 ++	2)
   1.345 ++#		case "$1" in
   1.346 ++#			-k)
   1.347 ++#				$HMAN_BROWSER "$CGI?search=$(enc "$2")";;
   1.348 ++#			*)
   1.349 ++#				if [ "$2" == 'index' ]; then
   1.350 ++#					$HMAN_BROWSER "$CGI?whatis=$(enc "$1")"
   1.351 ++#				else
   1.352 ++					$HMAN_BROWSER "$CGI?$(enc "$1 $2")"
   1.353 ++#				fi
   1.354 ++#				;;
   1.355 ++#		esac
   1.356 ++		;;
   1.357 ++	*)
   1.358 ++		_ 'bad number of args';;
   1.359 + esac
   1.360 +-
   1.361 +-  case "$#" in
   1.362 +-     0)   $HMAN_BROWSER "$CG/man2html" ;;
   1.363 +-     1)   case "$1" in
   1.364 +-	    1|2|3|4|5|6|7|8|l|n)
   1.365 +-		$HMAN_BROWSER "$CG/mansec?query=$1" ;;
   1.366 +-	    /*)
   1.367 +-		$HMAN_BROWSER "$CG/man2html?query=`urlencode "$1"`" ;;
   1.368 +-	    */*)
   1.369 +-		$HMAN_BROWSER "$CG/man2html?query=`urlencode "$PWD/$1"`" ;;
   1.370 +-	    *)
   1.371 +-		$HMAN_BROWSER "$CG/man2html?query=`urlencode "$1"`" ;;
   1.372 +-          esac ;;
   1.373 +-     2)   case "$1" in
   1.374 +-            -k)
   1.375 +-                $HMAN_BROWSER "$CG/mansearch?query=`urlencode "$2"`" ;;
   1.376 +-            *)
   1.377 +-		if [ "$2" = index ]; then
   1.378 +-		    $HMAN_BROWSER "$CG/manwhatis?query=`urlencode "$1"`"
   1.379 +-                else
   1.380 +-		    $HMAN_BROWSER "$CG/man2html?query=`urlencode "$1 $2"`"
   1.381 +-                fi ;;
   1.382 +-          esac ;;
   1.383 +-     *)   echo "bad number of args" ;;
   1.384 +-  esac
   1.385 + 
   1.386 + exit 0
   1.387 +--- /dev/null
   1.388 ++++ b/man.sh
   1.389 +@@ -0,0 +1,292 @@
   1.390 ++#!/bin/sh
   1.391 ++# man2html cgi script - uses /usr/bin/man2html to format man pages
   1.392 ++# aeb@cwi.nl - 980109
   1.393 ++# Aleksej Bobylev <al.bobylev@gmail.com>, 2015-2016
   1.394 ++
   1.395 ++. /usr/lib/slitaz/httphelper.sh
   1.396 ++. /lib/libtaz.sh
   1.397 ++
   1.398 ++# Internationalization.
   1.399 ++[ -e /etc/locale.conf ] && . /etc/locale.conf
   1.400 ++export TEXTDOMAIN='man2html'
   1.401 ++export LANG LC_ALL
   1.402 ++_()  { local T="$1"; shift; printf "$(gettext "$T")" "$@"; echo; }
   1.403 ++
   1.404 ++
   1.405 ++SECTIONS="$(_ 'User Commands'):$(_ 'System Calls'):$(_ 'C Library Functions'):\
   1.406 ++$(_ 'Devices and Network Interfaces'):$(_ 'File Formats'):\
   1.407 ++$(_ 'Games and Demos'):$(_ 'Environments, Tables, and Troff Macros'):\
   1.408 ++$(_ 'Maintenance Commands'):$(_ 'All available manual pages')"
   1.409 ++
   1.410 ++query="$(GET query)"
   1.411 ++if [ -z "$query" ]; then
   1.412 ++	set -- $(echo $(GET) | tr '+' ' ')
   1.413 ++else
   1.414 ++	set -- $(echo $(GET query) | tr '+' ' ')
   1.415 ++fi
   1.416 ++
   1.417 ++
   1.418 ++if [ $1 == 'css' ]; then
   1.419 ++	# post css file on query
   1.420 ++	header 'Content-Type: text/css'
   1.421 ++	cat /usr/share/doc/slitaz-doc.css
   1.422 ++fi
   1.423 ++
   1.424 ++if [ $# -eq 1 ]; then
   1.425 ++	case $1 in
   1.426 ++		1|2|3|4|5|6|7|8|all)
   1.427 ++			if [ "$1" == 'all' ]; then
   1.428 ++				sec_n='9'; sec_folder='man?'
   1.429 ++			else
   1.430 ++				sec_n="$1"; sec_folder="man$1"
   1.431 ++			fi
   1.432 ++			sec_desc=$(echo "$SECTIONS" | cut -d':' -f $sec_n)
   1.433 ++			header
   1.434 ++			cat <<EOT
   1.435 ++<!DOCTYPE html>
   1.436 ++<html>
   1.437 ++<head>
   1.438 ++	<title>$1. $sec_desc</title>
   1.439 ++	<link rel="stylesheet" href="?css">
   1.440 ++</head>
   1.441 ++<body><header><h1>$(_ 'Section %s: %s' $1 "$sec_desc")</h1></header>
   1.442 ++	<section><header>$(_ 'Manual Pages')</header>
   1.443 ++	<p>
   1.444 ++EOT
   1.445 ++
   1.446 ++			case $1 in
   1.447 ++				1) _ "Section 1 of the manual describes user commands and tools, for example, file \
   1.448 ++manipulation tools, shells, compilers, web browsers, file and image viewers and editors, and so \
   1.449 ++on.";;
   1.450 ++				2) _ "Section 2 of the manual describes the Linux system calls. A system call is \
   1.451 ++an entry point into the Linux kernel.";;
   1.452 ++				3) _ "Section 3 of the manual describes all library functions excluding the \
   1.453 ++library functions (system call wrappers) described in Section 2, which implement system calls.";;
   1.454 ++				4) _ "Section 4 of the manual describes special files (devices).";;
   1.455 ++				5) _ "Section 5 of the manual describes various file formats, as well as the \
   1.456 ++corresponding C structures, if any.";;
   1.457 ++				6) _ "Section 6 of the manual describes all the games and funny little programs \
   1.458 ++available on the system.";;
   1.459 ++				7) _ "Section 7 of the manual provides overviews on various topics, and describes \
   1.460 ++conventions and protocols, character set standards, the standard filesystem layout, and \
   1.461 ++miscellaneous other things.";;
   1.462 ++				8) _ "Section 8 of the manual describes commands which either can be or are used \
   1.463 ++only by the superuser, like system-administration commands, daemons, and hardware-related \
   1.464 ++commands.";;
   1.465 ++			esac
   1.466 ++
   1.467 ++			[ "$1" != 'all' ] && echo "<b><a href=\"?intro.$1\">intro</a></b>($1)"
   1.468 ++			echo '</p>'
   1.469 ++
   1.470 ++			temp="$(mktemp)"; temp2="$(mktemp)"
   1.471 ++			for dir in $(find /usr/share/man -type d -name "$sec_folder"); do
   1.472 ++				ls $dir | sed 's|\.\([0-9]\)\.*[bgx]*z*2*$|:\1|'
   1.473 ++				# fix sorting 'feature': leading '_' always ignored by `sort`
   1.474 ++			done | sed 's|_|zzzzzzzz|g' | sort -fu | sed 's|zzzzzzzz|_|g' | \
   1.475 ++			awk -F' ' -vtemp="$temp" -vtemp2="$temp2" '
   1.476 ++			{
   1.477 ++				split($1, man, ":");
   1.478 ++
   1.479 ++				letter = tolower(substr(man[1], 1, 1));
   1.480 ++				if (letter != last_letter) {
   1.481 ++					last_letter = letter;
   1.482 ++					letter_index[++num_letters] = letter;
   1.483 ++					print "<h3 id=\"l" letter "\">" toupper(letter) "</h3>" > temp;
   1.484 ++				}
   1.485 ++				lnk = man[1]; gsub("+", "%2b", lnk);
   1.486 ++				printf "<b><a href=\"?%s.%s\">%s</a></b>(%s) ", lnk, man[2], man[1], man[2] > temp;
   1.487 ++			}
   1.488 ++			END {
   1.489 ++				# Print out alphabetic quick index and other links
   1.490 ++				for (i = 1; i <= num_letters; i++) {
   1.491 ++					print "<a href=\"#l" letter_index[i] section "\">" toupper(letter_index[i]) "</a>" > temp2;
   1.492 ++				}
   1.493 ++			}
   1.494 ++			'
   1.495 ++			if [ -s "$temp" ]; then
   1.496 ++				echo '<hr>'; cat "$temp2"; echo '<hr>'
   1.497 ++				cat "$temp"
   1.498 ++				echo '<hr>'; cat "$temp2"; echo '<hr>'
   1.499 ++			fi
   1.500 ++
   1.501 ++			rm -f "$temp" "$temp2"
   1.502 ++
   1.503 ++			cat <<EOT
   1.504 ++	</section>
   1.505 ++	<section><header>$(_ 'Sections')</header>
   1.506 ++		<ol>
   1.507 ++EOT
   1.508 ++			for i in $(seq 8); do
   1.509 ++				sec_desc=$(echo "$SECTIONS" | cut -d':' -f $i)
   1.510 ++				echo "<li><a href=\"?$i\">$sec_desc</a></li>"
   1.511 ++			done
   1.512 ++			cat <<EOT
   1.513 ++	</ol>
   1.514 ++	<p><a href="?all">$(_ 'All Sections')</a></p>
   1.515 ++</section>
   1.516 ++
   1.517 ++</body>
   1.518 ++</html>
   1.519 ++EOT
   1.520 ++			exit 0
   1.521 ++			;;
   1.522 ++	esac
   1.523 ++fi
   1.524 ++
   1.525 ++# Find the required page - expect to be called with "man2html [sec] page".
   1.526 ++# There may a prefixed "-M manpath" option.
   1.527 ++
   1.528 ++if [ $# -ge 2 -a "$1" == '-M' ]; then
   1.529 ++	MANPATH="$2"
   1.530 ++	export MANPATH
   1.531 ++	shift; shift
   1.532 ++	MP=' using the given MANPATH'
   1.533 ++else
   1.534 ++	MP=''
   1.535 ++fi
   1.536 ++
   1.537 ++
   1.538 ++# If no arguments given, show a start page.
   1.539 ++
   1.540 ++if [ $# -eq 0 ]; then
   1.541 ++	header
   1.542 ++	cat <<EOT
   1.543 ++<!DOCTYPE html>
   1.544 ++<html>
   1.545 ++<head>
   1.546 ++	<meta charset="UTF-8">
   1.547 ++	<title>$(_ 'Manual Pages - Main Contents')</title>
   1.548 ++	<link rel="stylesheet" href="?css">
   1.549 ++</head>
   1.550 ++<body>
   1.551 ++<header><h1>$(_ 'Manual Pages - Main Contents')</h1></header>
   1.552 ++<section><header>$(_ 'Name and Section lookup')</header>
   1.553 ++	<form method="GET">
   1.554 ++		<input name="query" size="40">
   1.555 ++		<button type="submit">$(_ 'Search')</button>
   1.556 ++	</form>
   1.557 ++	<p>$(_ "You can enter a program name, possibly preceded by the section, the directories to search \
   1.558 ++(with -M) or a full name. For example:")</p>
   1.559 ++
   1.560 ++	<ul>
   1.561 ++		<li><tt>find</tt></li>
   1.562 ++		<li><tt>1 find</tt></li>
   1.563 ++		<li><tt>-M /usr/share/man:/opt/man:/usr/local/share/man find</tt></li>
   1.564 ++		<li><tt>/usr/share/man/man1/gperf.1</tt></li>
   1.565 ++	</ul>
   1.566 ++</section>
   1.567 ++
   1.568 ++<section><header>$(_ 'Index of pages')</header>
   1.569 ++
   1.570 ++	<ol>
   1.571 ++EOT
   1.572 ++	for i in $(seq 8); do
   1.573 ++		sec_desc=$(echo "$SECTIONS" | cut -d':' -f $i)
   1.574 ++		echo "<li><a href=\"?$i\">$sec_desc</a></li>"
   1.575 ++	done
   1.576 ++	cat <<EOT
   1.577 ++	</ol>
   1.578 ++	<p><a href="?all">$(_ 'All Sections')</a></p>
   1.579 ++</section>
   1.580 ++
   1.581 ++<footer>
   1.582 ++	<p>$(_ 'The original man2html program and scripts are due to %s and %s.' \
   1.583 ++	'<a href="http://wsinwp01.win.tue.nl:1234/index.html">Richard Verhoeven</a>' \
   1.584 ++	'<a href="mailto:michael@actrix.gen.nz">Michael Hamilton</a>')
   1.585 ++	$(_ 'This version is from %s maintained by %s.' 'man-1.6g' \
   1.586 ++	'<a href="mailto:flucifredi@acm.org">Federico Lucifredi</a>')</p>
   1.587 ++</footer>
   1.588 ++</body>
   1.589 ++</html>
   1.590 ++EOT
   1.591 ++	exit 0
   1.592 ++fi
   1.593 ++
   1.594 ++if [ $# -gt 2 ]; then
   1.595 ++	man2html -E "man2html: bad invocation: too many arguments"
   1.596 ++	exit 0
   1.597 ++fi
   1.598 ++
   1.599 ++# A single argument may be an explicitly give path name
   1.600 ++# Otherwise, find it
   1.601 ++
   1.602 ++if [ $# -eq 1 ]; then
   1.603 ++	arg=${1//%2b/+}
   1.604 ++	case "$arg" in
   1.605 ++		/*)  PAGE="$arg";;
   1.606 ++		*.*) PAGE=$(find /usr/share/man \( -type f -o -type l \) \( -name "$arg"   -o -name "$arg.gz"   -o -name "$arg.bz2"   -o -name "$arg.xz" \));;
   1.607 ++		*)   PAGE=$(find /usr/share/man \( -type f -o -type l \) \( -name "$arg.*" -o -name "$arg.*.gz" -o -name "$arg.*.bz2" -o -name "$arg.*.xz" \));;
   1.608 ++	esac
   1.609 ++else
   1.610 ++	arg=${2//%2b/+}
   1.611 ++	PAGE="$(
   1.612 ++		for dir in $(find /usr/share/man -type d -name man$1); do
   1.613 ++			find $dir \( -type f -o -type l \) -name "$arg.$1*"
   1.614 ++		done)"
   1.615 ++fi
   1.616 ++
   1.617 ++if [ -z "$PAGE" ]; then
   1.618 ++	complaint="$(_ 'Cannot find a page')"
   1.619 ++	if [ $# -eq 1 ]; then
   1.620 ++		complaint="$(_ 'Cannot find a page for <b>%s</b> %s' $1 $MP)"
   1.621 ++	else
   1.622 ++		complaint="$(_ 'Cannot find a page for <b>%s</b> in section <b>%s</b> %s') $2 $1 $MP"
   1.623 ++	fi
   1.624 ++	man2html -E "<p>$complaint</p>"
   1.625 ++	exit 0
   1.626 ++fi
   1.627 ++
   1.628 ++if [ "$(echo "$PAGE" | wc -l)" -gt 1 ]; then
   1.629 ++	header
   1.630 ++	cat <<EOT
   1.631 ++<!DOCTYPE html>
   1.632 ++<html><head><title>$(_ 'Multiple pages')</title>
   1.633 ++<link rel="stylesheet" href="?css"></link></head>
   1.634 ++<body><header><h1>$(_ 'Multiple pages found')</h1></header>
   1.635 ++	<section>
   1.636 ++	<ul>
   1.637 ++EOT
   1.638 ++	echo "$PAGE" | awk -F'/' '{
   1.639 ++		if ($5 ~ "man") {
   1.640 ++			split($6, man, ".");
   1.641 ++			printf "<li><a href=\"?%s\">%s</a> (%s)</li>\n", $0, man[1], man[2];
   1.642 ++		} else {
   1.643 ++			split($7, man, ".");
   1.644 ++			printf "<li><a href=\"?%s\">%s</a> (%s) — %s</li>\n", $0, man[1], man[2], $5;
   1.645 ++		}
   1.646 ++	}'
   1.647 ++	sed 's|^.*$|<li><a href="?&">&</a></li>|'
   1.648 ++	echo '</ul></section></body></html>'
   1.649 ++	exit 0
   1.650 ++fi
   1.651 ++
   1.652 ++if [ -r "$PAGE" ]; then
   1.653 ++	tmpman="$(mktemp)"
   1.654 ++	# Unpack man page
   1.655 ++	case "$PAGE" in
   1.656 ++		*.gz)   zcat "$PAGE" > "$tmpman";;
   1.657 ++		*.bz2) bzcat "$PAGE" > "$tmpman";;
   1.658 ++		*.xz)  xzcat "$PAGE" > "$tmpman";;
   1.659 ++		*)        cp "$PAGE"   "$tmpman";;
   1.660 ++	esac
   1.661 ++
   1.662 ++	# Check for link
   1.663 ++	line="$(fgrep -v '.\"' "$tmpman" | head -n1)"
   1.664 ++	case "$line" in
   1.665 ++		.so*)
   1.666 ++			link="$(echo "$line" | cut -d'/' -f2)"
   1.667 ++			header	"HTTP/1.1 301 Moved Permanently" \
   1.668 ++					"Location: ?$link"
   1.669 ++			;;
   1.670 ++		*)
   1.671 ++			# Convert page to HTML
   1.672 ++			man2html "$tmpman"
   1.673 ++			;;
   1.674 ++	esac
   1.675 ++
   1.676 ++	# Clean
   1.677 ++	rm "$tmpman"
   1.678 ++else
   1.679 ++	man2html -E "Strange... Cannot find (or read) $PAGE."
   1.680 ++fi
   1.681 ++exit 0
   1.682 +--- a/man2html.c
   1.683 ++++ b/man2html.c
   1.684 +@@ -21,14 +21,17 @@
   1.685 + #include <ctype.h>
   1.686 + #include <sys/stat.h>
   1.687 + #include "defs.h"
   1.688 +-#include "../src/version.h"
   1.689 ++#include "version.h"
   1.690 ++#include <glib.h>
   1.691 ++#include <glib/gi18n.h>
   1.692 ++#define GETTEXT_PACKAGE "man2html"
   1.693 + 
   1.694 + /* BSD mandoc Bd/Ed example(?) blocks */
   1.695 + #define BD_LITERAL  1
   1.696 + #define BD_INDENT   2
   1.697 + 
   1.698 + #define SIZE(a)	(sizeof(a)/sizeof(*a))
   1.699 +-#define DOCTYPE "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n"
   1.700 ++#define DOCTYPE "<!DOCTYPE html>\n"
   1.701 + #define CONTENTTYPE "Content-type: text/html; charset=UTF-8\n\n"
   1.702 + 
   1.703 + static char NEWLINE[2]="\n";
   1.704 +@@ -58,28 +61,13 @@
   1.705 + 
   1.706 + static char charb[3];
   1.707 + 
   1.708 +-#ifdef GUNZIP
   1.709 +-/* from src/utils.c */
   1.710 +-static int
   1.711 +-is_shell_safe(const char *ss, int quoted) {
   1.712 +-	char *bad = " ;'\\\"<>|";
   1.713 +-	char *p;
   1.714 + 
   1.715 +-	if (quoted)
   1.716 +-		bad++;			/* allow a space inside quotes */
   1.717 +-	for (p = bad; *p; p++)
   1.718 +-		if (strchr(ss, *p))
   1.719 +-			return 0;
   1.720 +-	return 1;
   1.721 +-}
   1.722 +-#endif
   1.723 +-
   1.724 + /* reads the entire manpage into buffer *buf and returns number of chars read */
   1.725 + static int
   1.726 + read_manpage_into_buffer(char *path, char **buf) {
   1.727 + 	int compressed = 0;
   1.728 + 	FILE * f = NULL;
   1.729 +-	char * ext;
   1.730 ++	/* char * ext; */
   1.731 + 	int l = 0;
   1.732 + 	struct stat stbuf;
   1.733 + 
   1.734 +@@ -94,26 +82,6 @@
   1.735 + 		char * tmp = NULL;
   1.736 + 		char * command = NULL;
   1.737 + 		char * openpath = path;
   1.738 +-#ifdef GUNZIP
   1.739 +-
   1.740 +-		if (is_shell_safe(openpath, 1)) {
   1.741 +-			ext = strrchr(openpath, '.');
   1.742 +-			compressed = (ext && !strcmp(ext, ".gz"));
   1.743 +-
   1.744 +-			if (!compressed && stat(openpath, &stbuf)) {
   1.745 +-				tmp = (char*) xmalloc(strlen(path) + 4);
   1.746 +-				sprintf(tmp, "%s.gz", path);
   1.747 +-				if ((compressed = !stat(tmp, &stbuf)))
   1.748 +-					openpath = tmp;
   1.749 +-			}
   1.750 +-		}
   1.751 +-
   1.752 +-		if (compressed) {
   1.753 +-			command = (char*) xmalloc(strlen(openpath) + sizeof(GUNZIP) + 4);
   1.754 +-			sprintf(command, GUNZIP " '%s'", openpath);
   1.755 +-			f = popen(command, "r");
   1.756 +-		} else
   1.757 +-#endif
   1.758 + 			f = fopen(openpath, "r");
   1.759 + 
   1.760 + 		if (tmp) free(tmp);
   1.761 +@@ -170,7 +138,7 @@
   1.762 + 
   1.763 + 	h = chardef;
   1.764 + 	if (h->nr != V('*','*')) {
   1.765 +-		printf("chardef corrupted\n");
   1.766 ++		printf("%s\n", _("chardef corrupted"));
   1.767 + 		exit(1);
   1.768 + 	}
   1.769 + 
   1.770 +@@ -216,7 +184,7 @@
   1.771 +     ** Add the links to the output.
   1.772 +     ** At the moment the following are recognized:
   1.773 +     **
   1.774 +-    ** name(*)                 -> ../man?/name.*
   1.775 ++    ** name(*)                 -> ?name.*
   1.776 +     ** method://string         -> method://string
   1.777 +     ** www.host.name           -> http://www.host.name
   1.778 +     ** ftp.host.name           -> ftp://ftp.host.name
   1.779 +@@ -453,8 +421,8 @@
   1.780 + #define DL	1
   1.781 + #define	UL	2
   1.782 + #define	OL	3
   1.783 +-static char *dl_open[4] = { "", "<DL COMPACT>\n", "<UL>", "<OL>" };
   1.784 +-static char *dl_close[4] = { "", "</DL>\n", "</UL>", "</OL>" };
   1.785 ++static char *dl_open[4] = { "", "<dl compact>\n", "<ul>", "<ol>" };
   1.786 ++static char *dl_close[4] = { "", "</dl>\n", "</ul>", "</ol>" };
   1.787 + 
   1.788 + static inline void
   1.789 + dl_begin(void) {
   1.790 +@@ -462,7 +430,7 @@
   1.791 + 	  out_html(dl_open[DL]);
   1.792 + 	  dl_set[itemdepth]=DL;
   1.793 +      }
   1.794 +-     out_html("<DT>");
   1.795 ++     out_html("<dt>");
   1.796 + }
   1.797 + 
   1.798 + static inline void
   1.799 +@@ -481,14 +449,14 @@
   1.800 +      itemdepth++;
   1.801 +      if (itemdepth < SIZE(dl_set))
   1.802 + 	  dl_set[itemdepth]=noDL;
   1.803 +-     out_html("<DL COMPACT><DT><DD>");
   1.804 ++     out_html("<dl compact><dt><dd>");
   1.805 + }
   1.806 + 
   1.807 + static inline void
   1.808 + dl_endlevel(void) {
   1.809 +      if (itemdepth) {
   1.810 + 	  dl_end();
   1.811 +-	  out_html("</DL>\n");
   1.812 ++	  out_html("</dl>\n");
   1.813 + 	  itemdepth--;
   1.814 +      }
   1.815 + }
   1.816 +@@ -538,12 +506,12 @@
   1.817 + 
   1.818 + #define FO0 ""
   1.819 + #define FC0 ""
   1.820 +-#define FO1 "<I>"
   1.821 +-#define FC1 "</I>"
   1.822 +-#define FO2 "<B>"
   1.823 +-#define FC2 "</B>"
   1.824 +-#define FO3 "<TT>"
   1.825 +-#define FC3 "</TT>"
   1.826 ++#define FO1 "<i>"
   1.827 ++#define FC1 "</i>"
   1.828 ++#define FO2 "<b>"
   1.829 ++#define FC2 "</b>"
   1.830 ++#define FO3 "<tt>"
   1.831 ++#define FC3 "</tt>"
   1.832 + 
   1.833 + char *switchfont[16] = { ""     , FC0 FO1, FC0 FO2, FC0 FO3,
   1.834 + 			 FC1 FO0, ""     , FC1 FO2, FC1 FO3,
   1.835 +@@ -588,14 +556,16 @@
   1.836 +   i=current_font;
   1.837 +   sizebuf[0]=0;
   1.838 +   strcat(sizebuf, change_to_font(0));
   1.839 +-  if (current_size) strcat(sizebuf, "</FONT>");
   1.840 ++  if (current_size) strcat(sizebuf, "</span>");
   1.841 +   current_size=nr;
   1.842 +   if (nr) {
   1.843 +     int l;
   1.844 +-    strcat(sizebuf, "<FONT SIZE=\"");
   1.845 ++    strcat(sizebuf, "<span style=\"font-size: ");
   1.846 +     l=strlen(sizebuf);
   1.847 +     if (nr>0) sizebuf[l++]='+'; else sizebuf[l++]='-',nr=-nr;
   1.848 +     sizebuf[l++]=nr+'0';
   1.849 ++    sizebuf[l++]='p';
   1.850 ++    sizebuf[l++]='t';
   1.851 +     sizebuf[l++]='"';
   1.852 +     sizebuf[l++]='>';
   1.853 +     sizebuf[l]=0;
   1.854 +@@ -775,7 +745,7 @@
   1.855 + 	skip_escape=exskipescape;
   1.856 + 	intresult=j;
   1.857 + 	break;
   1.858 +-    case 'l': h="<HR>"; curpos=0;
   1.859 ++    case 'l': h="<hr>"; curpos=0;
   1.860 +     case 'b':
   1.861 +     case 'v':
   1.862 +     case 'x':
   1.863 +@@ -812,7 +782,7 @@
   1.864 +     case 'c': no_newline_output=1; break;
   1.865 +     case '{': newline_for_fun++; h="";break;
   1.866 +     case '}': if (newline_for_fun) newline_for_fun--; h="";break;
   1.867 +-    case 'p': h="<BR>\n";curpos=0; break;
   1.868 ++    case 'p': h="<br>\n";curpos=0; break;
   1.869 +     case 't': h="\t";curpos=(curpos+8)&0xfff8; break;
   1.870 +     case '<': h="&lt;";curpos++; break;
   1.871 +     case '>': h="&gt;";curpos++; break;
   1.872 +@@ -1021,7 +991,7 @@
   1.873 +     out_html(change_to_size(0));
   1.874 +     if (!fillout) {
   1.875 + 	fillout=1;
   1.876 +-	out_html("</PRE>");
   1.877 ++	out_html("</pre>");
   1.878 +     }
   1.879 +     while (*h && *h!='\n') h++;
   1.880 +     if (h[-1]==';') {
   1.881 +@@ -1197,45 +1167,45 @@
   1.882 + 	currow=currow->prev;
   1.883 +     }
   1.884 +     /* produce html output */
   1.885 +-    if (center) out_html("<CENTER>");
   1.886 +-    if (box==2) out_html("<TABLE BORDER><TR><TD>");
   1.887 +-    out_html("<TABLE");
   1.888 ++    if (center) out_html("<div style=\"margin: 0 auto\">");
   1.889 ++    if (box==2) out_html("<table border><tr><td>");
   1.890 ++    out_html("<table");
   1.891 +     if (box || border) {
   1.892 +-	out_html(" BORDER");
   1.893 +-	if (!border) out_html("><TR><TD><TABLE");
   1.894 +-	if (expand) out_html(" WIDTH=100%");
   1.895 ++	out_html(" border");
   1.896 ++	if (!border) out_html("><tr><td><table");
   1.897 ++	if (expand) out_html(" width=100%");
   1.898 +     }
   1.899 +     out_html(">\n");
   1.900 +     currow=layout;
   1.901 +     while (currow) {
   1.902 + 	j=0;
   1.903 +-	out_html("<TR VALIGN=top>");
   1.904 ++	out_html("<tr style=\"vertical-align: top\">");
   1.905 + 	curfield=currow->first;
   1.906 + 	while (curfield) {
   1.907 + 	    if (curfield->align!='S' && curfield->align!='^') {
   1.908 +-		out_html("<TD");
   1.909 ++		out_html("<td");
   1.910 + 		switch (curfield->align) {
   1.911 + 		case 'N':
   1.912 + 		    curfield->space+=4;
   1.913 + 		case 'R':
   1.914 +-		    out_html(" ALIGN=right");
   1.915 ++		    out_html(" style=\"text-align: right\"");
   1.916 + 		    break;
   1.917 + 		case 'C':
   1.918 +-		    out_html(" ALIGN=center");
   1.919 ++		    out_html(" style=\"text-align: center\"");
   1.920 + 		default:
   1.921 + 		    break;
   1.922 + 		}
   1.923 + 		if (!curfield->valign && curfield->rowspan>1)
   1.924 +-		    out_html(" VALIGN=center");
   1.925 ++		    out_html(" style=\"vertical-align: center\"");
   1.926 + 		if (curfield->colspan>1) {
   1.927 + 		    char buf[5];
   1.928 +-		    out_html(" COLSPAN=");
   1.929 ++		    out_html(" colspan=");
   1.930 + 		    sprintf(buf, "%i", curfield->colspan);
   1.931 + 		    out_html(buf);
   1.932 + 		}
   1.933 + 		if (curfield->rowspan>1) {
   1.934 + 		    char buf[5];
   1.935 +-		    out_html(" ROWSPAN=");
   1.936 ++		    out_html(" rowspan=");
   1.937 + 		    sprintf(buf, "%i", curfield->rowspan);
   1.938 + 		    out_html(buf);
   1.939 + 		}
   1.940 +@@ -1244,8 +1214,8 @@
   1.941 + 		if (curfield->size) out_html(change_to_size(curfield->size));
   1.942 + 		if (curfield->font) out_html(change_to_font(curfield->font));
   1.943 + 		switch (curfield->align) {
   1.944 +-		case '=': out_html("<HR><HR>"); break;
   1.945 +-		case '_': out_html("<HR>"); break;
   1.946 ++		case '=': out_html("<hr><hr>"); break;
   1.947 ++		case '_': out_html("<hr>"); break;
   1.948 + 		default:
   1.949 + 		    if (curfield->contents) out_html(curfield->contents);
   1.950 + 		    break;
   1.951 +@@ -1255,20 +1225,20 @@
   1.952 + 		if (curfield->font) out_html(change_to_font(0));
   1.953 + 		if (curfield->size) out_html(change_to_size(0));
   1.954 + 		if (j>=maxcol && curfield->align>'@' && curfield->align!='_')
   1.955 +-		    out_html("<BR>");
   1.956 +-		out_html("</TD>");
   1.957 ++		    out_html("<br>");
   1.958 ++		out_html("</td>");
   1.959 + 	    }
   1.960 + 	    curfield=curfield->next;
   1.961 + 	}
   1.962 +-	out_html("</TR>\n");
   1.963 ++	out_html("</tr>\n");
   1.964 + 	currow=currow->next;
   1.965 +     }
   1.966 +-    if (box && !border) out_html("</TABLE>");
   1.967 +-    out_html("</TABLE>");
   1.968 +-    if (box==2) out_html("</TABLE>");
   1.969 +-    if (center) out_html("</CENTER>\n");
   1.970 ++    if (box && !border) out_html("</table>");
   1.971 ++    out_html("</table>");
   1.972 ++    if (box==2) out_html("</table>");
   1.973 ++    if (center) out_html("</div>\n");
   1.974 +     else out_html("\n");
   1.975 +-    if (!oldfillout) out_html("<PRE>");
   1.976 ++    if (!oldfillout) out_html("<pre>");
   1.977 +     fillout=oldfillout;
   1.978 +     out_html(change_to_size(oldsize));
   1.979 +     out_html(change_to_font(oldfont));
   1.980 +@@ -1401,7 +1371,7 @@
   1.981 + 		case '&': value = (value && value2); break;
   1.982 + 		case ':': value = (value || value2); break;
   1.983 + 		default: fprintf(stderr,
   1.984 +-				 "man2html: Unknown operator %c.\n", oper);
   1.985 ++				_("man2html: Unknown operator %c.\n"), oper);
   1.986 + 		}
   1.987 + 		oper=0;
   1.988 + 	    }
   1.989 +@@ -1489,42 +1459,42 @@
   1.990 + 
   1.991 + 
   1.992 + char *section_list[] = {
   1.993 +-    "1", "User Commands ",
   1.994 +-    "1C", "User Commands",
   1.995 +-    "1G", "User Commands",
   1.996 +-    "1S", "User Commands",
   1.997 +-    "1V", "User Commands ",
   1.998 +-    "2", "System Calls",
   1.999 +-    "2V", "System Calls",
  1.1000 +-    "3", "C Library Functions",
  1.1001 +-    "3C", "Compatibility Functions",
  1.1002 +-    "3F", "Fortran Library Routines",
  1.1003 +-    "3K", "Kernel VM Library Functions",
  1.1004 +-    "3L", "Lightweight Processes Library",
  1.1005 +-    "3M", "Mathematical Library",
  1.1006 +-    "3N", "Network Functions",
  1.1007 +-    "3R", "RPC Services Library",
  1.1008 +-    "3S", "Standard I/O Functions",
  1.1009 +-    "3V", "C Library Functions",
  1.1010 +-    "3X", "Miscellaneous Library Functions",
  1.1011 +-    "4", "Devices and Network Interfaces",
  1.1012 +-    "4F", "Protocol Families",
  1.1013 +-    "4I", "Devices and Network Interfaces",
  1.1014 +-    "4M", "Devices and Network Interfaces",
  1.1015 +-    "4N", "Devices and Network Interfaces",
  1.1016 +-    "4P", "Protocols",
  1.1017 +-    "4S", "Devices and Network Interfaces",
  1.1018 +-    "4V", "Devices and Network Interfaces",
  1.1019 +-    "5", "File Formats",
  1.1020 +-    "5V", "File Formats",
  1.1021 +-    "6", "Games and Demos",
  1.1022 +-    "7", "Environments, Tables, and Troff Macros",
  1.1023 +-    "7V", "Environments, Tables, and Troff Macros",
  1.1024 +-    "8", "Maintenance Commands",
  1.1025 +-    "8C", "Maintenance Commands",
  1.1026 +-    "8S", "Maintenance Commands",
  1.1027 +-    "8V", "Maintenance Commands",
  1.1028 +-    "L", "Local Commands",
  1.1029 ++    "1",  N_("User Commands"),
  1.1030 ++    "1C", N_("User Commands"),
  1.1031 ++    "1G", N_("User Commands"),
  1.1032 ++    "1S", N_("User Commands"),
  1.1033 ++    "1V", N_("User Commands"),
  1.1034 ++    "2",  N_("System Calls"),
  1.1035 ++    "2V", N_("System Calls"),
  1.1036 ++    "3",  N_("C Library Functions"),
  1.1037 ++    "3C", N_("Compatibility Functions"),
  1.1038 ++    "3F", N_("Fortran Library Routines"),
  1.1039 ++    "3K", N_("Kernel VM Library Functions"),
  1.1040 ++    "3L", N_("Lightweight Processes Library"),
  1.1041 ++    "3M", N_("Mathematical Library"),
  1.1042 ++    "3N", N_("Network Functions"),
  1.1043 ++    "3R", N_("RPC Services Library"),
  1.1044 ++    "3S", N_("Standard I/O Functions"),
  1.1045 ++    "3V", N_("C Library Functions"),
  1.1046 ++    "3X", N_("Miscellaneous Library Functions"),
  1.1047 ++    "4",  N_("Devices and Network Interfaces"),
  1.1048 ++    "4F", N_("Protocol Families"),
  1.1049 ++    "4I", N_("Devices and Network Interfaces"),
  1.1050 ++    "4M", N_("Devices and Network Interfaces"),
  1.1051 ++    "4N", N_("Devices and Network Interfaces"),
  1.1052 ++    "4P", N_("Protocols"),
  1.1053 ++    "4S", N_("Devices and Network Interfaces"),
  1.1054 ++    "4V", N_("Devices and Network Interfaces"),
  1.1055 ++    "5",  N_("File Formats"),
  1.1056 ++    "5V", N_("File Formats"),
  1.1057 ++    "6",  N_("Games and Demos"),
  1.1058 ++    "7",  N_("Environments, Tables, and Troff Macros"),
  1.1059 ++    "7V", N_("Environments, Tables, and Troff Macros"),
  1.1060 ++    "8",  N_("Maintenance Commands"),
  1.1061 ++    "8C", N_("Maintenance Commands"),
  1.1062 ++    "8S", N_("Maintenance Commands"),
  1.1063 ++    "8V", N_("Maintenance Commands"),
  1.1064 ++    "L",  N_("Local Commands"),
  1.1065 + /* for Solaris: 
  1.1066 +     "1", "User Commands",
  1.1067 +     "1B", "SunOS/BSD Compatibility Package Commands",
  1.1068 +@@ -1593,7 +1563,7 @@
  1.1069 +     "9s", "DDI and DKI Data Structures",
  1.1070 +     "L", "Local Commands",
  1.1071 + */
  1.1072 +-    NULL, "Misc. Reference Manual Pages",
  1.1073 ++    NULL, N_("Misc. Reference Manual Pages"),
  1.1074 +     NULL, NULL
  1.1075 + };
  1.1076 + 
  1.1077 +@@ -1604,7 +1574,7 @@
  1.1078 + 
  1.1079 +     if (!c) return "";
  1.1080 +     while (section_list[i] && strcmp(c,section_list[i])) i=i+2;
  1.1081 +-    if (section_list[i+1]) return section_list[i+1];
  1.1082 ++    if (section_list[i+1]) return _(section_list[i+1]);
  1.1083 +     else return c;
  1.1084 + }
  1.1085 + 
  1.1086 +@@ -1636,10 +1606,10 @@
  1.1087 +     if (level != subs) {
  1.1088 + 	manidx_need(6);
  1.1089 + 	if (subs) {
  1.1090 +-	    strcpy(manidx+mip, "</DL>\n");
  1.1091 ++	    strcpy(manidx+mip, "</dl>\n");
  1.1092 + 	    mip += 6;
  1.1093 + 	} else {
  1.1094 +-	    strcpy(manidx+mip, "<DL>\n");
  1.1095 ++	    strcpy(manidx+mip, "<dl>\n");
  1.1096 + 	    mip += 5;
  1.1097 + 	}
  1.1098 +     }
  1.1099 +@@ -1647,7 +1617,7 @@
  1.1100 + 
  1.1101 +     scan_troff(item, 1, &c);
  1.1102 +     manidx_need(100 + strlen(c));
  1.1103 +-    sprintf(manidx+mip, "<DT><A HREF=\"#%s\">%s</A><DD>\n", label, c);
  1.1104 ++    sprintf(manidx+mip, "<dt><a href=\"#%s\">%s</a></dt><dd>\n", label, c);
  1.1105 +     if (c) free(c);
  1.1106 +     while (manidx[mip]) mip++;
  1.1107 + }
  1.1108 +@@ -1834,8 +1804,8 @@
  1.1109 + 	    }
  1.1110 + 	    break;
  1.1111 + 	case V('b','r'):
  1.1112 +-	    if (still_dd) out_html("<DD>");
  1.1113 +-	    else out_html("<BR>\n");
  1.1114 ++	    if (still_dd) out_html("<dd>");
  1.1115 ++	    else out_html("<br>\n");
  1.1116 + 	    curpos=0;
  1.1117 + 	    c=c+j;
  1.1118 + 	    if (c[0] == escapesym) { c=scan_escape(c+1); }
  1.1119 +@@ -1865,17 +1835,17 @@
  1.1120 + 	    c=skip_till_newline(c);
  1.1121 + 	    /* center next i lines */
  1.1122 + 	    if (i>0) {
  1.1123 +-		out_html("<CENTER>\n");
  1.1124 ++		out_html("<div style=\"margin: 0 auto\">\n");
  1.1125 + 		while (i && *c) {
  1.1126 + 		    char *line=NULL;
  1.1127 + 		    c=scan_troff(c,1, &line);
  1.1128 +-		    if (line && strncmp(line, "<BR>", 4)) {
  1.1129 ++		    if (line && strncmp(line, "<br>", 4)) {
  1.1130 + 			out_html(line);
  1.1131 +-			out_html("<BR>\n");
  1.1132 ++			out_html("<br>\n");
  1.1133 + 			i--;
  1.1134 + 		    }
  1.1135 + 		}
  1.1136 +-		out_html("</CENTER>\n");
  1.1137 ++		out_html("</div>\n");
  1.1138 + 		curpos=0;
  1.1139 + 	    }
  1.1140 + 	    break;
  1.1141 +@@ -1906,7 +1876,7 @@
  1.1142 + 	    if (!fillout) {
  1.1143 + 		out_html(change_to_font(0));
  1.1144 + 		out_html(change_to_size('0'));
  1.1145 +-		out_html("</PRE>\n");
  1.1146 ++		out_html("</pre>\n");
  1.1147 + 	    }
  1.1148 + 	    curpos=0;
  1.1149 + 	    fillout=1;
  1.1150 +@@ -1981,7 +1951,7 @@
  1.1151 + 	    if (fillout) {
  1.1152 + 		out_html(change_to_font(0));
  1.1153 + 		out_html(change_to_size('0'));
  1.1154 +-		out_html("<PRE>\n");
  1.1155 ++		out_html("<pre>\n");
  1.1156 + 	    }
  1.1157 + 	    curpos=0;
  1.1158 + 	    fillout=0;
  1.1159 +@@ -2002,7 +1972,7 @@
  1.1160 + 	    break;
  1.1161 + 	case V('s','p'):
  1.1162 + 	    c=c+j;
  1.1163 +-	    if (fillout) out_html("<P>"); else {
  1.1164 ++	    if (fillout) out_html("<p>"); else {
  1.1165 + 		out_html(NEWLINE);
  1.1166 + 		NEWLINE[0]='\n';
  1.1167 + 	    }
  1.1168 +@@ -2033,30 +2003,15 @@
  1.1169 + 		*c = 0;
  1.1170 + 		scan_troff(h,1, &name);
  1.1171 + 		if (name[3] == '/') h=name+3; else h=name;
  1.1172 +-#if NOCGI
  1.1173 +-                if (!out_length) {
  1.1174 +-		    char *t,*s;
  1.1175 +-		    t=strrchr(fname, '/');
  1.1176 +-		    if (!t) t=fname;
  1.1177 +-		    fprintf(stderr, "ln -s %s.html %s.html\n", h, t);
  1.1178 +-		    s=strrchr(t, '.');if (!s) s=t;
  1.1179 +-		    printf(CONTENTTYPE DOCTYPE);
  1.1180 +-		    printf("<HTML><HEAD><TITLE> Man page of %s</TITLE>\n"
  1.1181 +-			   "</HEAD><BODY>\n"
  1.1182 +-			   "See the man page for <A HREF=\"%s.html\">%s</A>.\n"
  1.1183 +-			   "</BODY></HTML>\n",
  1.1184 +-			   s, h, h);
  1.1185 +-		} else
  1.1186 +-#endif
  1.1187 +                 {
  1.1188 + 		    /* this works alright, except for section 3 */
  1.1189 + 		    if ((l = read_manpage_into_buffer(h, &buf)) < 0) {
  1.1190 + 			 fprintf(stderr,
  1.1191 +-				"man2html: unable to open or read file %s\n", h);
  1.1192 +-			 out_html("<BLOCKQUOTE>"
  1.1193 +-				  "man2html: unable to open or read file\n");
  1.1194 ++				_("man2html: unable to open or read file %s\n"), h);
  1.1195 ++			 out_html("<blockquote>");
  1.1196 ++			 out_html(_("man2html: unable to open or read file\n"));
  1.1197 + 			 out_html(h);
  1.1198 +-			 out_html("</BLOCKQUOTE>\n");
  1.1199 ++			 out_html("</blockquote>\n");
  1.1200 + 		    } else {
  1.1201 + 			buf[0]=buf[l]='\n';
  1.1202 + 			buf[l+1]=buf[l+2]=0;
  1.1203 +@@ -2085,7 +2040,7 @@
  1.1204 + #if 0
  1.1205 + 	    dl_down();
  1.1206 + #endif
  1.1207 +-	    out_html("<BR>\n");
  1.1208 ++	    out_html("<br>\n");
  1.1209 + 	    c=c+j;
  1.1210 + 	    c=scan_expression(c, &j);
  1.1211 + 	    for (i=0; i<j; i++) out_html("&nbsp;");
  1.1212 +@@ -2163,7 +2118,7 @@
  1.1213 +             if (words) {
  1.1214 + 		scan_troff(wordlist[0], 1,NULL);
  1.1215 + 	    }
  1.1216 +-	    out_html("<DD>");
  1.1217 ++	    out_html("<dd>");
  1.1218 + 	    curpos = 0;
  1.1219 + 	    break;
  1.1220 + 	case V('T','P'):
  1.1221 +@@ -2172,7 +2127,7 @@
  1.1222 + 	    /* somewhere a definition ends with '.TP' */
  1.1223 + 	    if (!*c) still_dd=1; else {
  1.1224 + 		c=scan_troff(c,1,NULL);
  1.1225 +-		out_html("<DD>");
  1.1226 ++		out_html("<dd>");
  1.1227 + 	    }
  1.1228 + 	    curpos=0;
  1.1229 + 	    break;
  1.1230 +@@ -2195,20 +2150,20 @@
  1.1231 + 		 fprintf(idxfile,"\n");
  1.1232 + 	    }
  1.1233 + #endif
  1.1234 +-            out_html("<A NAME=\"");
  1.1235 ++            out_html("<span id=\"");
  1.1236 + 	    out_html(idxlabel);
  1.1237 + 	    /* this will not work in mosaic (due to a bug).
  1.1238 + 	    ** Adding '&nbsp;' between '>' and '<' solves it, but creates
  1.1239 + 	    ** some space. A normal space does not work.
  1.1240 + 	    */
  1.1241 +-	    out_html("\"></A>");
  1.1242 ++	    out_html("\"></span>");
  1.1243 + 	    break;
  1.1244 + 	case V('P',' '):
  1.1245 + 	case V('P','\n'):
  1.1246 + 	case V('L','P'):
  1.1247 + 	case V('P','P'):
  1.1248 + 	    dl_end();
  1.1249 +-	    if (fillout) out_html("<P>\n"); else {
  1.1250 ++	    if (fillout) out_html("<p>\n"); else {
  1.1251 + 		out_html(NEWLINE);
  1.1252 + 		NEWLINE[0]='\n';
  1.1253 + 	    }
  1.1254 +@@ -2272,19 +2227,29 @@
  1.1255 + 	    out_html(change_to_size(0));
  1.1256 + 	    if (!fillout) {
  1.1257 + 		fillout=1;
  1.1258 +-		out_html("</PRE>");
  1.1259 ++		out_html("</pre>");
  1.1260 + 	    }
  1.1261 + 	    trans_char(c,'"', '\a');
  1.1262 + 	    add_to_index(mode, c);
  1.1263 +-	    out_html("<A NAME=\"");
  1.1264 +-	    out_html(label);
  1.1265 +-	    /* &nbsp; for mosaic users */
  1.1266 +-	    if (mode) out_html("\">&nbsp;</A>\n<H3>");
  1.1267 +-	    else out_html("\">&nbsp;</A>\n<H2>");
  1.1268 ++
  1.1269 ++		if (mode) {
  1.1270 ++			out_html("<h3 id=\"");
  1.1271 ++			out_html(label);
  1.1272 ++			out_html("\">");
  1.1273 ++		} else {
  1.1274 ++			out_html("</section>\n\n<section id=\"");
  1.1275 ++			out_html(label);
  1.1276 ++			out_html("\">\n<h2>");
  1.1277 ++		}
  1.1278 ++
  1.1279 + 	    mandoc_synopsis = (strncmp(c, "SYNOPSIS", 8) == 0);
  1.1280 + 	    c = (mandoc_command ? scan_troff_mandoc : scan_troff)(c,1,NULL);
  1.1281 +-	    if (mode) out_html("</H3>\n");
  1.1282 +-	    else out_html("</H2>\n");
  1.1283 ++
  1.1284 ++		if (mode)
  1.1285 ++			out_html("</h3>\n");
  1.1286 ++		else
  1.1287 ++			out_html("</h2>\n");
  1.1288 ++
  1.1289 + 	    curpos=0;
  1.1290 + 	    break;
  1.1291 + 	case V('T','S'):
  1.1292 +@@ -2315,7 +2280,7 @@
  1.1293 + 		    int skip=0;
  1.1294 + 		    output_possible=1;
  1.1295 + 		    printf(CONTENTTYPE DOCTYPE);
  1.1296 +-		    out_html("<HTML><HEAD><TITLE>Man page of ");
  1.1297 ++		    out_html("<html><head>\n<meta charset=\"UTF-8\">\n<title>");
  1.1298 + 		    scan_troff(wordlist[0], 0, &t);
  1.1299 + 		    /* we need to remove all html tags */
  1.1300 + 		    for (s=q=t; *s; s++) {
  1.1301 +@@ -2324,11 +2289,14 @@
  1.1302 + 		      else if (!skip) *q++ = *s;
  1.1303 + 		    }
  1.1304 + 		    *q = '\0';
  1.1305 +-		    out_html(t);
  1.1306 ++		    char buff[256];
  1.1307 ++		    sprintf(buff, _("Man page of %s"), t);
  1.1308 ++		    out_html(buff);
  1.1309 + 		    free(t);
  1.1310 +-		    out_html("</TITLE>\n</HEAD><BODY>\n<H1>");
  1.1311 ++		    out_html("</title>\n<link rel=\"stylesheet\" href=\"?css\">\n</head><body>\n<header><h1>");
  1.1312 + 		    scan_troff(wordlist[0], 0, NULL);
  1.1313 +-		    out_html("</H1>\nSection: ");
  1.1314 ++		    out_html("</h1></header>\n<section>\n");
  1.1315 ++		    out_html(_("Section: "));
  1.1316 + 		    if (words>4)
  1.1317 + 		    	scan_troff(wordlist[4], 0, NULL);
  1.1318 + 		    else
  1.1319 +@@ -2336,14 +2304,17 @@
  1.1320 + 		    out_html(" (");
  1.1321 + 		    scan_troff(wordlist[1], 0, NULL);
  1.1322 + 		    if (words>2) {
  1.1323 +-			out_html(")<BR>Updated: ");
  1.1324 ++			out_html(")<br>");
  1.1325 ++			out_html(_("Updated: "));
  1.1326 + 			scan_troff(wordlist[2], 1, NULL);
  1.1327 + 		    } else out_html(")");
  1.1328 +-		    out_html("<BR><A HREF=\"#index\">Index</A>\n");
  1.1329 ++		    out_html("<br><a href=\"#index\">");
  1.1330 ++		    out_html(_("Index"));
  1.1331 ++		    out_html("</a>\n");
  1.1332 + 		    man_page_html(0,0);	/* Return to Main Contents */
  1.1333 + 		    *sl='\n';
  1.1334 +-		    out_html("<HR>\n");
  1.1335 +-		    if (mandoc_command) out_html("<BR>BSD mandoc<BR>");
  1.1336 ++		    out_html("<hr>\n");
  1.1337 ++		    if (mandoc_command) out_html("<br>\nBSD mandoc<br>");
  1.1338 + 		}
  1.1339 + 		c = sl+1;
  1.1340 + 	    } else
  1.1341 +@@ -2507,7 +2478,7 @@
  1.1342 + 		 dl_newlevel_type(DL);
  1.1343 + 	    if (nl)
  1.1344 + 		 *nl = t;
  1.1345 +-	    if (fillout) out_html("<P>\n"); else {
  1.1346 ++	    if (fillout) out_html("<p>\n"); else {
  1.1347 + 		 out_html(NEWLINE);
  1.1348 + 		 NEWLINE[0]='\n';
  1.1349 + 	    }
  1.1350 +@@ -2518,7 +2489,7 @@
  1.1351 + 	case V('E','l'):	/* BSD mandoc */
  1.1352 + 	     c=c+j;
  1.1353 + 	     dl_endlevel_type();
  1.1354 +-	     if (fillout) out_html("<P>\n"); else {
  1.1355 ++	     if (fillout) out_html("<p>\n"); else {
  1.1356 + 		  out_html(NEWLINE);
  1.1357 + 		  NEWLINE[0]='\n';
  1.1358 + 	     }
  1.1359 +@@ -2528,7 +2499,7 @@
  1.1360 + 	case V('I','t'):	/* BSD mandoc */
  1.1361 + 	     c=c+j;
  1.1362 + 	     if (dl_type(DL)) {
  1.1363 +-		  out_html("<DT>");
  1.1364 ++		  out_html("<dt>");
  1.1365 + 		  out_html(change_to_font('B'));
  1.1366 + 		  if (*c == '\n') {
  1.1367 + 		       /* Don't allow embedded comms after a newline */
  1.1368 +@@ -2543,9 +2514,9 @@
  1.1369 + 		  if (inXo)
  1.1370 + 		       still_dd = 1;
  1.1371 + 		  else
  1.1372 +-		       out_html("<DD>");
  1.1373 ++		       out_html("<dd>");
  1.1374 + 	     } else if (dl_type(UL) || dl_type(OL)) {
  1.1375 +-		  out_html("<LI>");
  1.1376 ++		  out_html("<li>");
  1.1377 + 		  c=scan_troff_mandoc(c,1,NULL);
  1.1378 + 		  out_html(NEWLINE);
  1.1379 + 	     }
  1.1380 +@@ -2559,7 +2530,7 @@
  1.1381 + 	     c=c+j;
  1.1382 + 	     if (inXo) {
  1.1383 + 		  if (still_dd)
  1.1384 +-		       out_html("<DD>");
  1.1385 ++		       out_html("<dd>");
  1.1386 + 		  inXo = 0;
  1.1387 + 	     }
  1.1388 + 	     break;
  1.1389 +@@ -2594,12 +2565,12 @@
  1.1390 + 	case V('D','l'):	/* BSD mandoc */
  1.1391 + 	     c=c+j;
  1.1392 + 	     out_html(NEWLINE);
  1.1393 +-	     out_html("<BLOCKQUOTE>");	    
  1.1394 ++	     out_html("<blockquote>");	    
  1.1395 + 	     out_html(change_to_font('L'));
  1.1396 + 	     if (*c == '\n') c++;
  1.1397 + 	     c=scan_troff_mandoc(c, 1, NULL);	    
  1.1398 + 	     out_html(change_to_font('R'));
  1.1399 +-	     out_html("</BLOCKQUOTE>");	    
  1.1400 ++	     out_html("</blockquote>");	    
  1.1401 + 	     if (fillout) curpos++; else curpos=0;
  1.1402 + 	     break;
  1.1403 + 	case V('B','d'):	/* BSD mandoc */
  1.1404 +@@ -2615,14 +2586,14 @@
  1.1405 + 	     mandoc_bd_options = 0; /* Remember options for terminating Bl */
  1.1406 + 	     if (strstr(c, "-offset indent")) {
  1.1407 + 		  mandoc_bd_options |= BD_INDENT;
  1.1408 +-		  out_html("<BLOCKQUOTE>\n");
  1.1409 ++		  out_html("<blockquote>\n");
  1.1410 + 	     }
  1.1411 + 	     if (strstr(c, "-literal") || strstr(c, "-unfilled")) {
  1.1412 + 		  if (fillout) {
  1.1413 + 		       mandoc_bd_options |= BD_LITERAL;
  1.1414 + 		       out_html(change_to_font(0));
  1.1415 + 		       out_html(change_to_size('0'));
  1.1416 +-		       out_html("<PRE>\n");
  1.1417 ++		       out_html("<pre>\n");
  1.1418 + 		  }
  1.1419 + 		  curpos=0;
  1.1420 + 		  fillout=0;
  1.1421 +@@ -2637,18 +2608,18 @@
  1.1422 + 		  if (!fillout) {
  1.1423 + 		       out_html(change_to_font(0));
  1.1424 + 		       out_html(change_to_size('0'));
  1.1425 +-		       out_html("</PRE>\n");
  1.1426 ++		       out_html("</pre>\n");
  1.1427 + 		  }
  1.1428 + 	     }
  1.1429 + 	     if (mandoc_bd_options & BD_INDENT)
  1.1430 +-		  out_html("</BLOCKQUOTE>\n");
  1.1431 ++		  out_html("</blockquote>\n");
  1.1432 + 	     curpos=0;
  1.1433 + 	     fillout=1;
  1.1434 + 	     c=skip_till_newline(c);
  1.1435 + 	     break;
  1.1436 + 	case V('B','e'):	/* BSD mandoc */
  1.1437 + 	     c=c+j;
  1.1438 +-	     if (fillout) out_html("<P>"); else {
  1.1439 ++	     if (fillout) out_html("<p>"); else {
  1.1440 + 		  out_html(NEWLINE);
  1.1441 + 		  NEWLINE[0]='\n';
  1.1442 + 	     }
  1.1443 +@@ -2715,7 +2686,7 @@
  1.1444 + 	     if (fillout) curpos++; else curpos=0;
  1.1445 + 	     break;
  1.1446 + 	case V('P','p'):	/* BSD mandoc */
  1.1447 +-	     if (fillout) out_html("<P>\n"); else {
  1.1448 ++	     if (fillout) out_html("<p>\n"); else {
  1.1449 + 		  out_html(NEWLINE);
  1.1450 + 		  NEWLINE[0]='\n';
  1.1451 + 	     }
  1.1452 +@@ -2726,9 +2697,9 @@
  1.1453 + 	     trans_char(c,'"','\a');
  1.1454 + 	     c=c+j;
  1.1455 + 	     if (*c == '\n') c++;
  1.1456 +-	     out_html("``");
  1.1457 ++	     out_html("“");
  1.1458 + 	     c=scan_troff_mandoc(c, 1, NULL);
  1.1459 +-	     out_html("''");
  1.1460 ++	     out_html("”");
  1.1461 + 	     out_html(NEWLINE);
  1.1462 + 	     if (fillout) curpos++; else curpos=0;
  1.1463 + 	     break;
  1.1464 +@@ -2800,12 +2771,22 @@
  1.1465 + 	     trans_char(c,'"','\a');
  1.1466 + 	     c=c+j;
  1.1467 + 	     if (*c == '\n') c++;
  1.1468 +-	     out_html("`");
  1.1469 ++	     out_html("‘");
  1.1470 + 	     c=scan_troff_mandoc(c, 1, NULL);
  1.1471 +-	     out_html("'");
  1.1472 ++	     out_html("’");
  1.1473 + 	     out_html(NEWLINE);
  1.1474 + 	     if (fillout) curpos++; else curpos=0;
  1.1475 + 	     break;
  1.1476 ++	case V('A','q'):	/* BSD mandoc */
  1.1477 ++	     trans_char(c,'"','\a');
  1.1478 ++	     c=c+j;
  1.1479 ++	     if (*c == '\n') c++;
  1.1480 ++	     out_html("⟨");
  1.1481 ++	     c=scan_troff_mandoc(c, 1, NULL);
  1.1482 ++	     out_html("⟩");
  1.1483 ++	     out_html(NEWLINE);
  1.1484 ++	     if (fillout) curpos++; else curpos=0;
  1.1485 ++	     break;
  1.1486 + 	case V('A','r'):	/* BSD mandoc */
  1.1487 + 	     /* parse one line in italics */
  1.1488 + 	     out_html(change_to_font('I'));
  1.1489 +@@ -2855,7 +2836,7 @@
  1.1490 + 		   */
  1.1491 + 		  static int count = 0; /* Don't break on the first Nm */
  1.1492 + 		  if (count) {
  1.1493 +-		       out_html("<BR>");
  1.1494 ++		       out_html("<br>");
  1.1495 + 		  } else {
  1.1496 + 		       char *end, t=0 /* just for gcc */;
  1.1497 + 		       end = strchr(c, '\n');
  1.1498 +@@ -3038,7 +3019,7 @@
  1.1499 + 	    if (h[-1] == '\n' && still_dd && isalnum(*h)) {
  1.1500 + 		/* sometimes a .HP request is not followed by a .br request */
  1.1501 + 		FLUSHIBP;
  1.1502 +-		out_html("<DD>");
  1.1503 ++		out_html("<dd>");
  1.1504 + 		curpos=0;
  1.1505 + 		still_dd=0;
  1.1506 + 	    }
  1.1507 +@@ -3108,12 +3089,12 @@
  1.1508 + 				curpos++;
  1.1509 + 			    }
  1.1510 + 			} else {
  1.1511 +-			    out_html("<TT>");
  1.1512 ++			    out_html("<tt>");
  1.1513 + 			    while (curpos < tabstops[curtab]) {
  1.1514 + 				out_html("&nbsp;");
  1.1515 + 				curpos++;
  1.1516 + 			    }
  1.1517 +-			    out_html("</TT>");
  1.1518 ++			    out_html("</tt>");
  1.1519 + 			}
  1.1520 + 		    }
  1.1521 + 		}
  1.1522 +@@ -3122,7 +3103,7 @@
  1.1523 + 		if (*h == ' ' && (h[-1] == '\n' || usenbsp)) {
  1.1524 + 		    FLUSHIBP;
  1.1525 + 		    if (!usenbsp && fillout) {
  1.1526 +-			out_html("<BR>");
  1.1527 ++			out_html("<br>");
  1.1528 + 			curpos=0;
  1.1529 + 		    }
  1.1530 + 		    usenbsp=fillout;
  1.1531 +@@ -3196,13 +3177,13 @@
  1.1532 + 
  1.1533 +      switch(status) {
  1.1534 + 	case 403:
  1.1535 +-		printf("Status: 403 Forbidden\n");
  1.1536 ++		printf("HTTP/1.1 403 Forbidden\n");
  1.1537 + 		break;
  1.1538 + 	case 404:
  1.1539 +-		printf("Status: 404 Not Found\n");
  1.1540 ++		printf("HTTP/1.1 404 Not Found\n");
  1.1541 + 		break;
  1.1542 + 	case 500:
  1.1543 +-		printf("Status: 500 Internal Server Error\n");
  1.1544 ++		printf("HTTP/1.1 500 Internal Server Error\n");
  1.1545 + 		break;
  1.1546 + 	case 0:
  1.1547 + 	default:
  1.1548 +@@ -3210,12 +3191,13 @@
  1.1549 +      }
  1.1550 + 	     
  1.1551 +      printf(CONTENTTYPE DOCTYPE);
  1.1552 +-     printf("<HTML><HEAD><TITLE>%s</TITLE></HEAD>\n"
  1.1553 +-	    "<BODY>\n<H1>%s</H1>\n", s, s);
  1.1554 ++     printf("<html>\n<head>\n<meta charset=\"UTF-8\">\n<title>%s</title>\n"
  1.1555 ++     	"<link rel=\"stylesheet\" href=\"?css\">\n</head>\n"
  1.1556 ++	    "<body>\n<header><h1>%s</h1></header>\n<section>\n", s, s);
  1.1557 +      va_start(p, t);
  1.1558 +      vfprintf(stdout, t, p);
  1.1559 +      va_end(p);
  1.1560 +-     printf("</BODY></HTML>\n");
  1.1561 ++     printf("</section>\n</body></html>\n");
  1.1562 +      exit(0);
  1.1563 + }
  1.1564 + 
  1.1565 +@@ -3223,8 +3205,8 @@
  1.1566 + xstrdup(const char *s) {
  1.1567 +      char *p = strdup(s);
  1.1568 +      if (p == NULL)
  1.1569 +-	  error_page(500, "Out of memory",
  1.1570 +-			 "Sorry, out of memory, aborting...\n");
  1.1571 ++	  error_page(500, _("Out of memory"),
  1.1572 ++			_("Sorry, out of memory, aborting...\n"));
  1.1573 +      return p;
  1.1574 + }
  1.1575 + 
  1.1576 +@@ -3232,8 +3214,8 @@
  1.1577 + xmalloc(size_t size) {
  1.1578 +      void *p = malloc(size);
  1.1579 +      if (p == NULL)
  1.1580 +-	  error_page(500, "Out of memory",
  1.1581 +-			 "Sorry, out of memory, aborting...\n");
  1.1582 ++	  error_page(500, _("Out of memory"),
  1.1583 ++			_("Sorry, out of memory, aborting...\n"));
  1.1584 +      return p;
  1.1585 + }
  1.1586 + 
  1.1587 +@@ -3241,16 +3223,16 @@
  1.1588 + xrealloc(void *ptr, size_t size) {
  1.1589 +      void *p = realloc(ptr,size);
  1.1590 +      if (p == NULL)
  1.1591 +-	  error_page(500, "Out of memory",
  1.1592 +-			 "Sorry, out of memory, aborting...\n");
  1.1593 ++	  error_page(500, _("Out of memory"),
  1.1594 ++			_("Sorry, out of memory, aborting...\n"));
  1.1595 +      return p;
  1.1596 + }
  1.1597 + 
  1.1598 + static void
  1.1599 + usage(void) {
  1.1600 +-     error_page(500, "man2html: bad invocation",
  1.1601 +-	"Call: man2html [-l|-h host.domain:port] [-p|-q] [filename]\n"
  1.1602 +-	"or:   man2html -r [filename]\n");
  1.1603 ++     error_page(500, _("man2html: bad invocation"),
  1.1604 ++	_("Call: man2html [-l|-h host.domain:port] [-p|-q] [filename]\n"
  1.1605 ++	"or:   man2html -r [filename]\n"));
  1.1606 + }
  1.1607 + 
  1.1608 + static void
  1.1609 +@@ -3273,7 +3255,7 @@
  1.1610 + 	       }
  1.1611 + #if 0
  1.1612 + 	       else  /* complain or not - this need not be fatal */
  1.1613 +-		    error_page("Error", "man2html: could not chdir to %s", s);
  1.1614 ++		    error_page(_("Error"), _("man2html: could not chdir to %s"), s);
  1.1615 + #endif
  1.1616 + 	  }
  1.1617 +      }
  1.1618 +@@ -3291,6 +3273,11 @@
  1.1619 +  */
  1.1620 + int
  1.1621 + main(int argc, char **argv) {
  1.1622 ++	setlocale (LC_ALL, "");
  1.1623 ++	bindtextdomain (GETTEXT_PACKAGE, "/usr/share/locale");
  1.1624 ++	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
  1.1625 ++	textdomain (GETTEXT_PACKAGE);
  1.1626 ++
  1.1627 +     int l, c;
  1.1628 +     char *buf, *filename, *fnam = NULL;
  1.1629 + 
  1.1630 +@@ -3309,7 +3296,7 @@
  1.1631 + 	 case 'D':
  1.1632 + 	      goto_dir(optarg, 0, 0); break;
  1.1633 + 	 case 'E':
  1.1634 +-	      error_page(0, "Error", "%s", optarg); break;
  1.1635 ++	      error_page(0, _("Error"), "%s", optarg); break;
  1.1636 + 	 case 'h':
  1.1637 + 	      set_cgibase("localhost"); break;
  1.1638 + 	 case 'H':
  1.1639 +@@ -3362,7 +3349,7 @@
  1.1640 + 
  1.1641 +     l = read_manpage_into_buffer(fnam, &buf);
  1.1642 +     if (l < 0)
  1.1643 +-    	error_page(404, "File not found", "Could not open %s\n", fname);
  1.1644 ++    	error_page(404, _("File not found"), _("Could not open %s\n"), fname);
  1.1645 + 
  1.1646 +     buf[0] = '\n';
  1.1647 +     buf[l+1] = '\n';
  1.1648 +@@ -3379,34 +3366,34 @@
  1.1649 +     out_html(change_to_size(0));
  1.1650 +     if (!fillout) {
  1.1651 + 	fillout=1;
  1.1652 +-	out_html("</PRE>");
  1.1653 ++	out_html("</pre>");
  1.1654 +     }
  1.1655 +     out_html(NEWLINE);
  1.1656 +     if (output_possible) {
  1.1657 + 	/* &nbsp; for mosaic users */
  1.1658 + 	if (manidx) {
  1.1659 +-	    printf("<HR>\n<A NAME=\"index\">&nbsp;</A><H2>Index</H2>\n<DL>\n");
  1.1660 ++	    printf("</section>\n\n<section id=\"index\">\n<h2>%s</h2>\n\n<dl>\n", _("Index"));
  1.1661 + 	    manidx[mip]=0;
  1.1662 + 	    printf("%s", manidx);
  1.1663 +-	    if (subs) printf("</DL>\n");
  1.1664 +-	    printf("</DL>\n");
  1.1665 ++	    if (subs) printf("</dl>\n");
  1.1666 ++	    printf("</dl>\n");
  1.1667 + 	}
  1.1668 + 	print_sig();
  1.1669 +-	printf("</BODY>\n</HTML>\n");
  1.1670 ++	printf("</body>\n</html>\n");
  1.1671 +     } else {
  1.1672 + 	if (!filename)
  1.1673 + 	     filename = fname;
  1.1674 + 	if (*filename == '/')
  1.1675 +-	     error_page(403, "Invalid Man Page",
  1.1676 +-		   "The requested file %s is not a valid (unformatted) "
  1.1677 ++	     error_page(403, _("Invalid Man Page"),
  1.1678 ++		 _("The requested file %s is not a valid (unformatted) "
  1.1679 + 		   "man page.\nIf the file is a formatted man page, "
  1.1680 + 		   "you could try to load the\n"
  1.1681 +-		   "<A HREF=\"file://%s\">plain file</A>.\n",
  1.1682 ++		   "<a href=\"file://%s\">plain file</a>.\n"),
  1.1683 + 		   filename, filename);
  1.1684 + 	else
  1.1685 +-	     error_page(403, "Invalid Man Page",
  1.1686 +-		   "The requested file %s is not a valid (unformatted) "
  1.1687 +-		   "man page.", filename);
  1.1688 ++	     error_page(403, _("Invalid Man Page"),
  1.1689 ++		 _("The requested file %s is not a valid (unformatted) "
  1.1690 ++		   "man page."), filename);
  1.1691 +     }
  1.1692 +     if (idxfile)
  1.1693 + 	 fclose(idxfile);
  1.1694 +--- a/scripts/cgi-bin/man/man2html
  1.1695 ++++ b/scripts/cgi-bin/man/man2html
  1.1696 +@@ -8,11 +8,11 @@
  1.1697 + 
  1.1698 + # Do we need lynxcgi URLs? For the moment our criterion is
  1.1699 + # 1) HTTP_USER_AGENT=Lynx*  and 2) HTTP_HOST is unset.
  1.1700 +-AGENT="${HTTP_USER_AGENT-unknown}"
  1.1701 ++AGENT="${HTTP_USER_AGENT:-unknown}"
  1.1702 + 
  1.1703 + case "$AGENT" in
  1.1704 +     Lynx*|lynx*)
  1.1705 +-	HH="${HTTP_HOST-nohh}"
  1.1706 ++	HH="${HTTP_HOST:-nohh}"
  1.1707 + 	SED="s/%lynx //"
  1.1708 + 	;;
  1.1709 +     *)
  1.1710 +@@ -21,7 +21,7 @@
  1.1711 + 	;;
  1.1712 + esac
  1.1713 + 
  1.1714 +-SERVER="${SERVER_NAME-localhost}"
  1.1715 ++SERVER="${SERVER_NAME:-localhost}"
  1.1716 + case "$HH" in
  1.1717 +     nohh)
  1.1718 + 	LL="-l"
  1.1719 +--- a/scripts/cgi-bin/man/mansearch
  1.1720 ++++ b/scripts/cgi-bin/man/mansearch
  1.1721 +@@ -7,11 +7,11 @@
  1.1722 + 
  1.1723 + # Do we need lynxcgi URLs? For the moment our criterion is
  1.1724 + # 1) HTTP_USER_AGENT=Lynx*  and 2) HTTP_HOST is unset.
  1.1725 +-AGENT="${HTTP_USER_AGENT-unknown}"
  1.1726 ++AGENT="${HTTP_USER_AGENT:-unknown}"
  1.1727 + 
  1.1728 + case "$AGENT" in
  1.1729 +     Lynx*|lynx*)
  1.1730 +-	HH="${HTTP_HOST-nohh}"
  1.1731 ++	HH="${HTTP_HOST:-nohh}"
  1.1732 + 	SED="s/%lynx //"
  1.1733 + 	;;
  1.1734 +     *)
  1.1735 +@@ -20,7 +20,7 @@
  1.1736 + 	;;
  1.1737 + esac
  1.1738 + 
  1.1739 +-SERVER="${SERVER_NAME-localhost}"
  1.1740 ++SERVER="${SERVER_NAME:-localhost}"
  1.1741 + case "$HH" in
  1.1742 +     nohh)
  1.1743 + 	CG="lynxcgi:/usr/lib/cgi-bin/man"
  1.1744 +--- a/scripts/cgi-bin/man/mansearchhelp
  1.1745 ++++ b/scripts/cgi-bin/man/mansearchhelp
  1.1746 +@@ -4,17 +4,17 @@
  1.1747 + 
  1.1748 + # Do we need lynxcgi URLs? For the moment our criterion is
  1.1749 + # 1) HTTP_USER_AGENT=Lynx*  and 2) HTTP_HOST is unset.
  1.1750 +-AGENT="${HTTP_USER_AGENT-unknown}"
  1.1751 ++AGENT="${HTTP_USER_AGENT:-unknown}"
  1.1752 + case "$AGENT" in
  1.1753 +     Lynx*|lynx*)
  1.1754 +-	HH="${HTTP_HOST-nohh}"
  1.1755 ++	HH="${HTTP_HOST:-nohh}"
  1.1756 + 	;;
  1.1757 +     *)
  1.1758 + 	HH=nolynx
  1.1759 + 	;;
  1.1760 + esac
  1.1761 + 
  1.1762 +-SERVER="${SERVER_NAME-localhost}"
  1.1763 ++SERVER="${SERVER_NAME:-localhost}"
  1.1764 + case "$HH" in
  1.1765 +     nohh)
  1.1766 + 	CG="lynxcgi:/usr/lib/cgi-bin/man"
  1.1767 +--- a/strdefs.c
  1.1768 ++++ b/strdefs.c
  1.1769 +@@ -27,266 +27,333 @@
  1.1770 +     { V('.','V'), 1,     0, NULL }, /* the me package tests for this */
  1.1771 +     { 0, 0, 0, NULL } };
  1.1772 + 
  1.1773 ++
  1.1774 ++/* Characters written according to http://mdocml.bsd.lv/man/mandoc_char.7.html */
  1.1775 ++
  1.1776 + static STRDEF standardstring[] = {
  1.1777 +-    { V('<','='), 2, "&lt;=", NULL  }, /* less equal */
  1.1778 +-    { V('>','='), 2, "&gt=;", NULL  }, /* greather equal */
  1.1779 +-    { V('A','m'), 1, "&amp;", NULL  }, /* infinity */
  1.1780 +-    { V('B','a'), 1, "|", NULL  }, /* vartical bar */
  1.1781 +-    { V('G','e'), 2, "&gt=;", NULL  }, /* greather equal */
  1.1782 +-    { V('G','t'), 1, "&gt;", NULL  }, /* greather than */
  1.1783 +-    { V('I','f'), 1, "&infin;", NULL  }, /* infinity */
  1.1784 +-    { V('L','e'), 2, "&lt;=", NULL  }, /* less equal */
  1.1785 +-    { V('L','q'), 1, "&ldquo;", NULL  }, /* left double quote  */
  1.1786 +-    { V('L','t'), 1, "&lt;", NULL  }, /* less than */
  1.1787 +-    { V('N','a'), 3, "NaN", NULL  }, /* not a number */
  1.1788 +-    { V('N','e'), 2, "!=", NULL  }, /* not equal */
  1.1789 +-    { V('P','i'), 2, "Pi", NULL  }, /* pi */
  1.1790 +-    { V('P','m'), 1, "&plusmn;", NULL  }, /* plus minus */
  1.1791 +-    { V('R',' '), 1, "&#174;", NULL },
  1.1792 +-    { V('R','q'), 1, "&rdquo;", NULL  }, /* right double quote  */
  1.1793 +-    { V('a','a'), 1, "'", NULL  }, /* accute accent  */
  1.1794 +-    { V('g','a'), 1, "`", NULL  }, /* grave accent  */
  1.1795 +-    { V('l','q'), 2, "``", NULL },
  1.1796 +-    { V('q',' '), 1, "&quot;", NULL  }, /* straight double quote  */
  1.1797 +-    { V('r','q'), 2, "''", NULL },
  1.1798 +-    { V('u','a'), 1, "^", NULL  }, /* upwards arrow  */
  1.1799 ++    { V('<','='), 1, "≤",        NULL },	/* less-than-equal */
  1.1800 ++    { V('>','='), 1, "≥",        NULL },	/* greater-than-equal */
  1.1801 ++    { V('A','i'), 4, "ANSI",     NULL },	/* ANSI standard name */
  1.1802 ++    { V('A','m'), 1, "&amp;",    NULL },	/* ampersand */
  1.1803 ++    { V('B','a'), 1, "|",        NULL },	/* vertical bar */
  1.1804 ++    { V('G','e'), 1, "≥",        NULL },	/* greater-than-equal */
  1.1805 ++    { V('G','t'), 1, "&gt;",     NULL },	/* greater-than */
  1.1806 ++    { V('I','f'), 8, "infinity", NULL },	/* infinity */
  1.1807 ++    { V('L','e'), 1, "≤",        NULL },	/* less-than-equal */
  1.1808 ++    { V('L','q'), 1, "“",        NULL },	/* left-double-quote */
  1.1809 ++    { V('L','t'), 1, "&lt;",     NULL },	/* less-than */
  1.1810 ++    { V('N','a'), 3, "NaN",      NULL },	/* NaN  */
  1.1811 ++    { V('N','e'), 1, "≠",        NULL },	/* not equal */
  1.1812 ++    { V('P','i'), 2, "pi",       NULL },	/* pi */
  1.1813 ++    { V('P','m'), 1, "±",        NULL },	/* plus-minus */
  1.1814 ++    { V('P','x'), 5, "POSIX",    NULL },	/* POSIX standard name */
  1.1815 ++    { V('R',' '), 1, "®",        NULL },	/* restricted mark */
  1.1816 ++    { V('R','q'), 1, "”",        NULL },	/* right-double-quote */
  1.1817 ++    { V('T','m'), 4, "(Tm)",     NULL },	/* trade mark */
  1.1818 ++    { V('a','a'), 1, "´",        NULL },	/* acute */
  1.1819 ++    { V('g','a'), 1, "`",        NULL },	/* grave */
  1.1820 ++    { V('l','p'), 1, "(",        NULL },	/* left-parenthesis */
  1.1821 ++    { V('l','q'), 1, "“",        NULL },	/* left double-quote */
  1.1822 ++    { V('q',' '), 1, "&quot;",   NULL },	/* double-quote */
  1.1823 ++    { V('r','p'), 1, ")",        NULL },	/* right-parenthesis */
  1.1824 ++    { V('r','q'), 1, "”",        NULL },	/* right double-quote */
  1.1825 ++    { V('u','a'), 1, "↑",        NULL },	/* up-arrow */
  1.1826 ++    { V('v','a'), 1, "↕",        NULL },	/* up-down arrow */
  1.1827 +     { 0, 0, NULL, NULL}
  1.1828 + };
  1.1829 + 
  1.1830 + static STRDEF standardchar[] = {
  1.1831 +-    { V('*','*'), 1, "*", NULL  },	/* math star */
  1.1832 +-    { V('*','A'), 1, "&Alpha;", NULL },
  1.1833 +-    { V('*','B'), 1, "&Beta;", NULL },
  1.1834 +-    { V('*','C'), 1, "&Xi;", NULL },
  1.1835 +-    { V('*','D'), 1, "&Delta;", NULL },
  1.1836 +-    { V('*','E'), 1, "&Epsilon;", NULL },
  1.1837 +-    { V('*','F'), 1, "&Phi;", NULL },
  1.1838 +-    { V('*','G'), 1, "&Gamma;", NULL },
  1.1839 +-    { V('*','H'), 1, "&Theta;", NULL },
  1.1840 +-    { V('*','I'), 1, "&Iota;", NULL },
  1.1841 +-    { V('*','K'), 1, "&Kappa;", NULL },
  1.1842 +-    { V('*','L'), 1, "&Lambda;", NULL },
  1.1843 +-    { V('*','M'), 1, "&Mu;", NULL },
  1.1844 +-    { V('*','N'), 1, "&Nu;", NULL },
  1.1845 +-    { V('*','O'), 1, "&Omicron;", NULL },
  1.1846 +-    { V('*','P'), 1, "&Pi;", NULL },
  1.1847 +-    { V('*','Q'), 1, "&Psi;", NULL },
  1.1848 +-    { V('*','R'), 1, "&Rho;", NULL },
  1.1849 +-    { V('*','S'), 1, "&Sigma;", NULL },
  1.1850 +-    { V('*','T'), 1, "&Tau;", NULL },
  1.1851 +-    { V('*','U'), 1, "&Upsilon;", NULL },
  1.1852 +-    { V('*','W'), 1, "&Omega;", NULL },
  1.1853 +-    { V('*','X'), 1, "&Chi;", NULL },
  1.1854 +-    { V('*','Y'), 1, "&Eta;", NULL },
  1.1855 +-    { V('*','Z'), 1, "&Zeta;", NULL },
  1.1856 +-    { V('*','a'), 1, "&alpha;", NULL },
  1.1857 +-    { V('*','b'), 1, "&beta;", NULL },
  1.1858 +-    { V('*','c'), 1, "&xi;", NULL },
  1.1859 +-    { V('*','d'), 1, "&delta;", NULL },
  1.1860 +-    { V('*','e'), 1, "&epsilon;", NULL },
  1.1861 +-    { V('*','f'), 1, "&phi;", NULL },
  1.1862 +-    { V('*','g'), 1, "&gamma;", NULL },
  1.1863 +-    { V('*','h'), 1, "&theta;", NULL },
  1.1864 +-    { V('*','i'), 1, "&iota;", NULL },
  1.1865 +-    { V('*','k'), 1, "&kappa;", NULL },
  1.1866 +-    { V('*','l'), 1, "&lambda;", NULL },
  1.1867 +-    { V('*','m'), 1, "&mu;", NULL },
  1.1868 +-    { V('*','n'), 1, "&nu;", NULL },
  1.1869 +-    { V('*','o'), 1, "&omicron;", NULL },
  1.1870 +-    { V('*','p'), 1, "&pi;", NULL },
  1.1871 +-    { V('*','q'), 1, "&psi;", NULL },
  1.1872 +-    { V('*','r'), 1, "&rho;", NULL },
  1.1873 +-    { V('*','s'), 1, "&sigma;", NULL },
  1.1874 +-    { V('*','t'), 1, "&tau;", NULL },
  1.1875 +-    { V('*','u'), 1, "&upsilon;", NULL },
  1.1876 +-    { V('*','w'), 1, "&omega;", NULL },
  1.1877 +-    { V('*','x'), 1, "&chi;", NULL },
  1.1878 +-    { V('*','y'), 1, "&eta;", NULL },
  1.1879 +-    { V('*','z'), 1, "&zeta;", NULL },
  1.1880 +-    { V('\'','A'), 1, "&Aacute;", NULL },
  1.1881 +-    { V('\'','E'), 1, "&Eacute;", NULL },
  1.1882 +-    { V('\'','I'), 1, "&Iacute;", NULL },
  1.1883 +-    { V('\'','O'), 1, "&Oacute;", NULL },
  1.1884 +-    { V('\'','U'), 1, "&Uacute;", NULL },
  1.1885 +-    { V('\'','Y'), 1, "&Yacute;", NULL },
  1.1886 +-    { V('\'','a'), 1, "&aacute;", NULL },
  1.1887 +-    { V('\'','e'), 1, "&eacute;", NULL },
  1.1888 +-    { V('\'','i'), 1, "&iacute;", NULL },
  1.1889 +-    { V('\'','o'), 1, "&oacute;", NULL },
  1.1890 +-    { V('\'','u'), 1, "&uacute;", NULL },
  1.1891 +-    { V('\'','y'), 1, "&yacute;", NULL },
  1.1892 +-    { V('!','='), 1, "&ne;", NULL },
  1.1893 +-    { V('%','0'), 1, "&permil;", NULL },
  1.1894 +-    { V('+','-'), 1, "&plusmn;", NULL },
  1.1895 +-    { V(',','C'), 1, "&Ccedil;", NULL },
  1.1896 +-    { V(',','c'), 1, "&ccedil;", NULL },
  1.1897 +-    { V('-','>'), 1, "&rarr;", NULL },
  1.1898 +-    { V('-','D'), 1, "&ETH;", NULL },
  1.1899 +-    { V('.','i'), 1, "&#x131;", NULL },
  1.1900 +-    { V('/','L'), 1, "&#x141;", NULL },
  1.1901 +-    { V('/','O'), 1, "&Oslash;", NULL },
  1.1902 +-    { V('/','l'), 1, "&#x142;", NULL },
  1.1903 +-    { V('/','o'), 1, "&oslash;", NULL },
  1.1904 +-    { V('1','2'), 1, "&#189;", NULL  },
  1.1905 +-    { V('1','4'), 1, "&#188;", NULL  },
  1.1906 +-    { V('3','4'), 1, "&#190;", NULL  },
  1.1907 +-    { V(':','A'), 1, "&Auml;", NULL },
  1.1908 +-    { V(':','E'), 1, "&Euml;", NULL },
  1.1909 +-    { V(':','I'), 1, "&Iuml;", NULL },
  1.1910 +-    { V(':','O'), 1, "&Ouml;", NULL },
  1.1911 +-    { V(':','U'), 1, "&Uuml;", NULL },
  1.1912 +-    { V(':','a'), 1, "&auml;", NULL },
  1.1913 +-    { V(':','e'), 1, "&euml;", NULL },
  1.1914 +-    { V(':','i'), 1, "&iuml;", NULL },
  1.1915 +-    { V(':','o'), 1, "&ouml;", NULL },
  1.1916 +-    { V(':','u'), 1, "&uuml;", NULL },
  1.1917 +-    { V(':','y'), 1, "&yuml;", NULL },
  1.1918 +-    { V('<','-'), 1, "&larr;", NULL },
  1.1919 +-    { V('<','='), 1, "&le;", NULL },
  1.1920 +-    { V('<','>'), 1, "&harr;", NULL },
  1.1921 +-    { V('=','='), 1, "&equiv;", NULL },
  1.1922 +-    { V('=','~'), 1, "&cong;", NULL },
  1.1923 +-    { V('>','='), 1, "&ge;", NULL },
  1.1924 +-    { V('A','E'), 1, "&AElig;", NULL },
  1.1925 +-    { V('A','h'), 1, "&alepfsym;", NULL },
  1.1926 +-    { V('C','R'), 1, "&#x240d;", NULL },
  1.1927 +-    { V('C','s'), 1, "&curren;", NULL },
  1.1928 +-    { V('D','o'), 1, "$", NULL },
  1.1929 +-    { V('E','u'), 1, "&euro;", NULL },
  1.1930 +-    { V('F','c'), 1, "&raquo;", NULL  },
  1.1931 +-    { V('F','i'), 3, "ffi", NULL  },
  1.1932 +-    { V('F','l'), 3, "ffl", NULL  },
  1.1933 +-    { V('F','o'), 1, "&laquo;", NULL  },
  1.1934 +-    { V('O','E'), 1, "&OElig;", NULL },
  1.1935 +-    { V('P','o'), 1, "&pound;", NULL },
  1.1936 +-    { V('S','1'), 1, "&sup1;", NULL },
  1.1937 +-    { V('S','2'), 1, "&sup2;", NULL },
  1.1938 +-    { V('S','3'), 1, "&sup3;", NULL },
  1.1939 +-    { V('S','d'), 1, "&eth;", NULL },
  1.1940 +-    { V('T','P'), 1, "&THORN;", NULL },
  1.1941 +-    { V('T','p'), 1, "&thorn;", NULL },
  1.1942 +-    { V('Y','e'), 1, "&yen;", NULL },
  1.1943 +-    { V('^','A'), 1, "&Acirc;", NULL },
  1.1944 +-    { V('^','E'), 1, "&Ecirc;", NULL },
  1.1945 +-    { V('^','I'), 1, "&Icirc;", NULL },
  1.1946 +-    { V('^','O'), 1, "&Ocirc;", NULL },
  1.1947 +-    { V('^','U'), 1, "&Ucirc;", NULL },
  1.1948 +-    { V('^','a'), 1, "&acirc;", NULL },
  1.1949 +-    { V('^','e'), 1, "&ecirc;", NULL },
  1.1950 +-    { V('^','i'), 1, "&icirc;", NULL },
  1.1951 +-    { V('^','o'), 1, "&ocirc;", NULL },
  1.1952 +-    { V('^','u'), 1, "&ucirc;", NULL },
  1.1953 +-    { V('`','A'), 1, "&Agrave;", NULL },
  1.1954 +-    { V('`','E'), 1, "&Egrave;", NULL },
  1.1955 +-    { V('`','I'), 1, "&Igrave;", NULL },
  1.1956 +-    { V('`','O'), 1, "&Ograve;", NULL },
  1.1957 +-    { V('`','U'), 1, "&Ugrave;", NULL },
  1.1958 +-    { V('`','a'), 1, "&agrave;", NULL },
  1.1959 +-    { V('`','e'), 1, "&egrave;", NULL },
  1.1960 +-    { V('`','i'), 1, "&igrave;", NULL },
  1.1961 +-    { V('`','o'), 1, "&ograve;", NULL },
  1.1962 +-    { V('`','u'), 1, "&ugrave;", NULL },
  1.1963 +-    { V('a','a'), 1, "&acute;", NULL },
  1.1964 +-    { V('a','e'), 1, "&aelig;", NULL },
  1.1965 +-    { V('a','p'), 1, "&asymp;", NULL },
  1.1966 +-    { V('a','q'), 1, "'", NULL },
  1.1967 +-    { V('a','t'), 1, "@", NULL },
  1.1968 +-    { V('a','~'), 1, "~", NULL },
  1.1969 +-    { V('b','a'), 1, "|", NULL },
  1.1970 +-    { V('b','b'), 1, "|", NULL },
  1.1971 +-    { V('b','r'), 1, "|", NULL  },
  1.1972 +-    { V('b','r'), 1, "|", NULL },
  1.1973 +-    { V('b','u'), 1, "&bull;", NULL },
  1.1974 +-    { V('b','v'), 1, "|", NULL  },
  1.1975 +-    { V('c','*'), 1, "&otimes;", NULL },
  1.1976 +-    { V('c','+'), 1, "&oplus;", NULL },
  1.1977 +-    { V('c','i'), 1, "&#x25cb;", NULL },
  1.1978 +-    { V('c','o'), 1, "&#169;", NULL  },
  1.1979 +-    { V('c','q'), 1, "'", NULL },
  1.1980 +-    { V('c','t'), 1, "&#162;", NULL  },
  1.1981 +-    { V('d','A'), 1, "&dArr;", NULL },
  1.1982 +-    { V('d','a'), 1, "&darr;", NULL },
  1.1983 +-    { V('d','d'), 1, "=", NULL },
  1.1984 +-    { V('d','e'), 1, "&#176;", NULL  },
  1.1985 +-    { V('d','g'), 1, "-", NULL },
  1.1986 +-    { V('d','i'), 1, "&#247;", NULL  },
  1.1987 +-    { V('d','q'), 1, "&quot;", NULL  },
  1.1988 +-    { V('e','m'), 3, "---", NULL  }, 	/* em dash */
  1.1989 +-    { V('e','n'), 1, "-", NULL }, 	/* en dash */
  1.1990 +-    { V('e','q'), 1, "=", NULL },
  1.1991 +-    { V('e','s'), 1, "&#216;", NULL  },
  1.1992 +-    { V('e','u'), 1, "&euro;", NULL },
  1.1993 +-    { V('f','/'), 1, "&frasl;", NULL },
  1.1994 +-    { V('f','c'), 1, "&rsaquo;", NULL  },
  1.1995 +-    { V('f','f'), 2, "ff", NULL  },
  1.1996 +-    { V('f','i'), 2, "fi", NULL  },
  1.1997 +-    { V('f','l'), 2, "fl", NULL  },
  1.1998 +-    { V('f','m'), 1, "&#180;", NULL  },
  1.1999 +-    { V('f','o'), 1, "&lsaquo;", NULL  },
  1.2000 +-    { V('g','a'), 1, "`", NULL  },
  1.2001 +-    { V('h','A'), 1, "&hArr;", NULL },
  1.2002 +-    { V('h','y'), 1, "-", NULL  },
  1.2003 +-    { V('i','f'), 1, "&infin;", NULL },
  1.2004 +-    { V('i','s'), 8, "Integral", NULL }, /* integral sign */
  1.2005 +-    { V('l','A'), 1, "&lArr;", NULL },
  1.2006 +-    { V('l','B'), 1, "[", NULL },
  1.2007 +-    { V('l','C'), 1, "{", NULL },
  1.2008 +-    { V('l','a'), 1, "&lt;", NULL },
  1.2009 +-    { V('l','b'), 1, "[", NULL  },
  1.2010 +-    { V('l','c'), 2, "|&#175;", NULL  },
  1.2011 +-    { V('l','f'), 2, "|_", NULL  },
  1.2012 +-    { V('l','h'), 1, "&#x261a;", NULL },
  1.2013 +-    { V('l','k'), 1, "<FONT SIZE=\"+2\">{</FONT>", NULL  },
  1.2014 +-    { V('l','q'), 1, "\"", NULL },
  1.2015 +-    { V('l','z'), 1, "&loz;", NULL },
  1.2016 +-    { V('m','c'), 1, "&micro;", NULL },
  1.2017 +-    { V('m','i'), 1, "-", NULL  },
  1.2018 +-    { V('m','u'), 1, "&#215;", NULL  },
  1.2019 +-    { V('n','o'), 1, "&#172;", NULL  },
  1.2020 +-    { V('o','A'), 1, "&Aring;", NULL },
  1.2021 +-    { V('o','a'), 1, "&aring;", NULL },
  1.2022 +-    { V('o','e'), 1, "&oelig;", NULL },
  1.2023 +-    { V('o','q'), 1, "'", NULL },
  1.2024 +-    { V('o','r'), 1, "|", NULL },
  1.2025 +-    { V('p','d'), 1, "d", NULL }, 	/* partial derivative */
  1.2026 +-    { V('p','l'), 1, "+", NULL },
  1.2027 +-    { V('p','s'), 1, "&para;", NULL },
  1.2028 +-    { V('r','!'), 1, "&iexcl;", NULL },
  1.2029 +-    { V('r','?'), 1, "&iquest;", NULL },
  1.2030 +-    { V('r','A'), 1, "&rArr;", NULL },
  1.2031 +-    { V('r','B'), 1, "]", NULL },
  1.2032 +-    { V('r','C'), 1, "}", NULL },
  1.2033 +-    { V('r','a'), 1, "&gt;", NULL },
  1.2034 +-    { V('r','c'), 2, "&#175;|", NULL  },
  1.2035 +-    { V('r','f'), 2, "_|", NULL  },
  1.2036 +-    { V('r','g'), 1, "&#174;", NULL  },
  1.2037 +-    { V('r','h'), 1, "&#x261b;", NULL },
  1.2038 +-    { V('r','k'), 1, "<FONT SIZE=\"+2\">}</FONT>", NULL  },
  1.2039 +-    { V('r','n'), 1, "&#175;", NULL  },
  1.2040 +-    { V('r','q'), 1, "\"", NULL },
  1.2041 +-    { V('r','s'), 1, "\\", NULL },
  1.2042 +-    { V('r','u'), 1, "_", NULL },
  1.2043 +-    { V('s','c'), 1, "&#167;", NULL  },
  1.2044 +-    { V('s','h'), 1, "#", NULL },
  1.2045 +-    { V('s','l'), 1, "/", NULL },
  1.2046 +-    { V('s','q'), 1, "&#x25a1;", NULL },
  1.2047 +-    { V('s','s'), 1, "&szlig;", NULL },
  1.2048 +-    { V('t','f'), 1, "&there4;", NULL },
  1.2049 +-    { V('t','i'), 1, "~", NULL },
  1.2050 +-    { V('t','m'), 1, "&trade;", NULL },
  1.2051 +-    { V('t','s'), 1, "s", NULL }, 	/* should be terminal sigma */
  1.2052 +-    { V('u','A'), 1, "&uArr;", NULL },
  1.2053 +-    { V('u','a'), 1, "&uarr;", NULL },
  1.2054 +-    { V('u','l'), 1, "_", NULL },
  1.2055 +-    { V('~','A'), 1, "&Atilde;", NULL },
  1.2056 +-    { V('~','N'), 1, "&Ntilde;", NULL },
  1.2057 +-    { V('~','O'), 1, "&Otilde;", NULL },
  1.2058 +-    { V('~','a'), 1, "&atilde;", NULL },
  1.2059 +-    { V('~','n'), 1, "&ntilde;", NULL },
  1.2060 +-    { V('~','o'), 1, "&otilde;", NULL },
  1.2061 ++    { V('*','*'), 1, "∗", NULL },	/* asterisk */
  1.2062 ++    { V('*','A'), 1, "Α", NULL },	/* Alpha */
  1.2063 ++    { V('*','B'), 1, "Β", NULL },	/* Beta */
  1.2064 ++    { V('*','C'), 1, "Ξ", NULL },	/* Xi */
  1.2065 ++    { V('*','D'), 1, "Δ", NULL },	/* Delta */
  1.2066 ++    { V('*','E'), 1, "Ε", NULL },	/* Epsilon */
  1.2067 ++    { V('*','F'), 1, "Φ", NULL },	/* Phi */
  1.2068 ++    { V('*','G'), 1, "Γ", NULL },	/* Gamma */
  1.2069 ++    { V('*','H'), 1, "Θ", NULL },	/* Theta */
  1.2070 ++    { V('*','I'), 1, "Ι", NULL },	/* Iota */
  1.2071 ++    { V('*','K'), 1, "Κ", NULL },	/* Kappa */
  1.2072 ++    { V('*','L'), 1, "Λ", NULL },	/* Lambda */
  1.2073 ++    { V('*','M'), 1, "Μ", NULL },	/* Mu */
  1.2074 ++    { V('*','N'), 1, "Ν", NULL },	/* Nu */
  1.2075 ++    { V('*','O'), 1, "Ο", NULL },	/* Omicron */
  1.2076 ++    { V('*','P'), 1, "Π", NULL },	/* Pi */
  1.2077 ++    { V('*','Q'), 1, "Ψ", NULL },	/* Psi */
  1.2078 ++    { V('*','R'), 1, "Ρ", NULL },	/* Rho */
  1.2079 ++    { V('*','S'), 1, "Σ", NULL },	/* Sigma */
  1.2080 ++    { V('*','T'), 1, "Τ", NULL },	/* Tau */
  1.2081 ++    { V('*','U'), 1, "Υ", NULL },	/* Upsilon */
  1.2082 ++    { V('*','W'), 1, "Ω", NULL },	/* Omega */
  1.2083 ++    { V('*','X'), 1, "Χ", NULL },	/* Chi */
  1.2084 ++    { V('*','Y'), 1, "Η", NULL },	/* Eta */
  1.2085 ++    { V('*','Z'), 1, "Ζ", NULL },	/* Zeta */
  1.2086 ++    { V('*','a'), 1, "α", NULL },	/* alpha */
  1.2087 ++    { V('*','b'), 1, "β", NULL },	/* beta */
  1.2088 ++    { V('*','c'), 1, "ξ", NULL },	/* xi */
  1.2089 ++    { V('*','d'), 1, "δ", NULL },	/* delta */
  1.2090 ++    { V('*','e'), 1, "ε", NULL },	/* epsilon */
  1.2091 ++    { V('*','f'), 1, "φ", NULL },	/* phi */
  1.2092 ++    { V('*','g'), 1, "γ", NULL },	/* gamma */
  1.2093 ++    { V('*','h'), 1, "θ", NULL },	/* theta */
  1.2094 ++    { V('*','i'), 1, "ι", NULL },	/* iota */
  1.2095 ++    { V('*','k'), 1, "κ", NULL },	/* kappa */
  1.2096 ++    { V('*','l'), 1, "λ", NULL },	/* lambda */
  1.2097 ++    { V('*','m'), 1, "μ", NULL },	/* mu */
  1.2098 ++    { V('*','n'), 1, "ν", NULL },	/* nu */
  1.2099 ++    { V('*','o'), 1, "ο", NULL },	/* omicron */
  1.2100 ++    { V('*','p'), 1, "π", NULL },	/* pi */
  1.2101 ++    { V('*','q'), 1, "ψ", NULL },	/* psi */
  1.2102 ++    { V('*','r'), 1, "ρ", NULL },	/* rho */
  1.2103 ++    { V('*','s'), 1, "σ", NULL },	/* sigma */
  1.2104 ++    { V('*','t'), 1, "τ", NULL },	/* tau */
  1.2105 ++    { V('*','u'), 1, "υ", NULL },	/* upsilon */
  1.2106 ++    { V('*','w'), 1, "ω", NULL },	/* omega */
  1.2107 ++    { V('*','x'), 1, "χ", NULL },	/* chi */
  1.2108 ++    { V('*','y'), 1, "η", NULL },	/* eta */
  1.2109 ++    { V('*','z'), 1, "ζ", NULL },	/* zeta */
  1.2110 ++    { V('\'','A'), 1, "Á", NULL },	/* acute A */
  1.2111 ++    { V('\'','E'), 1, "É", NULL },	/* acute E */
  1.2112 ++    { V('\'','I'), 1, "Í", NULL },	/* acute I */
  1.2113 ++    { V('\'','O'), 1, "Ó", NULL },	/* acute O */
  1.2114 ++    { V('\'','U'), 1, "Ú", NULL },	/* acute U */
  1.2115 ++    { V('\'','Y'), 1, "Ý", NULL },	/* Yacute (*) */
  1.2116 ++    { V('\'','a'), 1, "á", NULL },	/* acute a */
  1.2117 ++    { V('\'','e'), 1, "é", NULL },	/* acute e */
  1.2118 ++    { V('\'','i'), 1, "í", NULL },	/* acute i */
  1.2119 ++    { V('\'','o'), 1, "ó", NULL },	/* acute o */
  1.2120 ++    { V('\'','u'), 1, "ú", NULL },	/* acute u */
  1.2121 ++    { V('\'','y'), 1, "ý", NULL },	/* yacute (*) */
  1.2122 ++    { V('!','='), 1, "≠", NULL },	/* not equal */
  1.2123 ++    { V('%','0'), 1, "‰", NULL },	/* per-thousand */
  1.2124 ++    { V('+','-'), 1, "±", NULL },	/* plus-minus */
  1.2125 ++    { V('+','e'), 1, "ϵ", NULL },	/* epsilon variant */
  1.2126 ++    { V('+','f'), 1, "φ", NULL },	/* phi variant */
  1.2127 ++    { V('+','h'), 1, "ϑ", NULL },	/* theta variant */
  1.2128 ++    { V('+','p'), 1, "ϖ", NULL },	/* pi variant */
  1.2129 ++    { V(',','C'), 1, "Ç", NULL },	/* cedilla C */
  1.2130 ++    { V(',','c'), 1, "ç", NULL },	/* cedilla c */
  1.2131 ++    { V('-','+'), 1, "∓", NULL },	/* minus-plus */
  1.2132 ++    { V('-','>'), 1, "→", NULL },	/* right arrow */
  1.2133 ++    { V('-','D'), 1, "Ð", NULL },	/* Eth */
  1.2134 ++    { V('-','h'), 1, "ℏ", NULL },	/* Planck constant over 2π */
  1.2135 ++    { V('.','i'), 1, "ı", NULL },	/* dotless i */
  1.2136 ++    { V('.','j'), 1, "ȷ", NULL },	/* dotless j */
  1.2137 ++    { V('/','L'), 1, "Ł", NULL },	/* stroke L */
  1.2138 ++    { V('/','O'), 1, "Ø", NULL },	/* stroke O */
  1.2139 ++    { V('/','_'), 1, "∠", NULL },	/* angle */
  1.2140 ++    { V('/','l'), 1, "ł", NULL },	/* stroke l */
  1.2141 ++    { V('/','o'), 1, "ø", NULL },	/* stroke o */
  1.2142 ++    { V('1','2'), 1, "½", NULL },	/* 1/2 (*) */
  1.2143 ++    { V('1','4'), 1, "¼", NULL },	/* 1/4 (*) */
  1.2144 ++    { V('3','4'), 1, "¾", NULL },	/* 3/4 (*) */
  1.2145 ++    { V('3','d'), 1, "∴", NULL },	/* therefore */
  1.2146 ++    { V(':','A'), 1, "Ä", NULL },	/* dieresis A */
  1.2147 ++    { V(':','E'), 1, "Ë", NULL },	/* dieresis E */
  1.2148 ++    { V(':','I'), 1, "Ï", NULL },	/* dieresis I */
  1.2149 ++    { V(':','O'), 1, "Ö", NULL },	/* dieresis O */
  1.2150 ++    { V(':','U'), 1, "Ü", NULL },	/* dieresis U */
  1.2151 ++    { V(':','a'), 1, "ä", NULL },	/* dieresis a */
  1.2152 ++    { V(':','e'), 1, "ë", NULL },	/* dieresis e */
  1.2153 ++    { V(':','i'), 1, "ï", NULL },	/* dieresis i */
  1.2154 ++    { V(':','o'), 1, "ö", NULL },	/* dieresis o */
  1.2155 ++    { V(':','u'), 1, "ü", NULL },	/* dieresis u */
  1.2156 ++    { V(':','y'), 1, "ÿ", NULL },	/* dieresis y */
  1.2157 ++    { V('<','-'), 1, "←", NULL },	/* left arrow */
  1.2158 ++    { V('<','<'), 1, "≪", NULL },	/* much less */
  1.2159 ++    { V('<','='), 1, "≤", NULL },	/* less-than-equal */
  1.2160 ++    { V('<','>'), 1, "↔", NULL },	/* left-right arrow */
  1.2161 ++    { V('=','='), 1, "≡", NULL },	/* equivalent */
  1.2162 ++    { V('=','~'), 1, "≅", NULL },	/* approximately equal */
  1.2163 ++    { V('>','='), 1, "≥", NULL },	/* greater-than-equal */
  1.2164 ++    { V('>','>'), 1, "≫", NULL },	/* much greater */
  1.2165 ++    { V('A','E'), 1, "Æ", NULL },	/* AE ligature */
  1.2166 ++    { V('A','N'), 1, "∧", NULL },	/* logical and */
  1.2167 ++    { V('A','h'), 1, "ℵ", NULL },	/* aleph */
  1.2168 ++    { V('B','q'), 1, "„", NULL },	/* right low double-quote */
  1.2169 ++    { V('C','R'), 1, "↵", NULL },	/* carriage return */
  1.2170 ++    { V('C','s'), 1, "¤", NULL },	/* Scandinavian */
  1.2171 ++    { V('D','o'), 1, "$", NULL },	/* dollar */
  1.2172 ++    { V('E','u'), 1, "€", NULL },	/* Euro symbol */
  1.2173 ++    { V('F','c'), 1, "»", NULL },	/* right guillemet */
  1.2174 ++    { V('F','i'), 1, "ffi", NULL },	/* ffi ligature */
  1.2175 ++    { V('F','l'), 1, "ffl", NULL },	/* ffl ligature */
  1.2176 ++    { V('F','n'), 1, "ƒ", NULL },	/* florin */
  1.2177 ++    { V('F','o'), 1, "«", NULL },	/* left guillemet */
  1.2178 ++    { V('I','J'), 1, "IJ", NULL },	/* IJ ligature */
  1.2179 ++    { V('I','m'), 1, "ℑ", NULL },	/* imaginary */
  1.2180 ++    { V('O','E'), 1, "Œ", NULL },	/* OE ligature */
  1.2181 ++    { V('O','K'), 1, "✓", NULL },	/* check mark */
  1.2182 ++    { V('O','R'), 1, "∨", NULL },	/* logical or */
  1.2183 ++    { V('P','o'), 1, "£", NULL },	/* pound */
  1.2184 ++    { V('R','e'), 1, "ℜ", NULL },	/* real */
  1.2185 ++    { V('S','1'), 1, "¹", NULL },	/* sup1 (*) */
  1.2186 ++    { V('S','2'), 1, "²", NULL },	/* sup2 (*) */
  1.2187 ++    { V('S','3'), 1, "³", NULL },	/* sup3 (*) */
  1.2188 ++    { V('S','d'), 1, "ð", NULL },	/* eth */
  1.2189 ++    { V('T','P'), 1, "Þ", NULL },	/* Thorn */
  1.2190 ++    { V('T','p'), 1, "þ", NULL },	/* thorn */
  1.2191 ++    { V('Y','e'), 1, "¥", NULL },	/* yen */
  1.2192 ++    { V('^','A'), 1, "Â", NULL },	/* circumflex A */
  1.2193 ++    { V('^','E'), 1, "Ê", NULL },	/* circumflex E */
  1.2194 ++    { V('^','I'), 1, "Î", NULL },	/* circumflex I */
  1.2195 ++    { V('^','O'), 1, "Ô", NULL },	/* circumflex O */
  1.2196 ++    { V('^','U'), 1, "Û", NULL },	/* circumflex U */
  1.2197 ++    { V('^','a'), 1, "â", NULL },	/* circumflex a */
  1.2198 ++    { V('^','e'), 1, "ê", NULL },	/* circumflex e */
  1.2199 ++    { V('^','i'), 1, "î", NULL },	/* circumflex i */
  1.2200 ++    { V('^','o'), 1, "ô", NULL },	/* circumflex o */
  1.2201 ++    { V('^','u'), 1, "û", NULL },	/* circumflex u */
  1.2202 ++    { V('`','A'), 1, "À", NULL },	/* grave A */
  1.2203 ++    { V('`','E'), 1, "È", NULL },	/* grave E */
  1.2204 ++    { V('`','I'), 1, "Ì", NULL },	/* grave I */
  1.2205 ++    { V('`','O'), 1, "Ò", NULL },	/* grave O */
  1.2206 ++    { V('`','U'), 1, "Ù", NULL },	/* grave U */
  1.2207 ++    { V('`','a'), 1, "à", NULL },	/* grave a */
  1.2208 ++    { V('`','e'), 1, "è", NULL },	/* grave e */
  1.2209 ++    { V('`','i'), 1, "ì", NULL },	/* grave i */
  1.2210 ++    { V('`','o'), 1, "ò", NULL },	/* grave o */
  1.2211 ++    { V('`','u'), 1, "ù", NULL },	/* grave u */
  1.2212 ++    { V('a','"'), 1, "˝", NULL },	/* Hungarian umlaut */
  1.2213 ++    { V('a','-'), 1, "¯", NULL },	/* macron */
  1.2214 ++    { V('a','.'), 1, "˙", NULL },	/* dotted */
  1.2215 ++    { V('a','^'), 1, "^", NULL },	/* circumflex */
  1.2216 ++    { V('a','a'), 1, "´", NULL },	/* acute */
  1.2217 ++    { V('a','b'), 1, "˘", NULL },	/* breve */
  1.2218 ++    { V('a','c'), 1, "¸", NULL },	/* cedilla */
  1.2219 ++    { V('a','d'), 1, "¨", NULL },	/* dieresis */
  1.2220 ++    { V('a','e'), 1, "æ", NULL },	/* ae ligature */
  1.2221 ++    { V('a','h'), 1, "ˇ", NULL },	/* caron */
  1.2222 ++    { V('a','o'), 1, "˚", NULL },	/* ring */
  1.2223 ++    { V('a','p'), 1, "∼", NULL },	/* tilde operator */
  1.2224 ++    { V('a','q'), 1, "'", NULL },	/* apostrophe quote (text) */
  1.2225 ++    { V('a','t'), 1, "@", NULL },	/* at */
  1.2226 ++    { V('a','~'), 1, "~", NULL },	/* tilde */
  1.2227 ++    { V('b','a'), 1, "|", NULL },	/* bar */
  1.2228 ++    { V('b','b'), 1, "¦", NULL },	/* broken bar */
  1.2229 ++    { V('b','r'), 1, "│", NULL },	/* box rule */
  1.2230 ++    { V('b','q'), 1, "‚", NULL },	/* right low single-quote */
  1.2231 ++    { V('b','u'), 1, "•", NULL },	/* bullet */
  1.2232 ++    { V('b','v'), 1, "⎪", NULL },	/* brace extension */
  1.2233 ++    { V('c','*'), 1, "⊗", NULL },	/* circle-multiply */
  1.2234 ++    { V('c','+'), 1, "⊕", NULL },	/* circle-plus */
  1.2235 ++    { V('c','a'), 1, "∩", NULL },	/* intersection */
  1.2236 ++    { V('c','i'), 1, "○", NULL },	/* circle */
  1.2237 ++    { V('c','o'), 1, "©", NULL },	/* copyright */
  1.2238 ++    { V('c','q'), 1, "’", NULL },	/* right single-quote */
  1.2239 ++    { V('c','t'), 1, "¢", NULL },	/* cent */
  1.2240 ++    { V('c','u'), 1, "∪", NULL },	/* union */
  1.2241 ++    { V('d','A'), 1, "⇓", NULL },	/* down double-arrow */
  1.2242 ++    { V('d','a'), 1, "↓", NULL },	/* down arrow */
  1.2243 ++    { V('d','d'), 1, "‡", NULL },	/* double dagger */
  1.2244 ++    { V('d','e'), 1, "°", NULL },	/* degree */
  1.2245 ++    { V('d','g'), 1, "†", NULL },	/* dagger */
  1.2246 ++    { V('d','i'), 1, "÷", NULL },	/* divide */
  1.2247 ++    { V('d','q'), 1, "\"", NULL },	/* double quote (text) */
  1.2248 ++    { V('e','m'), 1, "—", NULL },	/* em-dash */
  1.2249 ++    { V('e','n'), 1, "–", NULL },	/* en-dash */
  1.2250 ++    { V('e','q'), 1, "=", NULL },	/* equal */
  1.2251 ++    { V('e','s'), 1, "∅", NULL },	/* empty set */
  1.2252 ++    { V('e','u'), 1, "€", NULL },	/* Euro symbol */
  1.2253 ++    { V('f','/'), 1, "⁄", NULL },	/* fraction */
  1.2254 ++    { V('f','a'), 1, "∀", NULL },	/* universal quantifier */
  1.2255 ++    { V('f','c'), 1, "›", NULL },	/* right single guillemet */
  1.2256 ++    { V('f','f'), 1, "ff", NULL },	/* ff ligature */
  1.2257 ++    { V('f','i'), 1, "fi", NULL },	/* fi ligature */
  1.2258 ++    { V('f','l'), 1, "fl", NULL },	/* fl ligature */
  1.2259 ++    { V('f','m'), 1, "′", NULL },	/* minute */
  1.2260 ++    { V('f','o'), 1, "‹", NULL },	/* left single guillemet */
  1.2261 ++    { V('g','a'), 1, "`", NULL },	/* grave */
  1.2262 ++    { V('g','r'), 1, "∇", NULL },	/* gradient */
  1.2263 ++    { V('h','A'), 1, "⇔", NULL },	/* left-right double-arrow */
  1.2264 ++    { V('h','a'), 1, "^", NULL },	/* hat (text) */
  1.2265 ++    { V('h','o'), 1, "˛", NULL },	/* ogonek */
  1.2266 ++    { V('h','y'), 1, "‐", NULL },	/* hyphen */
  1.2267 ++    { V('i','b'), 1, "⊆", NULL },	/* reflexive subset */
  1.2268 ++    { V('i','f'), 1, "∞", NULL },	/* infinity */
  1.2269 ++    { V('i','j'), 1, "ij", NULL },	/* ij ligature */
  1.2270 ++    { V('i','p'), 1, "⊇", NULL },	/* reflexive superset */
  1.2271 ++    { V('i','s'), 1, "∫", NULL },	/* integral */
  1.2272 ++    { V('l','A'), 1, "⇐", NULL },	/* left double-arrow */
  1.2273 ++    { V('l','B'), 1, "[", NULL },	/* left bracket */
  1.2274 ++    { V('l','C'), 1, "{", NULL },	/* left brace */
  1.2275 ++    { V('l','a'), 1, "⟨", NULL },	/* left angle */
  1.2276 ++    { V('l','b'), 1, "⎩", NULL },	/* bottom-left hooked brace */
  1.2277 ++    { V('l','c'), 1, "⌈", NULL },	/* left-ceiling */
  1.2278 ++    { V('l','f'), 1, "⌊", NULL },	/* left-floor */
  1.2279 ++    { V('l','h'), 1, "☜", NULL },	/* left hand */
  1.2280 ++    { V('l','k'), 1, "⎨", NULL },	/* mid-left hooked brace */
  1.2281 ++    { V('l','q'), 1, "“", NULL },	/* left double-quote */
  1.2282 ++    { V('l','t'), 1, "⎧", NULL },	/* top-left hooked brace */
  1.2283 ++    { V('l','z'), 1, "◊", NULL },	/* lozenge */
  1.2284 ++    { V('m','c'), 1, "µ", NULL },	/* micro */
  1.2285 ++    { V('m','i'), 1, "−", NULL },	/* minus */
  1.2286 ++    { V('m','o'), 1, "∈", NULL },	/* element */
  1.2287 ++    { V('m','u'), 1, "×", NULL },	/* multiply */
  1.2288 ++    { V('n','b'), 1, "⊄", NULL },	/* not subset */
  1.2289 ++    { V('n','c'), 1, "⊅", NULL },	/* not superset */
  1.2290 ++    { V('n','e'), 1, "≢", NULL },	/* not equivalent */
  1.2291 ++    { V('n','m'), 1, "∉", NULL },	/* not element */
  1.2292 ++    { V('n','o'), 1, "¬", NULL },	/* logical not */
  1.2293 ++    { V('o','A'), 1, "Å", NULL },	/* ring A */
  1.2294 ++    { V('o','a'), 1, "å", NULL },	/* ring a */
  1.2295 ++    { V('o','e'), 1, "œ", NULL },	/* oe ligature */
  1.2296 ++    { V('o','q'), 1, "‘", NULL },	/* left single-quote */
  1.2297 ++    { V('o','r'), 1, "|", NULL },	/* bitwise or */
  1.2298 ++    { V('p','c'), 1, "·", NULL },	/* center-dot */
  1.2299 ++    { V('p','d'), 1, "∂", NULL },	/* partial differential */
  1.2300 ++    { V('p','l'), 1, "+", NULL },	/* plus */
  1.2301 ++    { V('p','p'), 1, "⊥", NULL },	/* perpendicular */
  1.2302 ++    { V('p','s'), 1, "¶", NULL },	/* paragraph */
  1.2303 ++    { V('p','t'), 1, "∝", NULL },	/* proportionate */
  1.2304 ++    { V('r','!'), 1, "¡", NULL },	/* upside-down exclamation */
  1.2305 ++    { V('r','?'), 1, "¿", NULL },	/* upside-down question */
  1.2306 ++    { V('r','A'), 1, "⇒", NULL },	/* right double-arrow */
  1.2307 ++    { V('r','B'), 1, "]", NULL },	/* right bracket */
  1.2308 ++    { V('r','C'), 1, "}", NULL },	/* right brace */
  1.2309 ++    { V('r','a'), 1, "⟩", NULL },	/* right angle */
  1.2310 ++    { V('r','b'), 1, "⎭", NULL },	/* bottom-right hooked brace */
  1.2311 ++    { V('r','c'), 1, "⌉", NULL },	/* right-ceiling */
  1.2312 ++    { V('r','f'), 1, "⌋", NULL },	/* right-floor */
  1.2313 ++    { V('r','g'), 1, "®", NULL },	/* registered */
  1.2314 ++    { V('r','h'), 1, "☞", NULL },	/* right hand */
  1.2315 ++    { V('r','k'), 1, "⎬", NULL },	/* mid-right hooked brace */
  1.2316 ++    { V('r','l'), 1, "‾", NULL },	/* overline */
  1.2317 ++    { V('r','n'), 1, "‾", NULL },	/* overline */
  1.2318 ++    { V('r','q'), 1, "”", NULL },	/* right double-quote */
  1.2319 ++    { V('r','s'), 1, "\\", NULL },	/* backward slash */
  1.2320 ++    { V('r','t'), 1, "⎫", NULL },	/* top-left hooked brace */
  1.2321 ++    { V('r','u'), 1, "_", NULL },	/* (*) */
  1.2322 ++    { V('s','b'), 1, "⊂", NULL },	/* proper subset */
  1.2323 ++    { V('s','c'), 1, "§", NULL },	/* section */
  1.2324 ++    { V('s','d'), 1, "″", NULL },	/* second */
  1.2325 ++    { V('s','h'), 1, "#", NULL },	/* hash (pound) */
  1.2326 ++    { V('s','l'), 1, "/", NULL },	/* forward slash */
  1.2327 ++    { V('s','p'), 1, "⊃", NULL },	/* proper superset */
  1.2328 ++    { V('s','q'), 1, "□", NULL },	/* white square */
  1.2329 ++    { V('s','r'), 1, "√", NULL },	/* square root */
  1.2330 ++    { V('s','s'), 1, "ß", NULL },	/* German eszett */
  1.2331 ++    { V('s','t'), 1, "∋", NULL },	/* such that */
  1.2332 ++    { V('t','e'), 1, "∃", NULL },	/* existential quantifier */
  1.2333 ++    { V('t','f'), 1, "∴", NULL },	/* therefore */
  1.2334 ++    { V('t','i'), 1, "~", NULL },	/* tilde (text) */
  1.2335 ++    { V('t','m'), 1, "™", NULL },	/* trademarked */
  1.2336 ++    { V('t','s'), 1, "ς", NULL },	/* sigma terminal */
  1.2337 ++    { V('u','A'), 1, "⇑", NULL },	/* up double-arrow */
  1.2338 ++    { V('u','a'), 1, "↑", NULL },	/* up arrow */
  1.2339 ++    { V('u','l'), 1, "_", NULL },	/* underscore */
  1.2340 ++    { V('v','A'), 1, "⇕", NULL },	/* up-down double-arrow */
  1.2341 ++    { V('v','a'), 1, "↕", NULL },	/* up-down arrow */
  1.2342 ++    { V('|','='), 1, "≃", NULL },	/* asymptotically equal */
  1.2343 ++    { V('~','='), 1, "≈", NULL },	/* almost equal */
  1.2344 ++    { V('~','A'), 1, "Ã", NULL },	/* tilde A */
  1.2345 ++    { V('~','N'), 1, "Ñ", NULL },	/* tilde N */
  1.2346 ++    { V('~','O'), 1, "Õ", NULL },	/* tilde O */
  1.2347 ++    { V('~','a'), 1, "ã", NULL },	/* tilde a */
  1.2348 ++    { V('~','n'), 1, "ñ", NULL },	/* tilde n */
  1.2349 ++    { V('~','o'), 1, "õ", NULL },	/* tilde o */
  1.2350 ++    { V('~','~'), 1, "≈", NULL },	/* almost equal */
  1.2351 +     { 0, 0, NULL, NULL  }
  1.2352 +-
  1.2353 +-    
  1.2354 + };
  1.2355 + 
  1.2356 + void stdinit(void) {
  1.2357 +--- /dev/null
  1.2358 ++++ b/version.h
  1.2359 +@@ -0,0 +1 @@
  1.2360 ++#define version "1.6g-7-slitaz"