Print this page
9718 update mandoc to 1.14.4
*** 1,9 ****
! /* $Id: man_html.c,v 1.145 2017/06/25 11:42:02 schwarze Exp $ */
/*
* Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
! * Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
--- 1,9 ----
! /* $Id: man_html.c,v 1.153 2018/07/27 17:49:31 schwarze Exp $ */
/*
* Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
! * Copyright (c) 2013,2014,2015,2017,2018 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
*** 33,44 ****
#include "html.h"
#include "main.h"
/* FIXME: have PD set the default vspace width. */
- #define INDENT 5
-
#define MAN_ARGS const struct roff_meta *man, \
const struct roff_node *n, \
struct html *h
struct htmlman {
--- 33,42 ----
*** 46,61 ****
int (*post)(MAN_ARGS);
};
static void print_bvspace(struct html *,
const struct roff_node *);
! static void print_man_head(MAN_ARGS);
static void print_man_nodelist(MAN_ARGS);
static void print_man_node(MAN_ARGS);
static int fillmode(struct html *, int);
- static int a2width(const struct roff_node *,
- struct roffsu *);
static int man_B_pre(MAN_ARGS);
static int man_HP_pre(MAN_ARGS);
static int man_IP_pre(MAN_ARGS);
static int man_I_pre(MAN_ARGS);
static int man_OP_pre(MAN_ARGS);
--- 44,58 ----
int (*post)(MAN_ARGS);
};
static void print_bvspace(struct html *,
const struct roff_node *);
! static void print_man_head(const struct roff_meta *,
! struct html *);
static void print_man_nodelist(MAN_ARGS);
static void print_man_node(MAN_ARGS);
static int fillmode(struct html *, int);
static int man_B_pre(MAN_ARGS);
static int man_HP_pre(MAN_ARGS);
static int man_IP_pre(MAN_ARGS);
static int man_I_pre(MAN_ARGS);
static int man_OP_pre(MAN_ARGS);
*** 66,77 ****
static int man_SS_pre(MAN_ARGS);
static int man_UR_pre(MAN_ARGS);
static int man_alt_pre(MAN_ARGS);
static int man_ign_pre(MAN_ARGS);
static int man_in_pre(MAN_ARGS);
! static void man_root_post(MAN_ARGS);
! static void man_root_pre(MAN_ARGS);
static const struct htmlman __mans[MAN_MAX - MAN_TH] = {
{ NULL, NULL }, /* TH */
{ man_SH_pre, NULL }, /* SH */
{ man_SS_pre, NULL }, /* SS */
--- 63,76 ----
static int man_SS_pre(MAN_ARGS);
static int man_UR_pre(MAN_ARGS);
static int man_alt_pre(MAN_ARGS);
static int man_ign_pre(MAN_ARGS);
static int man_in_pre(MAN_ARGS);
! static void man_root_post(const struct roff_meta *,
! struct html *);
! static void man_root_pre(const struct roff_meta *,
! struct html *);
static const struct htmlman __mans[MAN_MAX - MAN_TH] = {
{ NULL, NULL }, /* TH */
{ man_SH_pre, NULL }, /* SH */
{ man_SS_pre, NULL }, /* SS */
*** 137,169 ****
void
html_man(void *arg, const struct roff_man *man)
{
struct html *h;
struct tag *t;
h = (struct html *)arg;
if ((h->oflags & HTML_FRAGMENT) == 0) {
print_gen_decls(h);
print_otag(h, TAG_HTML, "");
t = print_otag(h, TAG_HEAD, "");
! print_man_head(&man->meta, man->first, h);
print_tagq(h, t);
print_otag(h, TAG_BODY, "");
}
! man_root_pre(&man->meta, man->first, h);
t = print_otag(h, TAG_DIV, "c", "manual-text");
! print_man_nodelist(&man->meta, man->first->child, h);
print_tagq(h, t);
! man_root_post(&man->meta, man->first, h);
print_tagq(h, NULL);
}
static void
! print_man_head(MAN_ARGS)
{
char *cp;
print_gen_head(h);
mandoc_asprintf(&cp, "%s(%s)", man->title, man->msec);
--- 136,172 ----
void
html_man(void *arg, const struct roff_man *man)
{
struct html *h;
+ struct roff_node *n;
struct tag *t;
h = (struct html *)arg;
+ n = man->first->child;
if ((h->oflags & HTML_FRAGMENT) == 0) {
print_gen_decls(h);
print_otag(h, TAG_HTML, "");
+ if (n->type == ROFFT_COMMENT)
+ print_gen_comment(h, n);
t = print_otag(h, TAG_HEAD, "");
! print_man_head(&man->meta, h);
print_tagq(h, t);
print_otag(h, TAG_BODY, "");
}
! man_root_pre(&man->meta, h);
t = print_otag(h, TAG_DIV, "c", "manual-text");
! print_man_nodelist(&man->meta, n, h);
print_tagq(h, t);
! man_root_post(&man->meta, h);
print_tagq(h, NULL);
}
static void
! print_man_head(const struct roff_meta *man, struct html *h)
{
char *cp;
print_gen_head(h);
mandoc_asprintf(&cp, "%s(%s)", man->title, man->msec);
*** 260,269 ****
--- 263,274 ----
print_otag(h, TAG_BR, "");
if (*n->string != '\0')
break;
print_paragraph(h);
return;
+ case ROFFT_COMMENT:
+ return;
default:
break;
}
/* Produce output for this node. */
*** 357,376 ****
print_tagq(h, pre);
}
return had;
}
- static int
- a2width(const struct roff_node *n, struct roffsu *su)
- {
- if (n->type != ROFFT_TEXT)
- return 0;
- return a2roffsu(n->string, su, SCALE_EN) != NULL;
- }
-
static void
! man_root_pre(MAN_ARGS)
{
struct tag *t, *tt;
char *title;
assert(man->title);
--- 362,373 ----
print_tagq(h, pre);
}
return had;
}
static void
! man_root_pre(const struct roff_meta *man, struct html *h)
{
struct tag *t, *tt;
char *title;
assert(man->title);
*** 394,404 ****
print_tagq(h, t);
free(title);
}
static void
! man_root_post(MAN_ARGS)
{
struct tag *t, *tt;
t = print_otag(h, TAG_TABLE, "c", "foot");
tt = print_otag(h, TAG_TR, "");
--- 391,401 ----
print_tagq(h, t);
free(title);
}
static void
! man_root_post(const struct roff_meta *man, struct html *h)
{
struct tag *t, *tt;
t = print_otag(h, TAG_TABLE, "c", "foot");
tt = print_otag(h, TAG_TR, "");
*** 417,431 ****
man_SH_pre(MAN_ARGS)
{
char *id;
if (n->type == ROFFT_HEAD) {
! id = html_make_id(n);
print_otag(h, TAG_H1, "cTi", "Sh", id);
if (id != NULL)
! print_otag(h, TAG_A, "chR", "selflink", id);
! free(id);
}
return 1;
}
static int
--- 414,427 ----
man_SH_pre(MAN_ARGS)
{
char *id;
if (n->type == ROFFT_HEAD) {
! id = html_make_id(n, 1);
print_otag(h, TAG_H1, "cTi", "Sh", id);
if (id != NULL)
! print_otag(h, TAG_A, "chR", "permalink", id);
}
return 1;
}
static int
*** 487,501 ****
man_SS_pre(MAN_ARGS)
{
char *id;
if (n->type == ROFFT_HEAD) {
! id = html_make_id(n);
print_otag(h, TAG_H2, "cTi", "Ss", id);
if (id != NULL)
! print_otag(h, TAG_A, "chR", "selflink", id);
! free(id);
}
return 1;
}
static int
--- 483,496 ----
man_SS_pre(MAN_ARGS)
{
char *id;
if (n->type == ROFFT_HEAD) {
! id = html_make_id(n, 1);
print_otag(h, TAG_H2, "cTi", "Ss", id);
if (id != NULL)
! print_otag(h, TAG_A, "chR", "permalink", id);
}
return 1;
}
static int
*** 514,533 ****
man_IP_pre(MAN_ARGS)
{
const struct roff_node *nn;
if (n->type == ROFFT_BODY) {
! print_otag(h, TAG_DD, "c", "It-tag");
return 1;
} else if (n->type != ROFFT_HEAD) {
print_otag(h, TAG_DL, "c", "Bl-tag");
return 1;
}
/* FIXME: width specification. */
! print_otag(h, TAG_DT, "c", "It-tag");
/* For IP, only print the first header element. */
if (MAN_IP == n->tok && n->child)
print_man_node(man, n->child, h);
--- 509,528 ----
man_IP_pre(MAN_ARGS)
{
const struct roff_node *nn;
if (n->type == ROFFT_BODY) {
! print_otag(h, TAG_DD, "");
return 1;
} else if (n->type != ROFFT_HEAD) {
print_otag(h, TAG_DL, "c", "Bl-tag");
return 1;
}
/* FIXME: width specification. */
! print_otag(h, TAG_DT, "");
/* For IP, only print the first header element. */
if (MAN_IP == n->tok && n->child)
print_man_node(man, n->child, h);
*** 548,575 ****
}
static int
man_HP_pre(MAN_ARGS)
{
- struct roffsu sum, sui;
- const struct roff_node *np;
-
if (n->type == ROFFT_HEAD)
return 0;
- else if (n->type != ROFFT_BLOCK)
- return 1;
! np = n->head->child;
!
! if (np == NULL || !a2width(np, &sum))
! SCALE_HS_INIT(&sum, INDENT);
!
! sui.unit = sum.unit;
! sui.scale = -sum.scale;
!
print_bvspace(h, n);
! print_otag(h, TAG_DIV, "csului", "Pp", &sum, &sui);
return 1;
}
static int
man_OP_pre(MAN_ARGS)
--- 543,559 ----
}
static int
man_HP_pre(MAN_ARGS)
{
if (n->type == ROFFT_HEAD)
return 0;
! if (n->type == ROFFT_BLOCK) {
print_bvspace(h, n);
! print_otag(h, TAG_DIV, "c", "HP");
! }
return 1;
}
static int
man_OP_pre(MAN_ARGS)
*** 627,649 ****
}
static int
man_RS_pre(MAN_ARGS)
{
- struct roffsu su;
-
if (n->type == ROFFT_HEAD)
return 0;
! else if (n->type == ROFFT_BODY)
return 1;
-
- SCALE_HS_INIT(&su, INDENT);
- if (n->head->child)
- a2width(n->head->child, &su);
-
- print_otag(h, TAG_DIV, "sul", &su);
- return 1;
}
static int
man_UR_pre(MAN_ARGS)
{
--- 611,625 ----
}
static int
man_RS_pre(MAN_ARGS)
{
if (n->type == ROFFT_HEAD)
return 0;
! if (n->type == ROFFT_BLOCK)
! print_otag(h, TAG_DIV, "c", "Bd-indent");
return 1;
}
static int
man_UR_pre(MAN_ARGS)
{