From 6bdbfd3d4d8125256b009166659cdbfa09434ada Mon Sep 17 00:00:00 2001 From: Kristaps Dzonsons Date: Thu, 26 Feb 2009 14:56:27 +0000 Subject: Lists (scoped elements) now put delims in-scope. --- argv.c | 4 ++-- macro.c | 9 +++------ term.c | 31 +++++++++---------------------- validate.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++-------- 4 files changed, 65 insertions(+), 38 deletions(-) diff --git a/argv.c b/argv.c index 663d5d5e..85afbb9e 100644 --- a/argv.c +++ b/argv.c @@ -1,4 +1,4 @@ -/* $Id: argv.c,v 1.31 2009/02/24 13:46:54 kristaps Exp $ */ +/* $Id: argv.c,v 1.32 2009/02/26 14:56:27 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -74,7 +74,7 @@ static int mdoc_argflags[MDOC_MAX] = { 0, /* Ed */ 0, /* Bl */ 0, /* El */ - ARGS_DELIM, /* It */ + 0, /* It */ ARGS_DELIM, /* Ad */ ARGS_DELIM, /* An */ ARGS_DELIM, /* Ar */ diff --git a/macro.c b/macro.c index b72b2fc5..7f49691a 100644 --- a/macro.c +++ b/macro.c @@ -1,4 +1,4 @@ -/* $Id: macro.c,v 1.52 2009/02/24 16:16:45 kristaps Exp $ */ +/* $Id: macro.c,v 1.53 2009/02/26 14:56:27 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -921,11 +921,8 @@ macro_scoped(MACRO_PROT_ARGS) if (ARGS_ERROR == c) return(0); - if (ARGS_PUNCT == c) - break; if (ARGS_EOLN == c) break; - if (ARGS_PHRASE == c) { /* if ( ! mdoc_phrase(mdoc, line, lastarg, buf)) @@ -952,10 +949,10 @@ macro_scoped(MACRO_PROT_ARGS) break; } - if ( ! rewind_subblock(MDOC_HEAD, mdoc, tok, line, ppos)) - return(0); if (1 == ppos && ! append_delims(mdoc, line, pos, buf)) return(0); + if ( ! rewind_subblock(MDOC_HEAD, mdoc, tok, line, ppos)) + return(0); if ( ! mdoc_body_alloc(mdoc, line, ppos, tok)) return(0); diff --git a/term.c b/term.c index 22471e92..18951322 100644 --- a/term.c +++ b/term.c @@ -1,4 +1,4 @@ -/* $Id: term.c,v 1.23 2009/02/25 23:18:50 kristaps Exp $ */ +/* $Id: term.c,v 1.24 2009/02/26 14:56:27 kristaps Exp $ */ /* * Copyright (c) 2009 Kristaps Dzonsons * @@ -381,7 +381,7 @@ termp_it_pre(DECL_ARGS) /* Get our list type. */ - for (i = 0; i < (int)bl->argc; i++) + for (type = -1, i = 0; i < (int)bl->argc; i++) switch (bl->argv[i].arg) { case (MDOC_Bullet): /* FALLTHROUGH */ @@ -391,27 +391,19 @@ termp_it_pre(DECL_ARGS) /* FALLTHROUGH */ case (MDOC_Hyphen): /* FALLTHROUGH */ - case (MDOC_Item): - /* FALLTHROUGH */ case (MDOC_Tag): /* FALLTHROUGH */ case (MDOC_Ohang): type = bl->argv[i].arg; i = (int)bl->argc; break; - case (MDOC_Inset): - /* FALLTHROUGH */ - case (MDOC_Hang): - /* FALLTHROUGH */ - case (MDOC_Diag): - /* FALLTHROUGH */ - case (MDOC_Column): + default: errx(1, "list type not supported"); /* NOTREACHED */ - default: - break; } + assert(-1 != type); + /* Save our existing (inherited) margin and offset. */ pair->offset = p->offset; @@ -419,7 +411,6 @@ termp_it_pre(DECL_ARGS) /* Get list width and offset. */ - /* FIXME: auto-size. */ i = arg_getattr(MDOC_Width, bl->argc, bl->argv); width = i >= 0 ? arg_width(&bl->argv[i]) : 0; @@ -439,6 +430,7 @@ termp_it_pre(DECL_ARGS) width = width > 6 ? width : 6; break; case (MDOC_Tag): + /* FIXME: auto-size. */ if (0 == width) errx(1, "need non-zero -width"); break; @@ -465,7 +457,7 @@ termp_it_pre(DECL_ARGS) else if (MDOC_BODY == node->type) p->flags |= TERMP_NOLPAD; break; - case (MDOC_Ohang): + default: break; } @@ -475,6 +467,7 @@ termp_it_pre(DECL_ARGS) */ tp = NULL; + if (MDOC_HEAD == node->type) { if (arg_hasattr(MDOC_Bullet, bl->argc, bl->argv)) tp = "\\[bu]"; @@ -488,8 +481,6 @@ termp_it_pre(DECL_ARGS) } if (arg_hasattr(MDOC_Hyphen, bl->argc, bl->argv)) tp = "\\-"; - if (arg_hasattr(MDOC_Item, bl->argc, bl->argv)) - tp = ""; } /* Margin control. */ @@ -505,23 +496,19 @@ termp_it_pre(DECL_ARGS) /* FALLTHROUGH */ case (MDOC_Hyphen): /* FALLTHROUGH */ - case (MDOC_Item): - /* FALLTHROUGH */ case (MDOC_Tag): if (MDOC_HEAD == node->type) p->rmargin = p->offset + width; else if (MDOC_BODY == node->type) p->offset += width; break; - case (MDOC_Ohang): + default: break; } if (NULL == tp) return(1); - /* XXX - ignoring children. */ - word(p, tp); return(0); } diff --git a/validate.c b/validate.c index 72a5dea0..c3e6f0b5 100644 --- a/validate.c +++ b/validate.c @@ -1,4 +1,4 @@ -/* $Id: validate.c,v 1.60 2009/02/25 12:32:50 kristaps Exp $ */ +/* $Id: validate.c,v 1.61 2009/02/26 14:56:27 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -540,7 +540,7 @@ pre_display(PRE_ARGS) static int pre_bl(PRE_ARGS) { - int type, i; + int type, i, width, offset; struct mdoc_arg *argv; size_t argc; @@ -551,8 +551,10 @@ pre_bl(PRE_ARGS) /* Make sure that only one type of list is specified. */ + type = offset = width = -1; + /* LINTED */ - for (i = 0, type = 0; i < (int)argc; i++) { + for (i = 0; i < (int)argc; i++) { argv = &n->data.block.argv[i]; switch (argv->arg) { @@ -577,18 +579,60 @@ pre_bl(PRE_ARGS) case (MDOC_Inset): /* FALLTHROUGH */ case (MDOC_Column): - if (0 == type++) + if (-1 == type) { + type = argv->arg; break; + } return(mdoc_perr(mdoc, argv->line, argv->pos, "multiple types specified")); + case (MDOC_Width): + if (-1 == width) { + width = argv->arg; + break; + } + return(mdoc_perr(mdoc, argv->line, argv->pos, + "multiple -%s arguments", + mdoc_argnames[MDOC_Width])); + case (MDOC_Offset): + if (-1 == offset) { + offset = argv->arg; + break; + } + return(mdoc_perr(mdoc, argv->line, argv->pos, + "multiple -%s arguments", + mdoc_argnames[MDOC_Offset])); default: break; } } - if (type) - return(1); - return(mdoc_err(mdoc, "no type specified")); + if (-1 == type) + return(mdoc_err(mdoc, "no type specified")); + + switch (type) { + case (MDOC_Column): + /* FALLTHROUGH */ + case (MDOC_Diag): + /* FALLTHROUGH */ + case (MDOC_Inset): + /* FALLTHROUGH */ + case (MDOC_Item): + if (-1 == width) + break; + return(mdoc_nwarn(mdoc, n, WARN_SYNTAX, + "superfluous -%s argument", + mdoc_argnames[MDOC_Width])); + case (MDOC_Tag): + if (-1 != width) + break; + return(mdoc_nwarn(mdoc, n, WARN_SYNTAX, + "suggest -%s argument", + mdoc_argnames[MDOC_Width])); + default: + break; + } + + return(1); } @@ -659,7 +703,6 @@ static int pre_it(PRE_ARGS) { - /* TODO: -width attribute must be specified for -tag. */ /* TODO: children too big for -width? */ if (MDOC_BLOCK != n->type) -- cgit v1.2.3-56-ge451