summaryrefslogtreecommitdiffstatshomepage
path: root/action.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-01-20 12:51:28 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-01-20 12:51:28 +0000
commit80d8b4991abbf63a591116b09dfb3b844b5b0405 (patch)
tree9601566f0cc8655f61be8ba8c5759021c0ac954f /action.c
parentd5ac4d59d241c1f3d6d3725afa47ddcab745543c (diff)
downloadmandoc-80d8b4991abbf63a591116b09dfb3b844b5b0405.tar.gz
mandoc-80d8b4991abbf63a591116b09dfb3b844b5b0405.tar.zst
mandoc-80d8b4991abbf63a591116b09dfb3b844b5b0405.zip
Moved prologue-pruning into action.c.
Added line-arg softmax.
Diffstat (limited to 'action.c')
-rw-r--r--action.c53
1 files changed, 42 insertions, 11 deletions
diff --git a/action.c b/action.c
index f9bc34d4..f04e650d 100644
--- a/action.c
+++ b/action.c
@@ -1,4 +1,4 @@
-/* $Id: action.c,v 1.12 2009/01/19 17:02:58 kristaps Exp $ */
+/* $Id: action.c,v 1.13 2009/01/20 12:51:28 kristaps Exp $ */
/*
* Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -29,11 +29,13 @@ struct actions {
/* Per-macro action routines. */
-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_nm(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_nm(struct mdoc *);
+
+static int post_prologue(struct mdoc *);
/* Array of macro action routines. */
@@ -226,7 +228,8 @@ post_dt(struct mdoc *mdoc)
if (NULL == mdoc->meta.title)
mdoc->meta.title = xstrdup("untitled");
- return(1);
+
+ return(post_prologue(mdoc));
}
@@ -244,7 +247,9 @@ post_os(struct mdoc *mdoc)
mdoc->meta.os = xstrdup(buf[0] ? buf : "local");
mdoc->sec_lastn = mdoc->sec_last = SEC_BODY;
- return(1);
+ mdoc->flags |= MDOC_BODYPARSE;
+
+ return(post_prologue(mdoc));
}
@@ -269,7 +274,7 @@ post_dd(struct mdoc *mdoc)
assert(MDOC_TEXT == n->type);
p = n->data.text.string;
- if (xstrcmp(p, "$Mdocdate: January 19 2009 $")) {
+ if (xstrcmp(p, "$Mdocdate: January 20 2009 $")) {
mdoc->meta.date = time(NULL);
continue;
} else if (xstrcmp(p, "$")) {
@@ -285,15 +290,41 @@ post_dd(struct mdoc *mdoc)
}
if (mdoc->meta.date && NULL == n)
- return(1);
+ return(post_prologue(mdoc));
else if (n)
return(mdoc_err(mdoc, "invalid parameter syntax"));
if ((mdoc->meta.date = mdoc_atotime(date)))
- return(1);
+ return(post_prologue(mdoc));
return(mdoc_err(mdoc, "invalid parameter syntax"));
}
+static int
+post_prologue(struct mdoc *mdoc)
+{
+ struct mdoc_node *n;
+
+ if (mdoc->last->parent->child == mdoc->last)
+ mdoc->last->parent->child = mdoc->last->prev;
+ if (mdoc->last->prev)
+ mdoc->last->prev->next = NULL;
+
+ n = mdoc->last;
+ assert(NULL == mdoc->last->next);
+
+ if (mdoc->last->prev) {
+ mdoc->last = mdoc->last->prev;
+ mdoc->next = MDOC_NEXT_SIBLING;
+ } else {
+ mdoc->last = mdoc->last->parent;
+ mdoc->next = MDOC_NEXT_CHILD;
+ }
+
+ mdoc_node_freelist(n);
+ return(1);
+}
+
+
int
mdoc_action_post(struct mdoc *mdoc)
{