=================================================================== RCS file: /cvs/mandoc/Attic/macro.c,v retrieving revision 1.2 retrieving revision 1.4 diff -u -p -r1.2 -r1.4 --- mandoc/Attic/macro.c 2008/12/15 01:54:58 1.2 +++ mandoc/Attic/macro.c 2008/12/15 03:13:01 1.4 @@ -1,4 +1,4 @@ -/* $Id: macro.c,v 1.2 2008/12/15 01:54:58 kristaps Exp $ */ +/* $Id: macro.c,v 1.4 2008/12/15 03:13:01 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -23,57 +23,17 @@ #include "private.h" -#define _C(p) ((const char **)p) +#define _CC(p) ((const char **)p) -static int isdelim(const char *); -static int args_next(struct mdoc *, int, int *, char *, char **); -static int append_text(struct mdoc *, int, int, int, char *[]); -static int append_scoped(struct mdoc *, int, int, int, char *[]); +static int append_text(struct mdoc *, int, + int, int, char *[]); +static int append_scoped(struct mdoc *, int, + int, int, char *[]); +static int args_next(struct mdoc *, int, + int *, char *, char **); static int -isdelim(const char *p) -{ - - if (0 == *p) - return(0); - if (0 != *(p + 1)) - return(0); - - switch (*p) { - case('{'): - /* FALLTHROUGH */ - case('.'): - /* FALLTHROUGH */ - case(','): - /* FALLTHROUGH */ - case(';'): - /* FALLTHROUGH */ - case(':'): - /* FALLTHROUGH */ - case('?'): - /* FALLTHROUGH */ - case('!'): - /* FALLTHROUGH */ - case('('): - /* FALLTHROUGH */ - case(')'): - /* FALLTHROUGH */ - case('['): - /* FALLTHROUGH */ - case(']'): - /* FALLTHROUGH */ - case('}'): - return(1); - default: - break; - } - - return(0); -} - - -static int args_next(struct mdoc *mdoc, int tok, int *pos, char *buf, char **v) { @@ -118,26 +78,41 @@ args_next(struct mdoc *mdoc, int tok, static int -append_scoped(struct mdoc *mdoc, int tok, int pos, int sz, char *args[]) +append_scoped(struct mdoc *mdoc, int tok, + int pos, int sz, char *args[]) { + switch (tok) { + /* ======= ADD MORE MACRO CHECKS BELOW. ======= */ + case (MDOC_Sh): + break; + case (MDOC_Ss): + break; + /* ======= ADD MORE MACRO CHECKS ABOVE. ======= */ + default: + abort(); + /* NOTREACHED */ + } + + assert(sz >= 0); args[sz] = NULL; mdoc_block_alloc(mdoc, pos, tok, 0, NULL); - mdoc_head_alloc(mdoc, pos, tok, sz, _C(args)); + mdoc_head_alloc(mdoc, pos, tok, (size_t)sz, _CC(args)); mdoc_body_alloc(mdoc, pos, tok); return(1); } static int -append_text(struct mdoc *mdoc, int tok, int pos, int sz, char *args[]) +append_text(struct mdoc *mdoc, int tok, + int pos, int sz, char *args[]) { + assert(sz >= 0); args[sz] = NULL; switch (tok) { - /* ======= ADD MORE MACRO ARGUMENT-LIMITS BELOW. ======= */ - + /* ======= ADD MORE MACRO CHECKS BELOW. ======= */ case (MDOC_Ft): /* FALLTHROUGH */ case (MDOC_Li): @@ -147,19 +122,17 @@ append_text(struct mdoc *mdoc, int tok, int pos, int s case (MDOC_Pa): /* FALLTHROUGH */ case (MDOC_Tn): - if (0 == sz && ! mdoc_warn(mdoc, tok, pos, WARN_ARGS_GE1)) + if (0 < sz) + break; + if ( ! mdoc_warn(mdoc, tok, pos, WARN_ARGS_GE1)) return(0); - mdoc_elem_alloc(mdoc, pos, tok, 0, NULL, sz, _C(args)); - return(1); - + break; case (MDOC_Ar): /* FALLTHROUGH */ case (MDOC_Cm): /* FALLTHROUGH */ case (MDOC_Fl): - mdoc_elem_alloc(mdoc, pos, tok, 0, NULL, sz, _C(args)); - return(1); - + break; case (MDOC_Ad): /* FALLTHROUGH */ case (MDOC_Em): @@ -177,25 +150,25 @@ append_text(struct mdoc *mdoc, int tok, int pos, int s case (MDOC_Va): /* FALLTHROUGH */ case (MDOC_Vt): - if (0 == sz) - return(mdoc_err(mdoc, tok, pos, ERR_ARGS_GE1)); - mdoc_elem_alloc(mdoc, pos, tok, 0, NULL, sz, _C(args)); - return(1); - - /* ======= ADD MORE MACRO ARGUMENT-LIMITS ABOVE. ======= */ + if (0 < sz) + break; + return(mdoc_err(mdoc, tok, pos, ERR_ARGS_GE1)); + /* ======= ADD MORE MACRO CHECKS ABOVE. ======= */ default: - break; + abort(); + /* NOTREACHED */ } - abort(); - /* NOTREACHED */ + mdoc_elem_alloc(mdoc, pos, tok, 0, + NULL, (size_t)sz, _CC(args)); + return(1); } int macro_text(struct mdoc *mdoc, int tok, int ppos, int *pos, char *buf) { - int lastarg, j, c, lasttok, lastpunct; + int lastarg, c, lasttok, lastpunct, j; char *args[MDOC_LINEARG_MAX], *p; lasttok = ppos; @@ -225,7 +198,7 @@ again: /* Word found. */ - if ( ! isdelim(args[j])) { + if ( ! mdoc_isdelim(args[j])) { j++; goto again; } @@ -254,7 +227,7 @@ int macro_scoped_implicit(struct mdoc *mdoc, int tok, int ppos, int *pos, char *buf) { - int j, c, lastarg, t; + int t, c, lastarg, j; char *args[MDOC_LINEARG_MAX]; struct mdoc_node *n; @@ -264,6 +237,7 @@ macro_scoped_implicit(struct mdoc *mdoc, assert( ! (MDOC_EXPLICIT & mdoc_macros[tok].flags)); + /* LINTED */ for (n = mdoc->last; n; n = n->parent) { if (MDOC_BLOCK != n->type) continue; @@ -297,7 +271,7 @@ again: /* Command found. */ if (MDOC_MAX != (c = mdoc_find(mdoc, args[j]))) - if ( ! mdoc_warn(mdoc, tok, *pos, WARN_SYNTAX_MACLIKE)) + if ( ! mdoc_warn(mdoc, tok, lastarg, WARN_SYNTAX_MACLIKE)) return(0); /* Word found. */