Hi,

here is a first draft port of the new system to search and display
manual pages online.  Kristaps has first presented this system
publicly during BSDCan 2011 in Ottawa.

The attached tarball contains three ports:

 * devel/libmutf8-0.2.3
   minimal library to validate UTF-8 encoded C strings

 * textproc/libhtml-0.3.3
   minimal C library for HTML and XHTML documents

 * www/mandoc-cgi-0.1.3
   search and display manual pages on the web

The first two are pure BUILD_DEPENDS for the latter.

Using the port requires using the very simple base system
patch i include below:  It enables building and installing the
mandocdb utility required to build the mandoc database
used by the CGI interface.

Apply the patch like this:

  cd /usr/src/usr.bin/mandoc/
  cvs up -dP
  patch < this.patch
  make cleandir
  make obj
  make depend
  make
  sudo make install

This doesn't require upgrading any other part of your system.
After that, build all three ports, install mandoc-cgi-0.1.3,
and follow the instructions in:
  /usr/local/share/doc/pkg-readmes/mandoc-cgi-0.1.3

For testing, try stuff like this:

 * Enter "/var/backups" as the search pattern,
   select "Paths" in the "Show only" box,
   and you see which tools populate that directory.
 * Enter "PAGER" and show only: "Environment Variables",
   and you see which utilities respect that variable.
 * Enter "EILSEQ" and show only: "Error codes"
   and you see which calls produce that obscure error code.
 * Enter "Gray" and show only: "Authors"
   and you see part of what Jonathan did.


Eventually, the plan is to use this to improve
  http://www.openbsd.org/cgi-bin/man.cgi

Obviously, it is not yet compatible enough; but if you don't need
backward compatibility, it's already usable, and i'd like to
get it in to tweak it in the tree.

Some aspects are ugly, but i don't see how to avoid them:
 - The www/mandoc-cgi port requires two distribution tarballs.
 - The naming is terrible, one is not even versioned, but i will talk
   to Kristaps to fix that before the next mandoc-tools release.
 - The port downloads and recompiles part of a different
   distribution of mandoc(1) than the one we have in base.
   However, i consider that better than reacharound from ports
   to /usr/src/usr.bin/mandoc, and the code is nearly identical.
 - The fixed paths and even more the stripping of /var/www/
   in mandoc-cgi.c are ugly hacks, this will be improved later.
 - The interface is not yet compatible with man.cgi;
   that will be worked on.

Comments?
  Ingo


Index: Makefile
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/Makefile,v
retrieving revision 1.60
diff -u -p -r1.60 Makefile
--- Makefile    18 Sep 2011 15:54:48 -0000      1.60
+++ Makefile    1 Oct 2011 21:26:43 -0000
@@ -18,7 +18,12 @@ SRCS+=       main.c mdoc_term.c chars.c term.c
 SRCS+= mdoc_man.c
 SRCS+= html.c mdoc_html.c man_html.c out.c eqn_html.c
 SRCS+= term_ps.c term_ascii.c tbl_term.c tbl_html.c
+SRCS+= mandocdb.c
 
 PROG=  mandoc
+
+LINKS= ${BINDIR}/mandoc ${BINDIR}/mandocdb
+
+MAN=   mandoc.1 mandocdb.8
 
 .include <bsd.prog.mk>
Index: main.c
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/main.c,v
retrieving revision 1.78
diff -u -p -r1.78 main.c
--- main.c      17 Sep 2011 14:45:22 -0000      1.78
+++ main.c      1 Oct 2011 21:26:44 -0000
@@ -57,6 +57,8 @@ struct        curparse {
        char              outopts[BUFSIZ]; /* buf of output opts */
 };
 
+int                      mandocdb(int, char**);
+
 static int               moptions(enum mparset *, char *);
 static void              mmsg(enum mandocerr, enum mandoclevel,
                                const char *, int, int, const char *);
@@ -82,6 +84,9 @@ main(int argc, char *argv[])
                progname = argv[0];
        else
                ++progname;
+
+       if (0 == strncmp(progname, "mandocdb", 8))
+               return(mandocdb(argc, argv));
 
        memset(&curp, 0, sizeof(struct curparse));
 
Index: mandocdb.c
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/mandocdb.c,v
retrieving revision 1.2
diff -u -p -r1.2 mandocdb.c
--- mandocdb.c  17 Sep 2011 13:45:28 -0000      1.2
+++ mandocdb.c  1 Oct 2011 21:26:45 -0000
@@ -252,7 +252,7 @@ static      const pmdoc_nf    mdocs[MDOC_MAX] 
 static const char       *progname;
 
 int
-main(int argc, char *argv[])
+mandocdb(int argc, char *argv[])
 {
        struct mparse   *mp; /* parse sequence */
        enum op          op; /* current operation */

Attachment: mandoc-cgi-0.1.3.tgz
Description: application/tar-gz

Reply via email to