=================================================================== RCS file: /cvs/mandoc/mdoc_man.c,v retrieving revision 1.74 retrieving revision 1.80 diff -u -p -r1.74 -r1.80 --- mandoc/mdoc_man.c 2014/11/19 22:00:37 1.74 +++ mandoc/mdoc_man.c 2014/12/23 13:48:57 1.80 @@ -1,4 +1,4 @@ -/* $Id: mdoc_man.c,v 1.74 2014/11/19 22:00:37 schwarze Exp $ */ +/* $Id: mdoc_man.c,v 1.80 2014/12/23 13:48:57 schwarze Exp $ */ /* * Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze * @@ -84,7 +84,8 @@ static int pre_dl(DECL_ARGS); static int pre_en(DECL_ARGS); static int pre_enc(DECL_ARGS); static int pre_em(DECL_ARGS); -static int pre_es(DECL_ARGS); +static int pre_skip(DECL_ARGS); +static int pre_eo(DECL_ARGS); static int pre_ex(DECL_ARGS); static int pre_fa(DECL_ARGS); static int pre_fd(DECL_ARGS); @@ -183,14 +184,14 @@ static const struct manact manacts[MDOC_MAX + 1] = { { cond_body, pre_enc, post_enc, "[", "]" }, /* Bq */ { NULL, pre_ux, NULL, "BSD/OS", NULL }, /* Bsx */ { NULL, pre_bx, NULL, NULL, NULL }, /* Bx */ - { NULL, NULL, NULL, NULL, NULL }, /* Db */ + { NULL, pre_skip, NULL, NULL, NULL }, /* Db */ { NULL, NULL, NULL, NULL, NULL }, /* Dc */ { cond_body, pre_enc, post_enc, "\\(lq", "\\(rq" }, /* Do */ { cond_body, pre_enc, post_enc, "\\(lq", "\\(rq" }, /* Dq */ { NULL, NULL, NULL, NULL, NULL }, /* Ec */ { NULL, NULL, NULL, NULL, NULL }, /* Ef */ { NULL, pre_em, post_font, NULL, NULL }, /* Em */ - { NULL, NULL, post_eo, NULL, NULL }, /* Eo */ + { cond_body, pre_eo, 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 */ @@ -235,7 +236,7 @@ static const struct manact manacts[MDOC_MAX + 1] = { { cond_body, pre_enc, post_enc, "{", "}" }, /* Bro */ { NULL, NULL, NULL, NULL, NULL }, /* Brc */ { NULL, NULL, post_percent, NULL, NULL }, /* %C */ - { NULL, pre_es, NULL, NULL, NULL }, /* Es */ + { NULL, pre_skip, NULL, NULL, NULL }, /* Es */ { cond_body, pre_en, post_en, NULL, NULL }, /* En */ { NULL, pre_ux, NULL, "DragonFly", NULL }, /* Dx */ { NULL, NULL, post_percent, NULL, NULL }, /* %Q */ @@ -433,7 +434,9 @@ print_offs(const char *v, int keywords) sz = 6; else if (keywords && !strcmp(v, "indent-two")) sz = 12; - else if (a2roffsu(v, &su, SCALE_MAX)) { + else if (a2roffsu(v, &su, SCALE_EN) > 1) { + if (su.scale < 0.0) + su.scale = 0.0; if (SCALE_EN == su.unit) sz = su.scale; else { @@ -480,7 +483,9 @@ print_width(const char *v, const struct mdoc_node *chi /* Convert v into a number (of characters). */ if (NULL == v) sz = defsz; - else if (a2roffsu(v, &su, SCALE_MAX)) { + else if (a2roffsu(v, &su, SCALE_MAX) > 1) { + if (su.scale < 0.0) + su.scale = 0.0; if (SCALE_EN == su.unit) sz = su.scale; else { @@ -607,8 +612,8 @@ print_node(DECL_ARGS) * node. */ act = manacts + n->tok; - cond = NULL == act->cond || (*act->cond)(meta, n); - if (cond && act->pre && ENDBODY_NOT == n->end) + cond = act->cond == NULL || (*act->cond)(meta, n); + if (cond && act->pre && (n->end == ENDBODY_NOT || n->nchild)) do_sub = (*act->pre)(meta, n); } @@ -1123,19 +1128,20 @@ post_en(DECL_ARGS) return; } -static void -post_eo(DECL_ARGS) +static int +pre_eo(DECL_ARGS) { - if (MDOC_HEAD == n->type || MDOC_BODY == n->type) - outflags &= ~MMAN_spc; + outflags &= ~(MMAN_spc | MMAN_nl); + return(1); } -static int -pre_es(DECL_ARGS) +static void +post_eo(DECL_ARGS) { - return(0); + if (n->end != ENDBODY_SPACE) + outflags &= ~MMAN_spc; } static int @@ -1600,7 +1606,8 @@ static void post_pf(DECL_ARGS) { - outflags &= ~MMAN_spc; + if ( ! (n->next == NULL || n->next->flags & MDOC_LINE)) + outflags &= ~MMAN_spc; } static int @@ -1674,6 +1681,13 @@ pre_rv(DECL_ARGS) print_word("is set to indicate the error."); outflags |= MMAN_nl; + return(0); +} + +static int +pre_skip(DECL_ARGS) +{ + return(0); }