=================================================================== RCS file: /cvs/mandoc/Attic/action.c,v retrieving revision 1.26 retrieving revision 1.30 diff -u -p -r1.26 -r1.30 --- mandoc/Attic/action.c 2009/02/28 19:15:28 1.26 +++ mandoc/Attic/action.c 2009/03/05 13:12:12 1.30 @@ -1,4 +1,4 @@ -/* $Id: action.c,v 1.26 2009/02/28 19:15:28 kristaps Exp $ */ +/* $Id: action.c,v 1.30 2009/03/05 13:12:12 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -36,14 +36,16 @@ struct actions { /* Per-macro action routines. */ +static int post_ar(struct mdoc *); static int post_bl(struct mdoc *); static int post_bl_width(struct mdoc *); static int post_bl_tagwidth(struct mdoc *); -static int post_sh(struct mdoc *); -static int post_os(struct mdoc *); -static int post_dt(struct mdoc *); static int post_dd(struct mdoc *); +static int post_dt(struct mdoc *); static int post_nm(struct mdoc *); +static int post_os(struct mdoc *); +static int post_sh(struct mdoc *); +static int post_ex(struct mdoc *); static int post_prologue(struct mdoc *); @@ -66,13 +68,13 @@ const struct actions mdoc_actions[MDOC_MAX] = { { NULL }, /* It */ { NULL }, /* Ad */ { NULL }, /* An */ - { NULL }, /* Ar */ + { post_ar }, /* Ar */ { NULL }, /* Cd */ { NULL }, /* Cm */ { NULL }, /* Dv */ { NULL }, /* Er */ { NULL }, /* Ev */ - { NULL }, /* Ex */ + { post_ex }, /* Ex */ { NULL }, /* Fa */ { NULL }, /* Fd */ { NULL }, /* Fl */ @@ -160,6 +162,32 @@ const struct actions mdoc_actions[MDOC_MAX] = { static int +post_ex(struct mdoc *mdoc) +{ + + /* + * If `.Ex -std' is invoked without an argument, fill it in with + * our name (if it's been set). + */ + + if (0 == mdoc->last->data.elem.argc) + return(1); + if (mdoc->last->data.elem.argv[0].sz) + return(1); + + assert(mdoc->meta.name); + + mdoc_msg(mdoc, "writing %s argument: %s", + mdoc_argnames[MDOC_Std], mdoc->meta.name); + + mdoc->last->data.elem.argv[0].sz = 1; + mdoc->last->data.elem.argv[0].value = xcalloc(1, sizeof(char *)); + mdoc->last->data.elem.argv[0].value[0] = xstrdup(mdoc->meta.name); + return(1); +} + + +static int post_nm(struct mdoc *mdoc) { char buf[64]; @@ -259,7 +287,8 @@ post_dt(struct mdoc *mdoc) mdoc->meta.msec = mdoc_atomsec(p); if (MSEC_DEFAULT != mdoc->meta.msec) break; - return(mdoc_nerr(mdoc, n, "invalid parameter syntax")); + return(mdoc_nerr(mdoc, n, + "invalid parameter syntax")); case (2): mdoc->meta.vol = mdoc_atovol(p); if (VOL_DEFAULT != mdoc->meta.vol) @@ -267,9 +296,11 @@ post_dt(struct mdoc *mdoc) mdoc->meta.arch = mdoc_atoarch(p); if (ARCH_DEFAULT != mdoc->meta.arch) break; - return(mdoc_nerr(mdoc, n, "invalid parameter syntax")); + return(mdoc_nerr(mdoc, n, + "invalid parameter syntax")); default: - return(mdoc_nerr(mdoc, n, "too many parameters")); + return(mdoc_nerr(mdoc, n, + "too many parameters")); } } @@ -392,13 +423,9 @@ post_bl_width(struct mdoc *mdoc) * the macro's width as set in share/tmac/mdoc/doc-common. */ - if (xstrcmp(*p, "Ds")) { - if ( ! mdoc_warn(mdoc, WARN_COMPAT, - "%s argument deprecated", - mdoc_argnames[MDOC_Width])) - return(0); + if (xstrcmp(*p, "Ds")) width = 8; - } else if (MDOC_MAX == (tok = mdoc_find(mdoc, *p))) + else if (MDOC_MAX == (tok = mdoc_find(mdoc, *p))) return(1); else if (0 == (width = mdoc_macro2len(tok))) return(mdoc_warn(mdoc, WARN_SYNTAX, @@ -449,6 +476,29 @@ post_bl(struct mdoc *mdoc) if ( ! post_bl_width(mdoc)) return(0); + return(1); +} + + +static int +post_ar(struct mdoc *mdoc) +{ + struct mdoc_node *n; + + if (mdoc->last->child) + return(1); + + n = mdoc->last; + + mdoc->next = MDOC_NEXT_CHILD; + mdoc_word_alloc(mdoc, mdoc->last->line, + mdoc->last->pos, "file"); + mdoc->next = MDOC_NEXT_SIBLING; + mdoc_word_alloc(mdoc, mdoc->last->line, + mdoc->last->pos, "..."); + + mdoc->last = n; + mdoc->next = MDOC_NEXT_SIBLING; return(1); }