summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-03-12 06:32:17 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-03-12 06:32:17 +0000
commit8b8c158fd8de44ca79949d5f916da9eb54a0566a (patch)
tree2b6cb5fa29beab27a3bc27e2515dd811d6638735
parent79712733ab4bcabb671c2ec700a2dc90c6d460d4 (diff)
downloadmandoc-8b8c158fd8de44ca79949d5f916da9eb54a0566a.tar.gz
mandoc-8b8c158fd8de44ca79949d5f916da9eb54a0566a.tar.zst
mandoc-8b8c158fd8de44ca79949d5f916da9eb54a0566a.zip
Removed segfault with empty word.
Initial "full" -column support.
-rw-r--r--macro.c47
-rw-r--r--mdocterm.c6
-rw-r--r--term.c4
-rw-r--r--validate.c10
4 files changed, 43 insertions, 24 deletions
diff --git a/macro.c b/macro.c
index a6b2ab30..9c4e393c 100644
--- a/macro.c
+++ b/macro.c
@@ -1,4 +1,4 @@
-/* $Id: macro.c,v 1.67 2009/03/12 02:57:36 kristaps Exp $ */
+/* $Id: macro.c,v 1.68 2009/03/12 06:32:17 kristaps Exp $ */
/*
* Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -40,7 +40,7 @@ static int macro_text(MACRO_PROT_ARGS);
static int macro_scoped(MACRO_PROT_ARGS);
static int macro_scoped_close(MACRO_PROT_ARGS);
static int macro_scoped_line(MACRO_PROT_ARGS);
-static int macro_phrase(struct mdoc *, int, char *);
+static int macro_phrase(struct mdoc *, int, int, char *);
#define REWIND_REWIND (1 << 0)
#define REWIND_NOHALT (1 << 1)
@@ -1004,7 +1004,7 @@ macro_scoped(MACRO_PROT_ARGS)
* in the columnar output of a macro. They need
* special handling.
*/
- if ( ! macro_phrase(mdoc, line, p))
+ if ( ! macro_phrase(mdoc, line, lastarg, buf))
return(0);
if ( ! rewind_subblock(MDOC_HEAD, mdoc, tok, line, ppos))
return(0);
@@ -1459,19 +1459,40 @@ macro_phrase(struct mdoc *mdoc, int line, int ppos, char *buf)
{
int i, la, c;
- i = ppos;
+ for (i = ppos; buf[i]; ) {
+ assert(' ' != buf[i]);
-again:
- la = i;
- while (buf[i] && ! isspace((unsigned char)buf[i]))
- i++;
+ la = i;
+ if ('\"' == buf[i]) {
+ la = ++i;
+ while (buf[i] && '\"' != buf[i])
+ i++;
+ if (0 == buf[i])
+ return(mdoc_err(mdoc, "unterminated quoted parameter"));
+ } else
+ while (buf[i] && ! isspace ((unsigned char)buf[i]))
+ i++;
- if (0 == buf[i])
- return(mdoc_word_alloc(mdoc, line, la, buf));
+ if (buf[i])
+ buf[i++] = 0;
- buf[i] = 0;
+ while (buf[i] && isspace((unsigned char)buf[i]))
+ i++;
- if (MDOC_MAX == (c = mdoc_tokhash_find(mdoc->htab, p))) {
- if ( ! mdoc_word_alloc(mdoc, line,
+ if (MDOC_MAX != (c = mdoc_tokhash_find(mdoc->htab, &buf[la]))) {
+ if ( ! mdoc_macro(mdoc, c, line, la, &i, buf))
+ return(0);
+
+ return(1);
+ }
+
+ if ( ! mdoc_word_alloc(mdoc, line, la, &buf[la]))
+ return(0);
+ mdoc->next = MDOC_NEXT_SIBLING;
+
+ while (buf[i] && isspace((unsigned char)buf[i]))
+ i++;
}
+
+ return(1);
}
diff --git a/mdocterm.c b/mdocterm.c
index c54441e3..a41747b2 100644
--- a/mdocterm.c
+++ b/mdocterm.c
@@ -1,4 +1,4 @@
-/* $Id: mdocterm.c,v 1.39 2009/03/11 00:39:58 kristaps Exp $ */
+/* $Id: mdocterm.c,v 1.40 2009/03/12 06:32:17 kristaps Exp $ */
/*
* Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -430,8 +430,8 @@ word(struct termp *p, const char *word)
return;
}
- len = strlen(word);
- assert(len > 0);
+ if (0 == (len = strlen(word)))
+ errx(1, "blank line not in literal context");
if (mdoc_isdelim(word)) {
if ( ! (p->flags & TERMP_IGNDELIM))
diff --git a/term.c b/term.c
index 8aa8b916..8f10d0d3 100644
--- a/term.c
+++ b/term.c
@@ -1,4 +1,4 @@
-/* $Id: term.c,v 1.54 2009/03/12 02:57:36 kristaps Exp $ */
+/* $Id: term.c,v 1.55 2009/03/12 06:32:17 kristaps Exp $ */
/*
* Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -531,7 +531,7 @@ termp_it_pre(DECL_ARGS)
case (MDOC_Enum):
/* FALLTHROUGH */
case (MDOC_Hyphen):
- if (width > 4)
+ if (width < 4)
width = 4;
break;
case (MDOC_Tag):
diff --git a/validate.c b/validate.c
index d723aa3b..a6f37ee1 100644
--- a/validate.c
+++ b/validate.c
@@ -1,4 +1,4 @@
-/* $Id: validate.c,v 1.80 2009/03/12 02:57:36 kristaps Exp $ */
+/* $Id: validate.c,v 1.81 2009/03/12 06:32:17 kristaps Exp $ */
/*
* Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -1187,15 +1187,13 @@ post_it(POST_ARGS)
if (mdoc->last->body->child)
if ( ! mwarn(mdoc, WNOMULTILINE))
return(0);
- c = mdoc->last->head;
+ c = mdoc->last->child;
for (i = 0; c && MDOC_HEAD == c->type; c = c->next)
i++;
if (i == cols)
break;
- if ( ! mdoc_warn(mdoc, WARN_SYNTAX,
- "column mismatch (have %d, want %d)", i, cols))
- return(0);
- break;
+ return(mdoc_err(mdoc, "column mismatch (have "
+ "%d, want %d)", i, cols));
default:
break;
}