]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdoc_action.c
Moved printing of empty word [back] into mdoc_action.c so that it's not
[mandoc.git] / mdoc_action.c
index 96c3d51d2bddf9be99104712174bfaab92fe2e6c..7fa1bf6b775db38ce26533572f8ffec350a10cb5 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_action.c,v 1.60 2010/05/17 23:57:06 kristaps Exp $ */
+/*     $Id: mdoc_action.c,v 1.62 2010/05/29 18:58:52 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -57,6 +57,7 @@ static        int       post_dd(POST_ARGS);
 static int       post_display(POST_ARGS);
 static int       post_dt(POST_ARGS);
 static int       post_lb(POST_ARGS);
+static int       post_li(POST_ARGS);
 static int       post_nm(POST_ARGS);
 static int       post_os(POST_ARGS);
 static int       post_pa(POST_ARGS);
@@ -102,7 +103,7 @@ static      const struct actions mdoc_actions[MDOC_MAX] = {
        { NULL, NULL }, /* Ft */ 
        { NULL, NULL }, /* Ic */ 
        { NULL, NULL }, /* In */ 
-       { NULL, NULL }, /* Li */
+       { NULL, post_li }, /* Li */
        { NULL, NULL }, /* Nd */ 
        { NULL, post_nm }, /* Nm */ 
        { NULL, NULL }, /* Op */
@@ -637,11 +638,14 @@ post_bl_tagwidth(POST_ARGS)
        /* Defaults to ten ens. */
 
        sz = 10; /* XXX: make this a macro value. */
-       nn = n->body->child;
+
+       for (nn = n->body->child; nn; nn = nn->next) {
+               if (MDOC_It == nn->tok)
+                       break;
+       }
 
        if (nn) {
                assert(MDOC_BLOCK == nn->type);
-               assert(MDOC_It == nn->tok);
                nn = nn->head->child;
                if (MDOC_TEXT != nn->type) {
                        sz = mdoc_macro2len(nn->tok);
@@ -833,6 +837,27 @@ post_pa(POST_ARGS)
 }
 
 
+/*
+ * Empty `Li' macros get an empty string to make front-ends add an extra
+ * space.
+ */
+static int
+post_li(POST_ARGS)
+{
+       struct mdoc_node *np;
+
+       if (n->child)
+               return(1);
+       
+       np = n;
+       m->next = MDOC_NEXT_CHILD;
+       if ( ! mdoc_word_alloc(m, n->line, n->pos, ""))
+               return(0);
+       m->last = np;
+       return(1);
+}
+
+
 /*
  * The `Ar' macro defaults to two strings "file ..." if no value is
  * provided as an argument.