- switch (n->type) {
- case ROFFT_BLOCK:
- save_fillmode = 0;
- /* Some block macros suspend or cancel .nf. */
- switch (n->tok) {
- case MAN_TP: /* Tagged paragraphs */
- case MAN_IP: /* temporarily disable .nf */
- case MAN_HP: /* for the head. */
- save_fillmode = want_fillmode;
- /* FALLTHROUGH */
- case MAN_SH: /* Section headers */
- case MAN_SS: /* permanently cancel .nf. */
- want_fillmode = MAN_fi;
- /* FALLTHROUGH */
- case MAN_PP: /* These have no head. */
- case MAN_LP: /* They will simply */
- case MAN_P: /* reopen .nf in the body. */
- case MAN_RS:
- case MAN_UR:
- fillmode(h, MAN_fi);
- break;
- default:
- break;
- }
- break;
- case ROFFT_TBL:
- fillmode(h, MAN_fi);
- break;
- case ROFFT_ELEM:
- /*
- * Some in-line macros produce tags and/or text
- * in the handler, so they require fill mode to be
- * configured up front just like for text nodes.
- * For the others, keep the traditional approach
- * of doing the same, for now.
- */
- fillmode(h, want_fillmode);
- break;
- case ROFFT_TEXT:
- if (fillmode(h, want_fillmode) == MAN_fi &&
- want_fillmode == MAN_fi &&
- n->flags & NODE_LINE && *n->string == ' ')
- print_otag(h, TAG_BR, "");
- if (*n->string != '\0')
- break;
- print_paragraph(h);
- return;
- default:
- break;
- }
-
- /* Produce output for this node. */
+ if ((n->flags & NODE_NOFILL) == 0)
+ html_fillmode(h, ROFF_fi);
+ else if (html_fillmode(h, ROFF_nf) == ROFF_nf &&
+ n->tok != ROFF_fi && n->flags & NODE_LINE &&
+ (n->prev == NULL || n->prev->tok != MAN_YS))
+ print_endline(h);