version 1.237, 2015/10/06 18:32:19 |
version 1.243, 2017/01/10 12:53:07 |
|
|
/* $Id$ */ |
/* $Id$ */ |
/* |
/* |
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv> |
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv> |
* Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org> |
* Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze <schwarze@openbsd.org> |
* |
* |
* Permission to use, copy, modify, and distribute this software for any |
* Permission to use, copy, modify, and distribute this software for any |
* purpose with or without fee is hereby granted, provided that the above |
* purpose with or without fee is hereby granted, provided that the above |
Line 299 synopsis_pre(struct html *h, const struct roff_node *n |
|
Line 299 synopsis_pre(struct html *h, const struct roff_node *n |
|
|
|
switch (n->prev->tok) { |
switch (n->prev->tok) { |
case MDOC_Fd: |
case MDOC_Fd: |
/* FALLTHROUGH */ |
|
case MDOC_Fn: |
case MDOC_Fn: |
/* FALLTHROUGH */ |
|
case MDOC_Fo: |
case MDOC_Fo: |
/* FALLTHROUGH */ |
|
case MDOC_In: |
case MDOC_In: |
/* FALLTHROUGH */ |
|
case MDOC_Vt: |
case MDOC_Vt: |
print_paragraph(h); |
print_paragraph(h); |
break; |
break; |
Line 381 print_mdoc_node(MDOC_ARGS) |
|
Line 377 print_mdoc_node(MDOC_ARGS) |
|
int child; |
int child; |
struct tag *t; |
struct tag *t; |
|
|
|
if (n->flags & NODE_NOPRT) |
|
return; |
|
|
child = 1; |
child = 1; |
t = h->tags.head; |
t = h->tags.head; |
n->flags &= ~MDOC_ENDED; |
n->flags &= ~MDOC_ENDED; |
Line 546 mdoc_sh_pre(MDOC_ARGS) |
|
Line 545 mdoc_sh_pre(MDOC_ARGS) |
|
} |
} |
|
|
bufinit(h); |
bufinit(h); |
bufcat(h, "x"); |
|
|
|
for (n = n->child; n != NULL && n->type == ROFFT_TEXT; ) { |
for (n = n->child; n != NULL && n->type == ROFFT_TEXT; ) { |
bufcat_id(h, n->string); |
bufcat_id(h, n->string); |
Line 576 mdoc_ss_pre(MDOC_ARGS) |
|
Line 574 mdoc_ss_pre(MDOC_ARGS) |
|
return 1; |
return 1; |
|
|
bufinit(h); |
bufinit(h); |
bufcat(h, "x"); |
|
|
|
for (n = n->child; n != NULL && n->type == ROFFT_TEXT; ) { |
for (n = n->child; n != NULL && n->type == ROFFT_TEXT; ) { |
bufcat_id(h, n->string); |
bufcat_id(h, n->string); |
Line 608 mdoc_fl_pre(MDOC_ARGS) |
|
Line 605 mdoc_fl_pre(MDOC_ARGS) |
|
|
|
print_text(h, "\\-"); |
print_text(h, "\\-"); |
|
|
if ( ! (n->nchild == 0 && |
if (!(n->child == NULL && |
(n->next == NULL || |
(n->next == NULL || |
n->next->type == ROFFT_TEXT || |
n->next->type == ROFFT_TEXT || |
n->next->flags & MDOC_LINE))) |
n->next->flags & MDOC_LINE))) |
Line 826 mdoc_it_pre(MDOC_ARGS) |
|
Line 823 mdoc_it_pre(MDOC_ARGS) |
|
if (n->type == ROFFT_HEAD) { |
if (n->type == ROFFT_HEAD) { |
switch (type) { |
switch (type) { |
case LIST_bullet: |
case LIST_bullet: |
/* FALLTHROUGH */ |
|
case LIST_dash: |
case LIST_dash: |
/* FALLTHROUGH */ |
|
case LIST_item: |
case LIST_item: |
/* FALLTHROUGH */ |
|
case LIST_hyphen: |
case LIST_hyphen: |
/* FALLTHROUGH */ |
|
case LIST_enum: |
case LIST_enum: |
return 0; |
return 0; |
case LIST_diag: |
case LIST_diag: |
/* FALLTHROUGH */ |
|
case LIST_hang: |
case LIST_hang: |
/* FALLTHROUGH */ |
|
case LIST_inset: |
case LIST_inset: |
/* FALLTHROUGH */ |
|
case LIST_ohang: |
case LIST_ohang: |
/* FALLTHROUGH */ |
|
case LIST_tag: |
case LIST_tag: |
SCALE_VS_INIT(&su, ! bl->norm->Bl.comp); |
SCALE_VS_INIT(&su, ! bl->norm->Bl.comp); |
bufcat_su(h, "margin-top", &su); |
bufcat_su(h, "margin-top", &su); |
Line 861 mdoc_it_pre(MDOC_ARGS) |
|
Line 850 mdoc_it_pre(MDOC_ARGS) |
|
} else if (n->type == ROFFT_BODY) { |
} else if (n->type == ROFFT_BODY) { |
switch (type) { |
switch (type) { |
case LIST_bullet: |
case LIST_bullet: |
/* FALLTHROUGH */ |
|
case LIST_hyphen: |
case LIST_hyphen: |
/* FALLTHROUGH */ |
|
case LIST_dash: |
case LIST_dash: |
/* FALLTHROUGH */ |
|
case LIST_enum: |
case LIST_enum: |
/* FALLTHROUGH */ |
|
case LIST_item: |
case LIST_item: |
SCALE_VS_INIT(&su, ! bl->norm->Bl.comp); |
SCALE_VS_INIT(&su, ! bl->norm->Bl.comp); |
bufcat_su(h, "margin-top", &su); |
bufcat_su(h, "margin-top", &su); |
Line 875 mdoc_it_pre(MDOC_ARGS) |
|
Line 860 mdoc_it_pre(MDOC_ARGS) |
|
print_otag(h, TAG_LI, 2, tag); |
print_otag(h, TAG_LI, 2, tag); |
break; |
break; |
case LIST_diag: |
case LIST_diag: |
/* FALLTHROUGH */ |
|
case LIST_hang: |
case LIST_hang: |
/* FALLTHROUGH */ |
|
case LIST_inset: |
case LIST_inset: |
/* FALLTHROUGH */ |
|
case LIST_ohang: |
case LIST_ohang: |
/* FALLTHROUGH */ |
|
case LIST_tag: |
case LIST_tag: |
if (NULL == bl->norm->Bl.width) { |
if (NULL == bl->norm->Bl.width) { |
print_otag(h, TAG_DD, 1, tag); |
print_otag(h, TAG_DD, 1, tag); |
Line 973 mdoc_bl_pre(MDOC_ARGS) |
|
Line 954 mdoc_bl_pre(MDOC_ARGS) |
|
|
|
switch (n->norm->Bl.type) { |
switch (n->norm->Bl.type) { |
case LIST_bullet: |
case LIST_bullet: |
/* FALLTHROUGH */ |
|
case LIST_dash: |
case LIST_dash: |
/* FALLTHROUGH */ |
|
case LIST_hyphen: |
case LIST_hyphen: |
/* FALLTHROUGH */ |
|
case LIST_item: |
case LIST_item: |
print_otag(h, TAG_UL, 2, tag); |
print_otag(h, TAG_UL, 2, tag); |
break; |
break; |
Line 985 mdoc_bl_pre(MDOC_ARGS) |
|
Line 963 mdoc_bl_pre(MDOC_ARGS) |
|
print_otag(h, TAG_OL, 2, tag); |
print_otag(h, TAG_OL, 2, tag); |
break; |
break; |
case LIST_diag: |
case LIST_diag: |
/* FALLTHROUGH */ |
|
case LIST_hang: |
case LIST_hang: |
/* FALLTHROUGH */ |
|
case LIST_inset: |
case LIST_inset: |
/* FALLTHROUGH */ |
|
case LIST_ohang: |
case LIST_ohang: |
/* FALLTHROUGH */ |
|
case LIST_tag: |
case LIST_tag: |
print_otag(h, TAG_DL, 2, tag); |
print_otag(h, TAG_DL, 2, tag); |
break; |
break; |
Line 1008 mdoc_bl_pre(MDOC_ARGS) |
|
Line 982 mdoc_bl_pre(MDOC_ARGS) |
|
static int |
static int |
mdoc_ex_pre(MDOC_ARGS) |
mdoc_ex_pre(MDOC_ARGS) |
{ |
{ |
struct tag *t; |
struct htmlpair tag; |
struct htmlpair tag; |
struct tag *t; |
int nchild; |
struct roff_node *nch; |
|
|
if (n->prev) |
if (n->prev) |
print_otag(h, TAG_BR, 0, NULL); |
print_otag(h, TAG_BR, 0, NULL); |
Line 1019 mdoc_ex_pre(MDOC_ARGS) |
|
Line 993 mdoc_ex_pre(MDOC_ARGS) |
|
|
|
print_text(h, "The"); |
print_text(h, "The"); |
|
|
nchild = n->nchild; |
for (nch = n->child; nch != NULL; nch = nch->next) { |
for (n = n->child; n; n = n->next) { |
assert(nch->type == ROFFT_TEXT); |
assert(n->type == ROFFT_TEXT); |
|
|
|
t = print_otag(h, TAG_B, 1, &tag); |
t = print_otag(h, TAG_B, 1, &tag); |
print_text(h, n->string); |
print_text(h, nch->string); |
print_tagq(h, t); |
print_tagq(h, t); |
|
|
if (nchild > 2 && n->next) { |
if (nch->next == NULL) |
|
continue; |
|
|
|
if (nch->prev != NULL || nch->next->next != NULL) { |
h->flags |= HTML_NOSPACE; |
h->flags |= HTML_NOSPACE; |
print_text(h, ","); |
print_text(h, ","); |
} |
} |
|
|
if (n->next && NULL == n->next->next) |
if (nch->next->next == NULL) |
print_text(h, "and"); |
print_text(h, "and"); |
} |
} |
|
|
if (nchild > 1) |
if (n->child != NULL && n->child->next != NULL) |
print_text(h, "utilities exit\\~0"); |
print_text(h, "utilities exit\\~0"); |
else |
else |
print_text(h, "utility exits\\~0"); |
print_text(h, "utility exits\\~0"); |
Line 1090 mdoc_sx_pre(MDOC_ARGS) |
|
Line 1066 mdoc_sx_pre(MDOC_ARGS) |
|
struct htmlpair tag[2]; |
struct htmlpair tag[2]; |
|
|
bufinit(h); |
bufinit(h); |
bufcat(h, "#x"); |
bufcat(h, "#"); |
|
|
for (n = n->child; n; ) { |
for (n = n->child; n; ) { |
bufcat_id(h, n->string); |
bufcat_id(h, n->string); |
Line 1148 mdoc_bd_pre(MDOC_ARGS) |
|
Line 1124 mdoc_bd_pre(MDOC_ARGS) |
|
bufcat_su(h, "margin-left", &su); |
bufcat_su(h, "margin-left", &su); |
PAIR_STYLE_INIT(&tag[0], h); |
PAIR_STYLE_INIT(&tag[0], h); |
|
|
if (DISP_unfilled != n->norm->Bd.type && |
PAIR_CLASS_INIT(&tag[1], "display"); |
DISP_literal != n->norm->Bd.type) { |
print_otag(h, TAG_DIV, 2, tag); |
PAIR_CLASS_INIT(&tag[1], "display"); |
|
print_otag(h, TAG_DIV, 2, tag); |
if (n->norm->Bd.type != DISP_unfilled && |
|
n->norm->Bd.type != DISP_literal) |
return 1; |
return 1; |
} |
|
|
|
PAIR_CLASS_INIT(&tag[1], "lit display"); |
PAIR_CLASS_INIT(&tag[0], "lit"); |
print_otag(h, TAG_PRE, 2, tag); |
print_otag(h, TAG_PRE, 1, tag); |
|
|
/* This can be recursive: save & set our literal state. */ |
/* This can be recursive: save & set our literal state. */ |
|
|
Line 1173 mdoc_bd_pre(MDOC_ARGS) |
|
Line 1149 mdoc_bd_pre(MDOC_ARGS) |
|
*/ |
*/ |
switch (nn->tok) { |
switch (nn->tok) { |
case MDOC_Sm: |
case MDOC_Sm: |
/* FALLTHROUGH */ |
|
case MDOC_br: |
case MDOC_br: |
/* FALLTHROUGH */ |
|
case MDOC_sp: |
case MDOC_sp: |
/* FALLTHROUGH */ |
|
case MDOC_Bl: |
case MDOC_Bl: |
/* FALLTHROUGH */ |
|
case MDOC_D1: |
case MDOC_D1: |
/* FALLTHROUGH */ |
|
case MDOC_Dl: |
case MDOC_Dl: |
/* FALLTHROUGH */ |
|
case MDOC_Lp: |
case MDOC_Lp: |
/* FALLTHROUGH */ |
|
case MDOC_Pp: |
case MDOC_Pp: |
continue; |
continue; |
default: |
default: |
Line 1731 mdoc_rv_pre(MDOC_ARGS) |
|
Line 1700 mdoc_rv_pre(MDOC_ARGS) |
|
{ |
{ |
struct htmlpair tag; |
struct htmlpair tag; |
struct tag *t; |
struct tag *t; |
int nchild; |
struct roff_node *nch; |
|
|
if (n->prev) |
if (n->prev) |
print_otag(h, TAG_BR, 0, NULL); |
print_otag(h, TAG_BR, 0, NULL); |
|
|
PAIR_CLASS_INIT(&tag, "fname"); |
PAIR_CLASS_INIT(&tag, "fname"); |
|
|
nchild = n->nchild; |
if (n->child != NULL) { |
if (nchild > 0) { |
|
print_text(h, "The"); |
print_text(h, "The"); |
|
|
for (n = n->child; n; n = n->next) { |
for (nch = n->child; nch != NULL; nch = nch->next) { |
t = print_otag(h, TAG_B, 1, &tag); |
t = print_otag(h, TAG_B, 1, &tag); |
print_text(h, n->string); |
print_text(h, nch->string); |
print_tagq(h, t); |
print_tagq(h, t); |
|
|
h->flags |= HTML_NOSPACE; |
h->flags |= HTML_NOSPACE; |
print_text(h, "()"); |
print_text(h, "()"); |
|
|
if (n->next == NULL) |
if (nch->next == NULL) |
continue; |
continue; |
|
|
if (nchild > 2) { |
if (nch->prev != NULL || nch->next->next != NULL) { |
h->flags |= HTML_NOSPACE; |
h->flags |= HTML_NOSPACE; |
print_text(h, ","); |
print_text(h, ","); |
} |
} |
if (n->next->next == NULL) |
if (nch->next->next == NULL) |
print_text(h, "and"); |
print_text(h, "and"); |
} |
} |
|
|
if (nchild > 1) |
if (n->child != NULL && n->child->next != NULL) |
print_text(h, "functions return"); |
print_text(h, "functions return"); |
else |
else |
print_text(h, "function returns"); |
print_text(h, "function returns"); |
Line 1884 mdoc_no_pre(MDOC_ARGS) |
|
Line 1852 mdoc_no_pre(MDOC_ARGS) |
|
struct htmlpair tag; |
struct htmlpair tag; |
|
|
PAIR_CLASS_INIT(&tag, "none"); |
PAIR_CLASS_INIT(&tag, "none"); |
print_otag(h, TAG_CODE, 1, &tag); |
print_otag(h, TAG_SPAN, 1, &tag); |
return 1; |
return 1; |
} |
} |
|
|
Line 2037 mdoc_bk_pre(MDOC_ARGS) |
|
Line 2005 mdoc_bk_pre(MDOC_ARGS) |
|
case ROFFT_HEAD: |
case ROFFT_HEAD: |
return 0; |
return 0; |
case ROFFT_BODY: |
case ROFFT_BODY: |
if (n->parent->args || 0 == n->prev->nchild) |
if (n->parent->args != NULL || n->prev->child == NULL) |
h->flags |= HTML_PREKEEP; |
h->flags |= HTML_PREKEEP; |
break; |
break; |
default: |
default: |
Line 2065 mdoc_quote_pre(MDOC_ARGS) |
|
Line 2033 mdoc_quote_pre(MDOC_ARGS) |
|
|
|
switch (n->tok) { |
switch (n->tok) { |
case MDOC_Ao: |
case MDOC_Ao: |
/* FALLTHROUGH */ |
|
case MDOC_Aq: |
case MDOC_Aq: |
print_text(h, n->nchild == 1 && |
print_text(h, n->child != NULL && n->child->next == NULL && |
n->child->tok == MDOC_Mt ? "<" : "\\(la"); |
n->child->tok == MDOC_Mt ? "<" : "\\(la"); |
break; |
break; |
case MDOC_Bro: |
case MDOC_Bro: |
/* FALLTHROUGH */ |
|
case MDOC_Brq: |
case MDOC_Brq: |
print_text(h, "\\(lC"); |
print_text(h, "\\(lC"); |
break; |
break; |
case MDOC_Bo: |
case MDOC_Bo: |
/* FALLTHROUGH */ |
|
case MDOC_Bq: |
case MDOC_Bq: |
print_text(h, "\\(lB"); |
print_text(h, "\\(lB"); |
break; |
break; |
case MDOC_Oo: |
case MDOC_Oo: |
/* FALLTHROUGH */ |
|
case MDOC_Op: |
case MDOC_Op: |
print_text(h, "\\(lB"); |
print_text(h, "\\(lB"); |
h->flags |= HTML_NOSPACE; |
h->flags |= HTML_NOSPACE; |
Line 2095 mdoc_quote_pre(MDOC_ARGS) |
|
Line 2059 mdoc_quote_pre(MDOC_ARGS) |
|
print_text(h, n->norm->Es->child->string); |
print_text(h, n->norm->Es->child->string); |
break; |
break; |
case MDOC_Do: |
case MDOC_Do: |
/* FALLTHROUGH */ |
|
case MDOC_Dq: |
case MDOC_Dq: |
/* FALLTHROUGH */ |
|
case MDOC_Qo: |
case MDOC_Qo: |
/* FALLTHROUGH */ |
|
case MDOC_Qq: |
case MDOC_Qq: |
print_text(h, "\\(lq"); |
print_text(h, "\\(lq"); |
break; |
break; |
case MDOC_Po: |
case MDOC_Po: |
/* FALLTHROUGH */ |
|
case MDOC_Pq: |
case MDOC_Pq: |
print_text(h, "("); |
print_text(h, "("); |
break; |
break; |
Line 2115 mdoc_quote_pre(MDOC_ARGS) |
|
Line 2075 mdoc_quote_pre(MDOC_ARGS) |
|
print_otag(h, TAG_CODE, 1, &tag); |
print_otag(h, TAG_CODE, 1, &tag); |
break; |
break; |
case MDOC_So: |
case MDOC_So: |
/* FALLTHROUGH */ |
|
case MDOC_Sq: |
case MDOC_Sq: |
print_text(h, "\\(oq"); |
print_text(h, "\\(oq"); |
break; |
break; |
Line 2138 mdoc_quote_post(MDOC_ARGS) |
|
Line 2097 mdoc_quote_post(MDOC_ARGS) |
|
|
|
switch (n->tok) { |
switch (n->tok) { |
case MDOC_Ao: |
case MDOC_Ao: |
/* FALLTHROUGH */ |
|
case MDOC_Aq: |
case MDOC_Aq: |
print_text(h, n->nchild == 1 && |
print_text(h, n->child != NULL && n->child->next == NULL && |
n->child->tok == MDOC_Mt ? ">" : "\\(ra"); |
n->child->tok == MDOC_Mt ? ">" : "\\(ra"); |
break; |
break; |
case MDOC_Bro: |
case MDOC_Bro: |
/* FALLTHROUGH */ |
|
case MDOC_Brq: |
case MDOC_Brq: |
print_text(h, "\\(rC"); |
print_text(h, "\\(rC"); |
break; |
break; |
case MDOC_Oo: |
case MDOC_Oo: |
/* FALLTHROUGH */ |
|
case MDOC_Op: |
case MDOC_Op: |
/* FALLTHROUGH */ |
|
case MDOC_Bo: |
case MDOC_Bo: |
/* FALLTHROUGH */ |
|
case MDOC_Bq: |
case MDOC_Bq: |
print_text(h, "\\(rB"); |
print_text(h, "\\(rB"); |
break; |
break; |
Line 2166 mdoc_quote_post(MDOC_ARGS) |
|
Line 2120 mdoc_quote_post(MDOC_ARGS) |
|
print_text(h, n->norm->Es->child->next->string); |
print_text(h, n->norm->Es->child->next->string); |
break; |
break; |
case MDOC_Qo: |
case MDOC_Qo: |
/* FALLTHROUGH */ |
|
case MDOC_Qq: |
case MDOC_Qq: |
/* FALLTHROUGH */ |
|
case MDOC_Do: |
case MDOC_Do: |
/* FALLTHROUGH */ |
|
case MDOC_Dq: |
case MDOC_Dq: |
print_text(h, "\\(rq"); |
print_text(h, "\\(rq"); |
break; |
break; |
case MDOC_Po: |
case MDOC_Po: |
/* FALLTHROUGH */ |
|
case MDOC_Pq: |
case MDOC_Pq: |
print_text(h, ")"); |
print_text(h, ")"); |
break; |
break; |
case MDOC_Ql: |
case MDOC_Ql: |
/* FALLTHROUGH */ |
|
case MDOC_So: |
case MDOC_So: |
/* FALLTHROUGH */ |
|
case MDOC_Sq: |
case MDOC_Sq: |
print_text(h, "\\(cq"); |
print_text(h, "\\(cq"); |
break; |
break; |