version 1.212, 2014/11/27 16:20:31 |
version 1.220, 2015/01/30 22:04:44 |
|
|
/* $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 |
|
|
#include <string.h> |
#include <string.h> |
#include <unistd.h> |
#include <unistd.h> |
|
|
#include "mandoc.h" |
|
#include "mandoc_aux.h" |
#include "mandoc_aux.h" |
|
#include "mdoc.h" |
#include "out.h" |
#include "out.h" |
#include "html.h" |
#include "html.h" |
#include "mdoc.h" |
|
#include "main.h" |
#include "main.h" |
|
|
#define INDENT 5 |
#define INDENT 5 |
|
|
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 423 print_mdoc_node(MDOC_ARGS) |
|
Line 424 print_mdoc_node(MDOC_ARGS) |
|
* the "meta" table state. This will be reopened on the |
* the "meta" table state. This will be reopened on the |
* next table element. |
* next table element. |
*/ |
*/ |
if (h->tblt) { |
if (h->tblt != NULL) { |
print_tblclose(h); |
print_tblclose(h); |
t = h->tags.head; |
t = h->tags.head; |
} |
} |
|
assert(h->tblt == NULL); |
assert(NULL == h->tblt); |
if (mdocs[n->tok].pre && (n->end == ENDBODY_NOT || n->child)) |
if (mdocs[n->tok].pre && ENDBODY_NOT == n->end) |
|
child = (*mdocs[n->tok].pre)(meta, n, h); |
child = (*mdocs[n->tok].pre)(meta, n, h); |
break; |
break; |
} |
} |
Line 454 print_mdoc_node(MDOC_ARGS) |
|
Line 454 print_mdoc_node(MDOC_ARGS) |
|
case MDOC_EQN: |
case MDOC_EQN: |
break; |
break; |
default: |
default: |
if (mdocs[n->tok].post && ENDBODY_NOT == n->end) |
if ( ! mdocs[n->tok].post || n->flags & MDOC_ENDED) |
(*mdocs[n->tok].post)(meta, n, h); |
break; |
|
(*mdocs[n->tok].post)(meta, n, h); |
|
if (n->end != ENDBODY_NOT) |
|
n->pending->flags |= MDOC_ENDED; |
|
if (n->end == ENDBODY_NOSPACE) |
|
h->flags |= HTML_NOSPACE; |
break; |
break; |
} |
} |
} |
} |
Line 1198 mdoc_bd_pre(MDOC_ARGS) |
|
Line 1203 mdoc_bd_pre(MDOC_ARGS) |
|
default: |
default: |
break; |
break; |
} |
} |
if (nn->next && nn->next->line == nn->line) |
if (h->flags & HTML_NONEWLINE || |
|
(nn->next && ! (nn->next->flags & MDOC_LINE))) |
continue; |
continue; |
else if (nn->next) |
else if (nn->next) |
print_text(h, "\n"); |
print_text(h, "\n"); |
Line 1562 mdoc_sp_pre(MDOC_ARGS) |
|
Line 1568 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; |
|
|
|
|
mdoc_pf_post(MDOC_ARGS) |
mdoc_pf_post(MDOC_ARGS) |
{ |
{ |
|
|
h->flags |= HTML_NOSPACE; |
if ( ! (n->next == NULL || n->next->flags & MDOC_LINE)) |
|
h->flags |= HTML_NOSPACE; |
} |
} |
|
|
static int |
static int |
Line 2075 mdoc_quote_pre(MDOC_ARGS) |
|
Line 2085 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 */ |
|
|
mdoc_quote_post(MDOC_ARGS) |
mdoc_quote_post(MDOC_ARGS) |
{ |
{ |
|
|
if (MDOC_BODY != n->type) |
if (n->type != MDOC_BODY && n->type != MDOC_ELEM) |
return; |
return; |
|
|
if (MDOC_En != n->tok) |
if ( ! (n->tok == MDOC_En || |
|
(n->tok == MDOC_Eo && n->end == ENDBODY_SPACE))) |
h->flags |= HTML_NOSPACE; |
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 */ |