summaryrefslogtreecommitdiff
path: root/contrib/mdocml/mdoc_html.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/mdocml/mdoc_html.c')
-rw-r--r--contrib/mdocml/mdoc_html.c300
1 files changed, 164 insertions, 136 deletions
diff --git a/contrib/mdocml/mdoc_html.c b/contrib/mdocml/mdoc_html.c
index e82451416699..5cbf68aa8f12 100644
--- a/contrib/mdocml/mdoc_html.c
+++ b/contrib/mdocml/mdoc_html.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_html.c,v 1.271 2017/02/16 03:00:23 schwarze Exp $ */
+/* $Id: mdoc_html.c,v 1.289 2017/05/30 16:31:29 schwarze Exp $ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -48,7 +48,7 @@ struct htmlmdoc {
void (*post)(MDOC_ARGS);
};
-static char *make_id(const struct roff_node *);
+static char *cond_id(const struct roff_node *);
static void print_mdoc_head(MDOC_ARGS);
static void print_mdoc_node(MDOC_ARGS);
static void print_mdoc_nodelist(MDOC_ARGS);
@@ -108,7 +108,6 @@ static int mdoc_rs_pre(MDOC_ARGS);
static int mdoc_sh_pre(MDOC_ARGS);
static int mdoc_skip_pre(MDOC_ARGS);
static int mdoc_sm_pre(MDOC_ARGS);
-static int mdoc_sp_pre(MDOC_ARGS);
static int mdoc_ss_pre(MDOC_ARGS);
static int mdoc_st_pre(MDOC_ARGS);
static int mdoc_sx_pre(MDOC_ARGS);
@@ -118,8 +117,7 @@ static int mdoc_vt_pre(MDOC_ARGS);
static int mdoc_xr_pre(MDOC_ARGS);
static int mdoc_xx_pre(MDOC_ARGS);
-static const struct htmlmdoc mdocs[MDOC_MAX] = {
- {mdoc_ap_pre, NULL}, /* Ap */
+static const struct htmlmdoc __mdocs[MDOC_MAX - MDOC_Dd] = {
{NULL, NULL}, /* Dd */
{NULL, NULL}, /* Dt */
{NULL, NULL}, /* Os */
@@ -135,6 +133,7 @@ static const struct htmlmdoc mdocs[MDOC_MAX] = {
{mdoc_it_pre, NULL}, /* It */
{mdoc_ad_pre, NULL}, /* Ad */
{mdoc_an_pre, NULL}, /* An */
+ {mdoc_ap_pre, NULL}, /* Ap */
{mdoc_ar_pre, NULL}, /* Ar */
{mdoc_cd_pre, NULL}, /* Cd */
{mdoc_cm_pre, NULL}, /* Cm */
@@ -237,12 +236,10 @@ static const struct htmlmdoc mdocs[MDOC_MAX] = {
{mdoc_quote_pre, mdoc_quote_post}, /* En */
{mdoc_xx_pre, NULL}, /* Dx */
{mdoc__x_pre, mdoc__x_post}, /* %Q */
- {mdoc_sp_pre, NULL}, /* br */
- {mdoc_sp_pre, NULL}, /* sp */
{mdoc__x_pre, mdoc__x_post}, /* %U */
{NULL, NULL}, /* Ta */
- {mdoc_skip_pre, NULL}, /* ll */
};
+static const struct htmlmdoc *const mdocs = __mdocs - MDOC_Dd;
/*
@@ -362,9 +359,9 @@ print_mdoc_node(MDOC_ARGS)
* Make sure that if we're in a literal mode already
* (i.e., within a <PRE>) don't print the newline.
*/
- if (' ' == *n->string && NODE_LINE & n->flags)
- if ( ! (HTML_LITERAL & h->flags))
- print_otag(h, TAG_BR, "");
+ if (*n->string == ' ' && n->flags & NODE_LINE &&
+ (h->flags & (HTML_LITERAL | HTML_NONEWLINE)) == 0)
+ print_otag(h, TAG_BR, "");
if (NODE_DELIMC & n->flags)
h->flags |= HTML_NOSPACE;
print_text(h, n->string);
@@ -393,7 +390,14 @@ print_mdoc_node(MDOC_ARGS)
t = h->tag;
}
assert(h->tblt == NULL);
- if (mdocs[n->tok].pre && (n->end == ENDBODY_NOT || n->child))
+ if (n->tok < ROFF_MAX) {
+ roff_html_pre(h, n);
+ child = 0;
+ break;
+ }
+ assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX);
+ if (mdocs[n->tok].pre != NULL &&
+ (n->end == ENDBODY_NOT || n->child != NULL))
child = (*mdocs[n->tok].pre)(meta, n, h);
break;
}
@@ -412,7 +416,9 @@ print_mdoc_node(MDOC_ARGS)
case ROFFT_EQN:
break;
default:
- if ( ! mdocs[n->tok].post || n->flags & NODE_ENDED)
+ if (n->tok < ROFF_MAX ||
+ mdocs[n->tok].post == NULL ||
+ n->flags & NODE_ENDED)
break;
(*mdocs[n->tok].post)(meta, n, h);
if (n->end != ENDBODY_NOT)
@@ -477,25 +483,19 @@ mdoc_root_pre(MDOC_ARGS)
}
static char *
-make_id(const struct roff_node *n)
+cond_id(const struct roff_node *n)
{
- const struct roff_node *nch;
- char *buf, *cp;
-
- for (nch = n->child; nch != NULL; nch = nch->next)
- if (nch->type != ROFFT_TEXT)
- return NULL;
-
- buf = NULL;
- deroff(&buf, n);
-
- /* http://www.w3.org/TR/html5/dom.html#the-id-attribute */
-
- for (cp = buf; *cp != '\0'; cp++)
- if (*cp == ' ')
- *cp = '_';
-
- return buf;
+ if (n->child != NULL &&
+ n->child->type == ROFFT_TEXT &&
+ (n->prev == NULL ||
+ (n->prev->type == ROFFT_TEXT &&
+ strcmp(n->prev->string, "|") == 0)) &&
+ (n->parent->tok == MDOC_It ||
+ (n->parent->tok == MDOC_Xo &&
+ n->parent->parent->prev == NULL &&
+ n->parent->parent->parent->tok == MDOC_It)))
+ return html_make_id(n);
+ return NULL;
}
static int
@@ -505,8 +505,10 @@ mdoc_sh_pre(MDOC_ARGS)
switch (n->type) {
case ROFFT_HEAD:
- id = make_id(n);
- print_otag(h, TAG_H1, "ci", "Sh", id);
+ 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);
break;
case ROFFT_BODY:
@@ -527,8 +529,10 @@ mdoc_ss_pre(MDOC_ARGS)
if (n->type != ROFFT_HEAD)
return 1;
- id = make_id(n);
- print_otag(h, TAG_H2, "ci", "Ss", id);
+ 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;
}
@@ -536,9 +540,14 @@ mdoc_ss_pre(MDOC_ARGS)
static int
mdoc_fl_pre(MDOC_ARGS)
{
- print_otag(h, TAG_B, "c", "Fl");
- print_text(h, "\\-");
+ char *id;
+ if ((id = cond_id(n)) != NULL)
+ print_otag(h, TAG_A, "chR", "selflink", id);
+ print_otag(h, TAG_B, "cTi", "Fl", id);
+ free(id);
+
+ print_text(h, "\\-");
if (!(n->child == NULL &&
(n->next == NULL ||
n->next->type == ROFFT_TEXT ||
@@ -551,7 +560,12 @@ mdoc_fl_pre(MDOC_ARGS)
static int
mdoc_cm_pre(MDOC_ARGS)
{
- print_otag(h, TAG_B, "c", "Cm");
+ char *id;
+
+ if ((id = cond_id(n)) != NULL)
+ print_otag(h, TAG_A, "chR", "selflink", id);
+ print_otag(h, TAG_B, "cTi", "Cm", id);
+ free(id);
return 1;
}
@@ -564,22 +578,19 @@ mdoc_nd_pre(MDOC_ARGS)
/* XXX: this tag in theory can contain block elements. */
print_text(h, "\\(em");
- print_otag(h, TAG_SPAN, "c", "Nd");
+ print_otag(h, TAG_SPAN, "cT", "Nd");
return 1;
}
static int
mdoc_nm_pre(MDOC_ARGS)
{
- struct tag *t;
- int len;
-
switch (n->type) {
case ROFFT_HEAD:
print_otag(h, TAG_TD, "");
/* FALLTHROUGH */
case ROFFT_ELEM:
- print_otag(h, TAG_B, "c", "Nm");
+ print_otag(h, TAG_B, "cT", "Nm");
return 1;
case ROFFT_BODY:
print_otag(h, TAG_TD, "");
@@ -587,21 +598,8 @@ mdoc_nm_pre(MDOC_ARGS)
default:
break;
}
-
synopsis_pre(h, n);
print_otag(h, TAG_TABLE, "c", "Nm");
-
- for (len = 0, n = n->head->child; n; n = n->next)
- if (n->type == ROFFT_TEXT)
- len += html_strlen(n->string);
-
- if (len == 0 && meta->name != NULL)
- len = html_strlen(meta->name);
-
- t = print_otag(h, TAG_COLGROUP, "");
- print_otag(h, TAG_COL, "shw", len);
- print_otag(h, TAG_COL, "");
- print_tagq(h, t);
print_otag(h, TAG_TR, "");
return 1;
}
@@ -613,11 +611,11 @@ mdoc_xr_pre(MDOC_ARGS)
return 0;
if (h->base_man)
- print_otag(h, TAG_A, "chM", "Xr",
+ print_otag(h, TAG_A, "cThM", "Xr",
n->child->string, n->child->next == NULL ?
NULL : n->child->next->string);
else
- print_otag(h, TAG_A, "c", "Xr");
+ print_otag(h, TAG_A, "cT", "Xr");
n = n->child;
print_text(h, n->string);
@@ -646,7 +644,7 @@ mdoc_ns_pre(MDOC_ARGS)
static int
mdoc_ar_pre(MDOC_ARGS)
{
- print_otag(h, TAG_VAR, "c", "Ar");
+ print_otag(h, TAG_VAR, "cT", "Ar");
return 1;
}
@@ -666,7 +664,7 @@ mdoc_it_pre(MDOC_ARGS)
enum mdoc_list type;
bl = n->parent;
- while (bl != NULL && bl->tok != MDOC_Bl)
+ while (bl->tok != MDOC_Bl)
bl = bl->parent;
type = bl->norm->Bl.type;
@@ -751,8 +749,9 @@ mdoc_it_pre(MDOC_ARGS)
case ROFFT_HEAD:
if (h->style != NULL && !bl->norm->Bl.comp &&
(n->parent->prev == NULL ||
+ n->parent->prev->body == NULL ||
n->parent->prev->body->child != NULL)) {
- t = print_otag(h, TAG_DT, "csWl",
+ t = print_otag(h, TAG_DT, "csw+-l",
cattr, bl->norm->Bl.width);
print_text(h, "\\ ");
print_tagq(h, t);
@@ -760,7 +759,7 @@ mdoc_it_pre(MDOC_ARGS)
print_text(h, "\\ ");
print_tagq(h, t);
}
- print_otag(h, TAG_DT, "csWl", cattr,
+ print_otag(h, TAG_DT, "csw+-l", cattr,
bl->norm->Bl.width);
break;
case ROFFT_BODY:
@@ -823,7 +822,7 @@ mdoc_bl_pre(MDOC_ARGS)
t = print_otag(h, TAG_COLGROUP, "");
for (i = 0; i < bl->ncols - 1; i++)
- print_otag(h, TAG_COL, "sww", bl->cols[i]);
+ print_otag(h, TAG_COL, "sw+w", bl->cols[i]);
print_otag(h, TAG_COL, "swW", bl->cols[i]);
print_tagq(h, t);
return 0;
@@ -870,7 +869,7 @@ mdoc_bl_pre(MDOC_ARGS)
cattr = "Bl-tag";
if (bl->offs)
print_otag(h, TAG_DIV, "cswl", cattr, bl->offs);
- print_otag(h, TAG_DL, "cswl", cattr, bl->width);
+ print_otag(h, TAG_DL, "csw+l", cattr, bl->width);
return 1;
case LIST_column:
elemtype = TAG_TABLE;
@@ -894,14 +893,14 @@ mdoc_ex_pre(MDOC_ARGS)
static int
mdoc_st_pre(MDOC_ARGS)
{
- print_otag(h, TAG_SPAN, "c", "St");
+ print_otag(h, TAG_SPAN, "cT", "St");
return 1;
}
static int
mdoc_em_pre(MDOC_ARGS)
{
- print_otag(h, TAG_I, "c", "Em");
+ print_otag(h, TAG_I, "cT", "Em");
return 1;
}
@@ -924,8 +923,8 @@ mdoc_sx_pre(MDOC_ARGS)
{
char *id;
- id = make_id(n);
- print_otag(h, TAG_A, "chR", "Sx", id);
+ id = html_make_id(n);
+ print_otag(h, TAG_A, "cThR", "Sx", id);
free(id);
return 1;
}
@@ -991,9 +990,9 @@ mdoc_bd_pre(MDOC_ARGS)
* anyway, so don't sweat it.
*/
switch (nn->tok) {
+ case ROFF_br:
+ case ROFF_sp:
case MDOC_Sm:
- case MDOC_br:
- case MDOC_sp:
case MDOC_Bl:
case MDOC_D1:
case MDOC_Dl:
@@ -1021,7 +1020,7 @@ mdoc_bd_pre(MDOC_ARGS)
static int
mdoc_pa_pre(MDOC_ARGS)
{
- print_otag(h, TAG_I, "c", "Pa");
+ print_otag(h, TAG_I, "cT", "Pa");
return 1;
}
@@ -1052,7 +1051,7 @@ mdoc_an_pre(MDOC_ARGS)
if (n->sec == SEC_AUTHORS && ! (h->flags & HTML_NOSPLIT))
h->flags |= HTML_SPLIT;
- print_otag(h, TAG_SPAN, "c", "An");
+ print_otag(h, TAG_SPAN, "cT", "An");
return 1;
}
@@ -1060,28 +1059,49 @@ static int
mdoc_cd_pre(MDOC_ARGS)
{
synopsis_pre(h, n);
- print_otag(h, TAG_B, "c", "Cd");
+ print_otag(h, TAG_B, "cT", "Cd");
return 1;
}
static int
mdoc_dv_pre(MDOC_ARGS)
{
- print_otag(h, TAG_CODE, "c", "Dv");
+ char *id;
+
+ if ((id = cond_id(n)) != NULL)
+ print_otag(h, TAG_A, "chR", "selflink", id);
+ print_otag(h, TAG_CODE, "cTi", "Dv", id);
+ free(id);
return 1;
}
static int
mdoc_ev_pre(MDOC_ARGS)
{
- print_otag(h, TAG_CODE, "c", "Ev");
+ char *id;
+
+ if ((id = cond_id(n)) != NULL)
+ print_otag(h, TAG_A, "chR", "selflink", id);
+ print_otag(h, TAG_CODE, "cTi", "Ev", id);
+ free(id);
return 1;
}
static int
mdoc_er_pre(MDOC_ARGS)
{
- print_otag(h, TAG_CODE, "c", "Er");
+ char *id;
+
+ id = n->sec == SEC_ERRORS &&
+ (n->parent->tok == MDOC_It ||
+ (n->parent->tok == MDOC_Bq &&
+ n->parent->parent->parent->tok == MDOC_It)) ?
+ html_make_id(n) : NULL;
+
+ if (id != NULL)
+ print_otag(h, TAG_A, "chR", "selflink", id);
+ print_otag(h, TAG_CODE, "cTi", "Er", id);
+ free(id);
return 1;
}
@@ -1092,12 +1112,12 @@ mdoc_fa_pre(MDOC_ARGS)
struct tag *t;
if (n->parent->tok != MDOC_Fo) {
- print_otag(h, TAG_VAR, "c", "Fa");
+ print_otag(h, TAG_VAR, "cT", "Fa");
return 1;
}
for (nn = n->child; nn; nn = nn->next) {
- t = print_otag(h, TAG_VAR, "c", "Fa");
+ t = print_otag(h, TAG_VAR, "cT", "Fa");
print_text(h, nn->string);
print_tagq(h, t);
if (nn->next) {
@@ -1128,11 +1148,11 @@ mdoc_fd_pre(MDOC_ARGS)
assert(n->type == ROFFT_TEXT);
if (strcmp(n->string, "#include")) {
- print_otag(h, TAG_B, "c", "Fd");
+ print_otag(h, TAG_B, "cT", "Fd");
return 1;
}
- print_otag(h, TAG_B, "c", "In");
+ print_otag(h, TAG_B, "cT", "In");
print_text(h, n->string);
if (NULL != (n = n->next)) {
@@ -1146,10 +1166,10 @@ mdoc_fd_pre(MDOC_ARGS)
cp = strchr(buf, '\0') - 1;
if (cp >= buf && (*cp == '>' || *cp == '"'))
*cp = '\0';
- t = print_otag(h, TAG_A, "chI", "In", buf);
+ t = print_otag(h, TAG_A, "cThI", "In", buf);
free(buf);
} else
- t = print_otag(h, TAG_A, "c", "In");
+ t = print_otag(h, TAG_A, "cT", "In");
print_text(h, n->string);
print_tagq(h, t);
@@ -1176,7 +1196,7 @@ mdoc_vt_pre(MDOC_ARGS)
} else if (n->type == ROFFT_HEAD)
return 0;
- print_otag(h, TAG_VAR, "c", "Vt");
+ print_otag(h, TAG_VAR, "cT", "Vt");
return 1;
}
@@ -1184,7 +1204,7 @@ static int
mdoc_ft_pre(MDOC_ARGS)
{
synopsis_pre(h, n);
- print_otag(h, TAG_VAR, "c", "Ft");
+ print_otag(h, TAG_VAR, "cT", "Ft");
return 1;
}
@@ -1205,7 +1225,7 @@ mdoc_fn_pre(MDOC_ARGS)
ep = strchr(sp, ' ');
if (NULL != ep) {
- t = print_otag(h, TAG_VAR, "c", "Ft");
+ t = print_otag(h, TAG_VAR, "cT", "Ft");
while (ep) {
sz = MIN((int)(ep - sp), BUFSIZ - 1);
@@ -1218,7 +1238,7 @@ mdoc_fn_pre(MDOC_ARGS)
print_tagq(h, t);
}
- t = print_otag(h, TAG_B, "c", "Fn");
+ t = print_otag(h, TAG_B, "cT", "Fn");
if (sp)
print_text(h, sp);
@@ -1231,10 +1251,10 @@ mdoc_fn_pre(MDOC_ARGS)
for (n = n->child->next; n; n = n->next) {
if (NODE_SYNPRETTY & n->flags)
- t = print_otag(h, TAG_VAR, "css?", "Fa",
+ t = print_otag(h, TAG_VAR, "cTss?", "Fa",
"white-space", "nowrap");
else
- t = print_otag(h, TAG_VAR, "c", "Fa");
+ t = print_otag(h, TAG_VAR, "cT", "Fa");
print_text(h, n->string);
print_tagq(h, t);
if (n->next) {
@@ -1287,47 +1307,35 @@ mdoc_pp_pre(MDOC_ARGS)
}
static int
-mdoc_sp_pre(MDOC_ARGS)
-{
- struct roffsu su;
-
- SCALE_VS_INIT(&su, 1);
-
- if (MDOC_sp == n->tok) {
- if (NULL != (n = n->child)) {
- if ( ! a2roffsu(n->string, &su, SCALE_VS))
- su.scale = 1.0;
- else if (su.scale < 0.0)
- su.scale = 0.0;
- }
- } else
- su.scale = 0.0;
-
- print_otag(h, TAG_DIV, "suh", &su);
-
- /* So the div isn't empty: */
- print_text(h, "\\~");
-
- return 0;
-
-}
-
-static int
mdoc_lk_pre(MDOC_ARGS)
{
- if (NULL == (n = n->child))
- return 0;
-
- assert(n->type == ROFFT_TEXT);
+ const struct roff_node *link, *descr, *punct;
+ struct tag *t;
- print_otag(h, TAG_A, "ch", "Lk", n->string);
+ if ((link = n->child) == NULL)
+ return 0;
- if (NULL == n->next)
- print_text(h, n->string);
+ /* Find beginning of trailing punctuation. */
+ punct = n->last;
+ while (punct != link && punct->flags & NODE_DELIMC)
+ punct = punct->prev;
+ punct = punct->next;
- for (n = n->next; n; n = n->next)
- print_text(h, n->string);
+ /* Link target and link text. */
+ t = print_otag(h, TAG_A, "cTh", "Lk", link->string);
+ for (descr = link->next; descr != punct; descr = descr->next) {
+ if (descr->flags & (NODE_DELIMC | NODE_DELIMO))
+ h->flags |= HTML_NOSPACE;
+ print_text(h, descr->string);
+ }
+ print_tagq(h, t);
+ /* Trailing punctuation. */
+ while (punct != NULL) {
+ h->flags |= HTML_NOSPACE;
+ print_text(h, punct->string);
+ punct = punct->next;
+ }
return 0;
}
@@ -1341,7 +1349,7 @@ mdoc_mt_pre(MDOC_ARGS)
assert(n->type == ROFFT_TEXT);
mandoc_asprintf(&cp, "mailto:%s", n->string);
- t = print_otag(h, TAG_A, "ch", "Mt", cp);
+ t = print_otag(h, TAG_A, "cTh", "Mt", cp);
print_text(h, n->string);
print_tagq(h, t);
free(cp);
@@ -1369,7 +1377,7 @@ mdoc_fo_pre(MDOC_ARGS)
return 0;
assert(n->child->string);
- t = print_otag(h, TAG_B, "c", "Fn");
+ t = print_otag(h, TAG_B, "cT", "Fn");
print_text(h, n->child->string);
print_tagq(h, t);
return 0;
@@ -1393,7 +1401,7 @@ mdoc_in_pre(MDOC_ARGS)
struct tag *t;
synopsis_pre(h, n);
- print_otag(h, TAG_B, "c", "In");
+ print_otag(h, TAG_B, "cT", "In");
/*
* The first argument of the `In' gets special treatment as
@@ -1412,9 +1420,9 @@ mdoc_in_pre(MDOC_ARGS)
assert(n->type == ROFFT_TEXT);
if (h->base_includes)
- t = print_otag(h, TAG_A, "chI", "In", n->string);
+ t = print_otag(h, TAG_A, "cThI", "In", n->string);
else
- t = print_otag(h, TAG_A, "c", "In");
+ t = print_otag(h, TAG_A, "cT", "In");
print_text(h, n->string);
print_tagq(h, t);
@@ -1435,14 +1443,19 @@ mdoc_in_pre(MDOC_ARGS)
static int
mdoc_ic_pre(MDOC_ARGS)
{
- print_otag(h, TAG_B, "c", "Ic");
+ char *id;
+
+ if ((id = cond_id(n)) != NULL)
+ print_otag(h, TAG_A, "chR", "selflink", id);
+ print_otag(h, TAG_B, "cTi", "Ic", id);
+ free(id);
return 1;
}
static int
mdoc_va_pre(MDOC_ARGS)
{
- print_otag(h, TAG_VAR, "c", "Va");
+ print_otag(h, TAG_VAR, "cT", "Va");
return 1;
}
@@ -1487,7 +1500,12 @@ mdoc_bf_pre(MDOC_ARGS)
static int
mdoc_ms_pre(MDOC_ARGS)
{
- print_otag(h, TAG_B, "c", "Ms");
+ char *id;
+
+ if ((id = cond_id(n)) != NULL)
+ print_otag(h, TAG_A, "chR", "selflink", id);
+ print_otag(h, TAG_B, "cTi", "Ms", id);
+ free(id);
return 1;
}
@@ -1516,28 +1534,38 @@ mdoc_rs_pre(MDOC_ARGS)
if (n->prev && SEC_SEE_ALSO == n->sec)
print_paragraph(h);
- print_otag(h, TAG_CITE, "c", "Rs");
+ print_otag(h, TAG_CITE, "cT", "Rs");
return 1;
}
static int
mdoc_no_pre(MDOC_ARGS)
{
- print_otag(h, TAG_SPAN, "c", "No");
+ char *id;
+
+ if ((id = cond_id(n)) != NULL)
+ print_otag(h, TAG_A, "chR", "selflink", id);
+ print_otag(h, TAG_SPAN, "ci", "No", id);
+ free(id);
return 1;
}
static int
mdoc_li_pre(MDOC_ARGS)
{
- print_otag(h, TAG_CODE, "c", "Li");
+ char *id;
+
+ if ((id = cond_id(n)) != NULL)
+ print_otag(h, TAG_A, "chR", "selflink", id);
+ print_otag(h, TAG_CODE, "ci", "Li", id);
+ free(id);
return 1;
}
static int
mdoc_sy_pre(MDOC_ARGS)
{
- print_otag(h, TAG_B, "c", "Sy");
+ print_otag(h, TAG_B, "cT", "Sy");
return 1;
}
@@ -1547,7 +1575,7 @@ mdoc_lb_pre(MDOC_ARGS)
if (SEC_LIBRARY == n->sec && NODE_LINE & n->flags && n->prev)
print_otag(h, TAG_BR, "");
- print_otag(h, TAG_SPAN, "c", "Lb");
+ print_otag(h, TAG_SPAN, "cT", "Lb");
return 1;
}