version 1.161, 2018/10/19 21:10:56 |
version 1.166, 2019/03/06 12:32:41 |
|
|
#include "roff.h" |
#include "roff.h" |
#include "mdoc.h" |
#include "mdoc.h" |
#include "man.h" |
#include "man.h" |
|
#include "mandoc_parse.h" |
#include "main.h" |
#include "main.h" |
#include "manconf.h" |
#include "manconf.h" |
#include "mansearch.h" |
#include "mansearch.h" |
Line 323 http_encode(const char *p) |
|
Line 324 http_encode(const char *p) |
|
for (; *p != '\0'; p++) { |
for (; *p != '\0'; p++) { |
if (isalnum((unsigned char)*p) == 0 && |
if (isalnum((unsigned char)*p) == 0 && |
strchr("-._~", *p) == NULL) |
strchr("-._~", *p) == NULL) |
printf("%%%02.2X", (unsigned char)*p); |
printf("%%%2.2X", (unsigned char)*p); |
else |
else |
putchar(*p); |
putchar(*p); |
} |
} |
Line 848 resp_format(const struct req *req, const char *file) |
|
Line 849 resp_format(const struct req *req, const char *file) |
|
{ |
{ |
struct manoutput conf; |
struct manoutput conf; |
struct mparse *mp; |
struct mparse *mp; |
struct roff_man *man; |
struct roff_meta *meta; |
void *vp; |
void *vp; |
int fd; |
int fd; |
int usepath; |
int usepath; |
Line 859 resp_format(const struct req *req, const char *file) |
|
Line 860 resp_format(const struct req *req, const char *file) |
|
} |
} |
|
|
mchars_alloc(); |
mchars_alloc(); |
mp = mparse_alloc(MPARSE_SO | MPARSE_UTF8 | MPARSE_LATIN1, |
mp = mparse_alloc(MPARSE_SO | MPARSE_UTF8 | MPARSE_LATIN1 | |
MANDOCERR_MAX, NULL, MANDOC_OS_OTHER, req->q.manpath); |
MPARSE_VALIDATE, MANDOC_OS_OTHER, req->q.manpath); |
mparse_readfd(mp, fd, file); |
mparse_readfd(mp, fd, file); |
close(fd); |
close(fd); |
|
meta = mparse_result(mp); |
|
|
memset(&conf, 0, sizeof(conf)); |
memset(&conf, 0, sizeof(conf)); |
conf.fragment = 1; |
conf.fragment = 1; |
Line 873 resp_format(const struct req *req, const char *file) |
|
Line 875 resp_format(const struct req *req, const char *file) |
|
scriptname, *scriptname == '\0' ? "" : "/", |
scriptname, *scriptname == '\0' ? "" : "/", |
usepath ? req->q.manpath : "", usepath ? "/" : ""); |
usepath ? req->q.manpath : "", usepath ? "/" : ""); |
|
|
mparse_result(mp, &man, NULL); |
|
if (man == NULL) { |
|
warnx("fatal mandoc error: %s/%s", req->q.manpath, file); |
|
pg_error_internal(); |
|
mparse_free(mp); |
|
mchars_free(); |
|
return; |
|
} |
|
|
|
vp = html_alloc(&conf); |
vp = html_alloc(&conf); |
|
if (meta->macroset == MACROSET_MDOC) |
|
html_mdoc(vp, meta); |
|
else |
|
html_man(vp, meta); |
|
|
if (man->macroset == MACROSET_MDOC) { |
|
mdoc_validate(man); |
|
html_mdoc(vp, man); |
|
} else { |
|
man_validate(man); |
|
html_man(vp, man); |
|
} |
|
|
|
html_free(vp); |
html_free(vp); |
mparse_free(mp); |
mparse_free(mp); |
mchars_free(); |
mchars_free(); |
Line 1189 parse_path_info(struct req *req, const char *path) |
|
Line 1178 parse_path_info(struct req *req, const char *path) |
|
} |
} |
|
|
/* Optional section. */ |
/* Optional section. */ |
if (strncmp(path, "man", 3) == 0) { |
if (strncmp(path, "man", 3) == 0 || strncmp(path, "cat", 3) == 0) { |
path += 3; |
path += 3; |
end = strchr(path, '/'); |
end = strchr(path, '/'); |
free(req->q.sec); |
free(req->q.sec); |