=================================================================== RCS file: /cvs/mandoc/mdoc_term.c,v retrieving revision 1.19 retrieving revision 1.26 diff -u -p -r1.19 -r1.26 --- mandoc/mdoc_term.c 2009/07/04 11:04:46 1.19 +++ mandoc/mdoc_term.c 2009/07/12 16:52:41 1.26 @@ -1,4 +1,4 @@ -/* $Id: mdoc_term.c,v 1.19 2009/07/04 11:04:46 kristaps Exp $ */ +/* $Id: mdoc_term.c,v 1.26 2009/07/12 16:52:41 kristaps Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * @@ -141,16 +141,13 @@ DECL_PRE(termp_ap); DECL_PRE(termp_ar); DECL_PRE(termp_at); DECL_PRE(termp_bf); -DECL_PRE(termp_bsx); DECL_PRE(termp_bt); DECL_PRE(termp_cd); DECL_PRE(termp_cm); -DECL_PRE(termp_dx); DECL_PRE(termp_em); DECL_PRE(termp_ex); DECL_PRE(termp_fa); DECL_PRE(termp_fl); -DECL_PRE(termp_fx); DECL_PRE(termp_ic); DECL_PRE(termp_lk); DECL_PRE(termp_ms); @@ -158,8 +155,7 @@ DECL_PRE(termp_mt); DECL_PRE(termp_nd); DECL_PRE(termp_nm); DECL_PRE(termp_ns); -DECL_PRE(termp_nx); -DECL_PRE(termp_ox); +DECL_PRE(termp_xx); DECL_PRE(termp_pa); DECL_PRE(termp_pp); DECL_PRE(termp_rs); @@ -169,7 +165,6 @@ DECL_PRE(termp_st); DECL_PRE(termp_sx); DECL_PRE(termp_sy); DECL_PRE(termp_ud); -DECL_PRE(termp_ux); DECL_PRE(termp_va); DECL_PRE(termp_xr); @@ -243,7 +238,7 @@ static const struct termact termacts[MDOC_MAX] = { { termp_bf_pre, NULL }, /* Bf */ { termp_bq_pre, termp_bq_post }, /* Bo */ { termp_bq_pre, termp_bq_post }, /* Bq */ - { termp_bsx_pre, NULL }, /* Bsx */ + { termp_xx_pre, NULL }, /* Bsx */ { NULL, termp_bx_post }, /* Bx */ { NULL, NULL }, /* Db */ { NULL, NULL }, /* Dc */ @@ -253,12 +248,12 @@ static const struct termact termacts[MDOC_MAX] = { { NULL, NULL }, /* Ef */ { termp_em_pre, NULL }, /* Em */ { NULL, NULL }, /* Eo */ - { termp_fx_pre, NULL }, /* Fx */ + { termp_xx_pre, NULL }, /* Fx */ { termp_ms_pre, NULL }, /* Ms */ { NULL, NULL }, /* No */ { termp_ns_pre, NULL }, /* Ns */ - { termp_nx_pre, NULL }, /* Nx */ - { termp_ox_pre, NULL }, /* Ox */ + { termp_xx_pre, NULL }, /* Nx */ + { termp_xx_pre, NULL }, /* Ox */ { NULL, NULL }, /* Pc */ { termp_pf_pre, termp_pf_post }, /* Pf */ { termp_pq_pre, termp_pq_post }, /* Po */ @@ -276,7 +271,7 @@ static const struct termact termacts[MDOC_MAX] = { { termp_sx_pre, NULL }, /* Sx */ { termp_sy_pre, NULL }, /* Sy */ { NULL, NULL }, /* Tn */ - { termp_ux_pre, NULL }, /* Ux */ + { termp_xx_pre, NULL }, /* Ux */ { NULL, NULL }, /* Xc */ { NULL, NULL }, /* Xo */ { termp_fo_pre, termp_fo_post }, /* Fo */ @@ -299,7 +294,7 @@ static const struct termact termacts[MDOC_MAX] = { { NULL, NULL }, /* %C */ { NULL, NULL }, /* Es */ { NULL, NULL }, /* En */ - { termp_dx_pre, NULL }, /* Dx */ + { termp_xx_pre, NULL }, /* Dx */ { NULL, NULL }, /* %Q */ }; @@ -532,10 +527,6 @@ arg_width(const struct mdoc_argv *arg, int pos) assert(pos < (int)arg->sz && pos >= 0); assert(arg->value[pos]); - if (0 == strcmp(arg->value[pos], "indent")) - return(INDENT + 3); - if (0 == strcmp(arg->value[pos], "indent-two")) - return(INDENT * 2 + 2); if (0 == (len = (int)strlen(arg->value[pos]))) return(0); @@ -608,7 +599,7 @@ arg_offset(const struct mdoc_argv *arg) if (0 == strcmp(*arg->value, "indent")) return(INDENT + 1); if (0 == strcmp(*arg->value, "indent-two")) - return(INDENT * 2); + return((INDENT + 1) * 2); /* FIXME: needs to support field-widths (10n, etc.). */ @@ -1139,7 +1130,18 @@ static int termp_nd_pre(DECL_ARGS) { + if (MDOC_BODY != node->type) + return(1); + /* + * XXX: signed off by jmc@openbsd.org. This technically + * produces a minus sign after the Nd, which is wrong, but is + * consistent with the historic OpenBSD tmac file. + */ +#ifdef __OpenBSD__ term_word(p, "\\-"); +#else + term_word(p, "\\(em"); +#endif return(1); } @@ -1453,7 +1455,6 @@ termp_fn_post(DECL_ARGS) if (node->sec == SEC_SYNOPSIS && node->next) term_vspace(p); - } @@ -1632,16 +1633,6 @@ termp_qq_post(DECL_ARGS) /* ARGSUSED */ -static int -termp_bsx_pre(DECL_ARGS) -{ - - term_word(p, "BSDI BSD/OS"); - return(1); -} - - -/* ARGSUSED */ static void termp_bx_post(DECL_ARGS) { @@ -1654,56 +1645,42 @@ termp_bx_post(DECL_ARGS) /* ARGSUSED */ static int -termp_ox_pre(DECL_ARGS) +termp_xx_pre(DECL_ARGS) { + const char *pp; - term_word(p, "OpenBSD"); - return(1); -} + pp = NULL; + switch (node->tok) { + case (MDOC_Bsx): + pp = "BSDI BSD/OS"; + break; + case (MDOC_Dx): + pp = "DragonFlyBSD"; + break; + case (MDOC_Fx): + pp = "FreeBSD"; + break; + case (MDOC_Nx): + pp = "NetBSD"; + break; + case (MDOC_Ox): + pp = "OpenBSD"; + break; + case (MDOC_Ux): + pp = "UNIX"; + break; + default: + break; + } - -/* ARGSUSED */ -static int -termp_dx_pre(DECL_ARGS) -{ - - term_word(p, "DragonFly"); + assert(pp); + term_word(p, pp); return(1); } /* ARGSUSED */ static int -termp_ux_pre(DECL_ARGS) -{ - - term_word(p, "UNIX"); - return(1); -} - - -/* ARGSUSED */ -static int -termp_fx_pre(DECL_ARGS) -{ - - term_word(p, "FreeBSD"); - return(1); -} - - -/* ARGSUSED */ -static int -termp_nx_pre(DECL_ARGS) -{ - - term_word(p, "NetBSD"); - return(1); -} - - -/* ARGSUSED */ -static int termp_sq_pre(DECL_ARGS) { @@ -1842,8 +1819,12 @@ static int termp_in_pre(DECL_ARGS) { + /* XXX This conforms to new-groff style. */ TERMPAIR_SETFLAG(p, pair, ttypes[TTYPE_INCLUDE]); - term_word(p, "#include"); + + if (SEC_SYNOPSIS == node->sec) + term_word(p, "#include"); + term_word(p, "<"); p->flags |= TERMP_NOSPACE; return(1); @@ -1858,9 +1839,16 @@ termp_in_post(DECL_ARGS) p->flags |= TERMP_NOSPACE; term_word(p, ">"); - term_newln(p); if (SEC_SYNOPSIS != node->sec) return; + + term_newln(p); + /* + * XXX Not entirely correct. If `.In foo bar' is specified in + * the SYNOPSIS section, then it produces a single break after + * the ; mandoc asserts a vertical space. Since this + * construction is rarely used, I think it's fine. + */ if (node->next && MDOC_In != node->next->tok) term_vspace(p); }