=================================================================== RCS file: /cvs/mandoc/Attic/mdoc_action.c,v retrieving revision 1.60 retrieving revision 1.62 diff -u -p -r1.60 -r1.62 --- mandoc/Attic/mdoc_action.c 2010/05/17 23:57:06 1.60 +++ mandoc/Attic/mdoc_action.c 2010/05/29 18:58:52 1.62 @@ -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 * @@ -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); @@ -827,6 +831,27 @@ post_pa(POST_ARGS) m->next = MDOC_NEXT_CHILD; /* XXX: make into macro value. */ if ( ! mdoc_word_alloc(m, n->line, n->pos, "~")) + return(0); + m->last = np; + return(1); +} + + +/* + * 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);