=================================================================== RCS file: /cvs/mandoc/Attic/termact.c,v retrieving revision 1.4 retrieving revision 1.6 diff -u -p -r1.4 -r1.6 --- mandoc/Attic/termact.c 2009/02/22 14:31:08 1.4 +++ mandoc/Attic/termact.c 2009/02/22 19:23:48 1.6 @@ -1,4 +1,4 @@ -/* $Id: termact.c,v 1.4 2009/02/22 14:31:08 kristaps Exp $ */ +/* $Id: termact.c,v 1.6 2009/02/22 19:23:48 kristaps Exp $ */ /* * Copyright (c) 2009 Kristaps Dzonsons * @@ -83,6 +83,7 @@ static void name##_post(DECL_ARGS) DECL_PRE(termp_aq); DECL_PRE(termp_ar); +DECL_PRE(termp_bd); DECL_PRE(termp_d1); DECL_PRE(termp_dq); DECL_PRE(termp_ex); @@ -95,11 +96,17 @@ DECL_PRE(termp_it); DECL_PRE(termp_nd); DECL_PRE(termp_nm); DECL_PRE(termp_ns); +DECL_PRE(termp_nx); DECL_PRE(termp_op); +DECL_PRE(termp_ox); +DECL_PRE(termp_pf); DECL_PRE(termp_pp); +DECL_PRE(termp_qq); DECL_PRE(termp_sh); +DECL_PRE(termp_sq); DECL_PRE(termp_sx); DECL_PRE(termp_ud); +DECL_PRE(termp_va); DECL_PRE(termp_vt); DECL_PRE(termp_xr); @@ -116,8 +123,12 @@ DECL_POST(termp_ft); DECL_POST(termp_it); DECL_POST(termp_nm); DECL_POST(termp_op); +DECL_POST(termp_pf); +DECL_POST(termp_qq); DECL_POST(termp_sh); +DECL_POST(termp_sq); DECL_POST(termp_sx); +DECL_POST(termp_va); DECL_POST(termp_vt); const struct termact __termacts[MDOC_MAX] = { @@ -130,7 +141,7 @@ const struct termact __termacts[MDOC_MAX] = { { termp_pp_pre, NULL }, /* Pp */ { termp_d1_pre, termp_d1_post }, /* D1 */ { NULL, NULL }, /* Dl */ - { NULL, NULL }, /* Bd */ + { termp_bd_pre, NULL }, /* Bd */ { NULL, NULL }, /* Ed */ { NULL, termp_bl_post }, /* Bl */ { NULL, NULL }, /* El */ @@ -159,7 +170,7 @@ const struct termact __termacts[MDOC_MAX] = { { NULL, NULL }, /* Pa */ { NULL, NULL }, /* Rv */ { NULL, NULL }, /* St */ - { NULL, NULL }, /* Va */ + { termp_va_pre, termp_va_post }, /* Va */ { termp_vt_pre, termp_vt_post }, /* Vt */ { termp_xr_pre, NULL }, /* Xr */ { NULL, NULL }, /* %A */ @@ -195,21 +206,21 @@ const struct termact __termacts[MDOC_MAX] = { { NULL, NULL }, /* Ms */ { NULL, NULL }, /* No */ { termp_ns_pre, NULL }, /* Ns */ - { NULL, NULL }, /* Nx */ - { NULL, NULL }, /* Ox */ + { termp_nx_pre, NULL }, /* Nx */ + { termp_ox_pre, NULL }, /* Ox */ { NULL, NULL }, /* Pc */ - { NULL, NULL }, /* Pf */ + { termp_pf_pre, termp_pf_post }, /* Pf */ { NULL, NULL }, /* Po */ { NULL, NULL }, /* Pq */ { NULL, NULL }, /* Qc */ { NULL, NULL }, /* Ql */ { NULL, NULL }, /* Qo */ - { NULL, NULL }, /* Qq */ + { termp_qq_pre, termp_qq_post }, /* Qq */ { NULL, NULL }, /* Re */ { NULL, NULL }, /* Rs */ { NULL, NULL }, /* Sc */ { NULL, NULL }, /* So */ - { NULL, NULL }, /* Sq */ + { termp_sq_pre, termp_sq_post }, /* Sq */ { NULL, NULL }, /* Sm */ { termp_sx_pre, termp_sx_post }, /* Sx */ { NULL, NULL }, /* Sy */ @@ -881,6 +892,151 @@ termp_fa_post(DECL_ARGS) { p->flags &= ~ttypes[TTYPE_FUNC_ARG]; +} + + +/* ARGSUSED */ +static int +termp_va_pre(DECL_ARGS) +{ + + p->flags |= ttypes[TTYPE_VAR_DECL]; + return(1); +} + + +/* ARGSUSED */ +static void +termp_va_post(DECL_ARGS) +{ + + p->flags &= ~ttypes[TTYPE_VAR_DECL]; +} + + +/* ARGSUSED */ +static int +termp_bd_pre(DECL_ARGS) +{ + const struct mdoc_block *bl; + const struct mdoc_node *n; + + if (MDOC_BLOCK == node->type) { + vspace(p); + return(1); + } else if (MDOC_BODY != node->type) + return(1); + + assert(MDOC_BLOCK == node->parent->type); + + bl = &node->parent->data.block; + if ( ! arg_hasattr(MDOC_Literal, bl->argc, bl->argv)) + return(1); + + p->flags |= TERMP_LITERAL; + + for (n = node->child; n; n = n->next) { + assert(MDOC_TEXT == n->type); /* FIXME */ + if ((*n->data.text.string)) { + word(p, n->data.text.string); + flushln(p); + } else + vspace(p); + + } + + p->flags &= ~TERMP_LITERAL; + return(0); +} + + +/* ARGSUSED */ +static int +termp_qq_pre(DECL_ARGS) +{ + + if (MDOC_BODY != node->type) + return(1); + word(p, "\""); + p->flags |= TERMP_NOSPACE; + return(1); +} + + +/* ARGSUSED */ +static void +termp_qq_post(DECL_ARGS) +{ + + if (MDOC_BODY != node->type) + return; + p->flags |= TERMP_NOSPACE; + word(p, "\""); +} + + +/* ARGSUSED */ +static int +termp_ox_pre(DECL_ARGS) +{ + + word(p, "OpenBSD"); + return(1); +} + + +/* ARGSUSED */ +static int +termp_nx_pre(DECL_ARGS) +{ + + word(p, "NetBSD"); + return(1); +} + + +/* ARGSUSED */ +static int +termp_sq_pre(DECL_ARGS) +{ + + if (MDOC_BODY != node->type) + return(1); + word(p, "`"); + p->flags |= TERMP_NOSPACE; + return(1); +} + + +/* ARGSUSED */ +static void +termp_sq_post(DECL_ARGS) +{ + + if (MDOC_BODY != node->type) + return; + p->flags |= TERMP_NOSPACE; + word(p, "\'"); +} + + +/* ARGSUSED */ +static int +termp_pf_pre(DECL_ARGS) +{ + + p->flags |= TERMP_IGNDELIM; + return(1); +} + + +/* ARGSUSED */ +static void +termp_pf_post(DECL_ARGS) +{ + + p->flags &= ~TERMP_IGNDELIM; + p->flags |= TERMP_NOSPACE; }