=================================================================== RCS file: /cvs/mandoc/Attic/mdoc_action.c,v retrieving revision 1.60 retrieving revision 1.63 diff -u -p -r1.60 -r1.63 --- mandoc/Attic/mdoc_action.c 2010/05/17 23:57:06 1.60 +++ mandoc/Attic/mdoc_action.c 2010/05/30 11:00:53 1.63 @@ -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.63 2010/05/30 11:00:53 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 */ @@ -498,8 +499,8 @@ post_dt(POST_ARGS) if (NULL == (nn = n->child)) { /* XXX: make these macro values. */ /* FIXME: warn about missing values. */ - m->meta.title = mandoc_strdup("unknown"); - m->meta.vol = mandoc_strdup("local"); + m->meta.title = mandoc_strdup("UNKNOWN"); + m->meta.vol = mandoc_strdup("LOCAL"); m->meta.msec = mandoc_strdup("1"); return(post_prol(m, n)); } @@ -508,12 +509,13 @@ post_dt(POST_ARGS) * --> title = TITLE, volume = local, msec = 0, arch = NULL */ - m->meta.title = mandoc_strdup(nn->string); + m->meta.title = mandoc_strdup + ('\0' == nn->string[0] ? "UNKNOWN" : nn->string); if (NULL == (nn = nn->next)) { /* FIXME: warn about missing msec. */ /* XXX: make this a macro value. */ - m->meta.vol = mandoc_strdup("local"); + m->meta.vol = mandoc_strdup("LOCAL"); m->meta.msec = mandoc_strdup("1"); return(post_prol(m, n)); } @@ -637,11 +639,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 +832,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);