version 1.216, 2014/12/02 10:08:06 |
version 1.223, 2015/02/05 01:46:56 |
|
|
/* $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 Ingo Schwarze <schwarze@openbsd.org> |
* Copyright (c) 2014, 2015 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 81 static int mdoc_fl_pre(MDOC_ARGS); |
|
Line 81 static int mdoc_fl_pre(MDOC_ARGS); |
|
static int mdoc_fn_pre(MDOC_ARGS); |
static int mdoc_fn_pre(MDOC_ARGS); |
static int mdoc_ft_pre(MDOC_ARGS); |
static int mdoc_ft_pre(MDOC_ARGS); |
static int mdoc_em_pre(MDOC_ARGS); |
static int mdoc_em_pre(MDOC_ARGS); |
|
static void mdoc_eo_post(MDOC_ARGS); |
|
static int mdoc_eo_pre(MDOC_ARGS); |
static int mdoc_er_pre(MDOC_ARGS); |
static int mdoc_er_pre(MDOC_ARGS); |
static int mdoc_ev_pre(MDOC_ARGS); |
static int mdoc_ev_pre(MDOC_ARGS); |
static int mdoc_ex_pre(MDOC_ARGS); |
static int mdoc_ex_pre(MDOC_ARGS); |
Line 189 static const struct htmlmdoc mdocs[MDOC_MAX] = { |
|
Line 191 static const struct htmlmdoc mdocs[MDOC_MAX] = { |
|
{NULL, NULL}, /* Ec */ /* FIXME: no space */ |
{NULL, NULL}, /* Ec */ /* FIXME: no space */ |
{NULL, NULL}, /* Ef */ |
{NULL, NULL}, /* Ef */ |
{mdoc_em_pre, NULL}, /* Em */ |
{mdoc_em_pre, NULL}, /* Em */ |
{mdoc_quote_pre, mdoc_quote_post}, /* Eo */ |
{mdoc_eo_pre, mdoc_eo_post}, /* Eo */ |
{mdoc_xx_pre, NULL}, /* Fx */ |
{mdoc_xx_pre, NULL}, /* Fx */ |
{mdoc_ms_pre, NULL}, /* Ms */ |
{mdoc_ms_pre, NULL}, /* Ms */ |
{mdoc_no_pre, NULL}, /* No */ |
{mdoc_no_pre, NULL}, /* No */ |
|
|
a2width(const char *p, struct roffsu *su) |
a2width(const char *p, struct roffsu *su) |
{ |
{ |
|
|
if ( ! a2roffsu(p, su, SCALE_MAX)) { |
if (a2roffsu(p, su, SCALE_MAX) < 2) { |
su->unit = SCALE_EN; |
su->unit = SCALE_EN; |
su->scale = html_strlen(p); |
su->scale = html_strlen(p); |
} |
} else if (su->scale < 0.0) |
|
su->scale = 0.0; |
} |
} |
|
|
/* |
/* |
|
|
print_mdoc_nodelist(MDOC_ARGS) |
print_mdoc_nodelist(MDOC_ARGS) |
{ |
{ |
|
|
print_mdoc_node(meta, n, h); |
while (n != NULL) { |
if (n->next) |
print_mdoc_node(meta, n, h); |
print_mdoc_nodelist(meta, n->next, h); |
n = n->next; |
|
} |
} |
} |
|
|
static void |
static void |
Line 432 print_mdoc_node(MDOC_ARGS) |
|
Line 436 print_mdoc_node(MDOC_ARGS) |
|
break; |
break; |
} |
} |
|
|
if (HTML_KEEP & h->flags) { |
if (h->flags & HTML_KEEP && n->flags & MDOC_LINE) { |
if (n->prev ? (n->prev->lastline != n->line) : |
h->flags &= ~HTML_KEEP; |
(n->parent && n->parent->line != n->line)) { |
h->flags |= HTML_PREKEEP; |
h->flags &= ~HTML_KEEP; |
|
h->flags |= HTML_PREKEEP; |
|
} |
|
} |
} |
|
|
if (child && n->child) |
if (child && n->child) |
Line 1252 mdoc_an_pre(MDOC_ARGS) |
|
Line 1253 mdoc_an_pre(MDOC_ARGS) |
|
return(0); |
return(0); |
} |
} |
|
|
if (n->child == NULL) |
|
return(0); |
|
|
|
if (h->flags & HTML_SPLIT) |
if (h->flags & HTML_SPLIT) |
print_otag(h, TAG_BR, 0, NULL); |
print_otag(h, TAG_BR, 0, NULL); |
|
|
Line 1566 mdoc_sp_pre(MDOC_ARGS) |
|
Line 1564 mdoc_sp_pre(MDOC_ARGS) |
|
SCALE_VS_INIT(&su, 1); |
SCALE_VS_INIT(&su, 1); |
|
|
if (MDOC_sp == n->tok) { |
if (MDOC_sp == n->tok) { |
if (NULL != (n = n->child)) |
if (NULL != (n = n->child)) { |
if ( ! a2roffsu(n->string, &su, SCALE_VS)) |
if ( ! a2roffsu(n->string, &su, SCALE_VS)) |
SCALE_VS_INIT(&su, atoi(n->string)); |
su.scale = 1.0; |
|
else if (su.scale < 0.0) |
|
su.scale = 0.0; |
|
} |
} else |
} else |
su.scale = 0.0; |
su.scale = 0.0; |
|
|
Line 2080 mdoc_quote_pre(MDOC_ARGS) |
|
Line 2081 mdoc_quote_pre(MDOC_ARGS) |
|
case MDOC_Ao: |
case MDOC_Ao: |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case MDOC_Aq: |
case MDOC_Aq: |
print_text(h, n->parent->prev != NULL && |
print_text(h, n->nchild == 1 && |
n->parent->prev->tok == MDOC_An ? "<" : "\\(la"); |
n->child->tok == MDOC_Mt ? "<" : "\\(la"); |
break; |
break; |
case MDOC_Bro: |
case MDOC_Bro: |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
Line 2107 mdoc_quote_pre(MDOC_ARGS) |
|
Line 2108 mdoc_quote_pre(MDOC_ARGS) |
|
return(1); |
return(1); |
print_text(h, n->norm->Es->child->string); |
print_text(h, n->norm->Es->child->string); |
break; |
break; |
case MDOC_Eo: |
|
break; |
|
case MDOC_Do: |
case MDOC_Do: |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case MDOC_Dq: |
case MDOC_Dq: |
Line 2150 mdoc_quote_post(MDOC_ARGS) |
|
Line 2149 mdoc_quote_post(MDOC_ARGS) |
|
if (n->type != MDOC_BODY && n->type != MDOC_ELEM) |
if (n->type != MDOC_BODY && n->type != MDOC_ELEM) |
return; |
return; |
|
|
if ( ! (n->tok == MDOC_En || |
h->flags |= HTML_NOSPACE; |
(n->tok == MDOC_Eo && n->end == ENDBODY_SPACE))) |
|
h->flags |= HTML_NOSPACE; |
|
|
|
switch (n->tok) { |
switch (n->tok) { |
case MDOC_Ao: |
case MDOC_Ao: |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case MDOC_Aq: |
case MDOC_Aq: |
print_text(h, n->parent->prev != NULL && |
print_text(h, n->nchild == 1 && |
n->parent->prev->tok == MDOC_An ? ">" : "\\(ra"); |
n->child->tok == MDOC_Mt ? ">" : "\\(ra"); |
break; |
break; |
case MDOC_Bro: |
case MDOC_Bro: |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
Line 2176 mdoc_quote_post(MDOC_ARGS) |
|
Line 2173 mdoc_quote_post(MDOC_ARGS) |
|
print_text(h, "\\(rB"); |
print_text(h, "\\(rB"); |
break; |
break; |
case MDOC_En: |
case MDOC_En: |
if (NULL != n->norm->Es && |
if (n->norm->Es == NULL || |
NULL != n->norm->Es->child && |
n->norm->Es->child == NULL || |
NULL != n->norm->Es->child->next) { |
n->norm->Es->child->next == NULL) |
h->flags |= HTML_NOSPACE; |
h->flags &= ~HTML_NOSPACE; |
|
else |
print_text(h, n->norm->Es->child->next->string); |
print_text(h, n->norm->Es->child->next->string); |
} |
|
break; |
break; |
case MDOC_Eo: |
|
break; |
|
case MDOC_Qo: |
case MDOC_Qo: |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case MDOC_Qq: |
case MDOC_Qq: |
Line 2210 mdoc_quote_post(MDOC_ARGS) |
|
Line 2205 mdoc_quote_post(MDOC_ARGS) |
|
abort(); |
abort(); |
/* NOTREACHED */ |
/* NOTREACHED */ |
} |
} |
|
} |
|
|
|
static int |
|
mdoc_eo_pre(MDOC_ARGS) |
|
{ |
|
|
|
if (n->type != MDOC_BODY) |
|
return(1); |
|
|
|
if (n->end == ENDBODY_NOT && |
|
n->parent->head->child == NULL && |
|
n->child != NULL && |
|
n->child->end != ENDBODY_NOT) |
|
print_text(h, "\\&"); |
|
else if (n->end != ENDBODY_NOT ? n->child != NULL : |
|
n->parent->head->child != NULL && |
|
(n->parent->body->child != NULL || |
|
n->parent->tail->child != NULL)) |
|
h->flags |= HTML_NOSPACE; |
|
return(1); |
|
} |
|
|
|
static void |
|
mdoc_eo_post(MDOC_ARGS) |
|
{ |
|
int body, tail; |
|
|
|
if (n->type != MDOC_BODY) |
|
return; |
|
|
|
if (n->end != ENDBODY_NOT) { |
|
h->flags &= ~HTML_NOSPACE; |
|
return; |
|
} |
|
|
|
body = n->child != NULL || n->parent->head->child != NULL; |
|
tail = n->parent->tail != NULL && n->parent->tail->child != NULL; |
|
|
|
if (body && tail) |
|
h->flags |= HTML_NOSPACE; |
|
else if ( ! tail) |
|
h->flags &= ~HTML_NOSPACE; |
} |
} |