=================================================================== RCS file: /cvs/mandoc/mdoc_man.c,v retrieving revision 1.26 retrieving revision 1.28 diff -u -p -r1.26 -r1.28 --- mandoc/mdoc_man.c 2012/07/09 17:53:01 1.26 +++ mandoc/mdoc_man.c 2012/07/09 22:36:34 1.28 @@ -1,4 +1,4 @@ -/* $Id: mdoc_man.c,v 1.26 2012/07/09 17:53:01 schwarze Exp $ */ +/* $Id: mdoc_man.c,v 1.28 2012/07/09 22:36:34 schwarze Exp $ */ /* * Copyright (c) 2011, 2012 Ingo Schwarze * @@ -44,9 +44,11 @@ static int cond_head(DECL_ARGS); static void font_push(char); static void font_pop(void); static void post_bd(DECL_ARGS); +static void post_bf(DECL_ARGS); static void post_bk(DECL_ARGS); static void post_dl(DECL_ARGS); static void post_enc(DECL_ARGS); +static void post_eo(DECL_ARGS); static void post_fa(DECL_ARGS); static void post_fl(DECL_ARGS); static void post_fn(DECL_ARGS); @@ -63,6 +65,7 @@ static void post_vt(DECL_ARGS); static int pre_an(DECL_ARGS); static int pre_ap(DECL_ARGS); static int pre_bd(DECL_ARGS); +static int pre_bf(DECL_ARGS); static int pre_bk(DECL_ARGS); static int pre_br(DECL_ARGS); static int pre_bx(DECL_ARGS); @@ -158,7 +161,7 @@ static const struct manact manacts[MDOC_MAX + 1] = { { cond_body, pre_enc, post_enc, "<", ">" }, /* Aq */ { NULL, NULL, NULL, NULL, NULL }, /* At */ { NULL, NULL, NULL, NULL, NULL }, /* Bc */ - { NULL, NULL, NULL, NULL, NULL }, /* _Bf */ + { NULL, pre_bf, post_bf, NULL, NULL }, /* Bf */ { cond_body, pre_enc, post_enc, "[", "]" }, /* Bo */ { cond_body, pre_enc, post_enc, "[", "]" }, /* Bq */ { NULL, pre_ux, NULL, "BSD/OS", NULL }, /* Bsx */ @@ -167,10 +170,10 @@ static const struct manact manacts[MDOC_MAX + 1] = { { NULL, NULL, NULL, NULL, NULL }, /* Dc */ { cond_body, pre_enc, post_enc, "``", "''" }, /* Do */ { cond_body, pre_enc, post_enc, "``", "''" }, /* Dq */ - { NULL, NULL, NULL, NULL, NULL }, /* _Ec */ - { NULL, NULL, NULL, NULL, NULL }, /* _Ef */ + { NULL, NULL, NULL, NULL, NULL }, /* Ec */ + { NULL, NULL, NULL, NULL, NULL }, /* Ef */ { NULL, pre_em, post_font, NULL, NULL }, /* Em */ - { NULL, NULL, NULL, NULL, NULL }, /* _Eo */ + { NULL, NULL, post_eo, NULL, NULL }, /* Eo */ { NULL, pre_ux, NULL, "FreeBSD", NULL }, /* Fx */ { NULL, pre_sy, post_font, NULL, NULL }, /* Ms */ { NULL, pre_no, NULL, NULL, NULL }, /* No */ @@ -396,8 +399,7 @@ print_node(DECL_ARGS) * This makes the page structure be more consistent. */ prev = n->prev ? n->prev : n->parent; - if (prev && prev->line < n->line && - MDOC_Fo != prev->tok && MDOC_Ns != prev->tok) + if (MMAN_spc & outflags && prev && prev->line < n->line) outflags |= MMAN_nl; act = NULL; @@ -644,6 +646,40 @@ post_bd(DECL_ARGS) } static int +pre_bf(DECL_ARGS) +{ + + switch (n->type) { + case (MDOC_BLOCK): + return(1); + case (MDOC_BODY): + break; + default: + return(0); + } + switch (n->norm->Bf.font) { + case (FONT_Em): + font_push('I'); + break; + case (FONT_Sy): + font_push('B'); + break; + default: + font_push('R'); + break; + } + return(1); +} + +static void +post_bf(DECL_ARGS) +{ + + if (MDOC_BODY == n->type) + font_pop(); +} + +static int pre_bk(DECL_ARGS) { @@ -721,6 +757,14 @@ pre_em(DECL_ARGS) return(1); } +static void +post_eo(DECL_ARGS) +{ + + if (MDOC_HEAD == n->type || MDOC_BODY == n->type) + outflags &= ~MMAN_spc; +} + static int pre_fa(DECL_ARGS) { @@ -761,7 +805,8 @@ post_fl(DECL_ARGS) { font_pop(); - if (0 == n->nchild) + if (0 == n->nchild && NULL != n->next && + n->next->line == n->line) outflags &= ~MMAN_spc; } @@ -1007,7 +1052,7 @@ pre_sm(DECL_ARGS) assert(n->child && MDOC_TEXT == n->child->type); if (0 == strcmp("on", n->child->string)) - outflags |= MMAN_Sm; + outflags |= MMAN_Sm | MMAN_spc; else outflags &= ~MMAN_Sm; return(0);