+ print_man(n->next, indent);
+}
+
+static void
+print_attr(const struct roff_node *n)
+{
+ putchar(' ');
+ if (n->flags & NODE_DELIMO)
+ putchar('(');
+ if (n->flags & NODE_LINE)
+ putchar('*');
+ printf("%d:%d", n->line, n->pos + 1);
+ if (n->flags & NODE_DELIMC)
+ putchar(')');
+ if (n->flags & NODE_EOS)
+ putchar('.');
+ if (n->flags & NODE_ID) {
+ printf(" ID");
+ if (n->flags & NODE_HREF)
+ printf("=HREF");
+ } else if (n->flags & NODE_HREF)
+ printf(" HREF");
+ else if (n->tag != NULL)
+ printf(" STRAYTAG");
+ if (n->tag != NULL)
+ printf("=%s", n->tag);
+ if (n->flags & NODE_BROKEN)
+ printf(" BROKEN");
+ if (n->flags & NODE_NOFILL)
+ printf(" NOFILL");
+ if (n->flags & NODE_NOSRC)
+ printf(" NOSRC");
+ if (n->flags & NODE_NOPRT)
+ printf(" NOPRT");
+ putchar('\n');
+}
+
+static void
+print_box(const struct eqn_box *ep, int indent)
+{
+ int i;
+ const char *t;
+
+ static const char *posnames[] = {
+ NULL, "sup", "subsup", "sub",
+ "to", "from", "fromto",
+ "over", "sqrt", NULL };
+
+ if (NULL == ep)
+ return;
+ for (i = 0; i < indent; i++)
+ putchar(' ');
+
+ t = NULL;
+ switch (ep->type) {
+ case EQN_LIST:
+ t = "eqn-list";
+ break;
+ case EQN_SUBEXPR:
+ t = "eqn-expr";
+ break;
+ case EQN_TEXT:
+ t = "eqn-text";
+ break;
+ case EQN_PILE:
+ t = "eqn-pile";
+ break;
+ case EQN_MATRIX:
+ t = "eqn-matrix";
+ break;
+ }
+
+ fputs(t, stdout);
+ if (ep->pos)
+ printf(" pos=%s", posnames[ep->pos]);
+ if (ep->left)
+ printf(" left=\"%s\"", ep->left);
+ if (ep->right)
+ printf(" right=\"%s\"", ep->right);
+ if (ep->top)
+ printf(" top=\"%s\"", ep->top);
+ if (ep->bottom)
+ printf(" bottom=\"%s\"", ep->bottom);
+ if (ep->text)
+ printf(" text=\"%s\"", ep->text);
+ if (ep->font)
+ printf(" font=%d", ep->font);
+ if (ep->size != EQN_DEFSIZE)
+ printf(" size=%d", ep->size);
+ if (ep->expectargs != UINT_MAX && ep->expectargs != ep->args)
+ printf(" badargs=%zu(%zu)", ep->args, ep->expectargs);
+ else if (ep->args)
+ printf(" args=%zu", ep->args);
+ putchar('\n');
+
+ print_box(ep->first, indent + 4);
+ print_box(ep->next, indent);