+ /* Check: duplicate auxiliary arguments. */
+
+ if (dup && ! mdoc_nmsg(mdoc, n, MANDOCERR_ARGVREP))
+ return(0);
+
+ if (comp && ! dup)
+ n->data.Bl->comp = comp;
+ if (offs && ! dup)
+ n->data.Bl->offs = offs;
+ if (width && ! dup)
+ n->data.Bl->width = width;
+
+ /* Check: multiple list types. */
+
+ if (LIST__NONE != lt && n->data.Bl->type != LIST__NONE)
+ if ( ! mdoc_nmsg(mdoc, n, MANDOCERR_LISTREP))
+ return(0);
+
+ /* Assign list type. */
+
+ if (LIST__NONE != lt && n->data.Bl->type == LIST__NONE) {
+ n->data.Bl->type = lt;
+ /* Set column information, too. */
+ if (LIST_column == lt) {
+ n->data.Bl->ncols =
+ n->args->argv[i].sz;
+ n->data.Bl->cols = (const char **)
+ n->args->argv[i].value;
+ }
+ }
+
+ /* The list type should come first. */
+
+ if (n->data.Bl->type == LIST__NONE)
+ if (n->data.Bl->width ||
+ n->data.Bl->offs ||
+ n->data.Bl->comp)
+ if ( ! mdoc_nmsg(mdoc, n, MANDOCERR_LISTFIRST))
+ return(0);
+
+ continue;
+ }
+
+ /* Allow lists to default to LIST_item. */
+
+ if (LIST__NONE == n->data.Bl->type) {
+ if ( ! mdoc_nmsg(mdoc, n, MANDOCERR_LISTTYPE))
+ return(0);
+ n->data.Bl->type = LIST_item;
+ }