]> git.cameronkatri.com Git - mandoc.git/blobdiff - cgi.c
mention that BUILD_CATMAN doesn't work on SunOS 5.9 and 5.10
[mandoc.git] / cgi.c
diff --git a/cgi.c b/cgi.c
index 5a21856a560e2253180c34848554d04c7e5ff0c8..3303d00100b9fb715b8dbcdf527a9e27bb5c2724 100644 (file)
--- a/cgi.c
+++ b/cgi.c
@@ -1,4 +1,4 @@
-/*     $Id: cgi.c,v 1.142 2017/01/19 13:35:02 schwarze Exp $ */
+/*     $Id: cgi.c,v 1.147 2017/02/08 13:34:27 schwarze Exp $ */
 /*
  * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze <schwarze@usta.de>
@@ -21,7 +21,9 @@
 #include <sys/time.h>
 
 #include <ctype.h>
+#if HAVE_ERR
 #include <err.h>
+#endif
 #include <errno.h>
 #include <fcntl.h>
 #include <limits.h>
@@ -113,7 +115,7 @@ static      const char *const sec_names[] = {
 static const int sec_MAX = sizeof(sec_names) / sizeof(char *);
 
 static const char *const arch_names[] = {
-    "amd64",       "alpha",       "armv7",
+    "amd64",       "alpha",       "armv7",     "arm64",
     "hppa",        "i386",        "landisk",
     "loongson",    "luna88k",     "macppc",      "mips64",
     "octeon",      "sgi",         "socppc",      "sparc64",
@@ -351,10 +353,10 @@ resp_begin_html(int code, const char *msg)
        printf("<!DOCTYPE html>\n"
               "<html>\n"
               "<head>\n"
-              "<meta charset=\"UTF-8\"/>\n"
-              "<link rel=\"stylesheet\" href=\"%s/mandoc.css\""
+              "  <meta charset=\"UTF-8\"/>\n"
+              "  <link rel=\"stylesheet\" href=\"%s/mandoc.css\""
               " type=\"text/css\" media=\"all\">\n"
-              "<title>%s</title>\n"
+              "  <title>%s</title>\n"
               "</head>\n"
               "<body>\n",
               CSS_DIR, CUSTOMIZE_TITLE);
@@ -378,13 +380,13 @@ resp_searchform(const struct req *req, enum focus focus)
        int              i;
 
        printf("<form action=\"/%s\" method=\"get\">\n"
-              "<fieldset>\n"
-              "<legend>Manual Page Search Parameters</legend>\n",
+              "  <fieldset>\n"
+              "    <legend>Manual Page Search Parameters</legend>\n",
               scriptname);
 
        /* Write query input box. */
 
-       printf("<input type=\"text\" name=\"query\" value=\"");
+       printf("    <input type=\"text\" name=\"query\" value=\"");
        if (req->q.query != NULL)
                html_print(req->q.query);
        printf( "\" size=\"40\"");
@@ -394,45 +396,46 @@ resp_searchform(const struct req *req, enum focus focus)
 
        /* Write submission buttons. */
 
-       printf( "<button type=\"submit\" name=\"apropos\" value=\"0\">"
+       printf( "    <button type=\"submit\" name=\"apropos\" value=\"0\">"
                "man</button>\n"
-               "<button type=\"submit\" name=\"apropos\" value=\"1\">"
-               "apropos</button>\n<br/>\n");
+               "    <button type=\"submit\" name=\"apropos\" value=\"1\">"
+               "apropos</button>\n"
+               "    <br/>\n");
 
        /* Write section selector. */
 
-       puts("<select name=\"sec\">");
+       puts("    <select name=\"sec\">");
        for (i = 0; i < sec_MAX; i++) {
-               printf("<option value=\"%s\"", sec_numbers[i]);
+               printf("      <option value=\"%s\"", sec_numbers[i]);
                if (NULL != req->q.sec &&
                    0 == strcmp(sec_numbers[i], req->q.sec))
                        printf(" selected=\"selected\"");
                printf(">%s</option>\n", sec_names[i]);
        }
-       puts("</select>");
+       puts("    </select>");
 
        /* Write architecture selector. */
 
-       printf( "<select name=\"arch\">\n"
-               "<option value=\"default\"");
+       printf( "    <select name=\"arch\">\n"
+               "      <option value=\"default\"");
        if (NULL == req->q.arch)
                printf(" selected=\"selected\"");
        puts(">All Architectures</option>");
        for (i = 0; i < arch_MAX; i++) {
-               printf("<option value=\"%s\"", arch_names[i]);
+               printf("      <option value=\"%s\"", arch_names[i]);
                if (NULL != req->q.arch &&
                    0 == strcmp(arch_names[i], req->q.arch))
                        printf(" selected=\"selected\"");
                printf(">%s</option>\n", arch_names[i]);
        }
-       puts("</select>");
+       puts("    </select>");
 
        /* Write manpath selector. */
 
        if (req->psz > 1) {
-               puts("<select name=\"manpath\">");
+               puts("    <select name=\"manpath\">");
                for (i = 0; i < (int)req->psz; i++) {
-                       printf("<option ");
+                       printf("      <option ");
                        if (strcmp(req->q.manpath, req->p[i]) == 0)
                                printf("selected=\"selected\" ");
                        printf("value=\"");
@@ -441,10 +444,10 @@ resp_searchform(const struct req *req, enum focus focus)
                        html_print(req->p[i]);
                        puts("</option>");
                }
-               puts("</select>");
+               puts("    </select>");
        }
 
-       puts("</fieldset>\n"
+       puts("  </fieldset>\n"
             "</form>");
 }
 
@@ -493,9 +496,9 @@ pg_index(const struct req *req)
        resp_searchform(req, FOCUS_QUERY);
        printf("<p>\n"
               "This web interface is documented in the\n"
-              "<a href=\"/%s%sman.cgi.8\">man.cgi(8)</a>\n"
+              "<a class=\"Xr\" href=\"/%s%sman.cgi.8\">man.cgi(8)</a>\n"
               "manual, and the\n"
-              "<a href=\"/%s%sapropos.1\">apropos(1)</a>\n"
+              "<a class=\"Xr\" href=\"/%s%sapropos.1\">apropos(1)</a>\n"
               "manual explains the query syntax.\n"
               "</p>\n",
               scriptname, *scriptname == '\0' ? "" : "/",
@@ -575,27 +578,21 @@ pg_searchres(const struct req *req, struct manpage *r, size_t sz)
            req->q.equal || sz == 1 ? FOCUS_NONE : FOCUS_QUERY);
 
        if (sz > 1) {
-               puts("<div class=\"results\">");
-               puts("<table>");
-
+               puts("<table class=\"results\">");
                for (i = 0; i < sz; i++) {
-                       printf("<tr>\n"
-                              "<td class=\"title\">\n"
-                              "<a href=\"/%s%s%s/%s",
+                       printf("  <tr>\n"
+                              "    <td>"
+                              "<a class=\"Xr\" href=\"/%s%s%s/%s\">",
                            scriptname, *scriptname == '\0' ? "" : "/",
                            req->q.manpath, r[i].file);
-                       printf("\">");
                        html_print(r[i].names);
-                       printf("</a>\n"
-                              "</td>\n"
-                              "<td class=\"desc\">");
+                       printf("</a></td>\n"
+                              "    <td><span class=\"Nd\">");
                        html_print(r[i].output);
-                       puts("</td>\n"
-                            "</tr>");
+                       puts("</span></td>\n"
+                            "  </tr>");
                }
-
-               puts("</table>\n"
-                    "</div>");
+               puts("</table>");
        }
 
        /*
@@ -804,6 +801,7 @@ resp_format(const struct req *req, const char *file)
 
        memset(&conf, 0, sizeof(conf));
        conf.fragment = 1;
+       conf.style = mandoc_strdup(CSS_DIR "/mandoc.css");
        usepath = strcmp(req->q.manpath, req->p[0]);
        mandoc_asprintf(&conf.man, "/%s%s%%N.%%S",
            usepath ? req->q.manpath : "", usepath ? "/" : "");
@@ -831,6 +829,7 @@ resp_format(const struct req *req, const char *file)
        mparse_free(mp);
        mchars_free();
        free(conf.man);
+       free(conf.style);
 }
 
 static void