version 1.41, 2012/07/29 16:31:44 |
version 1.42, 2012/11/17 00:25:20 |
|
|
#include "mdoc.h" |
#include "mdoc.h" |
#include "main.h" |
#include "main.h" |
|
|
#define DECL_ARGS const struct mdoc_meta *m, \ |
#define DECL_ARGS const struct mdoc_meta *meta, \ |
const struct mdoc_node *n |
const struct mdoc_node *n |
|
|
struct manact { |
struct manact { |
|
|
void |
void |
man_mdoc(void *arg, const struct mdoc *mdoc) |
man_mdoc(void *arg, const struct mdoc *mdoc) |
{ |
{ |
const struct mdoc_meta *m; |
const struct mdoc_meta *meta; |
const struct mdoc_node *n; |
const struct mdoc_node *n; |
|
|
m = mdoc_meta(mdoc); |
meta = mdoc_meta(mdoc); |
n = mdoc_node(mdoc); |
n = mdoc_node(mdoc); |
|
|
printf(".TH \"%s\" \"%s\" \"%s\" \"%s\" \"%s\"\n", |
printf(".TH \"%s\" \"%s\" \"%s\" \"%s\" \"%s\"\n", |
m->title, m->msec, m->date, m->os, m->vol); |
meta->title, meta->msec, meta->date, |
|
meta->os, meta->vol); |
|
|
/* Disable hyphenation and if nroff, disable justification. */ |
/* Disable hyphenation and if nroff, disable justification. */ |
printf(".nh\n.if n .ad l"); |
printf(".nh\n.if n .ad l"); |
|
|
fontqueue.head = fontqueue.tail = mandoc_malloc(8); |
fontqueue.head = fontqueue.tail = mandoc_malloc(8); |
*fontqueue.tail = 'R'; |
*fontqueue.tail = 'R'; |
} |
} |
print_node(m, n); |
print_node(meta, n); |
putchar('\n'); |
putchar('\n'); |
} |
} |
|
|
|
|
* node. |
* node. |
*/ |
*/ |
act = manacts + n->tok; |
act = manacts + n->tok; |
cond = NULL == act->cond || (*act->cond)(m, n); |
cond = NULL == act->cond || (*act->cond)(meta, n); |
if (cond && act->pre) |
if (cond && act->pre) |
do_sub = (*act->pre)(m, n); |
do_sub = (*act->pre)(meta, n); |
} |
} |
|
|
/* |
/* |
|
|
*/ |
*/ |
if (do_sub) |
if (do_sub) |
for (sub = n->child; sub; sub = sub->next) |
for (sub = n->child; sub; sub = sub->next) |
print_node(m, sub); |
print_node(meta, sub); |
|
|
/* |
/* |
* Lastly, conditionally run the post-node handler. |
* Lastly, conditionally run the post-node handler. |
*/ |
*/ |
if (cond && act->post) |
if (cond && act->post) |
(*act->post)(m, n); |
(*act->post)(meta, n); |
} |
} |
|
|
static int |
static int |
|
|
putchar('\"'); |
putchar('\"'); |
} else |
} else |
font_pop(); |
font_pop(); |
post_percent(m, n); |
post_percent(meta, n); |
} |
} |
|
|
/* |
/* |
|
|
|
|
while (NULL != n) { |
while (NULL != n) { |
font_push('I'); |
font_push('I'); |
print_node(m, n); |
print_node(meta, n); |
font_pop(); |
font_pop(); |
if (NULL != (n = n->next)) |
if (NULL != (n = n->next)) |
print_word(","); |
print_word(","); |
|
|
return(0); |
return(0); |
|
|
font_push('B'); |
font_push('B'); |
print_node(m, n); |
print_node(meta, n); |
font_pop(); |
font_pop(); |
outflags &= ~MMAN_spc; |
outflags &= ~MMAN_spc; |
print_word("("); |
print_word("("); |
|
|
|
|
n = n->next; |
n = n->next; |
if (NULL != n) |
if (NULL != n) |
pre_fa(m, n); |
pre_fa(meta, n); |
return(0); |
return(0); |
} |
} |
|
|
|
|
font_pop(); |
font_pop(); |
break; |
break; |
case (MDOC_BODY): |
case (MDOC_BODY): |
post_fn(m, n); |
post_fn(meta, n); |
break; |
break; |
default: |
default: |
break; |
break; |
|
|
pre_syn(n); |
pre_syn(n); |
if (MDOC_ELEM != n->type && MDOC_HEAD != n->type) |
if (MDOC_ELEM != n->type && MDOC_HEAD != n->type) |
return(1); |
return(1); |
name = n->child ? n->child->string : m->name; |
name = n->child ? n->child->string : meta->name; |
if (NULL == name) |
if (NULL == name) |
return(0); |
return(0); |
if (MDOC_HEAD == n->type) { |
if (MDOC_HEAD == n->type) { |
|
|
} |
} |
font_push('B'); |
font_push('B'); |
if (NULL == n->child) |
if (NULL == n->child) |
print_word(m->name); |
print_word(meta->name); |
return(1); |
return(1); |
} |
} |
|
|
|
|
n = n->child; |
n = n->child; |
if (NULL == n) |
if (NULL == n) |
return(0); |
return(0); |
print_node(m, n); |
print_node(meta, n); |
n = n->next; |
n = n->next; |
if (NULL == n) |
if (NULL == n) |
return(0); |
return(0); |
outflags &= ~MMAN_spc; |
outflags &= ~MMAN_spc; |
print_word("("); |
print_word("("); |
print_node(m, n); |
print_node(meta, n); |
print_word(")"); |
print_word(")"); |
return(0); |
return(0); |
} |
} |