]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdoc_state.c
Bugfix:
[mandoc.git] / mdoc_state.c
index 3938f239d222c6616f40d5c751b4c64b6f25c32c..22a3d268d6eae2b92ce0bb841820fb7ecbd1ede4 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_state.c,v 1.6 2017/05/04 17:48:29 schwarze Exp $ */
+/*     $Id: mdoc_state.c,v 1.11 2018/12/14 01:18:26 schwarze Exp $ */
 /*
  * Copyright (c) 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
  *
@@ -17,6 +17,7 @@
 #include <sys/types.h>
 
 #include <assert.h>
+#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
@@ -36,7 +37,7 @@ static        void     state_dl(STATE_ARGS);
 static void     state_sh(STATE_ARGS);
 static void     state_sm(STATE_ARGS);
 
-static const state_handler __state_handlers[MDOC_MAX - MDOC_Dd] = {
+static const state_handler state_handlers[MDOC_MAX - MDOC_Dd] = {
        NULL,           /* Dd */
        NULL,           /* Dt */
        NULL,           /* Os */
@@ -155,12 +156,9 @@ static     const state_handler __state_handlers[MDOC_MAX - MDOC_Dd] = {
        NULL,           /* En */
        NULL,           /* Dx */
        NULL,           /* %Q */
-       NULL,           /* sp */
        NULL,           /* %U */
        NULL,           /* Ta */
-       NULL,           /* ll */
 };
-static const state_handler *const state_handlers = __state_handlers - MDOC_Dd;
 
 
 void
@@ -172,10 +170,10 @@ mdoc_state(struct roff_man *mdoc, struct roff_node *n)
                return;
 
        assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX);
-       if ( ! (mdoc_macros[n->tok].flags & MDOC_PROLOGUE))
+       if ((mdoc_macro(n->tok)->flags & MDOC_PROLOGUE) == 0)
                mdoc->flags |= MDOC_PBODY;
 
-       handler = state_handlers[n->tok];
+       handler = state_handlers[n->tok - MDOC_Dd];
        if (*handler)
                (*handler)(mdoc, n);
 }
@@ -210,19 +208,24 @@ state_bd(STATE_ARGS)
 static void
 state_bl(STATE_ARGS)
 {
+       struct mdoc_arg *args;
+       size_t           i;
 
        if (n->type != ROFFT_HEAD || n->parent->args == NULL)
                return;
 
-       switch(n->parent->args->argv[0].arg) {
-       case MDOC_Diag:
-               n->norm->Bl.type = LIST_diag;
-               break;
-       case MDOC_Column:
-               n->norm->Bl.type = LIST_column;
-               break;
-       default:
-               break;
+       args = n->parent->args;
+       for (i = 0; i < args->argc; i++) {
+               switch(args->argv[i].arg) {
+               case MDOC_Diag:
+                       n->norm->Bl.type = LIST_diag;
+                       return;
+               case MDOC_Column:
+                       n->norm->Bl.type = LIST_column;
+                       return;
+               default:
+                       break;
+               }
        }
 }