wok rev 18840

Add man2html, html2text
author Aleksej Bobylev <al.bobylev@gmail.com>
date Fri Jan 22 17:24:34 2016 +0200 (2016-01-22)
parents 962c4700fe2b
children a7b109fabcee
files html2text/receipt html2text/stuff/patch-utf8-html2text-1.3.2a.diff man2html/description.txt man2html/receipt man2html/stuff/man2html-slitaz.diff man2html/stuff/ru.po
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/html2text/receipt	Fri Jan 22 17:24:34 2016 +0200
     1.3 @@ -0,0 +1,37 @@
     1.4 +# SliTaz package receipt.
     1.5 +
     1.6 +PACKAGE="html2text"
     1.7 +VERSION="1.3.2a"
     1.8 +CATEGORY="utilities"
     1.9 +SHORT_DESC="Command line utility that converts HTML into plain text"
    1.10 +MAINTAINER="al.bobylev@gmail.com"
    1.11 +LICENSE="GPL"
    1.12 +WEB_SITE="http://www.mbayer.de/html2text/"
    1.13 +TARBALL="$PACKAGE-$VERSION.tar.gz"
    1.14 +WGET_URL="http://ftp.ibiblio.org/pub/linux/apps/www/converters/$TARBALL"
    1.15 +
    1.16 +DEPENDS=""
    1.17 +BUILD_DEPENDS=""
    1.18 +
    1.19 +# Rules to configure and make the package.
    1.20 +compile_rules()
    1.21 +{
    1.22 +	# http://www.mbayer.de/html2text/downloads/patch-utf8-html2text-1.3.2a.diff
    1.23 +	patch -p1 -i $stuff/patch-utf8-html2text-1.3.2a.diff
    1.24 +
    1.25 +	./configure $CONFIGURE_ARGS
    1.26 +	sed -i 's|/usr/local/bin|/usr/bin|; s|/usr/local/man|/usr/share/man|;
    1.27 +		s|$(BINDIR)|$(DESTDIR)&|; s|$(MANDIR)|$(DESTDIR)&|; s|$(DOCDIR)|$(DESTDIR)&|' \
    1.28 +		$src/Makefile
    1.29 +	make
    1.30 +	mkdir -p $install/usr/bin $install/usr/share/man/man1 \
    1.31 +		$install/usr/share/man/man5
    1.32 +	make install
    1.33 +}
    1.34 +
    1.35 +# Rules to gen a SliTaz package suitable for Tazpkg.
    1.36 +genpkg_rules()
    1.37 +{
    1.38 +	cp -a $install/* $fs
    1.39 +	rm -r $fs/usr/share/doc
    1.40 +}
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/html2text/stuff/patch-utf8-html2text-1.3.2a.diff	Fri Jan 22 17:24:34 2016 +0200
     2.3 @@ -0,0 +1,706 @@
     2.4 +diff -r -u -bB html2text-1.3.2a/Area.C html2text-1.3.2a-patched/Area.C
     2.5 +--- html2text-1.3.2a/Area.C	2003-11-23 12:05:29.000000000 +0100
     2.6 ++++ html2text-1.3.2a-patched/Area.C	2005-05-13 22:19:59.862137688 +0200
     2.7 +@@ -36,10 +36,13 @@
     2.8 + #include <iostream>
     2.9 + 
    2.10 + #include "Area.h"
    2.11 ++#include "html.h"
    2.12 + #include "string.h"
    2.13 + 
    2.14 + #define LATIN1_nbsp 160
    2.15 + 
    2.16 ++extern int use_encoding;
    2.17 ++
    2.18 + /* ------------------------------------------------------------------------- */
    2.19 + 
    2.20 + #define malloc_array(type, size)\
    2.21 +@@ -81,6 +84,27 @@
    2.22 + 
    2.23 + /* ------------------------------------------------------------------------- */
    2.24 + 
    2.25 ++/*           utf_length() and utf_width()       
    2.26 ++ *
    2.27 ++ *     Very simplified algorithm of calculating length of UTF-8
    2.28 ++ *   string. No check for errors. Counting only ASCII bytes and
    2.29 ++ *   leading bytes of UTF-8 multibyte sequences. All bytes like
    2.30 ++ *   10xxxxxx are dropped. If USE_UTF8 is false then returns
    2.31 ++ *   usual length.               --YS
    2.32 ++ */
    2.33 ++
    2.34 ++unsigned int
    2.35 ++Line::utf_length(size_type f, size_type t) const
    2.36 ++{
    2.37 ++  size_type m = (t < length_ ? t : length_);
    2.38 ++  size_type r = m - f;
    2.39 ++  if(USE_UTF8) {
    2.40 ++      for (int i = f; i < m; i++)
    2.41 ++        if((cells_[i].character & 0xc0) == 0x80) r--;
    2.42 ++  }
    2.43 ++  return r;
    2.44 ++}
    2.45 ++
    2.46 + void
    2.47 + Line::resize(size_type l)
    2.48 + {
    2.49 +@@ -236,6 +260,23 @@
    2.50 +   return *this;
    2.51 + }
    2.52 + 
    2.53 ++unsigned int
    2.54 ++Area::utf_width()
    2.55 ++{
    2.56 ++  size_type r = width_;
    2.57 ++  if(USE_UTF8) { r = 0;
    2.58 ++    for (size_type yy = 0; yy < height_; yy++) {
    2.59 ++      size_type r1 = 0;
    2.60 ++      for (int i = width_ - 1; i >= 0; i--) {
    2.61 ++        if(!r1 && isspace(cells_[yy][i].character)) continue;
    2.62 ++        if((cells_[yy][i].character & 0xc0) != 0x80) r1++;
    2.63 ++      }
    2.64 ++      if(r < r1) r = r1;
    2.65 ++    }
    2.66 ++  }
    2.67 ++  return r;
    2.68 ++}
    2.69 ++
    2.70 + void
    2.71 + Area::resize(size_type w, size_type h)
    2.72 + {
    2.73 +@@ -439,7 +480,7 @@
    2.74 +       char c = p->character;
    2.75 +       char a = p->attribute;
    2.76 + 
    2.77 +-      if (c == (char) LATIN1_nbsp) c = ' ';
    2.78 ++      if (c == (char) LATIN1_nbsp && !USE_UTF8) c = ' ';
    2.79 + 
    2.80 +       if (a == Cell::NONE) {
    2.81 +         os << c;
    2.82 +Nur in html2text-1.3.2a-patched/: Area.C.orig.
    2.83 +diff -r -u -bB html2text-1.3.2a/Area.h html2text-1.3.2a-patched/Area.h
    2.84 +--- html2text-1.3.2a/Area.h	2003-11-23 12:05:29.000000000 +0100
    2.85 ++++ html2text-1.3.2a-patched/Area.h	2005-05-13 22:19:59.863137536 +0200
    2.86 +@@ -81,6 +81,8 @@
    2.87 +   Cell       &operator[](size_type x)       { return cells_[x]; }
    2.88 +   const Cell *cells() const { return cells_; }
    2.89 + 
    2.90 ++  unsigned int utf_length(size_type f, size_type t) const;
    2.91 ++
    2.92 +   void resize(size_type l);
    2.93 +   void enlarge(size_type l) { if (l > length_) resize(l); }
    2.94 + 
    2.95 +@@ -134,6 +136,8 @@
    2.96 +   Cell       *operator[](size_type y)       { return cells_[y]; }
    2.97 +   const Area &operator>>=(size_type rs);
    2.98 + 
    2.99 ++  unsigned int utf_width();
   2.100 ++
   2.101 +   void resize(size_type w, size_type h);
   2.102 +   void enlarge(size_type w, size_type h);
   2.103 + 
   2.104 +Nur in html2text-1.3.2a-patched/: Area.h.orig.
   2.105 +diff -r -u -bB html2text-1.3.2a/format.C html2text-1.3.2a-patched/format.C
   2.106 +--- html2text-1.3.2a/format.C	2003-11-23 12:05:29.000000000 +0100
   2.107 ++++ html2text-1.3.2a-patched/format.C	2005-05-13 22:19:59.865137232 +0200
   2.108 +@@ -1210,6 +1210,7 @@
   2.109 +     }
   2.110 + 
   2.111 +     Line::size_type to = from + 1;
   2.112 ++    int to_from;
   2.113 + 
   2.114 +     Line::size_type lbp = (Line::size_type) -1; // "Last break position".
   2.115 + 
   2.116 +@@ -1238,18 +1239,20 @@
   2.117 +         to++;
   2.118 +       }
   2.119 + 
   2.120 +-      if (to - from > w && lbp != (Area::size_type) -1) { to = lbp; break; }
   2.121 ++      if (line.utf_length(from,to) > w && lbp != (Area::size_type) -1) 
   2.122 ++                    { to = lbp; break; }
   2.123 +     }
   2.124 + 
   2.125 ++    to_from = line.utf_length(from,to);
   2.126 +     /*
   2.127 +      * Copy the "from...to" range from the "line" to the bottom of the "res"
   2.128 +      * Area.
   2.129 +      */
   2.130 +     Area::size_type x = 0;
   2.131 +     Area::size_type len = to - from;
   2.132 +-    if (halign == Area::LEFT || len >= w) { ;                   } else
   2.133 +-    if (halign == Area::CENTER)           { x += (w - len) / 2; } else
   2.134 +-    if (halign == Area::RIGHT)            { x += w - len;       }
   2.135 ++    if (halign == Area::LEFT || to_from >= w) { ;                   } else
   2.136 ++    if (halign == Area::CENTER)           { x += (w - to_from) / 2; } else
   2.137 ++    if (halign == Area::RIGHT)            { x += w - to_from;       }
   2.138 +     res->insert(line.cells() + from, len, x, res->height());
   2.139 + 
   2.140 +     /*
   2.141 +Nur in html2text-1.3.2a-patched/: format.C.orig.
   2.142 +diff -r -u -bB html2text-1.3.2a/html2text.C html2text-1.3.2a-patched/html2text.C
   2.143 +--- html2text-1.3.2a/html2text.C	2003-11-23 12:05:29.000000000 +0100
   2.144 ++++ html2text-1.3.2a-patched/html2text.C	2005-05-13 22:19:59.868136776 +0200
   2.145 +@@ -148,9 +148,10 @@
   2.146 +   -o <file>      Redirect output into <file>\n\
   2.147 +   -nobs          Do not use backspaces for boldface and underlining\n\
   2.148 +   -ascii         Use plain ASCII for output instead of ISO-8859-1\n\
   2.149 ++  -utf8          Assume both terminal and input stream are in UTF-8 mode\n\
   2.150 + ";
   2.151 + 
   2.152 +-int use_iso8859 = 1;
   2.153 ++int use_encoding = ISO8859;
   2.154 + 
   2.155 + int
   2.156 + main(int argc, char **argv)
   2.157 +@@ -199,7 +200,8 @@
   2.158 +     if (!strcmp(arg, "-width"        )) { width = atoi(argv[++i]);       } else
   2.159 +     if (!strcmp(arg, "-o"            )) { output_file_name = argv[++i];  } else
   2.160 +     if (!strcmp(arg, "-nobs"         )) { use_backspaces = false;        } else
   2.161 +-    if (!strcmp(arg, "-ascii"        )) { use_iso8859 = false;           } else
   2.162 ++    if (!strcmp(arg, "-ascii"        )) { use_encoding = ASCII;          } else
   2.163 ++    if (!strcmp(arg, "-utf8"         )) { use_encoding = UTF8;           } else
   2.164 +     {
   2.165 +       std::cerr
   2.166 + 	<< "Unrecognized command line option \""
   2.167 +Nur in html2text-1.3.2a-patched/: html2text.C.orig.
   2.168 +diff -r -u -bB html2text-1.3.2a/html.h html2text-1.3.2a-patched/html.h
   2.169 +--- html2text-1.3.2a/html.h	2001-10-04 22:03:54.000000000 +0200
   2.170 ++++ html2text-1.3.2a-patched/html.h	2005-05-13 22:19:59.866137080 +0200
   2.171 +@@ -61,6 +61,11 @@
   2.172 + 
   2.173 + /* ------------------------------------------------------------------------- */
   2.174 + 
   2.175 ++enum {ASCII, ISO8859, UTF8};
   2.176 ++#define USE_ISO8859 (use_encoding == ISO8859)
   2.177 ++#define USE_ASCII (use_encoding == ASCII)
   2.178 ++#define USE_UTF8 (use_encoding == UTF8)
   2.179 ++
   2.180 + #define LATIN1_nbsp   160
   2.181 + #define LATIN1_iexcl  161
   2.182 + #define LATIN1_cent   162
   2.183 +diff -r -u -bB html2text-1.3.2a/sgml.C html2text-1.3.2a-patched/sgml.C
   2.184 +--- html2text-1.3.2a/sgml.C	2003-11-23 12:09:11.000000000 +0100
   2.185 ++++ html2text-1.3.2a-patched/sgml.C	2005-05-13 22:19:59.870136472 +0200
   2.186 +@@ -62,261 +62,280 @@
   2.187 +   char name[8];
   2.188 +   int  iso8859code;
   2.189 +   char *asciistr;
   2.190 ++  unsigned long unicode;
   2.191 + } entities[] = {
   2.192 +-  { "AElig",   LATIN1_AElig,  "AE"         },
   2.193 +-  { "AMP",     0,             "&"          },
   2.194 +-  { "Aacute",  LATIN1_Aacute, "A'"         },
   2.195 +-  { "Acirc",   LATIN1_Acirc,  "A^"         },
   2.196 +-  { "Agrave",  LATIN1_Agrave, "A`"         },
   2.197 +-  { "Alpha",   0,             "A"          },
   2.198 +-  { "Aring",   LATIN1_Aring,  "AA"         },
   2.199 +-  { "Atilde",  LATIN1_Atilde, "A~"         },
   2.200 +-  { "Auml",    LATIN1_Auml,   "A\""        },
   2.201 +-  { "Beta",    0,             "B"          },
   2.202 +-  { "Ccedil",  LATIN1_Ccedil, "C,"         },
   2.203 +-  { "Chi",     0,             "H"          },
   2.204 +-  { "Dagger",  0,             "++"         },
   2.205 +-  { "Delta",   0,             "D"          },
   2.206 +-  { "ETH",     LATIN1_ETH,    "D-"         },
   2.207 +-  { "Eacute",  LATIN1_Eacute, "E'"         },
   2.208 +-  { "Ecirc",   LATIN1_Ecirc,  "E^"         },
   2.209 +-  { "Egrave",  LATIN1_Egrave, "E`"         },
   2.210 +-  { "Epsilon", 0,             "E"          },
   2.211 +-  { "Eta",     0,             "E"          },
   2.212 +-  { "Euml",    LATIN1_Euml,   "E\""        },
   2.213 +-  { "GT",      0,             ">"          },
   2.214 +-  { "Gamma",   0,             "G"          },
   2.215 +-  { "Iacute",  LATIN1_Iacute, "I'"         },
   2.216 +-  { "Icirc",   LATIN1_Icirc,  "I^"         },
   2.217 +-  { "Igrave",  LATIN1_Igrave, "I`"         },
   2.218 +-  { "Iota",    0,             "I"          },
   2.219 +-  { "Iuml",    LATIN1_Iuml,   "I\""        },
   2.220 +-  { "Kappa",   0,             "K"          },
   2.221 +-  { "LT",      0,             "<"          },
   2.222 +-  { "Lambda",  0,             "L"          },
   2.223 +-  { "Mu",      0,             "M"          },
   2.224 +-  { "Ntilde",  LATIN1_Ntilde, "N~"         },
   2.225 +-  { "Nu",      0,             "N"          },
   2.226 +-  { "OElig",   0,             "OE"         },
   2.227 +-  { "Oacute",  LATIN1_Oacute, "O'"         },
   2.228 +-  { "Ocirc",   LATIN1_Ocirc,  "O^"         },
   2.229 +-  { "Ograve",  LATIN1_Ograve, "O`"         },
   2.230 +-  { "Omega",   0,             "O"          },
   2.231 +-  { "Omicron", 0,             "O"          },
   2.232 +-  { "Oslash",  LATIN1_Oslash, "O/"         },
   2.233 +-  { "Otilde",  LATIN1_Otilde, "O~"         },
   2.234 +-  { "Ouml",    LATIN1_Ouml,   "O\""        },
   2.235 +-  { "Phi",     0,             "F"          },
   2.236 +-  { "Pi",      0,             "P"          },
   2.237 +-  { "Prime",   0,             "''"         },
   2.238 +-  { "Psi",     0,             "PS"         },
   2.239 +-  { "QUOT",    0,             "\""         },
   2.240 +-  { "Rho",     0,             "R"          },
   2.241 +-  { "Scaron",  0,             "S"          },
   2.242 +-  { "Sigma",   0,             "S"          },
   2.243 +-  { "THORN",   LATIN1_THORN,  "TH"         },
   2.244 +-  { "Tau",     0,             "T"          },
   2.245 +-  { "Theta",   0,             "TH"         },
   2.246 +-  { "Uacute",  LATIN1_Uacute, "U'"         },
   2.247 +-  { "Ucirc",   LATIN1_Ucirc,  "U^"         },
   2.248 +-  { "Ugrave",  LATIN1_Ugrave, "U`"         },
   2.249 +-  { "Upsilon", 0,             "U"          },
   2.250 +-  { "Uuml",    LATIN1_Uuml,   "U\""        },
   2.251 +-  { "Xi",      0,             "X"          },
   2.252 +-  { "Yacute",  LATIN1_Yacute, "Y'"         },
   2.253 +-  { "Yuml",    0,             "Y\""        },
   2.254 +-  { "Zeta",    0,             "Z"          },
   2.255 +-  { "aacute",  LATIN1_aacute, "a'"         },
   2.256 +-  { "acirc",   LATIN1_acirc,  "a^"         },
   2.257 +-  { "acute",   LATIN1_acute,  "'"          },
   2.258 +-  { "aelig",   LATIN1_aelig,  "ae"         },
   2.259 +-  { "agrave",  LATIN1_agrave, "a`"         },
   2.260 ++  { "AElig",   LATIN1_AElig,  "AE",  0x00c6},
   2.261 ++  { "AMP",     0,             "&",   0x0026},
   2.262 ++  { "Aacute",  LATIN1_Aacute, "A'",  0x00c1},
   2.263 ++  { "Acirc",   LATIN1_Acirc,  "A^",  0x00c2},
   2.264 ++  { "Agrave",  LATIN1_Agrave, "A`",  0x00c0},
   2.265 ++  { "Alpha",   0,             "A",   0x0391},
   2.266 ++  { "Aring",   LATIN1_Aring,  "AA",  0x00c5},
   2.267 ++  { "Atilde",  LATIN1_Atilde, "A~",  0x00c3},
   2.268 ++  { "Auml",    LATIN1_Auml,   "A\"", 0x00c4},
   2.269 ++  { "Beta",    0,             "B",   0x0392},
   2.270 ++  { "Ccedil",  LATIN1_Ccedil, "C,",  0x00c7},
   2.271 ++  { "Chi",     0,             "H",   0x03a7},
   2.272 ++  { "Dagger",  0,             "++",  0x2020},
   2.273 ++  { "Delta",   0,             "D",   0x0394},
   2.274 ++  { "ETH",     LATIN1_ETH,    "D-",  0x00d0},
   2.275 ++  { "Eacute",  LATIN1_Eacute, "E'",  0x00c9},
   2.276 ++  { "Ecirc",   LATIN1_Ecirc,  "E^",  0x00ca},
   2.277 ++  { "Egrave",  LATIN1_Egrave, "E`",  0x00c8},
   2.278 ++  { "Epsilon", 0,             "E",   0x0395},
   2.279 ++  { "Eta",     0,             "E",   0x0397},
   2.280 ++  { "Euml",    LATIN1_Euml,   "E\"", 0x00cb},
   2.281 ++  { "GT",      0,             ">",   0x003e},
   2.282 ++  { "Gamma",   0,             "G",   0x0393},
   2.283 ++  { "Iacute",  LATIN1_Iacute, "I'",  0x00cd},
   2.284 ++  { "Icirc",   LATIN1_Icirc,  "I^",  0x00ce},
   2.285 ++  { "Igrave",  LATIN1_Igrave, "I`",  0x00cc},
   2.286 ++  { "Iota",    0,             "I",   0x0399},
   2.287 ++  { "Iuml",    LATIN1_Iuml,   "I\"", 0x00cf},
   2.288 ++  { "Kappa",   0,             "K",   0x039a},
   2.289 ++  { "LT",      0,             "<",   0x003c},
   2.290 ++  { "Lambda",  0,             "L",   0x039b},
   2.291 ++  { "Mu",      0,             "M",   0x039c},
   2.292 ++  { "Ntilde",  LATIN1_Ntilde, "N~",  0x00d1},
   2.293 ++  { "Nu",      0,             "N",   0x039d},
   2.294 ++  { "OElig",   0,             "OE",  0x0152},
   2.295 ++  { "Oacute",  LATIN1_Oacute, "O'",  0x00d3},
   2.296 ++  { "Ocirc",   LATIN1_Ocirc,  "O^",  0x00d4},
   2.297 ++  { "Ograve",  LATIN1_Ograve, "O`",  0x00d2},
   2.298 ++  { "Omega",   0,             "O",   0x03a9},
   2.299 ++  { "Omicron", 0,             "O",   0x039f},
   2.300 ++  { "Oslash",  LATIN1_Oslash, "O/",  0x00d8},
   2.301 ++  { "Otilde",  LATIN1_Otilde, "O~",  0x00d5},
   2.302 ++  { "Ouml",    LATIN1_Ouml,   "O\"", 0x00d6},
   2.303 ++  { "Phi",     0,             "F",   0x03a6},
   2.304 ++  { "Pi",      0,             "P",   0x03a0},
   2.305 ++  { "Prime",   0,             "''",        },
   2.306 ++  { "Psi",     0,             "PS",  0x03a8},
   2.307 ++  { "QUOT",    0,             "\"",        },
   2.308 ++  { "Rho",     0,             "R",   0x03a1},
   2.309 ++  { "Scaron",  0,             "S",   0x0161},
   2.310 ++  { "Sigma",   0,             "S",   0x03a3},
   2.311 ++  { "THORN",   LATIN1_THORN,  "TH",  0x00de},
   2.312 ++  { "Tau",     0,             "T",   0x03a4},
   2.313 ++  { "Theta",   0,             "TH",  0x0398},
   2.314 ++  { "Uacute",  LATIN1_Uacute, "U'",  0x00da},
   2.315 ++  { "Ucirc",   LATIN1_Ucirc,  "U^",  0x00db},
   2.316 ++  { "Ugrave",  LATIN1_Ugrave, "U`",  0x00d9},
   2.317 ++  { "Upsilon", 0,             "U",   0x03a5},
   2.318 ++  { "Uuml",    LATIN1_Uuml,   "U\"", 0x00dc},
   2.319 ++  { "Xi",      0,             "X",   0x039e},
   2.320 ++  { "Yacute",  LATIN1_Yacute, "Y'",  0x00dd},
   2.321 ++  { "Yuml",    0,             "Y\"", 0x0178},
   2.322 ++  { "Zeta",    0,             "Z",   0x0396},
   2.323 ++  { "aacute",  LATIN1_aacute, "a'",  0x00e1},
   2.324 ++  { "acirc",   LATIN1_acirc,  "a^",  0x00e2},
   2.325 ++  { "acute",   LATIN1_acute,  "'",   0x00b4},
   2.326 ++  { "aelig",   LATIN1_aelig,  "ae",  0x00e6},
   2.327 ++  { "agrave",  LATIN1_agrave, "a`",  0x00e0},
   2.328 +   { "alefsym", 0,             "Aleph"      },
   2.329 +-  { "alpha",   0,             "a"          },
   2.330 ++  { "alpha",   0,             "a",   0x03b1},
   2.331 +   { "amp",     0,             "&"          },
   2.332 +   { "and",     0,             "AND"        },
   2.333 +   { "ang",     0,             "-V"         },
   2.334 +   { "apos",    0,             "'"          },
   2.335 +-  { "aring",   LATIN1_aring,  "aa"         },
   2.336 +-  { "asymp",   0,             "~="         },
   2.337 +-  { "atilde",  LATIN1_atilde, "a~"         },
   2.338 +-  { "auml",    LATIN1_auml,   "a\""        },
   2.339 ++  { "aring",   LATIN1_aring,  "aa",  0x00e5},
   2.340 ++  { "asymp",   0,             "~=",  0x2248},
   2.341 ++  { "atilde",  LATIN1_atilde, "a~",  0x00e3},
   2.342 ++  { "auml",    LATIN1_auml,   "a\"", 0x00e5},
   2.343 +   { "bdquo",   0,             "\""         },
   2.344 +-  { "beta",    0,             "b"          },
   2.345 +-  { "brvbar",  LATIN1_brvbar, "|"          },
   2.346 +-  { "bull",    0,             " o "        },
   2.347 ++  { "beta",    0,             "b",   0x03b2},
   2.348 ++  { "brvbar",  LATIN1_brvbar, "|",   0x00a6},
   2.349 ++  { "bull",    0,             " o ", 0x2022},
   2.350 +   { "cap",     0,             "(U"         },
   2.351 +-  { "ccedil",  LATIN1_ccedil, "c,"         },
   2.352 +-  { "cedil",   LATIN1_cedil,  ","          },
   2.353 +-  { "cent",    LATIN1_cent,   "-c-"        },
   2.354 +-  { "chi",     0,             "h"          },
   2.355 +-  { "circ",    0,             "^"          },
   2.356 ++  { "ccedil",  LATIN1_ccedil, "c,",  0x00e7},
   2.357 ++  { "cedil",   LATIN1_cedil,  ",",   0x00b8},
   2.358 ++  { "cent",    LATIN1_cent,   "-c-", 0x00a2},
   2.359 ++  { "chi",     0,             "h",   0x03c7},
   2.360 ++  { "circ",    0,             "^",   0x005e},
   2.361 + //  { "clubs",   0,             "[clubs]"    },
   2.362 +   { "cong",    0,             "?="         },
   2.363 +-  { "copy",    LATIN1_copy,   "(c)"        },
   2.364 ++  { "copy",    LATIN1_copy,   "(c)", 0x00a9},
   2.365 +   { "crarr",   0,             "<-'"        },
   2.366 +   { "cup",     0,             ")U"         },
   2.367 +-  { "curren",  LATIN1_curren, "CUR"        },
   2.368 ++  { "curren",  LATIN1_curren, "CUR", 0x00a4},
   2.369 +   { "dArr",    0,             "vv"         },
   2.370 +-  { "dagger",  0,             "+"          },
   2.371 ++  { "dagger",  0,             "+",   0x2020},
   2.372 +   { "darr",    0,             "v"          },
   2.373 +-  { "deg",     LATIN1_deg,    "DEG"        },
   2.374 +-  { "delta",   0,             "d"          },
   2.375 ++  { "deg",     LATIN1_deg,    "DEG", 0x00b0},
   2.376 ++  { "delta",   0,             "d",   0x03b4},
   2.377 + //  { "diams",   0,             "[diamonds]" },
   2.378 +-  { "divide",  LATIN1_divide, "/"          },
   2.379 +-  { "eacute",  LATIN1_eacute, "e'"         },
   2.380 +-  { "ecirc",   LATIN1_ecirc,  "e^"         },
   2.381 +-  { "egrave",  LATIN1_egrave, "e`"         },
   2.382 ++  { "divide",  LATIN1_divide, "/",   0x00f7},
   2.383 ++  { "eacute",  LATIN1_eacute, "e'",  0x00e9},
   2.384 ++  { "ecirc",   LATIN1_ecirc,  "e^",  0x00ea},
   2.385 ++  { "egrave",  LATIN1_egrave, "e`",  0x00e8},
   2.386 +   { "empty",   0,             "{}"         },
   2.387 +-  { "epsilon", 0,             "e"          },
   2.388 +-  { "equiv",   0,             "=="         },
   2.389 +-  { "eta",     0,             "e"          },
   2.390 +-  { "eth",     LATIN1_eth,    "d-"         },
   2.391 +-  { "euml",    LATIN1_euml,   "e\""        },
   2.392 +-  { "euro",    0,             "EUR"        },
   2.393 ++  { "epsilon", 0,             "e",   0x03b5},
   2.394 ++  { "equiv",   0,             "==",  0x2261},
   2.395 ++  { "eta",     0,             "e",   0x03b7},
   2.396 ++  { "eth",     LATIN1_eth,    "d-",  0x00f0},
   2.397 ++  { "euml",    LATIN1_euml,   "e\"", 0x00eb},
   2.398 ++  { "euro",    0,             "EUR", 0x20ac},
   2.399 +   { "exist",   0,             "TE"         },
   2.400 +   { "fnof",    0,             "f"          },
   2.401 +   { "forall",  0,             "FA"         },
   2.402 +-  { "frac12",  LATIN1_frac12, " 1/2"       },
   2.403 +-  { "frac14",  LATIN1_frac14, " 1/4"       },
   2.404 +-  { "frac34",  LATIN1_frac34, " 3/4"       },
   2.405 ++  { "frac12",  LATIN1_frac12, " 1/2",0x00bd},
   2.406 ++  { "frac14",  LATIN1_frac14, " 1/4",0x00bc},
   2.407 ++  { "frac34",  LATIN1_frac34, " 3/4",0x00be},
   2.408 +   { "frasl",   0,             "/"          },
   2.409 +-  { "gamma",   0,             "g"          },
   2.410 +-  { "ge",      0,             ">="         },
   2.411 +-  { "gt",      0,             ">"          },
   2.412 ++  { "gamma",   0,             "g",   0x03b3},
   2.413 ++  { "ge",      0,             ">=",  0x2265},
   2.414 ++  { "gt",      0,             ">",   0x003e},
   2.415 +   { "hArr",    0,             "<=>"        },
   2.416 +   { "harr",    0,             "<->"        },
   2.417 + //  { "hearts",  0,             "[hearts]"   },
   2.418 +-  { "hellip",  0,             "..."        },
   2.419 +-  { "iacute",  LATIN1_iacute, "i'"         },
   2.420 +-  { "icirc",   LATIN1_icirc,  "i^"         },
   2.421 +-  { "iexcl",   LATIN1_iexcl,  "!"          },
   2.422 +-  { "igrave",  LATIN1_igrave, "i`"         },
   2.423 ++  { "hellip",  0,             "...", 0x2026},
   2.424 ++  { "iacute",  LATIN1_iacute, "i'",  0x00ed},
   2.425 ++  { "icirc",   LATIN1_icirc,  "i^",  0x00ee},
   2.426 ++  { "iexcl",   LATIN1_iexcl,  "!",   0x00a1},
   2.427 ++  { "igrave",  LATIN1_igrave, "i`",  0x00ec},
   2.428 +   { "image",   0,             "Im"         },
   2.429 +-  { "infin",   0,             "oo"         },
   2.430 +-  { "int",     0,             "INT"        },
   2.431 +-  { "iota",    0,             "i"          },
   2.432 +-  { "iquest",  LATIN1_iquest, "?"          },
   2.433 ++  { "infin",   0,             "oo",  0x221e},
   2.434 ++  { "int",     0,             "INT", 0x222b},
   2.435 ++  { "iota",    0,             "i",   0x03b9},
   2.436 ++  { "iquest",  LATIN1_iquest, "?",   0x00bf},
   2.437 +   { "isin",    0,             "(-"         },
   2.438 +-  { "iuml",    LATIN1_iuml,   "i\""        },
   2.439 +-  { "kappa",   0,             "k"          },
   2.440 ++  { "iuml",    LATIN1_iuml,   "i\"", 0x00ef},
   2.441 ++  { "kappa",   0,             "k",   0x03ba},
   2.442 +   { "lArr",    0,             "<="         },
   2.443 +-  { "lambda",  0,             "l"          },
   2.444 ++  { "lambda",  0,             "l",   0x03bb},
   2.445 +   { "lang",    0,             "</"         },
   2.446 +   { "laquo",   LATIN1_laquo,  "<<"         },
   2.447 +-  { "larr",    0,             "<-"         },
   2.448 ++  { "larr",    0,             "<-",  0x2190},
   2.449 + //  { "lceil",   0,             "<|"         },
   2.450 +   { "ldquo",   0,             "\""         },
   2.451 +-  { "le",      0,             "<="         },
   2.452 ++  { "le",      0,             "<=",  0x2264},
   2.453 + //  { "lfloor",  0,             "|<"         },
   2.454 +   { "lowast",  0,             "*"          },
   2.455 +   { "loz",     0,             "<>"         },
   2.456 +   { "lsaquo",  0,             "<"          },
   2.457 +   { "lsquo",   0,             "`"          },
   2.458 +-  { "lt",      0,             "<"          },
   2.459 +-  { "macr",    LATIN1_macr,   "-"          },
   2.460 ++  { "lt",      0,             "<",   0x003c},
   2.461 ++  { "macr",    LATIN1_macr,   "-",   0x00af},
   2.462 +   { "mdash",   0,             "--"         },
   2.463 +-  { "micro",   LATIN1_micro,  "my"         },
   2.464 +-  { "middot",  LATIN1_middot, "."          },
   2.465 +-  { "minus",   0,             "-"          },
   2.466 +-  { "mu",      0,             "m"          },
   2.467 ++  { "micro",   LATIN1_micro,  "my",  0x00b5},
   2.468 ++  { "middot",  LATIN1_middot, ".",   0x00b7},
   2.469 ++  { "minus",   0,             "-",   0x2212},
   2.470 ++  { "mu",      0,             "m",   0x03bc},
   2.471 +   { "nabla",   0,             "Nabla"      },
   2.472 +-  { "nbsp",    LATIN1_nbsp,   " "          },
   2.473 ++  { "nbsp",    LATIN1_nbsp,   " ",   0x00a0},
   2.474 +   { "ndash",   0,             "-"          },
   2.475 +-  { "ne",      0,             "!="         },
   2.476 ++  { "ne",      0,             "!=",  0x2260},
   2.477 +   { "ni",      0,             "-)"         },
   2.478 +   { "not",     LATIN1_not,    "NOT"        },
   2.479 +   { "notin",   0,             "!(-"        },
   2.480 +   { "nsub",    0,             "!(C"        },
   2.481 +-  { "ntilde",  LATIN1_ntilde, "n~"         },
   2.482 +-  { "nu",      0,             "n"          },
   2.483 +-  { "oacute",  LATIN1_oacute, "o'"         },
   2.484 +-  { "ocirc",   LATIN1_ocirc,  "o^"         },
   2.485 ++  { "ntilde",  LATIN1_ntilde, "n~",  0x00f1},
   2.486 ++  { "nu",      0,             "n",   0x03bd},
   2.487 ++  { "oacute",  LATIN1_oacute, "o'",  0x00f3},
   2.488 ++  { "ocirc",   LATIN1_ocirc,  "o^",  0x00f4},
   2.489 +   { "oelig",   0,             "oe"         },
   2.490 +-  { "ograve",  LATIN1_ograve, "o`"         },
   2.491 ++  { "ograve",  LATIN1_ograve, "o`",  0x00f2},
   2.492 +   { "oline",   LATIN1_macr,   "-"          },
   2.493 +-  { "omega",   0,             "o"          },
   2.494 +-  { "omicron", 0,             "o"          },
   2.495 ++  { "omega",   0,             "o",   0x03c9},
   2.496 ++  { "omicron", 0,             "o",   0x03bf},
   2.497 +   { "oplus",   0,             "(+)"        },
   2.498 +   { "or",      0,             "OR"         },
   2.499 +-  { "ordf",    LATIN1_ordf,   "-a"         },
   2.500 +-  { "ordm",    LATIN1_ordm,   "-o"         },
   2.501 +-  { "oslash",  LATIN1_oslash, "o/"         },
   2.502 +-  { "otilde",  LATIN1_otilde, "o~"         },
   2.503 ++  { "ordf",    LATIN1_ordf,   "-a",  0x00aa},
   2.504 ++  { "ordm",    LATIN1_ordm,   "-o",  0x00ba},
   2.505 ++  { "oslash",  LATIN1_oslash, "o/",  0x00f8},
   2.506 ++  { "otilde",  LATIN1_otilde, "o~",  0x00f5},
   2.507 +   { "otimes",  0,             "(x)"        },
   2.508 +-  { "ouml",    LATIN1_ouml,   "o\""        },
   2.509 +-  { "para",    LATIN1_para,   "P:"         },
   2.510 +-  { "part",    0,             "PART"       },
   2.511 +-  { "permil",  0,             " 0/00"      },
   2.512 ++  { "ouml",    LATIN1_ouml,   "o\"", 0x00f6},
   2.513 ++  { "para",    LATIN1_para,   "P:",  0x00b6},
   2.514 ++  { "part",    0,             "PART",0x2202},
   2.515 ++  { "permil",  0,             " 0/00",0x2030},
   2.516 +   { "perp",    0,             "-T"         },
   2.517 +-  { "phi",     0,             "f"          },
   2.518 +-  { "pi",      0,             "p"          },
   2.519 ++  { "phi",     0,             "f",   0x03c6},
   2.520 ++  { "pi",      0,             "p",   0x03c0},
   2.521 +   { "piv",     0,             "Pi"         },
   2.522 +-  { "plusmn",  LATIN1_plusmn, "+/-"        },
   2.523 +-  { "pound",   LATIN1_pound,  "-L-"        },
   2.524 ++  { "plusmn",  LATIN1_plusmn, "+/-", 0x00b1},
   2.525 ++  { "pound",   LATIN1_pound,  "-L-", 0x00a3},
   2.526 +   { "prime",   0,             "'"          },
   2.527 +-  { "prod",    0,             "PROD"       },
   2.528 ++  { "prod",    0,             "PROD",0x220f},
   2.529 +   { "prop",    0,             "0("         },
   2.530 +-  { "psi",     0,             "ps"         },
   2.531 ++  { "psi",     0,             "ps",  0x03c8},
   2.532 +   { "quot",    0,             "\""         },
   2.533 +   { "rArr",    0,             "=>"         },
   2.534 +-  { "radic",   0,             "SQRT"       },
   2.535 ++  { "radic",   0,             "SQRT",0x221a},
   2.536 +   { "rang",    0,             "/>"         },
   2.537 +   { "raquo",   LATIN1_raquo,  ">>"         },
   2.538 +-  { "rarr",    0,             "->"         },
   2.539 ++  { "rarr",    0,             "->",  0x2192},
   2.540 + //  { "rceil",   0,             ">|"         },
   2.541 +   { "rdquo",   0,             "\""         },
   2.542 +   { "real",    0,             "Re"         },
   2.543 +-  { "reg",     LATIN1_reg,    "(R)"        },
   2.544 ++  { "reg",     LATIN1_reg,    "(R)", 0x00ae},
   2.545 + //  { "rfloor",  0,             "|>"         },
   2.546 +-  { "rho",     0,             "r"          },
   2.547 ++  { "rho",     0,             "r",   0x03c1},
   2.548 +   { "rsaquo",  0,             ">"          },
   2.549 +   { "rsquo",   0,             "'"          },
   2.550 +   { "sbquo",   0,             "'"          },
   2.551 +-  { "scaron",  0,             "s"          },
   2.552 ++  { "scaron",  0,             "s",   0x0161},
   2.553 +   { "sdot",    0,             "DOT"        },
   2.554 +-  { "sect",    LATIN1_sect,   "S:"         },
   2.555 ++  { "sect",    LATIN1_sect,   "S:",  0x00a7},
   2.556 +   { "shy",     LATIN1_shy,    ""           },
   2.557 +-  { "sigma",   0,             "s"          },
   2.558 +-  { "sigmaf",  0,             "s"          },
   2.559 ++  { "sigma",   0,             "s",   0x03c3},
   2.560 ++  { "sigmaf",  0,             "s",   0x03c2},
   2.561 +   { "sim",     0,             "~"          },
   2.562 + //  { "spades",  0,             "[spades]"   },
   2.563 +   { "sub",     0,             "(C"         },
   2.564 +   { "sube",    0,             "(_"         },
   2.565 +-  { "sum",     0,             "SUM"        },
   2.566 ++  { "sum",     0,             "SUM", 0x2211},
   2.567 +   { "sup",     0,             ")C"         },
   2.568 +-  { "sup1",    LATIN1_sup1,   "^1"         },
   2.569 +-  { "sup2",    LATIN1_sup2,   "^2"         },
   2.570 +-  { "sup3",    LATIN1_sup3,   "^3"         },
   2.571 ++  { "sup1",    LATIN1_sup1,   "^1",  0x00b9},
   2.572 ++  { "sup2",    LATIN1_sup2,   "^2",  0x00b2},
   2.573 ++  { "sup3",    LATIN1_sup3,   "^3",  0x00b3},
   2.574 +   { "supe",    0,             ")_"         },
   2.575 +-  { "szlig",   LATIN1_szlig,  "ss"         },
   2.576 +-  { "tau",     0,             "t"          },
   2.577 ++  { "szlig",   LATIN1_szlig,  "ss",  0x00df},
   2.578 ++  { "tau",     0,             "t",   0x03c4},
   2.579 +   { "there4",  0,             ".:"         },
   2.580 +-  { "theta",   0,             "th"         },
   2.581 +-  { "thorn",   LATIN1_thorn,  "th"         },
   2.582 +-  { "tilde",   0,             "~"          },
   2.583 +-  { "times",   LATIN1_times,  "x"          },
   2.584 +-  { "trade",   0,             "[TM]"       },
   2.585 ++  { "theta",   0,             "th",  0x03b8},
   2.586 ++  { "thorn",   LATIN1_thorn,  "th",  0x00fe},
   2.587 ++  { "tilde",   0,             "~",   0x02dc},
   2.588 ++  { "times",   LATIN1_times,  "x",   0x00d7},
   2.589 ++  { "trade",   0,             "[TM]",0x2122},
   2.590 +   { "uArr",    0,             "^^"         },
   2.591 +-  { "uacute",  LATIN1_uacute, "u'"         },
   2.592 ++  { "uacute",  LATIN1_uacute, "u'",  0x00fa},
   2.593 +   { "uarr",    0,             "^"          },
   2.594 +-  { "ucirc",   LATIN1_ucirc,  "u^"         },
   2.595 +-  { "ugrave",  LATIN1_ugrave, "u`"         },
   2.596 +-  { "uml",     LATIN1_uml,    "\""         },
   2.597 +-  { "upsilon", 0,             "u"          },
   2.598 +-  { "uuml",    LATIN1_uuml,   "u\""        },
   2.599 ++  { "ucirc",   LATIN1_ucirc,  "u^",  0x00fb},
   2.600 ++  { "ugrave",  LATIN1_ugrave, "u`",  0x00f9},
   2.601 ++  { "uml",     LATIN1_uml,    "\"",  0x00a8},
   2.602 ++  { "upsilon", 0,             "u",   0x03c5},
   2.603 ++  { "uuml",    LATIN1_uuml,   "u\"", 0x00fc},
   2.604 +   { "weierp",  0,             "P"          },
   2.605 +-  { "xi",      0,             "x"          },
   2.606 +-  { "yacute",  LATIN1_yacute, "y'"         },
   2.607 +-  { "yen",     LATIN1_yen,    "YEN"        },
   2.608 +-  { "yuml",    LATIN1_yuml,   "y\""        },
   2.609 +-  { "zeta",    0,             "z"          },
   2.610 ++  { "xi",      0,             "x",   0x03be},
   2.611 ++  { "yacute",  LATIN1_yacute, "y'",  0x00fd},
   2.612 ++  { "yen",     LATIN1_yen,    "YEN", 0x00a5},
   2.613 ++  { "yuml",    LATIN1_yuml,   "y\"", 0x00ff},
   2.614 ++  { "zeta",    0,             "z",   0x03b6},
   2.615 + };
   2.616 + 
   2.617 +-extern int use_iso8859;
   2.618 ++extern int use_encoding;
   2.619 + 
   2.620 + /* ------------------------------------------------------------------------- */
   2.621 + 
   2.622 ++char ubuf[4];
   2.623 ++
   2.624 ++char *mkutf(unsigned long x)
   2.625 ++{
   2.626 ++  memset(ubuf, 0, 4);
   2.627 ++  if(x < 128) ubuf[0] = x;
   2.628 ++  else if(x < 0x800) {
   2.629 ++     ubuf[0] = (0xc0 | ((x >> 6) & 0x1f));
   2.630 ++     ubuf[1] = (0x80 | (x & 0x3f));
   2.631 ++  }
   2.632 ++  else {
   2.633 ++     ubuf[0] = (0xe0 | ((x >> 12) & 0x0f));
   2.634 ++     ubuf[1] = (0x80 | ((x >> 6) & 0x3f));
   2.635 ++     ubuf[2] = (0x80 | (x & 0x3f));
   2.636 ++  }
   2.637 ++  return ubuf;
   2.638 ++}
   2.639 ++
   2.640 + void
   2.641 + replace_sgml_entities(string *s)
   2.642 + {
   2.643 +@@ -330,9 +349,9 @@
   2.644 +      */
   2.645 +     while (j < l && s->at(j) != '&') ++j;
   2.646 +     /*
   2.647 +-     * We could convert high-bit chars to "&#233;" here if use_iso8859
   2.648 +-     * is off, then let them be translated or not.  Is the purpose of
   2.649 +-     * !use_iso8859 to allow SGML entities to be seen, or to strongly
   2.650 ++     * We could convert high-bit chars to "&#233;" here if USE_ASCII
   2.651 ++     * is on, then let them be translated or not.  Is the purpose of
   2.652 ++     * USE_ASCII to allow SGML entities to be seen, or to strongly
   2.653 +      * filter against high-ASCII chars that might blow up a terminal
   2.654 +      * that doesn't speak ISO8859?  For the moment, "allow SGML entities
   2.655 +      * to be seen" -- no filtering here.
   2.656 +@@ -370,7 +389,11 @@
   2.657 +           if (!isdigit(c)) break;
   2.658 +           x = 10 * x + c - '0';
   2.659 +         }
   2.660 +-        if (use_iso8859 || (x < 128)) {
   2.661 ++        if (USE_UTF8) {
   2.662 ++          s->replace(beg, j - beg, mkutf(x));
   2.663 ++          j = beg + 1;
   2.664 ++        }
   2.665 ++        else if (USE_ISO8859 && (x < 256) || USE_ASCII && (x < 128)) {
   2.666 +         s->replace(beg, j - beg, 1, (char) x);
   2.667 +         j = beg + 1;
   2.668 +         } else {
   2.669 +@@ -408,13 +431,17 @@
   2.670 +         (int (*)(const void *, const void *)) strcmp
   2.671 +       );
   2.672 +       if (entity != NULL) {
   2.673 +-        if (use_iso8859 && entity->iso8859code) {
   2.674 ++        if (USE_ISO8859 && entity->iso8859code) {
   2.675 +           s->replace(beg, j - beg, 1, (char) entity->iso8859code);
   2.676 +           j = beg + 1;
   2.677 +-        } else if (entity->asciistr) {
   2.678 ++        } else if (USE_ASCII && entity->asciistr) {
   2.679 +           s->replace(beg, j - beg, entity->asciistr);
   2.680 +         j = beg + 1;
   2.681 +         } /* else don't replace it at all, we don't have a translation */
   2.682 ++        else if(USE_UTF8 && entity->unicode) {
   2.683 ++        s->replace(beg, j - beg, mkutf(entity->unicode));
   2.684 ++        j = beg + 1;
   2.685 ++        }
   2.686 +       }
   2.687 +     } else {
   2.688 +       ;                         /* EXTENSION: Allow literal '&' sometimes. */
   2.689 +diff -r -u -bB html2text-1.3.2a/table.C html2text-1.3.2a-patched/table.C
   2.690 +--- html2text-1.3.2a/table.C	2002-07-22 13:32:50.000000000 +0200
   2.691 ++++ html2text-1.3.2a-patched/table.C	2005-05-13 22:19:59.871136320 +0200
   2.692 +@@ -175,7 +175,7 @@
   2.693 +           - (*number_of_columns_return - 1) * (column_spacing + 0),
   2.694 +           Area::LEFT // Yields better results than "p->halign"!
   2.695 +         ));
   2.696 +-	p->width = tmp.get() ? tmp->width() : 0;
   2.697 ++	p->width = tmp.get() ? tmp->utf_width() : 0;
   2.698 +       }
   2.699 +       p->minimized = false;
   2.700 + 
   2.701 +@@ -308,7 +308,7 @@
   2.702 + 	left_of_column + old_column_width - 1,
   2.703 + 	Area::LEFT // Yields better results than "lc.halign"!
   2.704 +       ));
   2.705 +-      w = tmp->width();
   2.706 ++      w = tmp->utf_width();
   2.707 +       if (w >= left_of_column + old_column_width) lc.minimized = true;
   2.708 +     }
   2.709 +     if (w > left_of_column + new_column_width) {
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/man2html/description.txt	Fri Jan 22 17:24:34 2016 +0200
     3.3 @@ -0,0 +1,10 @@
     3.4 +View local man pages in the web browser. Typical usage:
     3.5 +
     3.6 +    hman man2html
     3.7 +
     3.8 +Utility can search and show local man pages by it's name, and also list all
     3.9 +local man pages by categories using web interface for queries.
    3.10 +
    3.11 +This version was patched for SliTaz to produce clean and modern HTML layout
    3.12 +using SliTaz documents CSS styles, to fast search and display pages without
    3.13 +caching, etc.
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/man2html/receipt	Fri Jan 22 17:24:34 2016 +0200
     4.3 @@ -0,0 +1,44 @@
     4.4 +# SliTaz package receipt.
     4.5 +
     4.6 +PACKAGE="man2html"
     4.7 +VERSION="1.6g-7-slitaz"
     4.8 +CATEGORY="utilities"
     4.9 +SHORT_DESC="Man pages to HTML convertor written in C"
    4.10 +MAINTAINER="al.bobylev@gmail.com"
    4.11 +LICENSE="BSD"
    4.12 +WEB_SITE="https://github.com/man-pages-zh/man2html"
    4.13 +TARBALL="$PACKAGE-$VERSION.tar.gz"
    4.14 +WGET_URL="https://github.com/man-pages-zh/man2html/archive/$VERSION.tar.gz"
    4.15 +
    4.16 +DEPENDS="glib"
    4.17 +BUILD_DEPENDS="glib-dev"
    4.18 +
    4.19 +# Rules to configure and make the package.
    4.20 +compile_rules()
    4.21 +{
    4.22 +	patch -p1 -i $stuff/man2html-slitaz.diff
    4.23 +	make && make install
    4.24 +
    4.25 +	# translations
    4.26 +	make pot
    4.27 +	cp $stuff/ru.po $src/po
    4.28 +	make LINGUAS=ru msgfmt
    4.29 +	mkdir -p $install/usr/share/locale
    4.30 +	cp -a $src/po/mo/* $install/usr/share/locale
    4.31 +
    4.32 +	# compress man page
    4.33 +	gzip $install/usr/share/man/man1/man2html.1
    4.34 +
    4.35 +	# install scripts
    4.36 +	cp -a $src/hman.sh $install/usr/bin/hman
    4.37 +	mkdir -p $install/var/www
    4.38 +	cp -a $src/man.sh $install/var/www/man.cgi
    4.39 +	chown www:www $install/var/www/man.cgi
    4.40 +	chmod a+x $install/var/www/man.cgi
    4.41 +}
    4.42 +
    4.43 +# Rules to gen a SliTaz package suitable for Tazpkg.
    4.44 +genpkg_rules()
    4.45 +{
    4.46 +	cp -a $install/* $fs
    4.47 +}
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/man2html/stuff/man2html-slitaz.diff	Fri Jan 22 17:24:34 2016 +0200
     5.3 @@ -0,0 +1,2357 @@
     5.4 +--- /dev/null
     5.5 ++++ b/Makefile
     5.6 +@@ -0,0 +1,89 @@
     5.7 ++CFLAGS  += -Wall -Wstrict-prototypes -Wmissing-prototypes -DGUNZIP='"gunzip"' `pkg-config --cflags --libs glib-2.0`
     5.8 ++# -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -lglib-2.0
     5.9 ++OBJECTS  = man2html.o cgibase.o abbrev.o strdefs.o
    5.10 ++bindir   = $(DESTDIR)$(PREFIX)/usr/bin
    5.11 ++mandir   = $(DESTDIR)$(PREFIX)/usr/share/man
    5.12 ++vardir   = $(DESTDIR)$(PREFIX)/var
    5.13 ++httpdir  = $(DESTDIR)$(PREFIX)/home/httpd
    5.14 ++cgidir   = $(DESTDIR)$(PREFIX)/var/www
    5.15 ++sharedir = $(DESTDIR)$(PREFIX)/usr/share/man2html
    5.16 ++cgiowner = www
    5.17 ++cgigroup = www
    5.18 ++CC ?= gcc
    5.19 ++
    5.20 ++all: man2html hman
    5.21 ++
    5.22 ++man2html:	$(OBJECTS)
    5.23 ++	$(CC) -o man2html $(OBJECTS) $(CFLAGS)
    5.24 ++
    5.25 ++pot:
    5.26 ++	mkdir -p po
    5.27 ++	xgettext -o po/man2html.pot -k_ -kN_ \
    5.28 ++		--package-name="man2html" \
    5.29 ++		--from-code="UTF-8" \
    5.30 ++		cgibase.c man2html.c hman.sh man.sh
    5.31 ++
    5.32 ++msgmerge:
    5.33 ++	@for l in $(LINGUAS); do \
    5.34 ++		echo -n "Updating $$l po file."; \
    5.35 ++		msgmerge -U po/$$l.po po/man2html.pot; \
    5.36 ++	done;
    5.37 ++
    5.38 ++msgfmt:
    5.39 ++	@for l in $(LINGUAS); do \
    5.40 ++		echo "Compiling $$l mo file..."; \
    5.41 ++		mkdir -p po/mo/$$l/LC_MESSAGES; \
    5.42 ++		msgfmt -o po/mo/$$l/LC_MESSAGES/man2html.mo po/$$l.po; \
    5.43 ++	done;
    5.44 ++
    5.45 ++
    5.46 ++# man2html:	../src/version.h
    5.47 ++
    5.48 ++# This installs the man2html utility
    5.49 ++install:	man2html
    5.50 ++	mkdir -p $(bindir)
    5.51 ++	install -m 755 man2html $(bindir)
    5.52 ++	mkdir -p $(mandir)/man1
    5.53 ++	install -m 644 man2html.1 $(mandir)/man1/man2html.1
    5.54 ++
    5.55 ++install-scripts: install-man-scripts install-glimpse-stuff install-hman
    5.56 ++
    5.57 ++# These are the scripts that allow pointing a browser at
    5.58 ++#   http://localhost/cgi-bin/man/man2html
    5.59 ++# to work.
    5.60 ++install-man-scripts:
    5.61 ++	mkdir -p $(cgidir)
    5.62 ++	mkdir -p $(sharedir)
    5.63 ++	install -m 755 scripts/cgi-bin/man/* $(cgidir)
    5.64 ++	install -m 644 scripts/cgi-aux/man/* $(sharedir)
    5.65 ++	install -d -o $(cgiowner) -g $(cgigroup) -m 775 $(vardir)/man2html
    5.66 ++# (aux was renamed to cgi-aux since aux causes problems under DOS)
    5.67 ++
    5.68 ++# If you have installed glimpse, and have compressed man pages,
    5.69 ++# then perhaps you also want these filters.
    5.70 ++install-glimpse-stuff:
    5.71 ++	install -m 644 glimpse_filters $(vardir)/man2html/.glimpse_filters
    5.72 ++
    5.73 ++# In order not to have to type a long command like
    5.74 ++#   netscape http://localhost/cgi-bin/man/man2html?section+topic
    5.75 ++# or
    5.76 ++#   lynx lynxcgi:/home/httpd/cgi-bin/man/man2html?section+topic
    5.77 ++# it is convenient to have some shell script as a wrapper.
    5.78 ++# The script hman can be aliased to man. It uses an environment
    5.79 ++# variable MANHTMLPAGER to find out which browser you use, and
    5.80 ++# you can set MANHTMLHOST if the pages are not on localhost.
    5.81 ++hman: hman.sh
    5.82 ++	rm -f hman
    5.83 ++	sed -e 's,%version%,1.6g-7,' hman.sh > hman
    5.84 ++
    5.85 ++install-hman: hman
    5.86 ++	install -m 555 hman $(bindir)/hman
    5.87 ++	install -m 644 hman.1 $(mandir)/man1/hman.1
    5.88 ++
    5.89 ++clean:
    5.90 ++	rm -f core hman man2html $(OBJECTS) *~
    5.91 ++
    5.92 ++spotless:	clean
    5.93 ++	rm -f Makefile
    5.94 ++
    5.95 ++$(OBJECTS): defs.h
    5.96 +--- a/abbrev.c
    5.97 ++++ b/abbrev.c
    5.98 +@@ -27,7 +27,7 @@
    5.99 +     "SSO", "System Services Overview",
   5.100 +     "TEXT", "Editing Text Files",
   5.101 +     "DOCS", "Formatting Documents",
   5.102 +-    "TROFF", "Using <B>nroff</B> and <B>troff</B>",
   5.103 ++    "TROFF", "Using <b>nroff</b> and <b>troff</b>",
   5.104 +     "INDEX", "Global Index",
   5.105 +     "CPG", "C Programmer's Guide",
   5.106 +     "CREF", "C Reference Manual",
   5.107 +@@ -46,7 +46,7 @@
   5.108 +     "CGI", "SunCGI Reference Manual",
   5.109 +     "CORE", "SunCore Reference Manual",
   5.110 +     "4ASSY", "Sun-4 Assembly Language Reference",
   5.111 +-    "SARCH", "<FONT SIZE=\"-1\">SPARC</FONT> Architecture Manual",
   5.112 ++    "SARCH", "SPARC Architecture Manual",
   5.113 +     "KR", "The C Programming Language",
   5.114 +     0, 0 };
   5.115 + 
   5.116 +--- a/cgibase.c
   5.117 ++++ b/cgibase.c
   5.118 +@@ -8,6 +8,8 @@
   5.119 + #include <ctype.h>		/* tolower() */
   5.120 + #include <string.h>		/* strlen() */
   5.121 + #include "defs.h"
   5.122 ++#include <glib.h>
   5.123 ++#include <glib/gi18n.h>
   5.124 + 
   5.125 + /*
   5.126 +  * The default is to use cgibase. With relative html style
   5.127 +@@ -21,8 +23,8 @@
   5.128 +  * and uses lynx, and we use lynxcgi:/usr/lib/cgi-bin.
   5.129 +  */
   5.130 + 
   5.131 +-static char *man2htmlpath = "/cgi-bin/man/man2html"; 	/* default */
   5.132 +-static char *cgibase_format = "http://%s"; 		/* host.domain:port */
   5.133 ++static char *man2htmlpath = ""; 	/* default */
   5.134 ++static char *cgibase_format = "%s"; 		/* host.domain:port */
   5.135 + static char *cgibase_ll_format = "lynxcgi:%s"; 		/* directory */
   5.136 + static char *cgibase = "";				/* default */
   5.137 + 
   5.138 +@@ -68,76 +70,46 @@
   5.139 +      relat_html_style = 1;
   5.140 + }
   5.141 + 
   5.142 +-/* What shall we say in case of relat_html_style? */
   5.143 +-static char *signature = "<HR>\n"
   5.144 +-"This document was created by\n"
   5.145 +-"<A HREF=\"%s%s\">man2html</A>,\n"
   5.146 +-"using the manual pages.<BR>\n"
   5.147 +-"%s\n";
   5.148 +-
   5.149 +-#define TIMEFORMAT "%T GMT, %B %d, %Y"
   5.150 +-#define TIMEBUFSZ	500
   5.151 +-
   5.152 + void print_sig()
   5.153 + {
   5.154 +-    char timebuf[TIMEBUFSZ];
   5.155 +-    struct tm *timetm;
   5.156 +-    time_t now;
   5.157 +-
   5.158 +-    timebuf[0] = 0;
   5.159 +-#ifdef TIMEFORMAT
   5.160 +-    sprintf(timebuf, "Time: ");
   5.161 +-    now=time(NULL);
   5.162 +-    timetm=gmtime(&now);
   5.163 +-    strftime(timebuf+6, TIMEBUFSZ-6, TIMEFORMAT, timetm);
   5.164 +-    timebuf[TIMEBUFSZ-1] = 0;
   5.165 +-#endif
   5.166 +-    printf(signature, cgibase, man2htmlpath, timebuf);
   5.167 ++	printf("</section>\n<footer>\n<p>%s</p>\n</footer>\n",
   5.168 ++		_("This document was created by <b>man2html</b> using the manual pages."));
   5.169 + }
   5.170 + 
   5.171 + void
   5.172 + include_file_html(char *g) {
   5.173 +-     printf("<A HREF=\"file:///usr/include/%s\">%s</A>&gt;", g,g);
   5.174 ++     printf("<a href=\"file:///usr/include/%s\">%s</a>&gt;", g,g);
   5.175 + }
   5.176 + 
   5.177 + void
   5.178 + man_page_html(char *sec, char *h) {
   5.179 +-	if (relat_html_style) {
   5.180 +-		if (!h)
   5.181 +-			printf("<A HREF=\"../index.html\">"
   5.182 +-			       "Return to Main Contents</A>");
   5.183 +-		else
   5.184 +-			printf("<A HREF=\"../man%s/%s.%s.html\">%s</A>",
   5.185 +-			       sec, h, sec, h);
   5.186 +-	} else {
   5.187 +-		if (!h)
   5.188 +-			printf("<A HREF=\"%s%s\">Return to Main Contents</A>",
   5.189 +-			       cgibase, man2htmlpath);
   5.190 +-		else if (!sec)
   5.191 +-			printf("<A HREF=\"%s%s%c%s\">%s</A>",
   5.192 +-			       cgibase, man2htmlpath, sep, h, h);
   5.193 +-		else
   5.194 +-			printf("<A HREF=\"%s%s%c%s+%s\">%s</A>",
   5.195 +-			       cgibase, man2htmlpath, sep, sec, h, h);
   5.196 +-	}
   5.197 ++	if (!h)
   5.198 ++		printf("<a href=\"?\">%s</a>",
   5.199 ++			_("Return to Main Contents"));
   5.200 ++	else if (!sec)
   5.201 ++		printf("<a href=\"?%s\">%s</a>",
   5.202 ++			h, h);
   5.203 ++	else
   5.204 ++		printf("<a href=\"?%s+%s\">%s</a>",
   5.205 ++			sec, h, h);
   5.206 + }
   5.207 + 
   5.208 + void
   5.209 + ftp_html(char *f) {
   5.210 +-     printf("<A HREF=\"ftp://%s\">%s</A>", f, f);
   5.211 ++     printf("<a href=\"ftp://%s\">%s</a>", f, f);
   5.212 + }
   5.213 + 
   5.214 + void
   5.215 + www_html(char *f) {
   5.216 +-     printf("<A HREF=\"http://%s\">%s</A>", f, f);
   5.217 ++     printf("<a href=\"http://%s\">%s</a>", f, f);
   5.218 + }
   5.219 + 
   5.220 + void
   5.221 + mailto_html(char *g) {
   5.222 +-     printf("<A HREF=\"mailto:%s\">%s</A>", g, g);
   5.223 ++     printf("<a href=\"mailto:%s\">%s</a>", g, g);
   5.224 + }
   5.225 + 
   5.226 + void
   5.227 + url_html(char *g) {
   5.228 +-     printf("<A HREF=\"%s\">%s</A>", g, g);
   5.229 ++     printf("<a href=\"%s\">%s</a>", g, g);
   5.230 + }
   5.231 +--- a/hman.sh
   5.232 ++++ b/hman.sh
   5.233 +@@ -8,99 +8,83 @@
   5.234 + # Usage examples:
   5.235 + #        hman                    - get start page
   5.236 + #        hman man2html           - get man page for man2html
   5.237 +-#        hman 7 locale           - get section 7 man page for locale 
   5.238 ++#        hman 7 locale           - get section 7 man page for locale
   5.239 + #        hman 1                  - section 1 index of names only
   5.240 + #        hman 3 index            - section 3 index names+descriptions
   5.241 + #        hman -k editor          - search all man pages for some string
   5.242 +-#	 hman -P arena ./twm.man - specify browser; specify man page
   5.243 ++#        hman -P arena ./twm.man - specify browser; specify man page
   5.244 + #
   5.245 +-# hman from %version%
   5.246 ++# hman from 1.6g-7
   5.247 + #
   5.248 + 
   5.249 +-if [ x"$1" = x"-v" ] || [ x"$1" = x"-V" ]; then
   5.250 +-	echo "`basename $0` from %version%"
   5.251 ++. /usr/lib/slitaz/httphelper.sh
   5.252 ++. /lib/libtaz.sh
   5.253 ++
   5.254 ++# Internationalization
   5.255 ++export TEXTDOMAIN='man2html'
   5.256 ++_()  { local T="$1"; shift; printf "$(gettext "$T")" "$@"; echo; }
   5.257 ++
   5.258 ++
   5.259 ++if [ "$1" == '-v' ] || [ "$1" == '-V' ]; then
   5.260 ++	echo "$(basename $0) v. 1.6g-slitaz"
   5.261 + 	exit 0
   5.262 + fi
   5.263 + 
   5.264 + # The user has to set MANHTMLPAGER (or he will get httpd-free lynx).
   5.265 + # Pick your favorite browser: lynx, xmosaic, netscape, arena, amaya, grail, ...
   5.266 +-if [ x"$MANHTMLPAGER" = x ]  && ! which lynx > /dev/null ; then
   5.267 +-	HMAN_BROWSER=sensible-browser
   5.268 +-else
   5.269 +-	HMAN_BROWSER=${MANHTMLPAGER-lynxcgi}
   5.270 +-fi
   5.271 ++HMAN_BROWSER="${MANHTMLPAGER:-tazweb}"
   5.272 + 
   5.273 +-#
   5.274 + # If the man pages are on a remote host, specify it in MANHTMLHOST.
   5.275 +-HOST=${MANHTMLHOST-localhost}
   5.276 ++HOST=${MANHTMLHOST:-localhost}
   5.277 + 
   5.278 + # Perhaps the browser was specified on the command line?
   5.279 +-if [ "$#" -gt 1 ] && [ x"$1" = x"-P" ]; then
   5.280 +-    HMAN_BROWSER="$2"
   5.281 +-    shift; shift
   5.282 ++if [ "$#" -gt 1 ] && [ "$1" == '-P' ]; then
   5.283 ++	HMAN_BROWSER="$2"
   5.284 ++	shift; shift
   5.285 + fi
   5.286 + 
   5.287 + # Perhaps the host was specified on the command line?
   5.288 +-if [ "$#" -gt 1 ] && [ x"$1" = x"-H" ]; then
   5.289 +-    HOST="$2"
   5.290 +-    shift; shift
   5.291 ++if [ "$#" -gt 1 ] && [ "$1" == '-H' ]; then
   5.292 ++	HOST="$2"
   5.293 ++	shift; shift
   5.294 + fi
   5.295 + 
   5.296 +-# Interface to a live (already running) netscape browser.
   5.297 +-nsfunc () {
   5.298 +-	if ( /bin/ps xc | grep -q 'netscape$' ) ; then
   5.299 +-		if [ -x  netscape-remote ] ; then
   5.300 +-			exec netscape-remote  -remote "openURL($1,new_window)"
   5.301 +-		else
   5.302 +-			exec netscape -remote "openURL($1,new_window)"
   5.303 +-		fi
   5.304 +-	else
   5.305 +-		netscape $1 &
   5.306 +-	fi
   5.307 +-}
   5.308 ++CGI="http://$HOST/man.cgi"
   5.309 + 
   5.310 +-urlencode() {
   5.311 +-	echo "$@" | perl -pe 'chomp(); s/([^A-Za-z0-9\ \_\-\.\/])/"%" . unpack("H*", $1)/eg; tr/ /+/;'
   5.312 ++enc() {
   5.313 ++	echo "$@" | sed -e 's|+|%2B|g; s| |+|g';
   5.314 + }
   5.315 + 
   5.316 +-
   5.317 +-case "$HMAN_BROWSER" in
   5.318 +-     lynxcgi)
   5.319 +-	HMAN_BROWSER=lynx
   5.320 +-	CG="lynxcgi:/usr/lib/cgi-bin/man"
   5.321 +-	;;
   5.322 +-     netscape)
   5.323 +-        HMAN_BROWSER=nsfunc
   5.324 +-        CG="http://$HOST/cgi-bin/man"
   5.325 +-	;;
   5.326 +-     *)
   5.327 +-	CG="http://$HOST/cgi-bin/man"
   5.328 +-	;;
   5.329 ++case "$#" in
   5.330 ++	0)
   5.331 ++		$HMAN_BROWSER "$CGI";;
   5.332 ++	1)
   5.333 ++		case "$1" in
   5.334 ++			1|2|3|4|5|6|7|8|l|n)
   5.335 ++				$HMAN_BROWSER "$CGI?$1";;
   5.336 ++			/*)
   5.337 ++				$HMAN_BROWSER "$CGI?$(enc "$1")";;
   5.338 ++			*/*)
   5.339 ++				$HMAN_BROWSER "$CGI?$(enc "$(realpath "$PWD/$1")")";;
   5.340 ++			*)
   5.341 ++				$HMAN_BROWSER "$CGI?$(enc "$1")";;
   5.342 ++		esac
   5.343 ++		;;
   5.344 ++	2)
   5.345 ++#		case "$1" in
   5.346 ++#			-k)
   5.347 ++#				$HMAN_BROWSER "$CGI?search=$(enc "$2")";;
   5.348 ++#			*)
   5.349 ++#				if [ "$2" == 'index' ]; then
   5.350 ++#					$HMAN_BROWSER "$CGI?whatis=$(enc "$1")"
   5.351 ++#				else
   5.352 ++					$HMAN_BROWSER "$CGI?$(enc "$1 $2")"
   5.353 ++#				fi
   5.354 ++#				;;
   5.355 ++#		esac
   5.356 ++		;;
   5.357 ++	*)
   5.358 ++		_ 'bad number of args';;
   5.359 + esac
   5.360 +-
   5.361 +-  case "$#" in
   5.362 +-     0)   $HMAN_BROWSER "$CG/man2html" ;;
   5.363 +-     1)   case "$1" in
   5.364 +-	    1|2|3|4|5|6|7|8|l|n)
   5.365 +-		$HMAN_BROWSER "$CG/mansec?query=$1" ;;
   5.366 +-	    /*)
   5.367 +-		$HMAN_BROWSER "$CG/man2html?query=`urlencode "$1"`" ;;
   5.368 +-	    */*)
   5.369 +-		$HMAN_BROWSER "$CG/man2html?query=`urlencode "$PWD/$1"`" ;;
   5.370 +-	    *)
   5.371 +-		$HMAN_BROWSER "$CG/man2html?query=`urlencode "$1"`" ;;
   5.372 +-          esac ;;
   5.373 +-     2)   case "$1" in
   5.374 +-            -k)
   5.375 +-                $HMAN_BROWSER "$CG/mansearch?query=`urlencode "$2"`" ;;
   5.376 +-            *)
   5.377 +-		if [ "$2" = index ]; then
   5.378 +-		    $HMAN_BROWSER "$CG/manwhatis?query=`urlencode "$1"`"
   5.379 +-                else
   5.380 +-		    $HMAN_BROWSER "$CG/man2html?query=`urlencode "$1 $2"`"
   5.381 +-                fi ;;
   5.382 +-          esac ;;
   5.383 +-     *)   echo "bad number of args" ;;
   5.384 +-  esac
   5.385 + 
   5.386 + exit 0
   5.387 +--- /dev/null
   5.388 ++++ b/man.sh
   5.389 +@@ -0,0 +1,292 @@
   5.390 ++#!/bin/sh
   5.391 ++# man2html cgi script - uses /usr/bin/man2html to format man pages
   5.392 ++# aeb@cwi.nl - 980109
   5.393 ++# Aleksej Bobylev <al.bobylev@gmail.com>, 2015-2016
   5.394 ++
   5.395 ++. /usr/lib/slitaz/httphelper.sh
   5.396 ++. /lib/libtaz.sh
   5.397 ++
   5.398 ++# Internationalization.
   5.399 ++[ -e /etc/locale.conf ] && . /etc/locale.conf
   5.400 ++export TEXTDOMAIN='man2html'
   5.401 ++export LANG LC_ALL
   5.402 ++_()  { local T="$1"; shift; printf "$(gettext "$T")" "$@"; echo; }
   5.403 ++
   5.404 ++
   5.405 ++SECTIONS="$(_ 'User Commands'):$(_ 'System Calls'):$(_ 'C Library Functions'):\
   5.406 ++$(_ 'Devices and Network Interfaces'):$(_ 'File Formats'):\
   5.407 ++$(_ 'Games and Demos'):$(_ 'Environments, Tables, and Troff Macros'):\
   5.408 ++$(_ 'Maintenance Commands'):$(_ 'All available manual pages')"
   5.409 ++
   5.410 ++query="$(GET query)"
   5.411 ++if [ -z "$query" ]; then
   5.412 ++	set -- $(echo $(GET) | tr '+' ' ')
   5.413 ++else
   5.414 ++	set -- $(echo $(GET query) | tr '+' ' ')
   5.415 ++fi
   5.416 ++
   5.417 ++
   5.418 ++if [ $1 == 'css' ]; then
   5.419 ++	# post css file on query
   5.420 ++	header 'Content-Type: text/css'
   5.421 ++	cat /usr/share/doc/slitaz-doc.css
   5.422 ++fi
   5.423 ++
   5.424 ++if [ $# -eq 1 ]; then
   5.425 ++	case $1 in
   5.426 ++		1|2|3|4|5|6|7|8|all)
   5.427 ++			if [ "$1" == 'all' ]; then
   5.428 ++				sec_n='9'; sec_folder='man?'
   5.429 ++			else
   5.430 ++				sec_n="$1"; sec_folder="man$1"
   5.431 ++			fi
   5.432 ++			sec_desc=$(echo "$SECTIONS" | cut -d':' -f $sec_n)
   5.433 ++			header
   5.434 ++			cat <<EOT
   5.435 ++<!DOCTYPE html>
   5.436 ++<html>
   5.437 ++<head>
   5.438 ++	<title>$1. $sec_desc</title>
   5.439 ++	<link rel="stylesheet" href="?css">
   5.440 ++</head>
   5.441 ++<body><header><h1>$(_ 'Section %s: %s' $1 "$sec_desc")</h1></header>
   5.442 ++	<section><header>$(_ 'Manual Pages')</header>
   5.443 ++	<p>
   5.444 ++EOT
   5.445 ++
   5.446 ++			case $1 in
   5.447 ++				1) _ "Section 1 of the manual describes user commands and tools, for example, file \
   5.448 ++manipulation tools, shells, compilers, web browsers, file and image viewers and editors, and so \
   5.449 ++on.";;
   5.450 ++				2) _ "Section 2 of the manual describes the Linux system calls. A system call is \
   5.451 ++an entry point into the Linux kernel.";;
   5.452 ++				3) _ "Section 3 of the manual describes all library functions excluding the \
   5.453 ++library functions (system call wrappers) described in Section 2, which implement system calls.";;
   5.454 ++				4) _ "Section 4 of the manual describes special files (devices).";;
   5.455 ++				5) _ "Section 5 of the manual describes various file formats, as well as the \
   5.456 ++corresponding C structures, if any.";;
   5.457 ++				6) _ "Section 6 of the manual describes all the games and funny little programs \
   5.458 ++available on the system.";;
   5.459 ++				7) _ "Section 7 of the manual provides overviews on various topics, and describes \
   5.460 ++conventions and protocols, character set standards, the standard filesystem layout, and \
   5.461 ++miscellaneous other things.";;
   5.462 ++				8) _ "Section 8 of the manual describes commands which either can be or are used \
   5.463 ++only by the superuser, like system-administration commands, daemons, and hardware-related \
   5.464 ++commands.";;
   5.465 ++			esac
   5.466 ++
   5.467 ++			[ "$1" != 'all' ] && echo "<b><a href=\"?intro.$1\">intro</a></b>($1)"
   5.468 ++			echo '</p>'
   5.469 ++
   5.470 ++			temp="$(mktemp)"; temp2="$(mktemp)"
   5.471 ++			for dir in $(find /usr/share/man -type d -name "$sec_folder"); do
   5.472 ++				ls $dir | sed 's|\.\([0-9]\)\.*[bgx]*z*2*$|:\1|'
   5.473 ++				# fix sorting 'feature': leading '_' always ignored by `sort`
   5.474 ++			done | sed 's|_|zzzzzzzz|g' | sort -fu | sed 's|zzzzzzzz|_|g' | \
   5.475 ++			awk -F' ' -vtemp="$temp" -vtemp2="$temp2" '
   5.476 ++			{
   5.477 ++				split($1, man, ":");
   5.478 ++
   5.479 ++				letter = tolower(substr(man[1], 1, 1));
   5.480 ++				if (letter != last_letter) {
   5.481 ++					last_letter = letter;
   5.482 ++					letter_index[++num_letters] = letter;
   5.483 ++					print "<h3 id=\"l" letter "\">" toupper(letter) "</h3>" > temp;
   5.484 ++				}
   5.485 ++				lnk = man[1]; gsub("+", "%2b", lnk);
   5.486 ++				printf "<b><a href=\"?%s.%s\">%s</a></b>(%s) ", lnk, man[2], man[1], man[2] > temp;
   5.487 ++			}
   5.488 ++			END {
   5.489 ++				# Print out alphabetic quick index and other links
   5.490 ++				for (i = 1; i <= num_letters; i++) {
   5.491 ++					print "<a href=\"#l" letter_index[i] section "\">" toupper(letter_index[i]) "</a>" > temp2;
   5.492 ++				}
   5.493 ++			}
   5.494 ++			'
   5.495 ++			if [ -s "$temp" ]; then
   5.496 ++				echo '<hr>'; cat "$temp2"; echo '<hr>'
   5.497 ++				cat "$temp"
   5.498 ++				echo '<hr>'; cat "$temp2"; echo '<hr>'
   5.499 ++			fi
   5.500 ++
   5.501 ++			rm -f "$temp" "$temp2"
   5.502 ++
   5.503 ++			cat <<EOT
   5.504 ++	</section>
   5.505 ++	<section><header>$(_ 'Sections')</header>
   5.506 ++		<ol>
   5.507 ++EOT
   5.508 ++			for i in $(seq 8); do
   5.509 ++				sec_desc=$(echo "$SECTIONS" | cut -d':' -f $i)
   5.510 ++				echo "<li><a href=\"?$i\">$sec_desc</a></li>"
   5.511 ++			done
   5.512 ++			cat <<EOT
   5.513 ++	</ol>
   5.514 ++	<p><a href="?all">$(_ 'All Sections')</a></p>
   5.515 ++</section>
   5.516 ++
   5.517 ++</body>
   5.518 ++</html>
   5.519 ++EOT
   5.520 ++			exit 0
   5.521 ++			;;
   5.522 ++	esac
   5.523 ++fi
   5.524 ++
   5.525 ++# Find the required page - expect to be called with "man2html [sec] page".
   5.526 ++# There may a prefixed "-M manpath" option.
   5.527 ++
   5.528 ++if [ $# -ge 2 -a "$1" == '-M' ]; then
   5.529 ++	MANPATH="$2"
   5.530 ++	export MANPATH
   5.531 ++	shift; shift
   5.532 ++	MP=' using the given MANPATH'
   5.533 ++else
   5.534 ++	MP=''
   5.535 ++fi
   5.536 ++
   5.537 ++
   5.538 ++# If no arguments given, show a start page.
   5.539 ++
   5.540 ++if [ $# -eq 0 ]; then
   5.541 ++	header
   5.542 ++	cat <<EOT
   5.543 ++<!DOCTYPE html>
   5.544 ++<html>
   5.545 ++<head>
   5.546 ++	<meta charset="UTF-8">
   5.547 ++	<title>$(_ 'Manual Pages - Main Contents')</title>
   5.548 ++	<link rel="stylesheet" href="?css">
   5.549 ++</head>
   5.550 ++<body>
   5.551 ++<header><h1>$(_ 'Manual Pages - Main Contents')</h1></header>
   5.552 ++<section><header>$(_ 'Name and Section lookup')</header>
   5.553 ++	<form method="GET">
   5.554 ++		<input name="query" size="40">
   5.555 ++		<button type="submit">$(_ 'Search')</button>
   5.556 ++	</form>
   5.557 ++	<p>$(_ "You can enter a program name, possibly preceded by the section, the directories to search \
   5.558 ++(with -M) or a full name. For example:")</p>
   5.559 ++
   5.560 ++	<ul>
   5.561 ++		<li><tt>find</tt></li>
   5.562 ++		<li><tt>1 find</tt></li>
   5.563 ++		<li><tt>-M /usr/share/man:/opt/man:/usr/local/share/man find</tt></li>
   5.564 ++		<li><tt>/usr/share/man/man1/gperf.1</tt></li>
   5.565 ++	</ul>
   5.566 ++</section>
   5.567 ++
   5.568 ++<section><header>$(_ 'Index of pages')</header>
   5.569 ++
   5.570 ++	<ol>
   5.571 ++EOT
   5.572 ++	for i in $(seq 8); do
   5.573 ++		sec_desc=$(echo "$SECTIONS" | cut -d':' -f $i)
   5.574 ++		echo "<li><a href=\"?$i\">$sec_desc</a></li>"
   5.575 ++	done
   5.576 ++	cat <<EOT
   5.577 ++	</ol>
   5.578 ++	<p><a href="?all">$(_ 'All Sections')</a></p>
   5.579 ++</section>
   5.580 ++
   5.581 ++<footer>
   5.582 ++	<p>$(_ 'The original man2html program and scripts are due to %s and %s.' \
   5.583 ++	'<a href="http://wsinwp01.win.tue.nl:1234/index.html">Richard Verhoeven</a>' \
   5.584 ++	'<a href="mailto:michael@actrix.gen.nz">Michael Hamilton</a>')
   5.585 ++	$(_ 'This version is from %s maintained by %s.' 'man-1.6g' \
   5.586 ++	'<a href="mailto:flucifredi@acm.org">Federico Lucifredi</a>')</p>
   5.587 ++</footer>
   5.588 ++</body>
   5.589 ++</html>
   5.590 ++EOT
   5.591 ++	exit 0
   5.592 ++fi
   5.593 ++
   5.594 ++if [ $# -gt 2 ]; then
   5.595 ++	man2html -E "man2html: bad invocation: too many arguments"
   5.596 ++	exit 0
   5.597 ++fi
   5.598 ++
   5.599 ++# A single argument may be an explicitly give path name
   5.600 ++# Otherwise, find it
   5.601 ++
   5.602 ++if [ $# -eq 1 ]; then
   5.603 ++	arg=${1//%2b/+}
   5.604 ++	case "$arg" in
   5.605 ++		/*)  PAGE="$arg";;
   5.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" \));;
   5.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" \));;
   5.608 ++	esac
   5.609 ++else
   5.610 ++	arg=${2//%2b/+}
   5.611 ++	PAGE="$(
   5.612 ++		for dir in $(find /usr/share/man -type d -name man$1); do
   5.613 ++			find $dir \( -type f -o -type l \) -name "$arg.$1*"
   5.614 ++		done)"
   5.615 ++fi
   5.616 ++
   5.617 ++if [ -z "$PAGE" ]; then
   5.618 ++	complaint="$(_ 'Cannot find a page')"
   5.619 ++	if [ $# -eq 1 ]; then
   5.620 ++		complaint="$(_ 'Cannot find a page for <b>%s</b> %s' $1 $MP)"
   5.621 ++	else
   5.622 ++		complaint="$(_ 'Cannot find a page for <b>%s</b> in section <b>%s</b> %s') $2 $1 $MP"
   5.623 ++	fi
   5.624 ++	man2html -E "<p>$complaint</p>"
   5.625 ++	exit 0
   5.626 ++fi
   5.627 ++
   5.628 ++if [ "$(echo "$PAGE" | wc -l)" -gt 1 ]; then
   5.629 ++	header
   5.630 ++	cat <<EOT
   5.631 ++<!DOCTYPE html>
   5.632 ++<html><head><title>$(_ 'Multiple pages')</title>
   5.633 ++<link rel="stylesheet" href="?css"></link></head>
   5.634 ++<body><header><h1>$(_ 'Multiple pages found')</h1></header>
   5.635 ++	<section>
   5.636 ++	<ul>
   5.637 ++EOT
   5.638 ++	echo "$PAGE" | awk -F'/' '{
   5.639 ++		if ($5 ~ "man") {
   5.640 ++			split($6, man, ".");
   5.641 ++			printf "<li><a href=\"?%s\">%s</a> (%s)</li>\n", $0, man[1], man[2];
   5.642 ++		} else {
   5.643 ++			split($7, man, ".");
   5.644 ++			printf "<li><a href=\"?%s\">%s</a> (%s) — %s</li>\n", $0, man[1], man[2], $5;
   5.645 ++		}
   5.646 ++	}'
   5.647 ++	sed 's|^.*$|<li><a href="?&">&</a></li>|'
   5.648 ++	echo '</ul></section></body></html>'
   5.649 ++	exit 0
   5.650 ++fi
   5.651 ++
   5.652 ++if [ -r "$PAGE" ]; then
   5.653 ++	tmpman="$(mktemp)"
   5.654 ++	# Unpack man page
   5.655 ++	case "$PAGE" in
   5.656 ++		*.gz)   zcat "$PAGE" > "$tmpman";;
   5.657 ++		*.bz2) bzcat "$PAGE" > "$tmpman";;
   5.658 ++		*.xz)  xzcat "$PAGE" > "$tmpman";;
   5.659 ++		*)        cp "$PAGE"   "$tmpman";;
   5.660 ++	esac
   5.661 ++
   5.662 ++	# Check for link
   5.663 ++	line="$(fgrep -v '.\"' "$tmpman" | head -n1)"
   5.664 ++	case "$line" in
   5.665 ++		.so*)
   5.666 ++			link="$(echo "$line" | cut -d'/' -f2)"
   5.667 ++			header	"HTTP/1.1 301 Moved Permanently" \
   5.668 ++					"Location: ?$link"
   5.669 ++			;;
   5.670 ++		*)
   5.671 ++			# Convert page to HTML
   5.672 ++			man2html "$tmpman"
   5.673 ++			;;
   5.674 ++	esac
   5.675 ++
   5.676 ++	# Clean
   5.677 ++	rm "$tmpman"
   5.678 ++else
   5.679 ++	man2html -E "Strange... Cannot find (or read) $PAGE."
   5.680 ++fi
   5.681 ++exit 0
   5.682 +--- a/man2html.c
   5.683 ++++ b/man2html.c
   5.684 +@@ -21,14 +21,17 @@
   5.685 + #include <ctype.h>
   5.686 + #include <sys/stat.h>
   5.687 + #include "defs.h"
   5.688 +-#include "../src/version.h"
   5.689 ++#include "version.h"
   5.690 ++#include <glib.h>
   5.691 ++#include <glib/gi18n.h>
   5.692 ++#define GETTEXT_PACKAGE "man2html"
   5.693 + 
   5.694 + /* BSD mandoc Bd/Ed example(?) blocks */
   5.695 + #define BD_LITERAL  1
   5.696 + #define BD_INDENT   2
   5.697 + 
   5.698 + #define SIZE(a)	(sizeof(a)/sizeof(*a))
   5.699 +-#define DOCTYPE "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n"
   5.700 ++#define DOCTYPE "<!DOCTYPE html>\n"
   5.701 + #define CONTENTTYPE "Content-type: text/html; charset=UTF-8\n\n"
   5.702 + 
   5.703 + static char NEWLINE[2]="\n";
   5.704 +@@ -58,28 +61,13 @@
   5.705 + 
   5.706 + static char charb[3];
   5.707 + 
   5.708 +-#ifdef GUNZIP
   5.709 +-/* from src/utils.c */
   5.710 +-static int
   5.711 +-is_shell_safe(const char *ss, int quoted) {
   5.712 +-	char *bad = " ;'\\\"<>|";
   5.713 +-	char *p;
   5.714 + 
   5.715 +-	if (quoted)
   5.716 +-		bad++;			/* allow a space inside quotes */
   5.717 +-	for (p = bad; *p; p++)
   5.718 +-		if (strchr(ss, *p))
   5.719 +-			return 0;
   5.720 +-	return 1;
   5.721 +-}
   5.722 +-#endif
   5.723 +-
   5.724 + /* reads the entire manpage into buffer *buf and returns number of chars read */
   5.725 + static int
   5.726 + read_manpage_into_buffer(char *path, char **buf) {
   5.727 + 	int compressed = 0;
   5.728 + 	FILE * f = NULL;
   5.729 +-	char * ext;
   5.730 ++	/* char * ext; */
   5.731 + 	int l = 0;
   5.732 + 	struct stat stbuf;
   5.733 + 
   5.734 +@@ -94,26 +82,6 @@
   5.735 + 		char * tmp = NULL;
   5.736 + 		char * command = NULL;
   5.737 + 		char * openpath = path;
   5.738 +-#ifdef GUNZIP
   5.739 +-
   5.740 +-		if (is_shell_safe(openpath, 1)) {
   5.741 +-			ext = strrchr(openpath, '.');
   5.742 +-			compressed = (ext && !strcmp(ext, ".gz"));
   5.743 +-
   5.744 +-			if (!compressed && stat(openpath, &stbuf)) {
   5.745 +-				tmp = (char*) xmalloc(strlen(path) + 4);
   5.746 +-				sprintf(tmp, "%s.gz", path);
   5.747 +-				if ((compressed = !stat(tmp, &stbuf)))
   5.748 +-					openpath = tmp;
   5.749 +-			}
   5.750 +-		}
   5.751 +-
   5.752 +-		if (compressed) {
   5.753 +-			command = (char*) xmalloc(strlen(openpath) + sizeof(GUNZIP) + 4);
   5.754 +-			sprintf(command, GUNZIP " '%s'", openpath);
   5.755 +-			f = popen(command, "r");
   5.756 +-		} else
   5.757 +-#endif
   5.758 + 			f = fopen(openpath, "r");
   5.759 + 
   5.760 + 		if (tmp) free(tmp);
   5.761 +@@ -170,7 +138,7 @@
   5.762 + 
   5.763 + 	h = chardef;
   5.764 + 	if (h->nr != V('*','*')) {
   5.765 +-		printf("chardef corrupted\n");
   5.766 ++		printf("%s\n", _("chardef corrupted"));
   5.767 + 		exit(1);
   5.768 + 	}
   5.769 + 
   5.770 +@@ -216,7 +184,7 @@
   5.771 +     ** Add the links to the output.
   5.772 +     ** At the moment the following are recognized:
   5.773 +     **
   5.774 +-    ** name(*)                 -> ../man?/name.*
   5.775 ++    ** name(*)                 -> ?name.*
   5.776 +     ** method://string         -> method://string
   5.777 +     ** www.host.name           -> http://www.host.name
   5.778 +     ** ftp.host.name           -> ftp://ftp.host.name
   5.779 +@@ -453,8 +421,8 @@
   5.780 + #define DL	1
   5.781 + #define	UL	2
   5.782 + #define	OL	3
   5.783 +-static char *dl_open[4] = { "", "<DL COMPACT>\n", "<UL>", "<OL>" };
   5.784 +-static char *dl_close[4] = { "", "</DL>\n", "</UL>", "</OL>" };
   5.785 ++static char *dl_open[4] = { "", "<dl compact>\n", "<ul>", "<ol>" };
   5.786 ++static char *dl_close[4] = { "", "</dl>\n", "</ul>", "</ol>" };
   5.787 + 
   5.788 + static inline void
   5.789 + dl_begin(void) {
   5.790 +@@ -462,7 +430,7 @@
   5.791 + 	  out_html(dl_open[DL]);
   5.792 + 	  dl_set[itemdepth]=DL;
   5.793 +      }
   5.794 +-     out_html("<DT>");
   5.795 ++     out_html("<dt>");
   5.796 + }
   5.797 + 
   5.798 + static inline void
   5.799 +@@ -481,14 +449,14 @@
   5.800 +      itemdepth++;
   5.801 +      if (itemdepth < SIZE(dl_set))
   5.802 + 	  dl_set[itemdepth]=noDL;
   5.803 +-     out_html("<DL COMPACT><DT><DD>");
   5.804 ++     out_html("<dl compact><dt><dd>");
   5.805 + }
   5.806 + 
   5.807 + static inline void
   5.808 + dl_endlevel(void) {
   5.809 +      if (itemdepth) {
   5.810 + 	  dl_end();
   5.811 +-	  out_html("</DL>\n");
   5.812 ++	  out_html("</dl>\n");
   5.813 + 	  itemdepth--;
   5.814 +      }
   5.815 + }
   5.816 +@@ -538,12 +506,12 @@
   5.817 + 
   5.818 + #define FO0 ""
   5.819 + #define FC0 ""
   5.820 +-#define FO1 "<I>"
   5.821 +-#define FC1 "</I>"
   5.822 +-#define FO2 "<B>"
   5.823 +-#define FC2 "</B>"
   5.824 +-#define FO3 "<TT>"
   5.825 +-#define FC3 "</TT>"
   5.826 ++#define FO1 "<i>"
   5.827 ++#define FC1 "</i>"
   5.828 ++#define FO2 "<b>"
   5.829 ++#define FC2 "</b>"
   5.830 ++#define FO3 "<tt>"
   5.831 ++#define FC3 "</tt>"
   5.832 + 
   5.833 + char *switchfont[16] = { ""     , FC0 FO1, FC0 FO2, FC0 FO3,
   5.834 + 			 FC1 FO0, ""     , FC1 FO2, FC1 FO3,
   5.835 +@@ -588,14 +556,16 @@
   5.836 +   i=current_font;
   5.837 +   sizebuf[0]=0;
   5.838 +   strcat(sizebuf, change_to_font(0));
   5.839 +-  if (current_size) strcat(sizebuf, "</FONT>");
   5.840 ++  if (current_size) strcat(sizebuf, "</span>");
   5.841 +   current_size=nr;
   5.842 +   if (nr) {
   5.843 +     int l;
   5.844 +-    strcat(sizebuf, "<FONT SIZE=\"");
   5.845 ++    strcat(sizebuf, "<span style=\"font-size: ");
   5.846 +     l=strlen(sizebuf);
   5.847 +     if (nr>0) sizebuf[l++]='+'; else sizebuf[l++]='-',nr=-nr;
   5.848 +     sizebuf[l++]=nr+'0';
   5.849 ++    sizebuf[l++]='p';
   5.850 ++    sizebuf[l++]='t';
   5.851 +     sizebuf[l++]='"';
   5.852 +     sizebuf[l++]='>';
   5.853 +     sizebuf[l]=0;
   5.854 +@@ -775,7 +745,7 @@
   5.855 + 	skip_escape=exskipescape;
   5.856 + 	intresult=j;
   5.857 + 	break;
   5.858 +-    case 'l': h="<HR>"; curpos=0;
   5.859 ++    case 'l': h="<hr>"; curpos=0;
   5.860 +     case 'b':
   5.861 +     case 'v':
   5.862 +     case 'x':
   5.863 +@@ -812,7 +782,7 @@
   5.864 +     case 'c': no_newline_output=1; break;
   5.865 +     case '{': newline_for_fun++; h="";break;
   5.866 +     case '}': if (newline_for_fun) newline_for_fun--; h="";break;
   5.867 +-    case 'p': h="<BR>\n";curpos=0; break;
   5.868 ++    case 'p': h="<br>\n";curpos=0; break;
   5.869 +     case 't': h="\t";curpos=(curpos+8)&0xfff8; break;
   5.870 +     case '<': h="&lt;";curpos++; break;
   5.871 +     case '>': h="&gt;";curpos++; break;
   5.872 +@@ -1021,7 +991,7 @@
   5.873 +     out_html(change_to_size(0));
   5.874 +     if (!fillout) {
   5.875 + 	fillout=1;
   5.876 +-	out_html("</PRE>");
   5.877 ++	out_html("</pre>");
   5.878 +     }
   5.879 +     while (*h && *h!='\n') h++;
   5.880 +     if (h[-1]==';') {
   5.881 +@@ -1197,45 +1167,45 @@
   5.882 + 	currow=currow->prev;
   5.883 +     }
   5.884 +     /* produce html output */
   5.885 +-    if (center) out_html("<CENTER>");
   5.886 +-    if (box==2) out_html("<TABLE BORDER><TR><TD>");
   5.887 +-    out_html("<TABLE");
   5.888 ++    if (center) out_html("<div style=\"margin: 0 auto\">");
   5.889 ++    if (box==2) out_html("<table border><tr><td>");
   5.890 ++    out_html("<table");
   5.891 +     if (box || border) {
   5.892 +-	out_html(" BORDER");
   5.893 +-	if (!border) out_html("><TR><TD><TABLE");
   5.894 +-	if (expand) out_html(" WIDTH=100%");
   5.895 ++	out_html(" border");
   5.896 ++	if (!border) out_html("><tr><td><table");
   5.897 ++	if (expand) out_html(" width=100%");
   5.898 +     }
   5.899 +     out_html(">\n");
   5.900 +     currow=layout;
   5.901 +     while (currow) {
   5.902 + 	j=0;
   5.903 +-	out_html("<TR VALIGN=top>");
   5.904 ++	out_html("<tr style=\"vertical-align: top\">");
   5.905 + 	curfield=currow->first;
   5.906 + 	while (curfield) {
   5.907 + 	    if (curfield->align!='S' && curfield->align!='^') {
   5.908 +-		out_html("<TD");
   5.909 ++		out_html("<td");
   5.910 + 		switch (curfield->align) {
   5.911 + 		case 'N':
   5.912 + 		    curfield->space+=4;
   5.913 + 		case 'R':
   5.914 +-		    out_html(" ALIGN=right");
   5.915 ++		    out_html(" style=\"text-align: right\"");
   5.916 + 		    break;
   5.917 + 		case 'C':
   5.918 +-		    out_html(" ALIGN=center");
   5.919 ++		    out_html(" style=\"text-align: center\"");
   5.920 + 		default:
   5.921 + 		    break;
   5.922 + 		}
   5.923 + 		if (!curfield->valign && curfield->rowspan>1)
   5.924 +-		    out_html(" VALIGN=center");
   5.925 ++		    out_html(" style=\"vertical-align: center\"");
   5.926 + 		if (curfield->colspan>1) {
   5.927 + 		    char buf[5];
   5.928 +-		    out_html(" COLSPAN=");
   5.929 ++		    out_html(" colspan=");
   5.930 + 		    sprintf(buf, "%i", curfield->colspan);
   5.931 + 		    out_html(buf);
   5.932 + 		}
   5.933 + 		if (curfield->rowspan>1) {
   5.934 + 		    char buf[5];
   5.935 +-		    out_html(" ROWSPAN=");
   5.936 ++		    out_html(" rowspan=");
   5.937 + 		    sprintf(buf, "%i", curfield->rowspan);
   5.938 + 		    out_html(buf);
   5.939 + 		}
   5.940 +@@ -1244,8 +1214,8 @@
   5.941 + 		if (curfield->size) out_html(change_to_size(curfield->size));
   5.942 + 		if (curfield->font) out_html(change_to_font(curfield->font));
   5.943 + 		switch (curfield->align) {
   5.944 +-		case '=': out_html("<HR><HR>"); break;
   5.945 +-		case '_': out_html("<HR>"); break;
   5.946 ++		case '=': out_html("<hr><hr>"); break;
   5.947 ++		case '_': out_html("<hr>"); break;
   5.948 + 		default:
   5.949 + 		    if (curfield->contents) out_html(curfield->contents);
   5.950 + 		    break;
   5.951 +@@ -1255,20 +1225,20 @@
   5.952 + 		if (curfield->font) out_html(change_to_font(0));
   5.953 + 		if (curfield->size) out_html(change_to_size(0));
   5.954 + 		if (j>=maxcol && curfield->align>'@' && curfield->align!='_')
   5.955 +-		    out_html("<BR>");
   5.956 +-		out_html("</TD>");
   5.957 ++		    out_html("<br>");
   5.958 ++		out_html("</td>");
   5.959 + 	    }
   5.960 + 	    curfield=curfield->next;
   5.961 + 	}
   5.962 +-	out_html("</TR>\n");
   5.963 ++	out_html("</tr>\n");
   5.964 + 	currow=currow->next;
   5.965 +     }
   5.966 +-    if (box && !border) out_html("</TABLE>");
   5.967 +-    out_html("</TABLE>");
   5.968 +-    if (box==2) out_html("</TABLE>");
   5.969 +-    if (center) out_html("</CENTER>\n");
   5.970 ++    if (box && !border) out_html("</table>");
   5.971 ++    out_html("</table>");
   5.972 ++    if (box==2) out_html("</table>");
   5.973 ++    if (center) out_html("</div>\n");
   5.974 +     else out_html("\n");
   5.975 +-    if (!oldfillout) out_html("<PRE>");
   5.976 ++    if (!oldfillout) out_html("<pre>");
   5.977 +     fillout=oldfillout;
   5.978 +     out_html(change_to_size(oldsize));
   5.979 +     out_html(change_to_font(oldfont));
   5.980 +@@ -1401,7 +1371,7 @@
   5.981 + 		case '&': value = (value && value2); break;
   5.982 + 		case ':': value = (value || value2); break;
   5.983 + 		default: fprintf(stderr,
   5.984 +-				 "man2html: Unknown operator %c.\n", oper);
   5.985 ++				_("man2html: Unknown operator %c.\n"), oper);
   5.986 + 		}
   5.987 + 		oper=0;
   5.988 + 	    }
   5.989 +@@ -1489,42 +1459,42 @@
   5.990 + 
   5.991 + 
   5.992 + char *section_list[] = {
   5.993 +-    "1", "User Commands ",
   5.994 +-    "1C", "User Commands",
   5.995 +-    "1G", "User Commands",
   5.996 +-    "1S", "User Commands",
   5.997 +-    "1V", "User Commands ",
   5.998 +-    "2", "System Calls",
   5.999 +-    "2V", "System Calls",
  5.1000 +-    "3", "C Library Functions",
  5.1001 +-    "3C", "Compatibility Functions",
  5.1002 +-    "3F", "Fortran Library Routines",
  5.1003 +-    "3K", "Kernel VM Library Functions",
  5.1004 +-    "3L", "Lightweight Processes Library",
  5.1005 +-    "3M", "Mathematical Library",
  5.1006 +-    "3N", "Network Functions",
  5.1007 +-    "3R", "RPC Services Library",
  5.1008 +-    "3S", "Standard I/O Functions",
  5.1009 +-    "3V", "C Library Functions",
  5.1010 +-    "3X", "Miscellaneous Library Functions",
  5.1011 +-    "4", "Devices and Network Interfaces",
  5.1012 +-    "4F", "Protocol Families",
  5.1013 +-    "4I", "Devices and Network Interfaces",
  5.1014 +-    "4M", "Devices and Network Interfaces",
  5.1015 +-    "4N", "Devices and Network Interfaces",
  5.1016 +-    "4P", "Protocols",
  5.1017 +-    "4S", "Devices and Network Interfaces",
  5.1018 +-    "4V", "Devices and Network Interfaces",
  5.1019 +-    "5", "File Formats",
  5.1020 +-    "5V", "File Formats",
  5.1021 +-    "6", "Games and Demos",
  5.1022 +-    "7", "Environments, Tables, and Troff Macros",
  5.1023 +-    "7V", "Environments, Tables, and Troff Macros",
  5.1024 +-    "8", "Maintenance Commands",
  5.1025 +-    "8C", "Maintenance Commands",
  5.1026 +-    "8S", "Maintenance Commands",
  5.1027 +-    "8V", "Maintenance Commands",
  5.1028 +-    "L", "Local Commands",
  5.1029 ++    "1",  N_("User Commands"),
  5.1030 ++    "1C", N_("User Commands"),
  5.1031 ++    "1G", N_("User Commands"),
  5.1032 ++    "1S", N_("User Commands"),
  5.1033 ++    "1V", N_("User Commands"),
  5.1034 ++    "2",  N_("System Calls"),
  5.1035 ++    "2V", N_("System Calls"),
  5.1036 ++    "3",  N_("C Library Functions"),
  5.1037 ++    "3C", N_("Compatibility Functions"),
  5.1038 ++    "3F", N_("Fortran Library Routines"),
  5.1039 ++    "3K", N_("Kernel VM Library Functions"),
  5.1040 ++    "3L", N_("Lightweight Processes Library"),
  5.1041 ++    "3M", N_("Mathematical Library"),
  5.1042 ++    "3N", N_("Network Functions"),
  5.1043 ++    "3R", N_("RPC Services Library"),
  5.1044 ++    "3S", N_("Standard I/O Functions"),
  5.1045 ++    "3V", N_("C Library Functions"),
  5.1046 ++    "3X", N_("Miscellaneous Library Functions"),
  5.1047 ++    "4",  N_("Devices and Network Interfaces"),
  5.1048 ++    "4F", N_("Protocol Families"),
  5.1049 ++    "4I", N_("Devices and Network Interfaces"),
  5.1050 ++    "4M", N_("Devices and Network Interfaces"),
  5.1051 ++    "4N", N_("Devices and Network Interfaces"),
  5.1052 ++    "4P", N_("Protocols"),
  5.1053 ++    "4S", N_("Devices and Network Interfaces"),
  5.1054 ++    "4V", N_("Devices and Network Interfaces"),
  5.1055 ++    "5",  N_("File Formats"),
  5.1056 ++    "5V", N_("File Formats"),
  5.1057 ++    "6",  N_("Games and Demos"),
  5.1058 ++    "7",  N_("Environments, Tables, and Troff Macros"),
  5.1059 ++    "7V", N_("Environments, Tables, and Troff Macros"),
  5.1060 ++    "8",  N_("Maintenance Commands"),
  5.1061 ++    "8C", N_("Maintenance Commands"),
  5.1062 ++    "8S", N_("Maintenance Commands"),
  5.1063 ++    "8V", N_("Maintenance Commands"),
  5.1064 ++    "L",  N_("Local Commands"),
  5.1065 + /* for Solaris: 
  5.1066 +     "1", "User Commands",
  5.1067 +     "1B", "SunOS/BSD Compatibility Package Commands",
  5.1068 +@@ -1593,7 +1563,7 @@
  5.1069 +     "9s", "DDI and DKI Data Structures",
  5.1070 +     "L", "Local Commands",
  5.1071 + */
  5.1072 +-    NULL, "Misc. Reference Manual Pages",
  5.1073 ++    NULL, N_("Misc. Reference Manual Pages"),
  5.1074 +     NULL, NULL
  5.1075 + };
  5.1076 + 
  5.1077 +@@ -1604,7 +1574,7 @@
  5.1078 + 
  5.1079 +     if (!c) return "";
  5.1080 +     while (section_list[i] && strcmp(c,section_list[i])) i=i+2;
  5.1081 +-    if (section_list[i+1]) return section_list[i+1];
  5.1082 ++    if (section_list[i+1]) return _(section_list[i+1]);
  5.1083 +     else return c;
  5.1084 + }
  5.1085 + 
  5.1086 +@@ -1636,10 +1606,10 @@
  5.1087 +     if (level != subs) {
  5.1088 + 	manidx_need(6);
  5.1089 + 	if (subs) {
  5.1090 +-	    strcpy(manidx+mip, "</DL>\n");
  5.1091 ++	    strcpy(manidx+mip, "</dl>\n");
  5.1092 + 	    mip += 6;
  5.1093 + 	} else {
  5.1094 +-	    strcpy(manidx+mip, "<DL>\n");
  5.1095 ++	    strcpy(manidx+mip, "<dl>\n");
  5.1096 + 	    mip += 5;
  5.1097 + 	}
  5.1098 +     }
  5.1099 +@@ -1647,7 +1617,7 @@
  5.1100 + 
  5.1101 +     scan_troff(item, 1, &c);
  5.1102 +     manidx_need(100 + strlen(c));
  5.1103 +-    sprintf(manidx+mip, "<DT><A HREF=\"#%s\">%s</A><DD>\n", label, c);
  5.1104 ++    sprintf(manidx+mip, "<dt><a href=\"#%s\">%s</a></dt><dd>\n", label, c);
  5.1105 +     if (c) free(c);
  5.1106 +     while (manidx[mip]) mip++;
  5.1107 + }
  5.1108 +@@ -1834,8 +1804,8 @@
  5.1109 + 	    }
  5.1110 + 	    break;
  5.1111 + 	case V('b','r'):
  5.1112 +-	    if (still_dd) out_html("<DD>");
  5.1113 +-	    else out_html("<BR>\n");
  5.1114 ++	    if (still_dd) out_html("<dd>");
  5.1115 ++	    else out_html("<br>\n");
  5.1116 + 	    curpos=0;
  5.1117 + 	    c=c+j;
  5.1118 + 	    if (c[0] == escapesym) { c=scan_escape(c+1); }
  5.1119 +@@ -1865,17 +1835,17 @@
  5.1120 + 	    c=skip_till_newline(c);
  5.1121 + 	    /* center next i lines */
  5.1122 + 	    if (i>0) {
  5.1123 +-		out_html("<CENTER>\n");
  5.1124 ++		out_html("<div style=\"margin: 0 auto\">\n");
  5.1125 + 		while (i && *c) {
  5.1126 + 		    char *line=NULL;
  5.1127 + 		    c=scan_troff(c,1, &line);
  5.1128 +-		    if (line && strncmp(line, "<BR>", 4)) {
  5.1129 ++		    if (line && strncmp(line, "<br>", 4)) {
  5.1130 + 			out_html(line);
  5.1131 +-			out_html("<BR>\n");
  5.1132 ++			out_html("<br>\n");
  5.1133 + 			i--;
  5.1134 + 		    }
  5.1135 + 		}
  5.1136 +-		out_html("</CENTER>\n");
  5.1137 ++		out_html("</div>\n");
  5.1138 + 		curpos=0;
  5.1139 + 	    }
  5.1140 + 	    break;
  5.1141 +@@ -1906,7 +1876,7 @@
  5.1142 + 	    if (!fillout) {
  5.1143 + 		out_html(change_to_font(0));
  5.1144 + 		out_html(change_to_size('0'));
  5.1145 +-		out_html("</PRE>\n");
  5.1146 ++		out_html("</pre>\n");
  5.1147 + 	    }
  5.1148 + 	    curpos=0;
  5.1149 + 	    fillout=1;
  5.1150 +@@ -1981,7 +1951,7 @@
  5.1151 + 	    if (fillout) {
  5.1152 + 		out_html(change_to_font(0));
  5.1153 + 		out_html(change_to_size('0'));
  5.1154 +-		out_html("<PRE>\n");
  5.1155 ++		out_html("<pre>\n");
  5.1156 + 	    }
  5.1157 + 	    curpos=0;
  5.1158 + 	    fillout=0;
  5.1159 +@@ -2002,7 +1972,7 @@
  5.1160 + 	    break;
  5.1161 + 	case V('s','p'):
  5.1162 + 	    c=c+j;
  5.1163 +-	    if (fillout) out_html("<P>"); else {
  5.1164 ++	    if (fillout) out_html("<p>"); else {
  5.1165 + 		out_html(NEWLINE);
  5.1166 + 		NEWLINE[0]='\n';
  5.1167 + 	    }
  5.1168 +@@ -2033,30 +2003,15 @@
  5.1169 + 		*c = 0;
  5.1170 + 		scan_troff(h,1, &name);
  5.1171 + 		if (name[3] == '/') h=name+3; else h=name;
  5.1172 +-#if NOCGI
  5.1173 +-                if (!out_length) {
  5.1174 +-		    char *t,*s;
  5.1175 +-		    t=strrchr(fname, '/');
  5.1176 +-		    if (!t) t=fname;
  5.1177 +-		    fprintf(stderr, "ln -s %s.html %s.html\n", h, t);
  5.1178 +-		    s=strrchr(t, '.');if (!s) s=t;
  5.1179 +-		    printf(CONTENTTYPE DOCTYPE);
  5.1180 +-		    printf("<HTML><HEAD><TITLE> Man page of %s</TITLE>\n"
  5.1181 +-			   "</HEAD><BODY>\n"
  5.1182 +-			   "See the man page for <A HREF=\"%s.html\">%s</A>.\n"
  5.1183 +-			   "</BODY></HTML>\n",
  5.1184 +-			   s, h, h);
  5.1185 +-		} else
  5.1186 +-#endif
  5.1187 +                 {
  5.1188 + 		    /* this works alright, except for section 3 */
  5.1189 + 		    if ((l = read_manpage_into_buffer(h, &buf)) < 0) {
  5.1190 + 			 fprintf(stderr,
  5.1191 +-				"man2html: unable to open or read file %s\n", h);
  5.1192 +-			 out_html("<BLOCKQUOTE>"
  5.1193 +-				  "man2html: unable to open or read file\n");
  5.1194 ++				_("man2html: unable to open or read file %s\n"), h);
  5.1195 ++			 out_html("<blockquote>");
  5.1196 ++			 out_html(_("man2html: unable to open or read file\n"));
  5.1197 + 			 out_html(h);
  5.1198 +-			 out_html("</BLOCKQUOTE>\n");
  5.1199 ++			 out_html("</blockquote>\n");
  5.1200 + 		    } else {
  5.1201 + 			buf[0]=buf[l]='\n';
  5.1202 + 			buf[l+1]=buf[l+2]=0;
  5.1203 +@@ -2085,7 +2040,7 @@
  5.1204 + #if 0
  5.1205 + 	    dl_down();
  5.1206 + #endif
  5.1207 +-	    out_html("<BR>\n");
  5.1208 ++	    out_html("<br>\n");
  5.1209 + 	    c=c+j;
  5.1210 + 	    c=scan_expression(c, &j);
  5.1211 + 	    for (i=0; i<j; i++) out_html("&nbsp;");
  5.1212 +@@ -2163,7 +2118,7 @@
  5.1213 +             if (words) {
  5.1214 + 		scan_troff(wordlist[0], 1,NULL);
  5.1215 + 	    }
  5.1216 +-	    out_html("<DD>");
  5.1217 ++	    out_html("<dd>");
  5.1218 + 	    curpos = 0;
  5.1219 + 	    break;
  5.1220 + 	case V('T','P'):
  5.1221 +@@ -2172,7 +2127,7 @@
  5.1222 + 	    /* somewhere a definition ends with '.TP' */
  5.1223 + 	    if (!*c) still_dd=1; else {
  5.1224 + 		c=scan_troff(c,1,NULL);
  5.1225 +-		out_html("<DD>");
  5.1226 ++		out_html("<dd>");
  5.1227 + 	    }
  5.1228 + 	    curpos=0;
  5.1229 + 	    break;
  5.1230 +@@ -2195,20 +2150,20 @@
  5.1231 + 		 fprintf(idxfile,"\n");
  5.1232 + 	    }
  5.1233 + #endif
  5.1234 +-            out_html("<A NAME=\"");
  5.1235 ++            out_html("<span id=\"");
  5.1236 + 	    out_html(idxlabel);
  5.1237 + 	    /* this will not work in mosaic (due to a bug).
  5.1238 + 	    ** Adding '&nbsp;' between '>' and '<' solves it, but creates
  5.1239 + 	    ** some space. A normal space does not work.
  5.1240 + 	    */
  5.1241 +-	    out_html("\"></A>");
  5.1242 ++	    out_html("\"></span>");
  5.1243 + 	    break;
  5.1244 + 	case V('P',' '):
  5.1245 + 	case V('P','\n'):
  5.1246 + 	case V('L','P'):
  5.1247 + 	case V('P','P'):
  5.1248 + 	    dl_end();
  5.1249 +-	    if (fillout) out_html("<P>\n"); else {
  5.1250 ++	    if (fillout) out_html("<p>\n"); else {
  5.1251 + 		out_html(NEWLINE);
  5.1252 + 		NEWLINE[0]='\n';
  5.1253 + 	    }
  5.1254 +@@ -2272,19 +2227,29 @@
  5.1255 + 	    out_html(change_to_size(0));
  5.1256 + 	    if (!fillout) {
  5.1257 + 		fillout=1;
  5.1258 +-		out_html("</PRE>");
  5.1259 ++		out_html("</pre>");
  5.1260 + 	    }
  5.1261 + 	    trans_char(c,'"', '\a');
  5.1262 + 	    add_to_index(mode, c);
  5.1263 +-	    out_html("<A NAME=\"");
  5.1264 +-	    out_html(label);
  5.1265 +-	    /* &nbsp; for mosaic users */
  5.1266 +-	    if (mode) out_html("\">&nbsp;</A>\n<H3>");
  5.1267 +-	    else out_html("\">&nbsp;</A>\n<H2>");
  5.1268 ++
  5.1269 ++		if (mode) {
  5.1270 ++			out_html("<h3 id=\"");
  5.1271 ++			out_html(label);
  5.1272 ++			out_html("\">");
  5.1273 ++		} else {
  5.1274 ++			out_html("</section>\n\n<section id=\"");
  5.1275 ++			out_html(label);
  5.1276 ++			out_html("\">\n<h2>");
  5.1277 ++		}
  5.1278 ++
  5.1279 + 	    mandoc_synopsis = (strncmp(c, "SYNOPSIS", 8) == 0);
  5.1280 + 	    c = (mandoc_command ? scan_troff_mandoc : scan_troff)(c,1,NULL);
  5.1281 +-	    if (mode) out_html("</H3>\n");
  5.1282 +-	    else out_html("</H2>\n");
  5.1283 ++
  5.1284 ++		if (mode)
  5.1285 ++			out_html("</h3>\n");
  5.1286 ++		else
  5.1287 ++			out_html("</h2>\n");
  5.1288 ++
  5.1289 + 	    curpos=0;
  5.1290 + 	    break;
  5.1291 + 	case V('T','S'):
  5.1292 +@@ -2315,7 +2280,7 @@
  5.1293 + 		    int skip=0;
  5.1294 + 		    output_possible=1;
  5.1295 + 		    printf(CONTENTTYPE DOCTYPE);
  5.1296 +-		    out_html("<HTML><HEAD><TITLE>Man page of ");
  5.1297 ++		    out_html("<html><head>\n<meta charset=\"UTF-8\">\n<title>");
  5.1298 + 		    scan_troff(wordlist[0], 0, &t);
  5.1299 + 		    /* we need to remove all html tags */
  5.1300 + 		    for (s=q=t; *s; s++) {
  5.1301 +@@ -2324,11 +2289,14 @@
  5.1302 + 		      else if (!skip) *q++ = *s;
  5.1303 + 		    }
  5.1304 + 		    *q = '\0';
  5.1305 +-		    out_html(t);
  5.1306 ++		    char buff[256];
  5.1307 ++		    sprintf(buff, _("Man page of %s"), t);
  5.1308 ++		    out_html(buff);
  5.1309 + 		    free(t);
  5.1310 +-		    out_html("</TITLE>\n</HEAD><BODY>\n<H1>");
  5.1311 ++		    out_html("</title>\n<link rel=\"stylesheet\" href=\"?css\">\n</head><body>\n<header><h1>");
  5.1312 + 		    scan_troff(wordlist[0], 0, NULL);
  5.1313 +-		    out_html("</H1>\nSection: ");
  5.1314 ++		    out_html("</h1></header>\n<section>\n");
  5.1315 ++		    out_html(_("Section: "));
  5.1316 + 		    if (words>4)
  5.1317 + 		    	scan_troff(wordlist[4], 0, NULL);
  5.1318 + 		    else
  5.1319 +@@ -2336,14 +2304,17 @@
  5.1320 + 		    out_html(" (");
  5.1321 + 		    scan_troff(wordlist[1], 0, NULL);
  5.1322 + 		    if (words>2) {
  5.1323 +-			out_html(")<BR>Updated: ");
  5.1324 ++			out_html(")<br>");
  5.1325 ++			out_html(_("Updated: "));
  5.1326 + 			scan_troff(wordlist[2], 1, NULL);
  5.1327 + 		    } else out_html(")");
  5.1328 +-		    out_html("<BR><A HREF=\"#index\">Index</A>\n");
  5.1329 ++		    out_html("<br><a href=\"#index\">");
  5.1330 ++		    out_html(_("Index"));
  5.1331 ++		    out_html("</a>\n");
  5.1332 + 		    man_page_html(0,0);	/* Return to Main Contents */
  5.1333 + 		    *sl='\n';
  5.1334 +-		    out_html("<HR>\n");
  5.1335 +-		    if (mandoc_command) out_html("<BR>BSD mandoc<BR>");
  5.1336 ++		    out_html("<hr>\n");
  5.1337 ++		    if (mandoc_command) out_html("<br>\nBSD mandoc<br>");
  5.1338 + 		}
  5.1339 + 		c = sl+1;
  5.1340 + 	    } else
  5.1341 +@@ -2507,7 +2478,7 @@
  5.1342 + 		 dl_newlevel_type(DL);
  5.1343 + 	    if (nl)
  5.1344 + 		 *nl = t;
  5.1345 +-	    if (fillout) out_html("<P>\n"); else {
  5.1346 ++	    if (fillout) out_html("<p>\n"); else {
  5.1347 + 		 out_html(NEWLINE);
  5.1348 + 		 NEWLINE[0]='\n';
  5.1349 + 	    }
  5.1350 +@@ -2518,7 +2489,7 @@
  5.1351 + 	case V('E','l'):	/* BSD mandoc */
  5.1352 + 	     c=c+j;
  5.1353 + 	     dl_endlevel_type();
  5.1354 +-	     if (fillout) out_html("<P>\n"); else {
  5.1355 ++	     if (fillout) out_html("<p>\n"); else {
  5.1356 + 		  out_html(NEWLINE);
  5.1357 + 		  NEWLINE[0]='\n';
  5.1358 + 	     }
  5.1359 +@@ -2528,7 +2499,7 @@
  5.1360 + 	case V('I','t'):	/* BSD mandoc */
  5.1361 + 	     c=c+j;
  5.1362 + 	     if (dl_type(DL)) {
  5.1363 +-		  out_html("<DT>");
  5.1364 ++		  out_html("<dt>");
  5.1365 + 		  out_html(change_to_font('B'));
  5.1366 + 		  if (*c == '\n') {
  5.1367 + 		       /* Don't allow embedded comms after a newline */
  5.1368 +@@ -2543,9 +2514,9 @@
  5.1369 + 		  if (inXo)
  5.1370 + 		       still_dd = 1;
  5.1371 + 		  else
  5.1372 +-		       out_html("<DD>");
  5.1373 ++		       out_html("<dd>");
  5.1374 + 	     } else if (dl_type(UL) || dl_type(OL)) {
  5.1375 +-		  out_html("<LI>");
  5.1376 ++		  out_html("<li>");
  5.1377 + 		  c=scan_troff_mandoc(c,1,NULL);
  5.1378 + 		  out_html(NEWLINE);
  5.1379 + 	     }
  5.1380 +@@ -2559,7 +2530,7 @@
  5.1381 + 	     c=c+j;
  5.1382 + 	     if (inXo) {
  5.1383 + 		  if (still_dd)
  5.1384 +-		       out_html("<DD>");
  5.1385 ++		       out_html("<dd>");
  5.1386 + 		  inXo = 0;
  5.1387 + 	     }
  5.1388 + 	     break;
  5.1389 +@@ -2594,12 +2565,12 @@
  5.1390 + 	case V('D','l'):	/* BSD mandoc */
  5.1391 + 	     c=c+j;
  5.1392 + 	     out_html(NEWLINE);
  5.1393 +-	     out_html("<BLOCKQUOTE>");	    
  5.1394 ++	     out_html("<blockquote>");	    
  5.1395 + 	     out_html(change_to_font('L'));
  5.1396 + 	     if (*c == '\n') c++;
  5.1397 + 	     c=scan_troff_mandoc(c, 1, NULL);	    
  5.1398 + 	     out_html(change_to_font('R'));
  5.1399 +-	     out_html("</BLOCKQUOTE>");	    
  5.1400 ++	     out_html("</blockquote>");	    
  5.1401 + 	     if (fillout) curpos++; else curpos=0;
  5.1402 + 	     break;
  5.1403 + 	case V('B','d'):	/* BSD mandoc */
  5.1404 +@@ -2615,14 +2586,14 @@
  5.1405 + 	     mandoc_bd_options = 0; /* Remember options for terminating Bl */
  5.1406 + 	     if (strstr(c, "-offset indent")) {
  5.1407 + 		  mandoc_bd_options |= BD_INDENT;
  5.1408 +-		  out_html("<BLOCKQUOTE>\n");
  5.1409 ++		  out_html("<blockquote>\n");
  5.1410 + 	     }
  5.1411 + 	     if (strstr(c, "-literal") || strstr(c, "-unfilled")) {
  5.1412 + 		  if (fillout) {
  5.1413 + 		       mandoc_bd_options |= BD_LITERAL;
  5.1414 + 		       out_html(change_to_font(0));
  5.1415 + 		       out_html(change_to_size('0'));
  5.1416 +-		       out_html("<PRE>\n");
  5.1417 ++		       out_html("<pre>\n");
  5.1418 + 		  }
  5.1419 + 		  curpos=0;
  5.1420 + 		  fillout=0;
  5.1421 +@@ -2637,18 +2608,18 @@
  5.1422 + 		  if (!fillout) {
  5.1423 + 		       out_html(change_to_font(0));
  5.1424 + 		       out_html(change_to_size('0'));
  5.1425 +-		       out_html("</PRE>\n");
  5.1426 ++		       out_html("</pre>\n");
  5.1427 + 		  }
  5.1428 + 	     }
  5.1429 + 	     if (mandoc_bd_options & BD_INDENT)
  5.1430 +-		  out_html("</BLOCKQUOTE>\n");
  5.1431 ++		  out_html("</blockquote>\n");
  5.1432 + 	     curpos=0;
  5.1433 + 	     fillout=1;
  5.1434 + 	     c=skip_till_newline(c);
  5.1435 + 	     break;
  5.1436 + 	case V('B','e'):	/* BSD mandoc */
  5.1437 + 	     c=c+j;
  5.1438 +-	     if (fillout) out_html("<P>"); else {
  5.1439 ++	     if (fillout) out_html("<p>"); else {
  5.1440 + 		  out_html(NEWLINE);
  5.1441 + 		  NEWLINE[0]='\n';
  5.1442 + 	     }
  5.1443 +@@ -2715,7 +2686,7 @@
  5.1444 + 	     if (fillout) curpos++; else curpos=0;
  5.1445 + 	     break;
  5.1446 + 	case V('P','p'):	/* BSD mandoc */
  5.1447 +-	     if (fillout) out_html("<P>\n"); else {
  5.1448 ++	     if (fillout) out_html("<p>\n"); else {
  5.1449 + 		  out_html(NEWLINE);
  5.1450 + 		  NEWLINE[0]='\n';
  5.1451 + 	     }
  5.1452 +@@ -2726,9 +2697,9 @@
  5.1453 + 	     trans_char(c,'"','\a');
  5.1454 + 	     c=c+j;
  5.1455 + 	     if (*c == '\n') c++;
  5.1456 +-	     out_html("``");
  5.1457 ++	     out_html("“");
  5.1458 + 	     c=scan_troff_mandoc(c, 1, NULL);
  5.1459 +-	     out_html("''");
  5.1460 ++	     out_html("”");
  5.1461 + 	     out_html(NEWLINE);
  5.1462 + 	     if (fillout) curpos++; else curpos=0;
  5.1463 + 	     break;
  5.1464 +@@ -2800,12 +2771,22 @@
  5.1465 + 	     trans_char(c,'"','\a');
  5.1466 + 	     c=c+j;
  5.1467 + 	     if (*c == '\n') c++;
  5.1468 +-	     out_html("`");
  5.1469 ++	     out_html("‘");
  5.1470 + 	     c=scan_troff_mandoc(c, 1, NULL);
  5.1471 +-	     out_html("'");
  5.1472 ++	     out_html("’");
  5.1473 + 	     out_html(NEWLINE);
  5.1474 + 	     if (fillout) curpos++; else curpos=0;
  5.1475 + 	     break;
  5.1476 ++	case V('A','q'):	/* BSD mandoc */
  5.1477 ++	     trans_char(c,'"','\a');
  5.1478 ++	     c=c+j;
  5.1479 ++	     if (*c == '\n') c++;
  5.1480 ++	     out_html("⟨");
  5.1481 ++	     c=scan_troff_mandoc(c, 1, NULL);
  5.1482 ++	     out_html("⟩");
  5.1483 ++	     out_html(NEWLINE);
  5.1484 ++	     if (fillout) curpos++; else curpos=0;
  5.1485 ++	     break;
  5.1486 + 	case V('A','r'):	/* BSD mandoc */
  5.1487 + 	     /* parse one line in italics */
  5.1488 + 	     out_html(change_to_font('I'));
  5.1489 +@@ -2855,7 +2836,7 @@
  5.1490 + 		   */
  5.1491 + 		  static int count = 0; /* Don't break on the first Nm */
  5.1492 + 		  if (count) {
  5.1493 +-		       out_html("<BR>");
  5.1494 ++		       out_html("<br>");
  5.1495 + 		  } else {
  5.1496 + 		       char *end, t=0 /* just for gcc */;
  5.1497 + 		       end = strchr(c, '\n');
  5.1498 +@@ -3038,7 +3019,7 @@
  5.1499 + 	    if (h[-1] == '\n' && still_dd && isalnum(*h)) {
  5.1500 + 		/* sometimes a .HP request is not followed by a .br request */
  5.1501 + 		FLUSHIBP;
  5.1502 +-		out_html("<DD>");
  5.1503 ++		out_html("<dd>");
  5.1504 + 		curpos=0;
  5.1505 + 		still_dd=0;
  5.1506 + 	    }
  5.1507 +@@ -3108,12 +3089,12 @@
  5.1508 + 				curpos++;
  5.1509 + 			    }
  5.1510 + 			} else {
  5.1511 +-			    out_html("<TT>");
  5.1512 ++			    out_html("<tt>");
  5.1513 + 			    while (curpos < tabstops[curtab]) {
  5.1514 + 				out_html("&nbsp;");
  5.1515 + 				curpos++;
  5.1516 + 			    }
  5.1517 +-			    out_html("</TT>");
  5.1518 ++			    out_html("</tt>");
  5.1519 + 			}
  5.1520 + 		    }
  5.1521 + 		}
  5.1522 +@@ -3122,7 +3103,7 @@
  5.1523 + 		if (*h == ' ' && (h[-1] == '\n' || usenbsp)) {
  5.1524 + 		    FLUSHIBP;
  5.1525 + 		    if (!usenbsp && fillout) {
  5.1526 +-			out_html("<BR>");
  5.1527 ++			out_html("<br>");
  5.1528 + 			curpos=0;
  5.1529 + 		    }
  5.1530 + 		    usenbsp=fillout;
  5.1531 +@@ -3196,13 +3177,13 @@
  5.1532 + 
  5.1533 +      switch(status) {
  5.1534 + 	case 403:
  5.1535 +-		printf("Status: 403 Forbidden\n");
  5.1536 ++		printf("HTTP/1.1 403 Forbidden\n");
  5.1537 + 		break;
  5.1538 + 	case 404:
  5.1539 +-		printf("Status: 404 Not Found\n");
  5.1540 ++		printf("HTTP/1.1 404 Not Found\n");
  5.1541 + 		break;
  5.1542 + 	case 500:
  5.1543 +-		printf("Status: 500 Internal Server Error\n");
  5.1544 ++		printf("HTTP/1.1 500 Internal Server Error\n");
  5.1545 + 		break;
  5.1546 + 	case 0:
  5.1547 + 	default:
  5.1548 +@@ -3210,12 +3191,13 @@
  5.1549 +      }
  5.1550 + 	     
  5.1551 +      printf(CONTENTTYPE DOCTYPE);
  5.1552 +-     printf("<HTML><HEAD><TITLE>%s</TITLE></HEAD>\n"
  5.1553 +-	    "<BODY>\n<H1>%s</H1>\n", s, s);
  5.1554 ++     printf("<html>\n<head>\n<meta charset=\"UTF-8\">\n<title>%s</title>\n"
  5.1555 ++     	"<link rel=\"stylesheet\" href=\"?css\">\n</head>\n"
  5.1556 ++	    "<body>\n<header><h1>%s</h1></header>\n<section>\n", s, s);
  5.1557 +      va_start(p, t);
  5.1558 +      vfprintf(stdout, t, p);
  5.1559 +      va_end(p);
  5.1560 +-     printf("</BODY></HTML>\n");
  5.1561 ++     printf("</section>\n</body></html>\n");
  5.1562 +      exit(0);
  5.1563 + }
  5.1564 + 
  5.1565 +@@ -3223,8 +3205,8 @@
  5.1566 + xstrdup(const char *s) {
  5.1567 +      char *p = strdup(s);
  5.1568 +      if (p == NULL)
  5.1569 +-	  error_page(500, "Out of memory",
  5.1570 +-			 "Sorry, out of memory, aborting...\n");
  5.1571 ++	  error_page(500, _("Out of memory"),
  5.1572 ++			_("Sorry, out of memory, aborting...\n"));
  5.1573 +      return p;
  5.1574 + }
  5.1575 + 
  5.1576 +@@ -3232,8 +3214,8 @@
  5.1577 + xmalloc(size_t size) {
  5.1578 +      void *p = malloc(size);
  5.1579 +      if (p == NULL)
  5.1580 +-	  error_page(500, "Out of memory",
  5.1581 +-			 "Sorry, out of memory, aborting...\n");
  5.1582 ++	  error_page(500, _("Out of memory"),
  5.1583 ++			_("Sorry, out of memory, aborting...\n"));
  5.1584 +      return p;
  5.1585 + }
  5.1586 + 
  5.1587 +@@ -3241,16 +3223,16 @@
  5.1588 + xrealloc(void *ptr, size_t size) {
  5.1589 +      void *p = realloc(ptr,size);
  5.1590 +      if (p == NULL)
  5.1591 +-	  error_page(500, "Out of memory",
  5.1592 +-			 "Sorry, out of memory, aborting...\n");
  5.1593 ++	  error_page(500, _("Out of memory"),
  5.1594 ++			_("Sorry, out of memory, aborting...\n"));
  5.1595 +      return p;
  5.1596 + }
  5.1597 + 
  5.1598 + static void
  5.1599 + usage(void) {
  5.1600 +-     error_page(500, "man2html: bad invocation",
  5.1601 +-	"Call: man2html [-l|-h host.domain:port] [-p|-q] [filename]\n"
  5.1602 +-	"or:   man2html -r [filename]\n");
  5.1603 ++     error_page(500, _("man2html: bad invocation"),
  5.1604 ++	_("Call: man2html [-l|-h host.domain:port] [-p|-q] [filename]\n"
  5.1605 ++	"or:   man2html -r [filename]\n"));
  5.1606 + }
  5.1607 + 
  5.1608 + static void
  5.1609 +@@ -3273,7 +3255,7 @@
  5.1610 + 	       }
  5.1611 + #if 0
  5.1612 + 	       else  /* complain or not - this need not be fatal */
  5.1613 +-		    error_page("Error", "man2html: could not chdir to %s", s);
  5.1614 ++		    error_page(_("Error"), _("man2html: could not chdir to %s"), s);
  5.1615 + #endif
  5.1616 + 	  }
  5.1617 +      }
  5.1618 +@@ -3291,6 +3273,11 @@
  5.1619 +  */
  5.1620 + int
  5.1621 + main(int argc, char **argv) {
  5.1622 ++	setlocale (LC_ALL, "");
  5.1623 ++	bindtextdomain (GETTEXT_PACKAGE, "/usr/share/locale");
  5.1624 ++	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
  5.1625 ++	textdomain (GETTEXT_PACKAGE);
  5.1626 ++
  5.1627 +     int l, c;
  5.1628 +     char *buf, *filename, *fnam = NULL;
  5.1629 + 
  5.1630 +@@ -3309,7 +3296,7 @@
  5.1631 + 	 case 'D':
  5.1632 + 	      goto_dir(optarg, 0, 0); break;
  5.1633 + 	 case 'E':
  5.1634 +-	      error_page(0, "Error", "%s", optarg); break;
  5.1635 ++	      error_page(0, _("Error"), "%s", optarg); break;
  5.1636 + 	 case 'h':
  5.1637 + 	      set_cgibase("localhost"); break;
  5.1638 + 	 case 'H':
  5.1639 +@@ -3362,7 +3349,7 @@
  5.1640 + 
  5.1641 +     l = read_manpage_into_buffer(fnam, &buf);
  5.1642 +     if (l < 0)
  5.1643 +-    	error_page(404, "File not found", "Could not open %s\n", fname);
  5.1644 ++    	error_page(404, _("File not found"), _("Could not open %s\n"), fname);
  5.1645 + 
  5.1646 +     buf[0] = '\n';
  5.1647 +     buf[l+1] = '\n';
  5.1648 +@@ -3379,34 +3366,34 @@
  5.1649 +     out_html(change_to_size(0));
  5.1650 +     if (!fillout) {
  5.1651 + 	fillout=1;
  5.1652 +-	out_html("</PRE>");
  5.1653 ++	out_html("</pre>");
  5.1654 +     }
  5.1655 +     out_html(NEWLINE);
  5.1656 +     if (output_possible) {
  5.1657 + 	/* &nbsp; for mosaic users */
  5.1658 + 	if (manidx) {
  5.1659 +-	    printf("<HR>\n<A NAME=\"index\">&nbsp;</A><H2>Index</H2>\n<DL>\n");
  5.1660 ++	    printf("</section>\n\n<section id=\"index\">\n<h2>%s</h2>\n\n<dl>\n", _("Index"));
  5.1661 + 	    manidx[mip]=0;
  5.1662 + 	    printf("%s", manidx);
  5.1663 +-	    if (subs) printf("</DL>\n");
  5.1664 +-	    printf("</DL>\n");
  5.1665 ++	    if (subs) printf("</dl>\n");
  5.1666 ++	    printf("</dl>\n");
  5.1667 + 	}
  5.1668 + 	print_sig();
  5.1669 +-	printf("</BODY>\n</HTML>\n");
  5.1670 ++	printf("</body>\n</html>\n");
  5.1671 +     } else {
  5.1672 + 	if (!filename)
  5.1673 + 	     filename = fname;
  5.1674 + 	if (*filename == '/')
  5.1675 +-	     error_page(403, "Invalid Man Page",
  5.1676 +-		   "The requested file %s is not a valid (unformatted) "
  5.1677 ++	     error_page(403, _("Invalid Man Page"),
  5.1678 ++		 _("The requested file %s is not a valid (unformatted) "
  5.1679 + 		   "man page.\nIf the file is a formatted man page, "
  5.1680 + 		   "you could try to load the\n"
  5.1681 +-		   "<A HREF=\"file://%s\">plain file</A>.\n",
  5.1682 ++		   "<a href=\"file://%s\">plain file</a>.\n"),
  5.1683 + 		   filename, filename);
  5.1684 + 	else
  5.1685 +-	     error_page(403, "Invalid Man Page",
  5.1686 +-		   "The requested file %s is not a valid (unformatted) "
  5.1687 +-		   "man page.", filename);
  5.1688 ++	     error_page(403, _("Invalid Man Page"),
  5.1689 ++		 _("The requested file %s is not a valid (unformatted) "
  5.1690 ++		   "man page."), filename);
  5.1691 +     }
  5.1692 +     if (idxfile)
  5.1693 + 	 fclose(idxfile);
  5.1694 +--- a/scripts/cgi-bin/man/man2html
  5.1695 ++++ b/scripts/cgi-bin/man/man2html
  5.1696 +@@ -8,11 +8,11 @@
  5.1697 + 
  5.1698 + # Do we need lynxcgi URLs? For the moment our criterion is
  5.1699 + # 1) HTTP_USER_AGENT=Lynx*  and 2) HTTP_HOST is unset.
  5.1700 +-AGENT="${HTTP_USER_AGENT-unknown}"
  5.1701 ++AGENT="${HTTP_USER_AGENT:-unknown}"
  5.1702 + 
  5.1703 + case "$AGENT" in
  5.1704 +     Lynx*|lynx*)
  5.1705 +-	HH="${HTTP_HOST-nohh}"
  5.1706 ++	HH="${HTTP_HOST:-nohh}"
  5.1707 + 	SED="s/%lynx //"
  5.1708 + 	;;
  5.1709 +     *)
  5.1710 +@@ -21,7 +21,7 @@
  5.1711 + 	;;
  5.1712 + esac
  5.1713 + 
  5.1714 +-SERVER="${SERVER_NAME-localhost}"
  5.1715 ++SERVER="${SERVER_NAME:-localhost}"
  5.1716 + case "$HH" in
  5.1717 +     nohh)
  5.1718 + 	LL="-l"
  5.1719 +--- a/scripts/cgi-bin/man/mansearch
  5.1720 ++++ b/scripts/cgi-bin/man/mansearch
  5.1721 +@@ -7,11 +7,11 @@
  5.1722 + 
  5.1723 + # Do we need lynxcgi URLs? For the moment our criterion is
  5.1724 + # 1) HTTP_USER_AGENT=Lynx*  and 2) HTTP_HOST is unset.
  5.1725 +-AGENT="${HTTP_USER_AGENT-unknown}"
  5.1726 ++AGENT="${HTTP_USER_AGENT:-unknown}"
  5.1727 + 
  5.1728 + case "$AGENT" in
  5.1729 +     Lynx*|lynx*)
  5.1730 +-	HH="${HTTP_HOST-nohh}"
  5.1731 ++	HH="${HTTP_HOST:-nohh}"
  5.1732 + 	SED="s/%lynx //"
  5.1733 + 	;;
  5.1734 +     *)
  5.1735 +@@ -20,7 +20,7 @@
  5.1736 + 	;;
  5.1737 + esac
  5.1738 + 
  5.1739 +-SERVER="${SERVER_NAME-localhost}"
  5.1740 ++SERVER="${SERVER_NAME:-localhost}"
  5.1741 + case "$HH" in
  5.1742 +     nohh)
  5.1743 + 	CG="lynxcgi:/usr/lib/cgi-bin/man"
  5.1744 +--- a/scripts/cgi-bin/man/mansearchhelp
  5.1745 ++++ b/scripts/cgi-bin/man/mansearchhelp
  5.1746 +@@ -4,17 +4,17 @@
  5.1747 + 
  5.1748 + # Do we need lynxcgi URLs? For the moment our criterion is
  5.1749 + # 1) HTTP_USER_AGENT=Lynx*  and 2) HTTP_HOST is unset.
  5.1750 +-AGENT="${HTTP_USER_AGENT-unknown}"
  5.1751 ++AGENT="${HTTP_USER_AGENT:-unknown}"
  5.1752 + case "$AGENT" in
  5.1753 +     Lynx*|lynx*)
  5.1754 +-	HH="${HTTP_HOST-nohh}"
  5.1755 ++	HH="${HTTP_HOST:-nohh}"
  5.1756 + 	;;
  5.1757 +     *)
  5.1758 + 	HH=nolynx
  5.1759 + 	;;
  5.1760 + esac
  5.1761 + 
  5.1762 +-SERVER="${SERVER_NAME-localhost}"
  5.1763 ++SERVER="${SERVER_NAME:-localhost}"
  5.1764 + case "$HH" in
  5.1765 +     nohh)
  5.1766 + 	CG="lynxcgi:/usr/lib/cgi-bin/man"
  5.1767 +--- a/strdefs.c
  5.1768 ++++ b/strdefs.c
  5.1769 +@@ -27,266 +27,333 @@
  5.1770 +     { V('.','V'), 1,     0, NULL }, /* the me package tests for this */
  5.1771 +     { 0, 0, 0, NULL } };
  5.1772 + 
  5.1773 ++
  5.1774 ++/* Characters written according to http://mdocml.bsd.lv/man/mandoc_char.7.html */
  5.1775 ++
  5.1776 + static STRDEF standardstring[] = {
  5.1777 +-    { V('<','='), 2, "&lt;=", NULL  }, /* less equal */
  5.1778 +-    { V('>','='), 2, "&gt=;", NULL  }, /* greather equal */
  5.1779 +-    { V('A','m'), 1, "&amp;", NULL  }, /* infinity */
  5.1780 +-    { V('B','a'), 1, "|", NULL  }, /* vartical bar */
  5.1781 +-    { V('G','e'), 2, "&gt=;", NULL  }, /* greather equal */
  5.1782 +-    { V('G','t'), 1, "&gt;", NULL  }, /* greather than */
  5.1783 +-    { V('I','f'), 1, "&infin;", NULL  }, /* infinity */
  5.1784 +-    { V('L','e'), 2, "&lt;=", NULL  }, /* less equal */
  5.1785 +-    { V('L','q'), 1, "&ldquo;", NULL  }, /* left double quote  */
  5.1786 +-    { V('L','t'), 1, "&lt;", NULL  }, /* less than */
  5.1787 +-    { V('N','a'), 3, "NaN", NULL  }, /* not a number */
  5.1788 +-    { V('N','e'), 2, "!=", NULL  }, /* not equal */
  5.1789 +-    { V('P','i'), 2, "Pi", NULL  }, /* pi */
  5.1790 +-    { V('P','m'), 1, "&plusmn;", NULL  }, /* plus minus */
  5.1791 +-    { V('R',' '), 1, "&#174;", NULL },
  5.1792 +-    { V('R','q'), 1, "&rdquo;", NULL  }, /* right double quote  */
  5.1793 +-    { V('a','a'), 1, "'", NULL  }, /* accute accent  */
  5.1794 +-    { V('g','a'), 1, "`", NULL  }, /* grave accent  */
  5.1795 +-    { V('l','q'), 2, "``", NULL },
  5.1796 +-    { V('q',' '), 1, "&quot;", NULL  }, /* straight double quote  */
  5.1797 +-    { V('r','q'), 2, "''", NULL },
  5.1798 +-    { V('u','a'), 1, "^", NULL  }, /* upwards arrow  */
  5.1799 ++    { V('<','='), 1, "≤",        NULL },	/* less-than-equal */
  5.1800 ++    { V('>','='), 1, "≥",        NULL },	/* greater-than-equal */
  5.1801 ++    { V('A','i'), 4, "ANSI",     NULL },	/* ANSI standard name */
  5.1802 ++    { V('A','m'), 1, "&amp;",    NULL },	/* ampersand */
  5.1803 ++    { V('B','a'), 1, "|",        NULL },	/* vertical bar */
  5.1804 ++    { V('G','e'), 1, "≥",        NULL },	/* greater-than-equal */
  5.1805 ++    { V('G','t'), 1, "&gt;",     NULL },	/* greater-than */
  5.1806 ++    { V('I','f'), 8, "infinity", NULL },	/* infinity */
  5.1807 ++    { V('L','e'), 1, "≤",        NULL },	/* less-than-equal */
  5.1808 ++    { V('L','q'), 1, "“",        NULL },	/* left-double-quote */
  5.1809 ++    { V('L','t'), 1, "&lt;",     NULL },	/* less-than */
  5.1810 ++    { V('N','a'), 3, "NaN",      NULL },	/* NaN  */
  5.1811 ++    { V('N','e'), 1, "≠",        NULL },	/* not equal */
  5.1812 ++    { V('P','i'), 2, "pi",       NULL },	/* pi */
  5.1813 ++    { V('P','m'), 1, "±",        NULL },	/* plus-minus */
  5.1814 ++    { V('P','x'), 5, "POSIX",    NULL },	/* POSIX standard name */
  5.1815 ++    { V('R',' '), 1, "®",        NULL },	/* restricted mark */
  5.1816 ++    { V('R','q'), 1, "”",        NULL },	/* right-double-quote */
  5.1817 ++    { V('T','m'), 4, "(Tm)",     NULL },	/* trade mark */
  5.1818 ++    { V('a','a'), 1, "´",        NULL },	/* acute */
  5.1819 ++    { V('g','a'), 1, "`",        NULL },	/* grave */
  5.1820 ++    { V('l','p'), 1, "(",        NULL },	/* left-parenthesis */
  5.1821 ++    { V('l','q'), 1, "“",        NULL },	/* left double-quote */
  5.1822 ++    { V('q',' '), 1, "&quot;",   NULL },	/* double-quote */
  5.1823 ++    { V('r','p'), 1, ")",        NULL },	/* right-parenthesis */
  5.1824 ++    { V('r','q'), 1, "”",        NULL },	/* right double-quote */
  5.1825 ++    { V('u','a'), 1, "↑",        NULL },	/* up-arrow */
  5.1826 ++    { V('v','a'), 1, "↕",        NULL },	/* up-down arrow */
  5.1827 +     { 0, 0, NULL, NULL}
  5.1828 + };
  5.1829 + 
  5.1830 + static STRDEF standardchar[] = {
  5.1831 +-    { V('*','*'), 1, "*", NULL  },	/* math star */
  5.1832 +-    { V('*','A'), 1, "&Alpha;", NULL },
  5.1833 +-    { V('*','B'), 1, "&Beta;", NULL },
  5.1834 +-    { V('*','C'), 1, "&Xi;", NULL },
  5.1835 +-    { V('*','D'), 1, "&Delta;", NULL },
  5.1836 +-    { V('*','E'), 1, "&Epsilon;", NULL },
  5.1837 +-    { V('*','F'), 1, "&Phi;", NULL },
  5.1838 +-    { V('*','G'), 1, "&Gamma;", NULL },
  5.1839 +-    { V('*','H'), 1, "&Theta;", NULL },
  5.1840 +-    { V('*','I'), 1, "&Iota;", NULL },
  5.1841 +-    { V('*','K'), 1, "&Kappa;", NULL },
  5.1842 +-    { V('*','L'), 1, "&Lambda;", NULL },
  5.1843 +-    { V('*','M'), 1, "&Mu;", NULL },
  5.1844 +-    { V('*','N'), 1, "&Nu;", NULL },
  5.1845 +-    { V('*','O'), 1, "&Omicron;", NULL },
  5.1846 +-    { V('*','P'), 1, "&Pi;", NULL },
  5.1847 +-    { V('*','Q'), 1, "&Psi;", NULL },
  5.1848 +-    { V('*','R'), 1, "&Rho;", NULL },
  5.1849 +-    { V('*','S'), 1, "&Sigma;", NULL },
  5.1850 +-    { V('*','T'), 1, "&Tau;", NULL },
  5.1851 +-    { V('*','U'), 1, "&Upsilon;", NULL },
  5.1852 +-    { V('*','W'), 1, "&Omega;", NULL },
  5.1853 +-    { V('*','X'), 1, "&Chi;", NULL },
  5.1854 +-    { V('*','Y'), 1, "&Eta;", NULL },
  5.1855 +-    { V('*','Z'), 1, "&Zeta;", NULL },
  5.1856 +-    { V('*','a'), 1, "&alpha;", NULL },
  5.1857 +-    { V('*','b'), 1, "&beta;", NULL },
  5.1858 +-    { V('*','c'), 1, "&xi;", NULL },
  5.1859 +-    { V('*','d'), 1, "&delta;", NULL },
  5.1860 +-    { V('*','e'), 1, "&epsilon;", NULL },
  5.1861 +-    { V('*','f'), 1, "&phi;", NULL },
  5.1862 +-    { V('*','g'), 1, "&gamma;", NULL },
  5.1863 +-    { V('*','h'), 1, "&theta;", NULL },
  5.1864 +-    { V('*','i'), 1, "&iota;", NULL },
  5.1865 +-    { V('*','k'), 1, "&kappa;", NULL },
  5.1866 +-    { V('*','l'), 1, "&lambda;", NULL },
  5.1867 +-    { V('*','m'), 1, "&mu;", NULL },
  5.1868 +-    { V('*','n'), 1, "&nu;", NULL },
  5.1869 +-    { V('*','o'), 1, "&omicron;", NULL },
  5.1870 +-    { V('*','p'), 1, "&pi;", NULL },
  5.1871 +-    { V('*','q'), 1, "&psi;", NULL },
  5.1872 +-    { V('*','r'), 1, "&rho;", NULL },
  5.1873 +-    { V('*','s'), 1, "&sigma;", NULL },
  5.1874 +-    { V('*','t'), 1, "&tau;", NULL },
  5.1875 +-    { V('*','u'), 1, "&upsilon;", NULL },
  5.1876 +-    { V('*','w'), 1, "&omega;", NULL },
  5.1877 +-    { V('*','x'), 1, "&chi;", NULL },
  5.1878 +-    { V('*','y'), 1, "&eta;", NULL },
  5.1879 +-    { V('*','z'), 1, "&zeta;", NULL },
  5.1880 +-    { V('\'','A'), 1, "&Aacute;", NULL },
  5.1881 +-    { V('\'','E'), 1, "&Eacute;", NULL },
  5.1882 +-    { V('\'','I'), 1, "&Iacute;", NULL },
  5.1883 +-    { V('\'','O'), 1, "&Oacute;", NULL },
  5.1884 +-    { V('\'','U'), 1, "&Uacute;", NULL },
  5.1885 +-    { V('\'','Y'), 1, "&Yacute;", NULL },
  5.1886 +-    { V('\'','a'), 1, "&aacute;", NULL },
  5.1887 +-    { V('\'','e'), 1, "&eacute;", NULL },
  5.1888 +-    { V('\'','i'), 1, "&iacute;", NULL },
  5.1889 +-    { V('\'','o'), 1, "&oacute;", NULL },
  5.1890 +-    { V('\'','u'), 1, "&uacute;", NULL },
  5.1891 +-    { V('\'','y'), 1, "&yacute;", NULL },
  5.1892 +-    { V('!','='), 1, "&ne;", NULL },
  5.1893 +-    { V('%','0'), 1, "&permil;", NULL },
  5.1894 +-    { V('+','-'), 1, "&plusmn;", NULL },
  5.1895 +-    { V(',','C'), 1, "&Ccedil;", NULL },
  5.1896 +-    { V(',','c'), 1, "&ccedil;", NULL },
  5.1897 +-    { V('-','>'), 1, "&rarr;", NULL },
  5.1898 +-    { V('-','D'), 1, "&ETH;", NULL },
  5.1899 +-    { V('.','i'), 1, "&#x131;", NULL },
  5.1900 +-    { V('/','L'), 1, "&#x141;", NULL },
  5.1901 +-    { V('/','O'), 1, "&Oslash;", NULL },
  5.1902 +-    { V('/','l'), 1, "&#x142;", NULL },
  5.1903 +-    { V('/','o'), 1, "&oslash;", NULL },
  5.1904 +-    { V('1','2'), 1, "&#189;", NULL  },
  5.1905 +-    { V('1','4'), 1, "&#188;", NULL  },
  5.1906 +-    { V('3','4'), 1, "&#190;", NULL  },
  5.1907 +-    { V(':','A'), 1, "&Auml;", NULL },
  5.1908 +-    { V(':','E'), 1, "&Euml;", NULL },
  5.1909 +-    { V(':','I'), 1, "&Iuml;", NULL },
  5.1910 +-    { V(':','O'), 1, "&Ouml;", NULL },
  5.1911 +-    { V(':','U'), 1, "&Uuml;", NULL },
  5.1912 +-    { V(':','a'), 1, "&auml;", NULL },
  5.1913 +-    { V(':','e'), 1, "&euml;", NULL },
  5.1914 +-    { V(':','i'), 1, "&iuml;", NULL },
  5.1915 +-    { V(':','o'), 1, "&ouml;", NULL },
  5.1916 +-    { V(':','u'), 1, "&uuml;", NULL },
  5.1917 +-    { V(':','y'), 1, "&yuml;", NULL },
  5.1918 +-    { V('<','-'), 1, "&larr;", NULL },
  5.1919 +-    { V('<','='), 1, "&le;", NULL },
  5.1920 +-    { V('<','>'), 1, "&harr;", NULL },
  5.1921 +-    { V('=','='), 1, "&equiv;", NULL },
  5.1922 +-    { V('=','~'), 1, "&cong;", NULL },
  5.1923 +-    { V('>','='), 1, "&ge;", NULL },
  5.1924 +-    { V('A','E'), 1, "&AElig;", NULL },
  5.1925 +-    { V('A','h'), 1, "&alepfsym;", NULL },
  5.1926 +-    { V('C','R'), 1, "&#x240d;", NULL },
  5.1927 +-    { V('C','s'), 1, "&curren;", NULL },
  5.1928 +-    { V('D','o'), 1, "$", NULL },
  5.1929 +-    { V('E','u'), 1, "&euro;", NULL },
  5.1930 +-    { V('F','c'), 1, "&raquo;", NULL  },
  5.1931 +-    { V('F','i'), 3, "ffi", NULL  },
  5.1932 +-    { V('F','l'), 3, "ffl", NULL  },
  5.1933 +-    { V('F','o'), 1, "&laquo;", NULL  },
  5.1934 +-    { V('O','E'), 1, "&OElig;", NULL },
  5.1935 +-    { V('P','o'), 1, "&pound;", NULL },
  5.1936 +-    { V('S','1'), 1, "&sup1;", NULL },
  5.1937 +-    { V('S','2'), 1, "&sup2;", NULL },
  5.1938 +-    { V('S','3'), 1, "&sup3;", NULL },
  5.1939 +-    { V('S','d'), 1, "&eth;", NULL },
  5.1940 +-    { V('T','P'), 1, "&THORN;", NULL },
  5.1941 +-    { V('T','p'), 1, "&thorn;", NULL },
  5.1942 +-    { V('Y','e'), 1, "&yen;", NULL },
  5.1943 +-    { V('^','A'), 1, "&Acirc;", NULL },
  5.1944 +-    { V('^','E'), 1, "&Ecirc;", NULL },
  5.1945 +-    { V('^','I'), 1, "&Icirc;", NULL },
  5.1946 +-    { V('^','O'), 1, "&Ocirc;", NULL },
  5.1947 +-    { V('^','U'), 1, "&Ucirc;", NULL },
  5.1948 +-    { V('^','a'), 1, "&acirc;", NULL },
  5.1949 +-    { V('^','e'), 1, "&ecirc;", NULL },
  5.1950 +-    { V('^','i'), 1, "&icirc;", NULL },
  5.1951 +-    { V('^','o'), 1, "&ocirc;", NULL },
  5.1952 +-    { V('^','u'), 1, "&ucirc;", NULL },
  5.1953 +-    { V('`','A'), 1, "&Agrave;", NULL },
  5.1954 +-    { V('`','E'), 1, "&Egrave;", NULL },
  5.1955 +-    { V('`','I'), 1, "&Igrave;", NULL },
  5.1956 +-    { V('`','O'), 1, "&Ograve;", NULL },
  5.1957 +-    { V('`','U'), 1, "&Ugrave;", NULL },
  5.1958 +-    { V('`','a'), 1, "&agrave;", NULL },
  5.1959 +-    { V('`','e'), 1, "&egrave;", NULL },
  5.1960 +-    { V('`','i'), 1, "&igrave;", NULL },
  5.1961 +-    { V('`','o'), 1, "&ograve;", NULL },
  5.1962 +-    { V('`','u'), 1, "&ugrave;", NULL },
  5.1963 +-    { V('a','a'), 1, "&acute;", NULL },
  5.1964 +-    { V('a','e'), 1, "&aelig;", NULL },
  5.1965 +-    { V('a','p'), 1, "&asymp;", NULL },
  5.1966 +-    { V('a','q'), 1, "'", NULL },
  5.1967 +-    { V('a','t'), 1, "@", NULL },
  5.1968 +-    { V('a','~'), 1, "~", NULL },
  5.1969 +-    { V('b','a'), 1, "|", NULL },
  5.1970 +-    { V('b','b'), 1, "|", NULL },
  5.1971 +-    { V('b','r'), 1, "|", NULL  },
  5.1972 +-    { V('b','r'), 1, "|", NULL },
  5.1973 +-    { V('b','u'), 1, "&bull;", NULL },
  5.1974 +-    { V('b','v'), 1, "|", NULL  },
  5.1975 +-    { V('c','*'), 1, "&otimes;", NULL },
  5.1976 +-    { V('c','+'), 1, "&oplus;", NULL },
  5.1977 +-    { V('c','i'), 1, "&#x25cb;", NULL },
  5.1978 +-    { V('c','o'), 1, "&#169;", NULL  },
  5.1979 +-    { V('c','q'), 1, "'", NULL },
  5.1980 +-    { V('c','t'), 1, "&#162;", NULL  },
  5.1981 +-    { V('d','A'), 1, "&dArr;", NULL },
  5.1982 +-    { V('d','a'), 1, "&darr;", NULL },
  5.1983 +-    { V('d','d'), 1, "=", NULL },
  5.1984 +-    { V('d','e'), 1, "&#176;", NULL  },
  5.1985 +-    { V('d','g'), 1, "-", NULL },
  5.1986 +-    { V('d','i'), 1, "&#247;", NULL  },
  5.1987 +-    { V('d','q'), 1, "&quot;", NULL  },
  5.1988 +-    { V('e','m'), 3, "---", NULL  }, 	/* em dash */
  5.1989 +-    { V('e','n'), 1, "-", NULL }, 	/* en dash */
  5.1990 +-    { V('e','q'), 1, "=", NULL },
  5.1991 +-    { V('e','s'), 1, "&#216;", NULL  },
  5.1992 +-    { V('e','u'), 1, "&euro;", NULL },
  5.1993 +-    { V('f','/'), 1, "&frasl;", NULL },
  5.1994 +-    { V('f','c'), 1, "&rsaquo;", NULL  },
  5.1995 +-    { V('f','f'), 2, "ff", NULL  },
  5.1996 +-    { V('f','i'), 2, "fi", NULL  },
  5.1997 +-    { V('f','l'), 2, "fl", NULL  },
  5.1998 +-    { V('f','m'), 1, "&#180;", NULL  },
  5.1999 +-    { V('f','o'), 1, "&lsaquo;", NULL  },
  5.2000 +-    { V('g','a'), 1, "`", NULL  },
  5.2001 +-    { V('h','A'), 1, "&hArr;", NULL },
  5.2002 +-    { V('h','y'), 1, "-", NULL  },
  5.2003 +-    { V('i','f'), 1, "&infin;", NULL },
  5.2004 +-    { V('i','s'), 8, "Integral", NULL }, /* integral sign */
  5.2005 +-    { V('l','A'), 1, "&lArr;", NULL },
  5.2006 +-    { V('l','B'), 1, "[", NULL },
  5.2007 +-    { V('l','C'), 1, "{", NULL },
  5.2008 +-    { V('l','a'), 1, "&lt;", NULL },
  5.2009 +-    { V('l','b'), 1, "[", NULL  },
  5.2010 +-    { V('l','c'), 2, "|&#175;", NULL  },
  5.2011 +-    { V('l','f'), 2, "|_", NULL  },
  5.2012 +-    { V('l','h'), 1, "&#x261a;", NULL },
  5.2013 +-    { V('l','k'), 1, "<FONT SIZE=\"+2\">{</FONT>", NULL  },
  5.2014 +-    { V('l','q'), 1, "\"", NULL },
  5.2015 +-    { V('l','z'), 1, "&loz;", NULL },
  5.2016 +-    { V('m','c'), 1, "&micro;", NULL },
  5.2017 +-    { V('m','i'), 1, "-", NULL  },
  5.2018 +-    { V('m','u'), 1, "&#215;", NULL  },
  5.2019 +-    { V('n','o'), 1, "&#172;", NULL  },
  5.2020 +-    { V('o','A'), 1, "&Aring;", NULL },
  5.2021 +-    { V('o','a'), 1, "&aring;", NULL },
  5.2022 +-    { V('o','e'), 1, "&oelig;", NULL },
  5.2023 +-    { V('o','q'), 1, "'", NULL },
  5.2024 +-    { V('o','r'), 1, "|", NULL },
  5.2025 +-    { V('p','d'), 1, "d", NULL }, 	/* partial derivative */
  5.2026 +-    { V('p','l'), 1, "+", NULL },
  5.2027 +-    { V('p','s'), 1, "&para;", NULL },
  5.2028 +-    { V('r','!'), 1, "&iexcl;", NULL },
  5.2029 +-    { V('r','?'), 1, "&iquest;", NULL },
  5.2030 +-    { V('r','A'), 1, "&rArr;", NULL },
  5.2031 +-    { V('r','B'), 1, "]", NULL },
  5.2032 +-    { V('r','C'), 1, "}", NULL },
  5.2033 +-    { V('r','a'), 1, "&gt;", NULL },
  5.2034 +-    { V('r','c'), 2, "&#175;|", NULL  },
  5.2035 +-    { V('r','f'), 2, "_|", NULL  },
  5.2036 +-    { V('r','g'), 1, "&#174;", NULL  },
  5.2037 +-    { V('r','h'), 1, "&#x261b;", NULL },
  5.2038 +-    { V('r','k'), 1, "<FONT SIZE=\"+2\">}</FONT>", NULL  },
  5.2039 +-    { V('r','n'), 1, "&#175;", NULL  },
  5.2040 +-    { V('r','q'), 1, "\"", NULL },
  5.2041 +-    { V('r','s'), 1, "\\", NULL },
  5.2042 +-    { V('r','u'), 1, "_", NULL },
  5.2043 +-    { V('s','c'), 1, "&#167;", NULL  },
  5.2044 +-    { V('s','h'), 1, "#", NULL },
  5.2045 +-    { V('s','l'), 1, "/", NULL },
  5.2046 +-    { V('s','q'), 1, "&#x25a1;", NULL },
  5.2047 +-    { V('s','s'), 1, "&szlig;", NULL },
  5.2048 +-    { V('t','f'), 1, "&there4;", NULL },
  5.2049 +-    { V('t','i'), 1, "~", NULL },
  5.2050 +-    { V('t','m'), 1, "&trade;", NULL },
  5.2051 +-    { V('t','s'), 1, "s", NULL }, 	/* should be terminal sigma */
  5.2052 +-    { V('u','A'), 1, "&uArr;", NULL },
  5.2053 +-    { V('u','a'), 1, "&uarr;", NULL },
  5.2054 +-    { V('u','l'), 1, "_", NULL },
  5.2055 +-    { V('~','A'), 1, "&Atilde;", NULL },
  5.2056 +-    { V('~','N'), 1, "&Ntilde;", NULL },
  5.2057 +-    { V('~','O'), 1, "&Otilde;", NULL },
  5.2058 +-    { V('~','a'), 1, "&atilde;", NULL },
  5.2059 +-    { V('~','n'), 1, "&ntilde;", NULL },
  5.2060 +-    { V('~','o'), 1, "&otilde;", NULL },
  5.2061 ++    { V('*','*'), 1, "∗", NULL },	/* asterisk */
  5.2062 ++    { V('*','A'), 1, "Α", NULL },	/* Alpha */
  5.2063 ++    { V('*','B'), 1, "Β", NULL },	/* Beta */
  5.2064 ++    { V('*','C'), 1, "Ξ", NULL },	/* Xi */
  5.2065 ++    { V('*','D'), 1, "Δ", NULL },	/* Delta */
  5.2066 ++    { V('*','E'), 1, "Ε", NULL },	/* Epsilon */
  5.2067 ++    { V('*','F'), 1, "Φ", NULL },	/* Phi */
  5.2068 ++    { V('*','G'), 1, "Γ", NULL },	/* Gamma */
  5.2069 ++    { V('*','H'), 1, "Θ", NULL },	/* Theta */
  5.2070 ++    { V('*','I'), 1, "Ι", NULL },	/* Iota */
  5.2071 ++    { V('*','K'), 1, "Κ", NULL },	/* Kappa */
  5.2072 ++    { V('*','L'), 1, "Λ", NULL },	/* Lambda */
  5.2073 ++    { V('*','M'), 1, "Μ", NULL },	/* Mu */
  5.2074 ++    { V('*','N'), 1, "Ν", NULL },	/* Nu */
  5.2075 ++    { V('*','O'), 1, "Ο", NULL },	/* Omicron */
  5.2076 ++    { V('*','P'), 1, "Π", NULL },	/* Pi */
  5.2077 ++    { V('*','Q'), 1, "Ψ", NULL },	/* Psi */
  5.2078 ++    { V('*','R'), 1, "Ρ", NULL },	/* Rho */
  5.2079 ++    { V('*','S'), 1, "Σ", NULL },	/* Sigma */
  5.2080 ++    { V('*','T'), 1, "Τ", NULL },	/* Tau */
  5.2081 ++    { V('*','U'), 1, "Υ", NULL },	/* Upsilon */
  5.2082 ++    { V('*','W'), 1, "Ω", NULL },	/* Omega */
  5.2083 ++    { V('*','X'), 1, "Χ", NULL },	/* Chi */
  5.2084 ++    { V('*','Y'), 1, "Η", NULL },	/* Eta */
  5.2085 ++    { V('*','Z'), 1, "Ζ", NULL },	/* Zeta */
  5.2086 ++    { V('*','a'), 1, "α", NULL },	/* alpha */
  5.2087 ++    { V('*','b'), 1, "β", NULL },	/* beta */
  5.2088 ++    { V('*','c'), 1, "ξ", NULL },	/* xi */
  5.2089 ++    { V('*','d'), 1, "δ", NULL },	/* delta */
  5.2090 ++    { V('*','e'), 1, "ε", NULL },	/* epsilon */
  5.2091 ++    { V('*','f'), 1, "φ", NULL },	/* phi */
  5.2092 ++    { V('*','g'), 1, "γ", NULL },	/* gamma */
  5.2093 ++    { V('*','h'), 1, "θ", NULL },	/* theta */
  5.2094 ++    { V('*','i'), 1, "ι", NULL },	/* iota */
  5.2095 ++    { V('*','k'), 1, "κ", NULL },	/* kappa */
  5.2096 ++    { V('*','l'), 1, "λ", NULL },	/* lambda */
  5.2097 ++    { V('*','m'), 1, "μ", NULL },	/* mu */
  5.2098 ++    { V('*','n'), 1, "ν", NULL },	/* nu */
  5.2099 ++    { V('*','o'), 1, "ο", NULL },	/* omicron */
  5.2100 ++    { V('*','p'), 1, "π", NULL },	/* pi */
  5.2101 ++    { V('*','q'), 1, "ψ", NULL },	/* psi */
  5.2102 ++    { V('*','r'), 1, "ρ", NULL },	/* rho */
  5.2103 ++    { V('*','s'), 1, "σ", NULL },	/* sigma */
  5.2104 ++    { V('*','t'), 1, "τ", NULL },	/* tau */
  5.2105 ++    { V('*','u'), 1, "υ", NULL },	/* upsilon */
  5.2106 ++    { V('*','w'), 1, "ω", NULL },	/* omega */
  5.2107 ++    { V('*','x'), 1, "χ", NULL },	/* chi */
  5.2108 ++    { V('*','y'), 1, "η", NULL },	/* eta */
  5.2109 ++    { V('*','z'), 1, "ζ", NULL },	/* zeta */
  5.2110 ++    { V('\'','A'), 1, "Á", NULL },	/* acute A */
  5.2111 ++    { V('\'','E'), 1, "É", NULL },	/* acute E */
  5.2112 ++    { V('\'','I'), 1, "Í", NULL },	/* acute I */
  5.2113 ++    { V('\'','O'), 1, "Ó", NULL },	/* acute O */
  5.2114 ++    { V('\'','U'), 1, "Ú", NULL },	/* acute U */
  5.2115 ++    { V('\'','Y'), 1, "Ý", NULL },	/* Yacute (*) */
  5.2116 ++    { V('\'','a'), 1, "á", NULL },	/* acute a */
  5.2117 ++    { V('\'','e'), 1, "é", NULL },	/* acute e */
  5.2118 ++    { V('\'','i'), 1, "í", NULL },	/* acute i */
  5.2119 ++    { V('\'','o'), 1, "ó", NULL },	/* acute o */
  5.2120 ++    { V('\'','u'), 1, "ú", NULL },	/* acute u */
  5.2121 ++    { V('\'','y'), 1, "ý", NULL },	/* yacute (*) */
  5.2122 ++    { V('!','='), 1, "≠", NULL },	/* not equal */
  5.2123 ++    { V('%','0'), 1, "‰", NULL },	/* per-thousand */
  5.2124 ++    { V('+','-'), 1, "±", NULL },	/* plus-minus */
  5.2125 ++    { V('+','e'), 1, "ϵ", NULL },	/* epsilon variant */
  5.2126 ++    { V('+','f'), 1, "φ", NULL },	/* phi variant */
  5.2127 ++    { V('+','h'), 1, "ϑ", NULL },	/* theta variant */
  5.2128 ++    { V('+','p'), 1, "ϖ", NULL },	/* pi variant */
  5.2129 ++    { V(',','C'), 1, "Ç", NULL },	/* cedilla C */
  5.2130 ++    { V(',','c'), 1, "ç", NULL },	/* cedilla c */
  5.2131 ++    { V('-','+'), 1, "∓", NULL },	/* minus-plus */
  5.2132 ++    { V('-','>'), 1, "→", NULL },	/* right arrow */
  5.2133 ++    { V('-','D'), 1, "Ð", NULL },	/* Eth */
  5.2134 ++    { V('-','h'), 1, "ℏ", NULL },	/* Planck constant over 2π */
  5.2135 ++    { V('.','i'), 1, "ı", NULL },	/* dotless i */
  5.2136 ++    { V('.','j'), 1, "ȷ", NULL },	/* dotless j */
  5.2137 ++    { V('/','L'), 1, "Ł", NULL },	/* stroke L */
  5.2138 ++    { V('/','O'), 1, "Ø", NULL },	/* stroke O */
  5.2139 ++    { V('/','_'), 1, "∠", NULL },	/* angle */
  5.2140 ++    { V('/','l'), 1, "ł", NULL },	/* stroke l */
  5.2141 ++    { V('/','o'), 1, "ø", NULL },	/* stroke o */
  5.2142 ++    { V('1','2'), 1, "½", NULL },	/* 1/2 (*) */
  5.2143 ++    { V('1','4'), 1, "¼", NULL },	/* 1/4 (*) */
  5.2144 ++    { V('3','4'), 1, "¾", NULL },	/* 3/4 (*) */
  5.2145 ++    { V('3','d'), 1, "∴", NULL },	/* therefore */
  5.2146 ++    { V(':','A'), 1, "Ä", NULL },	/* dieresis A */
  5.2147 ++    { V(':','E'), 1, "Ë", NULL },	/* dieresis E */
  5.2148 ++    { V(':','I'), 1, "Ï", NULL },	/* dieresis I */
  5.2149 ++    { V(':','O'), 1, "Ö", NULL },	/* dieresis O */
  5.2150 ++    { V(':','U'), 1, "Ü", NULL },	/* dieresis U */
  5.2151 ++    { V(':','a'), 1, "ä", NULL },	/* dieresis a */
  5.2152 ++    { V(':','e'), 1, "ë", NULL },	/* dieresis e */
  5.2153 ++    { V(':','i'), 1, "ï", NULL },	/* dieresis i */
  5.2154 ++    { V(':','o'), 1, "ö", NULL },	/* dieresis o */
  5.2155 ++    { V(':','u'), 1, "ü", NULL },	/* dieresis u */
  5.2156 ++    { V(':','y'), 1, "ÿ", NULL },	/* dieresis y */
  5.2157 ++    { V('<','-'), 1, "←", NULL },	/* left arrow */
  5.2158 ++    { V('<','<'), 1, "≪", NULL },	/* much less */
  5.2159 ++    { V('<','='), 1, "≤", NULL },	/* less-than-equal */
  5.2160 ++    { V('<','>'), 1, "↔", NULL },	/* left-right arrow */
  5.2161 ++    { V('=','='), 1, "≡", NULL },	/* equivalent */
  5.2162 ++    { V('=','~'), 1, "≅", NULL },	/* approximately equal */
  5.2163 ++    { V('>','='), 1, "≥", NULL },	/* greater-than-equal */
  5.2164 ++    { V('>','>'), 1, "≫", NULL },	/* much greater */
  5.2165 ++    { V('A','E'), 1, "Æ", NULL },	/* AE ligature */
  5.2166 ++    { V('A','N'), 1, "∧", NULL },	/* logical and */
  5.2167 ++    { V('A','h'), 1, "ℵ", NULL },	/* aleph */
  5.2168 ++    { V('B','q'), 1, "„", NULL },	/* right low double-quote */
  5.2169 ++    { V('C','R'), 1, "↵", NULL },	/* carriage return */
  5.2170 ++    { V('C','s'), 1, "¤", NULL },	/* Scandinavian */
  5.2171 ++    { V('D','o'), 1, "$", NULL },	/* dollar */
  5.2172 ++    { V('E','u'), 1, "€", NULL },	/* Euro symbol */
  5.2173 ++    { V('F','c'), 1, "»", NULL },	/* right guillemet */
  5.2174 ++    { V('F','i'), 1, "ffi", NULL },	/* ffi ligature */
  5.2175 ++    { V('F','l'), 1, "ffl", NULL },	/* ffl ligature */
  5.2176 ++    { V('F','n'), 1, "ƒ", NULL },	/* florin */
  5.2177 ++    { V('F','o'), 1, "«", NULL },	/* left guillemet */
  5.2178 ++    { V('I','J'), 1, "IJ", NULL },	/* IJ ligature */
  5.2179 ++    { V('I','m'), 1, "ℑ", NULL },	/* imaginary */
  5.2180 ++    { V('O','E'), 1, "Œ", NULL },	/* OE ligature */
  5.2181 ++    { V('O','K'), 1, "✓", NULL },	/* check mark */
  5.2182 ++    { V('O','R'), 1, "∨", NULL },	/* logical or */
  5.2183 ++    { V('P','o'), 1, "£", NULL },	/* pound */
  5.2184 ++    { V('R','e'), 1, "ℜ", NULL },	/* real */
  5.2185 ++    { V('S','1'), 1, "¹", NULL },	/* sup1 (*) */
  5.2186 ++    { V('S','2'), 1, "²", NULL },	/* sup2 (*) */
  5.2187 ++    { V('S','3'), 1, "³", NULL },	/* sup3 (*) */
  5.2188 ++    { V('S','d'), 1, "ð", NULL },	/* eth */
  5.2189 ++    { V('T','P'), 1, "Þ", NULL },	/* Thorn */
  5.2190 ++    { V('T','p'), 1, "þ", NULL },	/* thorn */
  5.2191 ++    { V('Y','e'), 1, "¥", NULL },	/* yen */
  5.2192 ++    { V('^','A'), 1, "Â", NULL },	/* circumflex A */
  5.2193 ++    { V('^','E'), 1, "Ê", NULL },	/* circumflex E */
  5.2194 ++    { V('^','I'), 1, "Î", NULL },	/* circumflex I */
  5.2195 ++    { V('^','O'), 1, "Ô", NULL },	/* circumflex O */
  5.2196 ++    { V('^','U'), 1, "Û", NULL },	/* circumflex U */
  5.2197 ++    { V('^','a'), 1, "â", NULL },	/* circumflex a */
  5.2198 ++    { V('^','e'), 1, "ê", NULL },	/* circumflex e */
  5.2199 ++    { V('^','i'), 1, "î", NULL },	/* circumflex i */
  5.2200 ++    { V('^','o'), 1, "ô", NULL },	/* circumflex o */
  5.2201 ++    { V('^','u'), 1, "û", NULL },	/* circumflex u */
  5.2202 ++    { V('`','A'), 1, "À", NULL },	/* grave A */
  5.2203 ++    { V('`','E'), 1, "È", NULL },	/* grave E */
  5.2204 ++    { V('`','I'), 1, "Ì", NULL },	/* grave I */
  5.2205 ++    { V('`','O'), 1, "Ò", NULL },	/* grave O */
  5.2206 ++    { V('`','U'), 1, "Ù", NULL },	/* grave U */
  5.2207 ++    { V('`','a'), 1, "à", NULL },	/* grave a */
  5.2208 ++    { V('`','e'), 1, "è", NULL },	/* grave e */
  5.2209 ++    { V('`','i'), 1, "ì", NULL },	/* grave i */
  5.2210 ++    { V('`','o'), 1, "ò", NULL },	/* grave o */
  5.2211 ++    { V('`','u'), 1, "ù", NULL },	/* grave u */
  5.2212 ++    { V('a','"'), 1, "˝", NULL },	/* Hungarian umlaut */
  5.2213 ++    { V('a','-'), 1, "¯", NULL },	/* macron */
  5.2214 ++    { V('a','.'), 1, "˙", NULL },	/* dotted */
  5.2215 ++    { V('a','^'), 1, "^", NULL },	/* circumflex */
  5.2216 ++    { V('a','a'), 1, "´", NULL },	/* acute */
  5.2217 ++    { V('a','b'), 1, "˘", NULL },	/* breve */
  5.2218 ++    { V('a','c'), 1, "¸", NULL },	/* cedilla */
  5.2219 ++    { V('a','d'), 1, "¨", NULL },	/* dieresis */
  5.2220 ++    { V('a','e'), 1, "æ", NULL },	/* ae ligature */
  5.2221 ++    { V('a','h'), 1, "ˇ", NULL },	/* caron */
  5.2222 ++    { V('a','o'), 1, "˚", NULL },	/* ring */
  5.2223 ++    { V('a','p'), 1, "∼", NULL },	/* tilde operator */
  5.2224 ++    { V('a','q'), 1, "'", NULL },	/* apostrophe quote (text) */
  5.2225 ++    { V('a','t'), 1, "@", NULL },	/* at */
  5.2226 ++    { V('a','~'), 1, "~", NULL },	/* tilde */
  5.2227 ++    { V('b','a'), 1, "|", NULL },	/* bar */
  5.2228 ++    { V('b','b'), 1, "¦", NULL },	/* broken bar */
  5.2229 ++    { V('b','r'), 1, "│", NULL },	/* box rule */
  5.2230 ++    { V('b','q'), 1, "‚", NULL },	/* right low single-quote */
  5.2231 ++    { V('b','u'), 1, "•", NULL },	/* bullet */
  5.2232 ++    { V('b','v'), 1, "⎪", NULL },	/* brace extension */
  5.2233 ++    { V('c','*'), 1, "⊗", NULL },	/* circle-multiply */
  5.2234 ++    { V('c','+'), 1, "⊕", NULL },	/* circle-plus */
  5.2235 ++    { V('c','a'), 1, "∩", NULL },	/* intersection */
  5.2236 ++    { V('c','i'), 1, "○", NULL },	/* circle */
  5.2237 ++    { V('c','o'), 1, "©", NULL },	/* copyright */
  5.2238 ++    { V('c','q'), 1, "’", NULL },	/* right single-quote */
  5.2239 ++    { V('c','t'), 1, "¢", NULL },	/* cent */
  5.2240 ++    { V('c','u'), 1, "∪", NULL },	/* union */
  5.2241 ++    { V('d','A'), 1, "⇓", NULL },	/* down double-arrow */
  5.2242 ++    { V('d','a'), 1, "↓", NULL },	/* down arrow */
  5.2243 ++    { V('d','d'), 1, "‡", NULL },	/* double dagger */
  5.2244 ++    { V('d','e'), 1, "°", NULL },	/* degree */
  5.2245 ++    { V('d','g'), 1, "†", NULL },	/* dagger */
  5.2246 ++    { V('d','i'), 1, "÷", NULL },	/* divide */
  5.2247 ++    { V('d','q'), 1, "\"", NULL },	/* double quote (text) */
  5.2248 ++    { V('e','m'), 1, "—", NULL },	/* em-dash */
  5.2249 ++    { V('e','n'), 1, "–", NULL },	/* en-dash */
  5.2250 ++    { V('e','q'), 1, "=", NULL },	/* equal */
  5.2251 ++    { V('e','s'), 1, "∅", NULL },	/* empty set */
  5.2252 ++    { V('e','u'), 1, "€", NULL },	/* Euro symbol */
  5.2253 ++    { V('f','/'), 1, "⁄", NULL },	/* fraction */
  5.2254 ++    { V('f','a'), 1, "∀", NULL },	/* universal quantifier */
  5.2255 ++    { V('f','c'), 1, "›", NULL },	/* right single guillemet */
  5.2256 ++    { V('f','f'), 1, "ff", NULL },	/* ff ligature */
  5.2257 ++    { V('f','i'), 1, "fi", NULL },	/* fi ligature */
  5.2258 ++    { V('f','l'), 1, "fl", NULL },	/* fl ligature */
  5.2259 ++    { V('f','m'), 1, "′", NULL },	/* minute */
  5.2260 ++    { V('f','o'), 1, "‹", NULL },	/* left single guillemet */
  5.2261 ++    { V('g','a'), 1, "`", NULL },	/* grave */
  5.2262 ++    { V('g','r'), 1, "∇", NULL },	/* gradient */
  5.2263 ++    { V('h','A'), 1, "⇔", NULL },	/* left-right double-arrow */
  5.2264 ++    { V('h','a'), 1, "^", NULL },	/* hat (text) */
  5.2265 ++    { V('h','o'), 1, "˛", NULL },	/* ogonek */
  5.2266 ++    { V('h','y'), 1, "‐", NULL },	/* hyphen */
  5.2267 ++    { V('i','b'), 1, "⊆", NULL },	/* reflexive subset */
  5.2268 ++    { V('i','f'), 1, "∞", NULL },	/* infinity */
  5.2269 ++    { V('i','j'), 1, "ij", NULL },	/* ij ligature */
  5.2270 ++    { V('i','p'), 1, "⊇", NULL },	/* reflexive superset */
  5.2271 ++    { V('i','s'), 1, "∫", NULL },	/* integral */
  5.2272 ++    { V('l','A'), 1, "⇐", NULL },	/* left double-arrow */
  5.2273 ++    { V('l','B'), 1, "[", NULL },	/* left bracket */
  5.2274 ++    { V('l','C'), 1, "{", NULL },	/* left brace */
  5.2275 ++    { V('l','a'), 1, "⟨", NULL },	/* left angle */
  5.2276 ++    { V('l','b'), 1, "⎩", NULL },	/* bottom-left hooked brace */
  5.2277 ++    { V('l','c'), 1, "⌈", NULL },	/* left-ceiling */
  5.2278 ++    { V('l','f'), 1, "⌊", NULL },	/* left-floor */
  5.2279 ++    { V('l','h'), 1, "☜", NULL },	/* left hand */
  5.2280 ++    { V('l','k'), 1, "⎨", NULL },	/* mid-left hooked brace */
  5.2281 ++    { V('l','q'), 1, "“", NULL },	/* left double-quote */
  5.2282 ++    { V('l','t'), 1, "⎧", NULL },	/* top-left hooked brace */
  5.2283 ++    { V('l','z'), 1, "◊", NULL },	/* lozenge */
  5.2284 ++    { V('m','c'), 1, "µ", NULL },	/* micro */
  5.2285 ++    { V('m','i'), 1, "−", NULL },	/* minus */
  5.2286 ++    { V('m','o'), 1, "∈", NULL },	/* element */
  5.2287 ++    { V('m','u'), 1, "×", NULL },	/* multiply */
  5.2288 ++    { V('n','b'), 1, "⊄", NULL },	/* not subset */
  5.2289 ++    { V('n','c'), 1, "⊅", NULL },	/* not superset */
  5.2290 ++    { V('n','e'), 1, "≢", NULL },	/* not equivalent */
  5.2291 ++    { V('n','m'), 1, "∉", NULL },	/* not element */
  5.2292 ++    { V('n','o'), 1, "¬", NULL },	/* logical not */
  5.2293 ++    { V('o','A'), 1, "Å", NULL },	/* ring A */
  5.2294 ++    { V('o','a'), 1, "å", NULL },	/* ring a */
  5.2295 ++    { V('o','e'), 1, "œ", NULL },	/* oe ligature */
  5.2296 ++    { V('o','q'), 1, "‘", NULL },	/* left single-quote */
  5.2297 ++    { V('o','r'), 1, "|", NULL },	/* bitwise or */
  5.2298 ++    { V('p','c'), 1, "·", NULL },	/* center-dot */
  5.2299 ++    { V('p','d'), 1, "∂", NULL },	/* partial differential */
  5.2300 ++    { V('p','l'), 1, "+", NULL },	/* plus */
  5.2301 ++    { V('p','p'), 1, "⊥", NULL },	/* perpendicular */
  5.2302 ++    { V('p','s'), 1, "¶", NULL },	/* paragraph */
  5.2303 ++    { V('p','t'), 1, "∝", NULL },	/* proportionate */
  5.2304 ++    { V('r','!'), 1, "¡", NULL },	/* upside-down exclamation */
  5.2305 ++    { V('r','?'), 1, "¿", NULL },	/* upside-down question */
  5.2306 ++    { V('r','A'), 1, "⇒", NULL },	/* right double-arrow */
  5.2307 ++    { V('r','B'), 1, "]", NULL },	/* right bracket */
  5.2308 ++    { V('r','C'), 1, "}", NULL },	/* right brace */
  5.2309 ++    { V('r','a'), 1, "⟩", NULL },	/* right angle */
  5.2310 ++    { V('r','b'), 1, "⎭", NULL },	/* bottom-right hooked brace */
  5.2311 ++    { V('r','c'), 1, "⌉", NULL },	/* right-ceiling */
  5.2312 ++    { V('r','f'), 1, "⌋", NULL },	/* right-floor */
  5.2313 ++    { V('r','g'), 1, "®", NULL },	/* registered */
  5.2314 ++    { V('r','h'), 1, "☞", NULL },	/* right hand */
  5.2315 ++    { V('r','k'), 1, "⎬", NULL },	/* mid-right hooked brace */
  5.2316 ++    { V('r','l'), 1, "‾", NULL },	/* overline */
  5.2317 ++    { V('r','n'), 1, "‾", NULL },	/* overline */
  5.2318 ++    { V('r','q'), 1, "”", NULL },	/* right double-quote */
  5.2319 ++    { V('r','s'), 1, "\\", NULL },	/* backward slash */
  5.2320 ++    { V('r','t'), 1, "⎫", NULL },	/* top-left hooked brace */
  5.2321 ++    { V('r','u'), 1, "_", NULL },	/* (*) */
  5.2322 ++    { V('s','b'), 1, "⊂", NULL },	/* proper subset */
  5.2323 ++    { V('s','c'), 1, "§", NULL },	/* section */
  5.2324 ++    { V('s','d'), 1, "″", NULL },	/* second */
  5.2325 ++    { V('s','h'), 1, "#", NULL },	/* hash (pound) */
  5.2326 ++    { V('s','l'), 1, "/", NULL },	/* forward slash */
  5.2327 ++    { V('s','p'), 1, "⊃", NULL },	/* proper superset */
  5.2328 ++    { V('s','q'), 1, "□", NULL },	/* white square */
  5.2329 ++    { V('s','r'), 1, "√", NULL },	/* square root */
  5.2330 ++    { V('s','s'), 1, "ß", NULL },	/* German eszett */
  5.2331 ++    { V('s','t'), 1, "∋", NULL },	/* such that */
  5.2332 ++    { V('t','e'), 1, "∃", NULL },	/* existential quantifier */
  5.2333 ++    { V('t','f'), 1, "∴", NULL },	/* therefore */
  5.2334 ++    { V('t','i'), 1, "~", NULL },	/* tilde (text) */
  5.2335 ++    { V('t','m'), 1, "™", NULL },	/* trademarked */
  5.2336 ++    { V('t','s'), 1, "ς", NULL },	/* sigma terminal */
  5.2337 ++    { V('u','A'), 1, "⇑", NULL },	/* up double-arrow */
  5.2338 ++    { V('u','a'), 1, "↑", NULL },	/* up arrow */
  5.2339 ++    { V('u','l'), 1, "_", NULL },	/* underscore */
  5.2340 ++    { V('v','A'), 1, "⇕", NULL },	/* up-down double-arrow */
  5.2341 ++    { V('v','a'), 1, "↕", NULL },	/* up-down arrow */
  5.2342 ++    { V('|','='), 1, "≃", NULL },	/* asymptotically equal */
  5.2343 ++    { V('~','='), 1, "≈", NULL },	/* almost equal */
  5.2344 ++    { V('~','A'), 1, "Ã", NULL },	/* tilde A */
  5.2345 ++    { V('~','N'), 1, "Ñ", NULL },	/* tilde N */
  5.2346 ++    { V('~','O'), 1, "Õ", NULL },	/* tilde O */
  5.2347 ++    { V('~','a'), 1, "ã", NULL },	/* tilde a */
  5.2348 ++    { V('~','n'), 1, "ñ", NULL },	/* tilde n */
  5.2349 ++    { V('~','o'), 1, "õ", NULL },	/* tilde o */
  5.2350 ++    { V('~','~'), 1, "≈", NULL },	/* almost equal */
  5.2351 +     { 0, 0, NULL, NULL  }
  5.2352 +-
  5.2353 +-    
  5.2354 + };
  5.2355 + 
  5.2356 + void stdinit(void) {
  5.2357 +--- /dev/null
  5.2358 ++++ b/version.h
  5.2359 +@@ -0,0 +1 @@
  5.2360 ++#define version "1.6g-7-slitaz"
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/man2html/stuff/ru.po	Fri Jan 22 17:24:34 2016 +0200
     6.3 @@ -0,0 +1,430 @@
     6.4 +# SOME DESCRIPTIVE TITLE.
     6.5 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
     6.6 +# This file is distributed under the same license as the PACKAGE package.
     6.7 +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
     6.8 +#
     6.9 +msgid ""
    6.10 +msgstr ""
    6.11 +"Project-Id-Version: man2html\n"
    6.12 +"Report-Msgid-Bugs-To: \n"
    6.13 +"POT-Creation-Date: 2016-01-18 22:36+0200\n"
    6.14 +"PO-Revision-Date: 2016-01-18 22:41+0200\n"
    6.15 +"Last-Translator: Aleksej Bobylev <al.bobylev@gmail.com>\n"
    6.16 +"Language-Team: \n"
    6.17 +"Language: ru\n"
    6.18 +"MIME-Version: 1.0\n"
    6.19 +"Content-Type: text/plain; charset=UTF-8\n"
    6.20 +"Content-Transfer-Encoding: 8bit\n"
    6.21 +"X-Generator: Poedit 1.8.6\n"
    6.22 +"X-Poedit-SourceCharset: UTF-8\n"
    6.23 +
    6.24 +#: cgibase.c:76
    6.25 +msgid "This document was created by <b>man2html</b> using the manual pages."
    6.26 +msgstr "Этот документ создан <b>man2html</b> из страницы руководства."
    6.27 +
    6.28 +#: cgibase.c:88
    6.29 +msgid "Return to Main Contents"
    6.30 +msgstr "Вернуться на главную"
    6.31 +
    6.32 +#: man2html.c:141
    6.33 +msgid "chardef corrupted"
    6.34 +msgstr "chardef поврежден"
    6.35 +
    6.36 +#: man2html.c:1374
    6.37 +#, c-format
    6.38 +msgid "man2html: Unknown operator %c.\n"
    6.39 +msgstr "man2html: неизвестный оператор %c.\n"
    6.40 +
    6.41 +#: man2html.c:1462 man2html.c:1463 man2html.c:1464 man2html.c:1465
    6.42 +#: man2html.c:1466 man.sh:16
    6.43 +msgid "User Commands"
    6.44 +msgstr "Команды пользователя"
    6.45 +
    6.46 +#: man2html.c:1467 man2html.c:1468 man.sh:16
    6.47 +msgid "System Calls"
    6.48 +msgstr "Системные вызовы"
    6.49 +
    6.50 +#: man2html.c:1469 man2html.c:1478 man.sh:16
    6.51 +msgid "C Library Functions"
    6.52 +msgstr "Библиотечные функции C"
    6.53 +
    6.54 +#: man2html.c:1470
    6.55 +msgid "Compatibility Functions"
    6.56 +msgstr "Функции совместимости"
    6.57 +
    6.58 +#: man2html.c:1471
    6.59 +msgid "Fortran Library Routines"
    6.60 +msgstr "Библиотечные подпрограммы Fortran"
    6.61 +
    6.62 +#: man2html.c:1472
    6.63 +msgid "Kernel VM Library Functions"
    6.64 +msgstr "Библиотечные функции Kernel VM"
    6.65 +
    6.66 +#: man2html.c:1473
    6.67 +msgid "Lightweight Processes Library"
    6.68 +msgstr "Библиотека легковесных процессов"
    6.69 +
    6.70 +#: man2html.c:1474
    6.71 +msgid "Mathematical Library"
    6.72 +msgstr "Математическая библиотека"
    6.73 +
    6.74 +#: man2html.c:1475
    6.75 +msgid "Network Functions"
    6.76 +msgstr "Сетевые функции"
    6.77 +
    6.78 +#: man2html.c:1476
    6.79 +msgid "RPC Services Library"
    6.80 +msgstr "Библиотека сервисов RPC"
    6.81 +
    6.82 +#: man2html.c:1477
    6.83 +msgid "Standard I/O Functions"
    6.84 +msgstr "Стандартные функции ввода-вывода"
    6.85 +
    6.86 +#: man2html.c:1479
    6.87 +msgid "Miscellaneous Library Functions"
    6.88 +msgstr "Разнообразные библиотечные функции"
    6.89 +
    6.90 +#: man2html.c:1480 man2html.c:1482 man2html.c:1483 man2html.c:1484
    6.91 +#: man2html.c:1486 man2html.c:1487 man.sh:17
    6.92 +msgid "Devices and Network Interfaces"
    6.93 +msgstr "Устройства и сетевые интерфейсы"
    6.94 +
    6.95 +#: man2html.c:1481
    6.96 +msgid "Protocol Families"
    6.97 +msgstr "Семейства протоколов"
    6.98 +
    6.99 +#: man2html.c:1485
   6.100 +msgid "Protocols"
   6.101 +msgstr "Протоколы"
   6.102 +
   6.103 +#: man2html.c:1488 man2html.c:1489 man.sh:17
   6.104 +msgid "File Formats"
   6.105 +msgstr "Форматы файлов"
   6.106 +
   6.107 +#: man2html.c:1490 man.sh:18
   6.108 +msgid "Games and Demos"
   6.109 +msgstr "Игры и демо"
   6.110 +
   6.111 +#: man2html.c:1491 man2html.c:1492 man.sh:18
   6.112 +msgid "Environments, Tables, and Troff Macros"
   6.113 +msgstr "Окружение, таблицы и макросы Troff"
   6.114 +
   6.115 +#: man2html.c:1493 man2html.c:1494 man2html.c:1495 man2html.c:1496 man.sh:19
   6.116 +msgid "Maintenance Commands"
   6.117 +msgstr "Команды обслуживания"
   6.118 +
   6.119 +#: man2html.c:1497
   6.120 +msgid "Local Commands"
   6.121 +msgstr "Локальные команды"
   6.122 +
   6.123 +#: man2html.c:1566
   6.124 +msgid "Misc. Reference Manual Pages"
   6.125 +msgstr "Разнообразные справочные руководства"
   6.126 +
   6.127 +#: man2html.c:2010
   6.128 +#, c-format
   6.129 +msgid "man2html: unable to open or read file %s\n"
   6.130 +msgstr "man2html: не удалось открыть или прочитать файл %s\n"
   6.131 +
   6.132 +#: man2html.c:2012
   6.133 +msgid "man2html: unable to open or read file\n"
   6.134 +msgstr "man2html: не удалось открыть или прочитать файл\n"
   6.135 +
   6.136 +#: man2html.c:2293
   6.137 +#, c-format
   6.138 +msgid "Man page of %s"
   6.139 +msgstr "Страница руководства %s"
   6.140 +
   6.141 +#: man2html.c:2299
   6.142 +msgid "Section: "
   6.143 +msgstr "Раздел: "
   6.144 +
   6.145 +#: man2html.c:2308
   6.146 +msgid "Updated: "
   6.147 +msgstr "Обновлено: "
   6.148 +
   6.149 +#: man2html.c:2312 man2html.c:3375
   6.150 +msgid "Index"
   6.151 +msgstr "Оглавление"
   6.152 +
   6.153 +#: man2html.c:3208 man2html.c:3217 man2html.c:3226
   6.154 +msgid "Out of memory"
   6.155 +msgstr "Недостаточно памяти"
   6.156 +
   6.157 +#: man2html.c:3209 man2html.c:3218 man2html.c:3227
   6.158 +msgid "Sorry, out of memory, aborting...\n"
   6.159 +msgstr "К сожалению, недостаточно памяти, завершение…\n"
   6.160 +
   6.161 +#: man2html.c:3233
   6.162 +msgid "man2html: bad invocation"
   6.163 +msgstr "man2html: плохой вызов"
   6.164 +
   6.165 +#: man2html.c:3234
   6.166 +msgid ""
   6.167 +"Call: man2html [-l|-h host.domain:port] [-p|-q] [filename]\n"
   6.168 +"or:   man2html -r [filename]\n"
   6.169 +msgstr ""
   6.170 +"Вызов: man2html [-l|-h хост.домен:порт] [-p|-q] [имя_файла]\n"
   6.171 +"или:   man2html -r [имя_файла]\n"
   6.172 +
   6.173 +#: man2html.c:3258 man2html.c:3299
   6.174 +msgid "Error"
   6.175 +msgstr "Ошибка"
   6.176 +
   6.177 +#: man2html.c:3258
   6.178 +#, c-format
   6.179 +msgid "man2html: could not chdir to %s"
   6.180 +msgstr "man2html: не удалось перейти в папку %s"
   6.181 +
   6.182 +#: man2html.c:3352
   6.183 +msgid "File not found"
   6.184 +msgstr "Файл не найден"
   6.185 +
   6.186 +#: man2html.c:3352
   6.187 +#, c-format
   6.188 +msgid "Could not open %s\n"
   6.189 +msgstr "Не удалось открыть %s\n"
   6.190 +
   6.191 +#: man2html.c:3387 man2html.c:3394
   6.192 +msgid "Invalid Man Page"
   6.193 +msgstr "Недопустимая страница руководства"
   6.194 +
   6.195 +#: man2html.c:3388
   6.196 +#, c-format
   6.197 +msgid ""
   6.198 +"The requested file %s is not a valid (unformatted) man page.\n"
   6.199 +"If the file is a formatted man page, you could try to load the\n"
   6.200 +"<a href=\"file://%s\">plain file</a>.\n"
   6.201 +msgstr ""
   6.202 +"Запрошенный файл %s не является допустимой (неформатированной) страницей "
   6.203 +"руководства.\n"
   6.204 +"В случае, если этот файл является форматированной страницей, вы можете "
   6.205 +"попробовать загрузить ее как\n"
   6.206 +"<a href=\"file://%s\">обычный файл</a>.\n"
   6.207 +
   6.208 +#: man2html.c:3395
   6.209 +#, c-format
   6.210 +msgid "The requested file %s is not a valid (unformatted) man page."
   6.211 +msgstr ""
   6.212 +"Запрошенный файл %s не является допустимой (неформатированной) страницей "
   6.213 +"руководства."
   6.214 +
   6.215 +#: hman.sh:87
   6.216 +msgid "bad number of args"
   6.217 +msgstr "плохое количество аргументов"
   6.218 +
   6.219 +#: man.sh:19
   6.220 +msgid "All available manual pages"
   6.221 +msgstr "Все доступные страницы руководства"
   6.222 +
   6.223 +#: man.sh:52
   6.224 +msgid "Section %s: %s"
   6.225 +msgstr "Раздел %s: %s"
   6.226 +
   6.227 +#: man.sh:53
   6.228 +msgid "Manual Pages"
   6.229 +msgstr "Страницы руководства"
   6.230 +
   6.231 +#: man.sh:58
   6.232 +msgid ""
   6.233 +"Section 1 of the manual describes user commands and tools, for example, file "
   6.234 +"manipulation tools, shells, compilers, web browsers, file and image viewers "
   6.235 +"and editors, and so on."
   6.236 +msgstr ""
   6.237 +"Раздел 1 руководства описывает пользовательские команды и инструменты, такие "
   6.238 +"как команды для работы с файлами, оболочки, компиляторы, браузеры, программы "
   6.239 +"для просмотра и редактирования файлов и графики, и так далее."
   6.240 +
   6.241 +#: man.sh:61
   6.242 +msgid ""
   6.243 +"Section 2 of the manual describes the Linux system calls. A system call is "
   6.244 +"an entry point into the Linux kernel."
   6.245 +msgstr ""
   6.246 +"Раздел 2 руководства описывает системные вызовы Linux. Системный вызов "
   6.247 +"является точкой входа в ядро Linux."
   6.248 +
   6.249 +#: man.sh:63
   6.250 +msgid ""
   6.251 +"Section 3 of the manual describes all library functions excluding the "
   6.252 +"library functions (system call wrappers) described in Section 2, which "
   6.253 +"implement system calls."
   6.254 +msgstr ""
   6.255 +"Раздел 3 руководства описывает все библиотечные функции кроме библиотечных "
   6.256 +"функций (оберток системных вызовов), описанных в разделе 2, которые "
   6.257 +"реализуют системные вызовы."
   6.258 +
   6.259 +#: man.sh:65
   6.260 +msgid "Section 4 of the manual describes special files (devices)."
   6.261 +msgstr "Раздел 4 руководства описывает специальные файлы (устройства)."
   6.262 +
   6.263 +#: man.sh:66
   6.264 +msgid ""
   6.265 +"Section 5 of the manual describes various file formats, as well as the "
   6.266 +"corresponding C structures, if any."
   6.267 +msgstr ""
   6.268 +"Раздел 5 руководства описывает различные форматов файлов, а также "
   6.269 +"соответствующие структуры C, если таковые имеются."
   6.270 +
   6.271 +#: man.sh:68
   6.272 +msgid ""
   6.273 +"Section 6 of the manual describes all the games and funny little programs "
   6.274 +"available on the system."
   6.275 +msgstr ""
   6.276 +"Раздел 6 руководства описывает все игры и забавные программы, имеющиеся в "
   6.277 +"системе."
   6.278 +
   6.279 +#: man.sh:70
   6.280 +msgid ""
   6.281 +"Section 7 of the manual provides overviews on various topics, and describes "
   6.282 +"conventions and protocols, character set standards, the standard filesystem "
   6.283 +"layout, and miscellaneous other things."
   6.284 +msgstr ""
   6.285 +"Раздел 7 руководства содержит обзоры на различные темы, описывает соглашения "
   6.286 +"и протоколы, стандартные наборы символов, макет стандартной файловой системы "
   6.287 +"и прочее."
   6.288 +
   6.289 +#: man.sh:73
   6.290 +msgid ""
   6.291 +"Section 8 of the manual describes commands which either can be or are used "
   6.292 +"only by the superuser, like system-administration commands, daemons, and "
   6.293 +"hardware-related commands."
   6.294 +msgstr ""
   6.295 +"Раздел 8 руководства описывает команды супер-пользователя, такие как команды "
   6.296 +"администрирования системы, службы и команды, связанные с аппаратным "
   6.297 +"обеспечением."
   6.298 +
   6.299 +#: man.sh:116
   6.300 +msgid "Sections"
   6.301 +msgstr "Разделы"
   6.302 +
   6.303 +#: man.sh:125 man.sh:189
   6.304 +msgid "All Sections"
   6.305 +msgstr "Все разделы"
   6.306 +
   6.307 +#: man.sh:158 man.sh:162
   6.308 +msgid "Manual Pages - Main Contents"
   6.309 +msgstr "Страницы руководств — главная"
   6.310 +
   6.311 +#: man.sh:163
   6.312 +msgid "Name and Section lookup"
   6.313 +msgstr "Поиск по имени и разделу"
   6.314 +
   6.315 +#: man.sh:166
   6.316 +msgid "Search"
   6.317 +msgstr "Искать"
   6.318 +
   6.319 +#: man.sh:168
   6.320 +msgid ""
   6.321 +"You can enter a program name, possibly preceded by the section, the "
   6.322 +"directories to search (with -M) or a full name. For example:"
   6.323 +msgstr ""
   6.324 +"Можно ввести название программы (возможно предварив его номером раздела), "
   6.325 +"папку со страницами руководств (после -M) или полное название файла "
   6.326 +"руководства. Например:"
   6.327 +
   6.328 +#: man.sh:179
   6.329 +msgid "Index of pages"
   6.330 +msgstr "Оглавление страниц"
   6.331 +
   6.332 +#: man.sh:193
   6.333 +msgid "The original man2html program and scripts are due to %s and %s."
   6.334 +msgstr "Оригинальная версия man2html и скрипты разработаны %s и %s."
   6.335 +
   6.336 +#: man.sh:196
   6.337 +msgid "This version is from %s maintained by %s."
   6.338 +msgstr "Эта версия %s сопровождается %s."
   6.339 +
   6.340 +#: man.sh:229
   6.341 +msgid "Cannot find a page"
   6.342 +msgstr "Не удалось найти страницу"
   6.343 +
   6.344 +#: man.sh:231
   6.345 +msgid "Cannot find a page for <b>%s</b> %s"
   6.346 +msgstr "Не удалось найти страницу <b>%s</b> %s"
   6.347 +
   6.348 +#: man.sh:233
   6.349 +msgid "Cannot find a page for <b>%s</b> in section <b>%s</b> %s"
   6.350 +msgstr "Не удалось найти страницу <b>%s</b> в разделе <b>%s</b> %s"
   6.351 +
   6.352 +#: man.sh:243
   6.353 +msgid "Multiple pages"
   6.354 +msgstr "Выбор"
   6.355 +
   6.356 +#: man.sh:245
   6.357 +msgid "Multiple pages found"
   6.358 +msgstr "Найдено несколько страниц"
   6.359 +
   6.360 +#~ msgid ""
   6.361 +#~ "User Commands:System Calls:C Library Functions:Devices and Network "
   6.362 +#~ "Interfaces:File Formats:Games and Demos:Environments, Tables, and Troff "
   6.363 +#~ "Macros:Maintenance Commands:All available manual pages"
   6.364 +#~ msgstr ""
   6.365 +#~ "Команды пользователя:Системные вызовы:Библиотечные функции C:Устройства и "
   6.366 +#~ "сетевые интерфейсы:Форматы файлов:Игры и демо:Окружение, таблицы и "
   6.367 +#~ "макросы Troff:Команды технического обслуживания:Все доступные страницы "
   6.368 +#~ "руководств"
   6.369 +
   6.370 +#~ msgid ""
   6.371 +#~ "Section 1 of the manual describes user commands and tools, for example, "
   6.372 +#~ "file \n"
   6.373 +#~ "manipulation tools, shells, compilers, web browsers, file and image "
   6.374 +#~ "viewers and editors, and so \n"
   6.375 +#~ "on."
   6.376 +#~ msgstr ""
   6.377 +#~ "Раздел 1 руководства описывает пользовательские команды и инструменты, "
   6.378 +#~ "такие как команды для работы с файлами, оболочки, компиляторы, браузеры, "
   6.379 +#~ "программы для просмотра и редактирования файлов и графики, и так далее."
   6.380 +
   6.381 +#~ msgid ""
   6.382 +#~ "Section 2 of the manual describes the Linux system calls. A system call "
   6.383 +#~ "is \n"
   6.384 +#~ "an entry point into the Linux kernel."
   6.385 +#~ msgstr ""
   6.386 +#~ "Раздел 2 руководства описывает системные вызовы Linux. Системный вызов "
   6.387 +#~ "является точкой входа в ядро Linux."
   6.388 +
   6.389 +#~ msgid ""
   6.390 +#~ "Section 3 of the manual describes all library functions excluding the \n"
   6.391 +#~ "library functions (system call wrappers) described in Section 2, which "
   6.392 +#~ "implement system calls."
   6.393 +#~ msgstr ""
   6.394 +#~ "Раздел 3 руководства описывает все библиотечные функции кроме "
   6.395 +#~ "библиотечных функций (оберток системных вызовов), описанных в разделе 2, "
   6.396 +#~ "которые реализуют системные вызовы."
   6.397 +
   6.398 +#~ msgid ""
   6.399 +#~ "Section 5 of the manual describes various file formats, as well as the \n"
   6.400 +#~ "corresponding C structures, if any."
   6.401 +#~ msgstr ""
   6.402 +#~ "Раздел 5 руководства описывает различные форматов файлов, а также "
   6.403 +#~ "соответствующие структуры C, если таковые имеются."
   6.404 +
   6.405 +#~ msgid ""
   6.406 +#~ "Section 6 of the manual describes all the games and funny little "
   6.407 +#~ "programs \n"
   6.408 +#~ "available on the system."
   6.409 +#~ msgstr ""
   6.410 +#~ "Раздел 6 руководства описывает все игры и забавные программы, имеющиеся в "
   6.411 +#~ "системе."
   6.412 +
   6.413 +#~ msgid ""
   6.414 +#~ "Section 7 of the manual provides overviews on various topics, and "
   6.415 +#~ "describes \n"
   6.416 +#~ "conventions and protocols, character set standards, the standard "
   6.417 +#~ "filesystem layout, and \n"
   6.418 +#~ "miscellaneous other things."
   6.419 +#~ msgstr ""
   6.420 +#~ "Раздел 7 руководства содержит обзоры на различные темы, описывает "
   6.421 +#~ "соглашения и протоколы, стандартные наборы символов, макет стандартной "
   6.422 +#~ "файловой системы и прочее."
   6.423 +
   6.424 +#~ msgid ""
   6.425 +#~ "Section 8 of the manual describes commands which either can be or are "
   6.426 +#~ "used \n"
   6.427 +#~ "only by the superuser, like system-administration commands, daemons, and "
   6.428 +#~ "hardware-related \n"
   6.429 +#~ "commands."
   6.430 +#~ msgstr ""
   6.431 +#~ "Раздел 8 руководства описывает команды супер-пользователя, такие как "
   6.432 +#~ "команды системы администрирования, службы и команды, связанные с "
   6.433 +#~ "аппаратным обеспечением."