=================================================================== RCS file: /cvs/mandoc/mdoc_term.c,v retrieving revision 1.75 retrieving revision 1.84 diff -u -p -r1.75 -r1.84 --- mandoc/mdoc_term.c 2009/09/20 19:25:06 1.75 +++ mandoc/mdoc_term.c 2009/09/24 23:54:43 1.84 @@ -1,4 +1,4 @@ -/* $Id: mdoc_term.c,v 1.75 2009/09/20 19:25:06 kristaps Exp $ */ +/* $Id: mdoc_term.c,v 1.84 2009/09/24 23:54:43 kristaps Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * @@ -106,6 +106,7 @@ static void termp_sq_post(DECL_ARGS); static void termp_ss_post(DECL_ARGS); static void termp_vt_post(DECL_ARGS); +static int termp__t_pre(DECL_ARGS); static int termp_an_pre(DECL_ARGS); static int termp_ap_pre(DECL_ARGS); static int termp_aq_pre(DECL_ARGS); @@ -113,7 +114,6 @@ static int termp_bd_pre(DECL_ARGS); static int termp_bf_pre(DECL_ARGS); static int termp_bold_pre(DECL_ARGS); static int termp_bq_pre(DECL_ARGS); -static int termp_br_pre(DECL_ARGS); static int termp_brq_pre(DECL_ARGS); static int termp_bt_pre(DECL_ARGS); static int termp_cd_pre(DECL_ARGS); @@ -133,7 +133,6 @@ static int termp_nm_pre(DECL_ARGS); static int termp_ns_pre(DECL_ARGS); static int termp_op_pre(DECL_ARGS); static int termp_pf_pre(DECL_ARGS); -static int termp_pp_pre(DECL_ARGS); static int termp_pq_pre(DECL_ARGS); static int termp_qq_pre(DECL_ARGS); static int termp_rs_pre(DECL_ARGS); @@ -155,7 +154,7 @@ static const struct termact termacts[MDOC_MAX] = { { NULL, NULL }, /* Os */ { termp_sh_pre, termp_sh_post }, /* Sh */ { termp_ss_pre, termp_ss_post }, /* Ss */ - { termp_pp_pre, NULL }, /* Pp */ + { termp_sp_pre, NULL }, /* Pp */ { termp_d1_pre, termp_d1_post }, /* D1 */ { termp_d1_pre, termp_d1_post }, /* Dl */ { termp_bd_pre, termp_bd_post }, /* Bd */ @@ -191,15 +190,15 @@ static const struct termact termacts[MDOC_MAX] = { { termp_under_pre, termp_vt_post }, /* Vt */ { termp_xr_pre, NULL }, /* Xr */ { NULL, termp____post }, /* %A */ - { NULL, termp____post }, /* %B */ + { termp_under_pre, termp____post }, /* %B */ { NULL, termp____post }, /* %D */ - { NULL, termp____post }, /* %I */ + { termp_under_pre, termp____post }, /* %I */ { termp_under_pre, termp____post }, /* %J */ { NULL, termp____post }, /* %N */ { NULL, termp____post }, /* %O */ { NULL, termp____post }, /* %P */ { NULL, termp____post }, /* %R */ - { termp_under_pre, termp____post }, /* %T */ + { termp__t_pre, termp____post }, /* %T */ { NULL, termp____post }, /* %V */ { NULL, NULL }, /* Ac */ { termp_aq_pre, termp_aq_post }, /* Ao */ @@ -220,7 +219,7 @@ static const struct termact termacts[MDOC_MAX] = { { termp_under_pre, NULL }, /* Em */ { NULL, NULL }, /* Eo */ { termp_xx_pre, NULL }, /* Fx */ - { termp_bold_pre, NULL }, /* Ms */ + { termp_bold_pre, NULL }, /* Ms */ /* FIXME: convert to symbol? */ { NULL, NULL }, /* No */ { termp_ns_pre, NULL }, /* Ns */ { termp_xx_pre, NULL }, /* Nx */ @@ -256,18 +255,18 @@ static const struct termact termacts[MDOC_MAX] = { { NULL, NULL }, /* Fr */ { termp_ud_pre, NULL }, /* Ud */ { NULL, termp_lb_post }, /* Lb */ - { termp_pp_pre, NULL }, /* Lp */ + { termp_sp_pre, NULL }, /* Lp */ { termp_lk_pre, NULL }, /* Lk */ { termp_under_pre, NULL }, /* Mt */ { termp_brq_pre, termp_brq_post }, /* Brq */ { termp_brq_pre, termp_brq_post }, /* Bro */ { NULL, NULL }, /* Brc */ - { NULL, NULL }, /* %C */ - { NULL, NULL }, /* Es */ - { NULL, NULL }, /* En */ + { NULL, termp____post }, /* %C */ + { NULL, NULL }, /* Es */ /* TODO */ + { NULL, NULL }, /* En */ /* TODO */ { termp_xx_pre, NULL }, /* Dx */ - { NULL, NULL }, /* %Q */ - { termp_br_pre, NULL }, /* br */ + { NULL, termp____post }, /* %Q */ + { termp_sp_pre, NULL }, /* br */ { termp_sp_pre, NULL }, /* sp */ }; @@ -764,13 +763,13 @@ termp_it_pre(DECL_ARGS) * last column case, set to stretch to the margin). */ for (i = 0, n = node->prev; n && - i < (int)bl->args[vals[2]].argv->sz; + i < (int)bl->args->argv[vals[2]].sz; n = n->prev, i++) offset += arg_width (&bl->args->argv[vals[2]], i); /* Whether exceeds maximum column. */ - if (i < (int)bl->args[vals[2]].argv->sz) + if (i < (int)bl->args->argv[vals[2]].sz) width = arg_width(&bl->args->argv[vals[2]], i); else width = 0; @@ -1163,19 +1162,11 @@ termp_ns_pre(DECL_ARGS) /* ARGSUSED */ static int -termp_pp_pre(DECL_ARGS) -{ - - term_vspace(p); - return(1); -} - - -/* ARGSUSED */ -static int termp_rs_pre(DECL_ARGS) { + if (SEC_SEE_ALSO != node->sec) + return(1); if (MDOC_BLOCK == node->type && node->prev) term_vspace(p); return(1); @@ -1427,7 +1418,7 @@ termp_bt_pre(DECL_ARGS) { term_word(p, "is currently in beta test."); - return(1); + return(0); } @@ -1436,7 +1427,8 @@ static void termp_lb_post(DECL_ARGS) { - term_newln(p); + if (SEC_LIBRARY == node->sec) + term_newln(p); } @@ -1528,10 +1520,6 @@ termp_fn_pre(DECL_ARGS) { const struct mdoc_node *n; - assert(node->child && MDOC_TEXT == node->child->type); - - /* FIXME: can be "type funcname" "type varname"... */ - p->bold++; term_word(p, node->child->string); p->bold--; @@ -1854,6 +1842,7 @@ termp_in_post(DECL_ARGS) { p->bold++; + p->flags |= TERMP_NOSPACE; term_word(p, ">"); p->bold--; @@ -1878,12 +1867,18 @@ termp_sp_pre(DECL_ARGS) { int i, len; - if (NULL == node->child) { - term_vspace(p); - return(0); + switch (node->tok) { + case (MDOC_sp): + len = node->child ? atoi(node->child->string) : 1; + break; + case (MDOC_br): + len = 0; + break; + default: + len = 1; + break; } - len = atoi(node->child->string); if (0 == len) term_newln(p); for (i = 0; i < len; i++) @@ -1895,16 +1890,6 @@ termp_sp_pre(DECL_ARGS) /* ARGSUSED */ static int -termp_br_pre(DECL_ARGS) -{ - - term_newln(p); - return(1); -} - - -/* ARGSUSED */ -static int termp_brq_pre(DECL_ARGS) { @@ -2081,6 +2066,14 @@ termp____post(DECL_ARGS) { p->flags |= TERMP_NOSPACE; + switch (node->tok) { + case (MDOC__T): + term_word(p, "\\(rq"); + p->flags |= TERMP_NOSPACE; + break; + default: + break; + } term_word(p, node->next ? "," : "."); } @@ -2120,5 +2113,16 @@ termp_under_pre(DECL_ARGS) { p->under++; + return(1); +} + + +/* ARGSUSED */ +static int +termp__t_pre(DECL_ARGS) +{ + + term_word(p, "\\(lq"); + p->flags |= TERMP_NOSPACE; return(1); }