summaryrefslogtreecommitdiffstatshomepage
path: root/mdoc.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-01-07 15:53:00 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-01-07 15:53:00 +0000
commit9dd355694618bcd06487072ef69080b1afa3dead (patch)
tree014ccffd5ebbb334c255c29e64f5bdc54d10050d /mdoc.c
parent1c8d0e7cfcdbd3d64368314aed6b31f07872e336 (diff)
downloadmandoc-9dd355694618bcd06487072ef69080b1afa3dead.tar.gz
mandoc-9dd355694618bcd06487072ef69080b1afa3dead.tar.zst
mandoc-9dd355694618bcd06487072ef69080b1afa3dead.zip
*** empty log message ***
Diffstat (limited to 'mdoc.c')
-rw-r--r--mdoc.c42
1 files changed, 36 insertions, 6 deletions
diff --git a/mdoc.c b/mdoc.c
index 657638d7..b97908ac 100644
--- a/mdoc.c
+++ b/mdoc.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc.c,v 1.19 2009/01/06 15:49:44 kristaps Exp $ */
+/* $Id: mdoc.c,v 1.20 2009/01/07 15:53:00 kristaps Exp $ */
/*
* Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -249,11 +249,32 @@ mdoc_alloc(void *data, const struct mdoc_cb *cb)
int
-mdoc_parseln(struct mdoc *mdoc, char *buf)
+mdoc_endparse(struct mdoc *mdoc)
+{
+
+ if (MDOC_HALT & mdoc->flags)
+ return(0);
+ if (NULL == mdoc->first)
+ return(1);
+
+ assert(mdoc->last);
+ if ( ! macro_end(mdoc)) {
+ mdoc->flags |= MDOC_HALT;
+ return(0);
+ }
+ return(1);
+}
+
+
+int
+mdoc_parseln(struct mdoc *mdoc, int line, char *buf)
{
int c, i;
char tmp[5];
+ if (MDOC_HALT & mdoc->flags)
+ return(0);
+
if ('.' != *buf) {
if (SEC_PROLOGUE == mdoc->sec_lastn)
return(mdoc_err(mdoc, -1, 0, ERR_SYNTAX_NOTEXT));
@@ -270,23 +291,32 @@ mdoc_parseln(struct mdoc *mdoc, char *buf)
while (buf[i] && ! isspace(buf[i]) && i < (int)sizeof(tmp))
i++;
- if (i == (int)sizeof(tmp))
+ if (i == (int)sizeof(tmp)) {
+ mdoc->flags |= MDOC_HALT;
return(mdoc_err(mdoc, -1, 1, ERR_MACRO_NOTSUP));
- else if (i <= 2)
+ } else if (i <= 2) {
+ mdoc->flags |= MDOC_HALT;
return(mdoc_err(mdoc, -1, 1, ERR_MACRO_NOTSUP));
+ }
i--;
(void)memcpy(tmp, buf + 1, (size_t)i);
tmp[i++] = 0;
- if (MDOC_MAX == (c = mdoc_find(mdoc, tmp)))
+ if (MDOC_MAX == (c = mdoc_find(mdoc, tmp))) {
+ mdoc->flags |= MDOC_HALT;
return(mdoc_err(mdoc, c, 1, ERR_MACRO_NOTSUP));
+ }
while (buf[i] && isspace(buf[i]))
i++;
- return(mdoc_macro(mdoc, c, 1, &i, buf));
+ if ( ! mdoc_macro(mdoc, c, 1, &i, buf)) {
+ mdoc->flags |= MDOC_HALT;
+ return(0);
+ }
+ return(1);
}