+
+ n = mdoc->last;
+
+ mdoc->next = MDOC_NEXT_CHILD;
+ if ( ! mdoc_word_alloc(mdoc, mdoc->last->line,
+ mdoc->last->pos, "file"))
+ return(0);
+ mdoc->next = MDOC_NEXT_SIBLING;
+ if ( ! mdoc_word_alloc(mdoc, mdoc->last->line,
+ mdoc->last->pos, "..."))
+ return(0);
+
+ mdoc->last = n;
+ mdoc->next = MDOC_NEXT_SIBLING;
+ return(1);
+}
+
+
+static int
+post_dd(struct mdoc *mdoc)
+{
+ char buf[64];
+
+ (void)xstrlcpys(buf, mdoc->last->child, sizeof(buf));
+
+ if (0 == (mdoc->meta.date = mdoc_atotime(buf)))
+ return(mdoc_err(mdoc, "invalid date syntax"));
+
+ mdoc_msg(mdoc, "date: %u", mdoc->meta.date);
+ return(post_prologue(mdoc));
+}
+
+
+static int
+post_prologue(struct mdoc *mdoc)
+{
+ struct mdoc_node *n;
+
+ /*
+ * The end document shouldn't have the prologue macros as part
+ * of the syntax tree (they encompass only meta-data).
+ */
+
+ 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);