/* ARGSUSED */ static int man_IP_pre(MAN_ARGS) { const struct man_node *nn; if (MAN_BODY == n->type) { print_otag(h, TAG_DD, 0, NULL); return(1); } else if (MAN_HEAD != n->type) { print_otag(h, TAG_DL, 0, NULL); return(1); } /* FIXME: width specification. */ print_otag(h, TAG_DT, 0, NULL); /* For IP, only print the first header element. */ if (MAN_IP == n->tok && n->child) print_man_node(man, n->child, mh, h); /* For TP, only print next-line header elements. */ if (MAN_TP == n->tok) for (nn = n->child; nn; nn = nn->next) if (nn->line > n->line) print_man_node(man, nn, mh, h); return(0); }
static int pre_IP(DECL_ARGS) { struct roffsu su; const struct roff_node *nn; int len, savelit; switch (n->type) { case ROFFT_BODY: p->flags |= TERMP_NOSPACE; break; case ROFFT_HEAD: p->flags |= TERMP_NOBREAK; p->trailspace = 1; break; case ROFFT_BLOCK: print_bvspace(p, n, mt->pardist); /* FALLTHROUGH */ default: return 1; } /* Calculate the offset from the optional second argument. */ if ((nn = n->parent->head->child) != NULL && (nn = nn->next) != NULL && a2roffsu(nn->string, &su, SCALE_EN)) { len = term_hspan(p, &su) / 24; if (len < 0 && (size_t)(-len) > mt->offset) len = -mt->offset; else if (len > SHRT_MAX) len = term_len(p, p->defindent); mt->lmargin[mt->lmargincur] = len; } else len = mt->lmargin[mt->lmargincur]; switch (n->type) { case ROFFT_HEAD: p->offset = mt->offset; p->rmargin = mt->offset + len; savelit = MANT_LITERAL & mt->fl; mt->fl &= ~MANT_LITERAL; if (n->child) print_man_node(p, mt, n->child, meta); if (savelit) mt->fl |= MANT_LITERAL; return 0; case ROFFT_BODY: p->offset = mt->offset + len; p->rmargin = p->maxrmargin; break; default: break; } return 1; }
static void print_man_nodelist(MAN_ARGS) { print_man_node(man, n, mh, h); if (n->next) print_man_nodelist(man, n->next, mh, h); }
static void print_man_nodelist(DECL_ARGS) { print_man_node(p, mt, n, m); if ( ! n->next) return; print_man_nodelist(p, mt, n->next, m); }
static void print_man_nodelist(DECL_ARGS) { while (n != NULL) { print_man_node(p, mt, n, meta); n = n->next; } }
static void print_man_nodelist(MAN_ARGS) { while (n != NULL) { print_man_node(man, n, h); n = n->next; } }
static int man_alt_pre(MAN_ARGS) { const struct man_node *nn; int i, savelit; enum htmltag fp; struct tag *t; if ((savelit = mh->fl & MANH_LITERAL)) print_otag(h, TAG_BR, 0, NULL); mh->fl &= ~MANH_LITERAL; for (i = 0, nn = n->child; nn; nn = nn->next, i++) { t = NULL; switch (n->tok) { case MAN_BI: fp = i % 2 ? TAG_I : TAG_B; break; case MAN_IB: fp = i % 2 ? TAG_B : TAG_I; break; case MAN_RI: fp = i % 2 ? TAG_I : TAG_MAX; break; case MAN_IR: fp = i % 2 ? TAG_MAX : TAG_I; break; case MAN_BR: fp = i % 2 ? TAG_MAX : TAG_B; break; case MAN_RB: fp = i % 2 ? TAG_B : TAG_MAX; break; default: abort(); /* NOTREACHED */ } if (i) h->flags |= HTML_NOSPACE; if (TAG_MAX != fp) t = print_otag(h, fp, 0, NULL); print_man_node(man, nn, mh, h); if (t) print_tagq(h, t); } if (savelit) mh->fl |= MANH_LITERAL; return(0); }
/* ARGSUSED */ static int pre_alternate(DECL_ARGS) { enum termfont font[2]; const struct man_node *nn; int savelit, i; switch (n->tok) { case (MAN_RB): font[0] = TERMFONT_NONE; font[1] = TERMFONT_BOLD; break; case (MAN_RI): font[0] = TERMFONT_NONE; font[1] = TERMFONT_UNDER; break; case (MAN_BR): font[0] = TERMFONT_BOLD; font[1] = TERMFONT_NONE; break; case (MAN_BI): font[0] = TERMFONT_BOLD; font[1] = TERMFONT_UNDER; break; case (MAN_IR): font[0] = TERMFONT_UNDER; font[1] = TERMFONT_NONE; break; case (MAN_IB): font[0] = TERMFONT_UNDER; font[1] = TERMFONT_BOLD; break; default: abort(); } savelit = MANT_LITERAL & mt->fl; mt->fl &= ~MANT_LITERAL; for (i = 0, nn = n->child; nn; nn = nn->next, i = 1 - i) { term_fontrepl(p, font[i]); if (savelit && NULL == nn->next) mt->fl |= MANT_LITERAL; print_man_node(p, mt, nn, m); if (nn->next) p->flags |= TERMP_NOSPACE; } return(0); }
static int man_IP_pre(MAN_ARGS) { const struct roff_node *nn; if (n->type == ROFFT_BODY) { print_otag(h, TAG_DD, "c", "It-tag"); return 1; } else if (n->type != ROFFT_HEAD) { print_otag(h, TAG_DL, "c", "Bl-tag"); return 1; } /* FIXME: width specification. */ print_otag(h, TAG_DT, "c", "It-tag"); /* For IP, only print the first header element. */ if (MAN_IP == n->tok && n->child) print_man_node(man, n->child, h); /* For TP, only print next-line header elements. */ if (MAN_TP == n->tok) { nn = n->child; while (NULL != nn && 0 == (NODE_LINE & nn->flags)) nn = nn->next; while (NULL != nn) { print_man_node(man, nn, h); nn = nn->next; } } return 0; }
static void post_UR(DECL_ARGS) { if (n->type != ROFFT_BLOCK) return; term_word(p, "<"); p->flags |= TERMP_NOSPACE; if (NULL != n->child->child) print_man_node(p, mt, n->child->child, meta); p->flags |= TERMP_NOSPACE; term_word(p, ">"); }
/* ARGSUSED */ static int pre_TP(DECL_ARGS) { const struct man_node *nn; size_t len; int savelit, ival; switch (n->type) { case (MAN_HEAD): p->flags |= TERMP_NOBREAK; break; case (MAN_BODY): p->flags |= TERMP_NOSPACE; break; case (MAN_BLOCK): print_bvspace(p, n); /* FALLTHROUGH */ default: return(1); } len = (size_t)mt->lmargin[mt->lmargincur]; ival = -1; /* Calculate offset. */ if (NULL != (nn = n->parent->head->child)) if (nn->string && nn->parent->line == nn->line) if ((ival = a2width(p, nn->string)) >= 0) len = (size_t)ival; switch (n->type) { case (MAN_HEAD): /* Handle zero-length properly. */ if (0 == len) len = term_len(p, 1); p->offset = mt->offset; p->rmargin = mt->offset + len; savelit = MANT_LITERAL & mt->fl; mt->fl &= ~MANT_LITERAL; /* Don't print same-line elements. */ for (nn = n->child; nn; nn = nn->next) if (nn->line > n->line) print_man_node(p, mt, nn, m); if (savelit) mt->fl |= MANT_LITERAL; if (ival >= 0) mt->lmargin[mt->lmargincur] = (size_t)ival; return(0); case (MAN_BODY): p->offset = mt->offset + len; p->rmargin = p->maxrmargin; break; default: break; } return(1); }
/* ARGSUSED */ static int pre_IP(DECL_ARGS) { const struct man_node *nn; size_t len; int savelit, ival; switch (n->type) { case (MAN_BODY): p->flags |= TERMP_NOSPACE; break; case (MAN_HEAD): p->flags |= TERMP_NOBREAK; break; case (MAN_BLOCK): print_bvspace(p, n); /* FALLTHROUGH */ default: return(1); } len = mt->lmargin[mt->lmargincur]; ival = -1; /* Calculate the offset from the optional second argument. */ if (NULL != (nn = n->parent->head->child)) if (NULL != (nn = nn->next)) if ((ival = a2width(p, nn->string)) >= 0) len = (size_t)ival; switch (n->type) { case (MAN_HEAD): /* Handle zero-width lengths. */ if (0 == len) len = term_len(p, 1); p->offset = mt->offset; p->rmargin = mt->offset + len; if (ival < 0) break; /* Set the saved left-margin. */ mt->lmargin[mt->lmargincur] = (size_t)ival; savelit = MANT_LITERAL & mt->fl; mt->fl &= ~MANT_LITERAL; if (n->child) print_man_node(p, mt, n->child, m); if (savelit) mt->fl |= MANT_LITERAL; return(0); case (MAN_BODY): p->offset = mt->offset + len; p->rmargin = p->maxrmargin; break; default: break; } return(1); }
static int pre_TP(DECL_ARGS) { struct roffsu su; struct roff_node *nn; int len, savelit; switch (n->type) { case ROFFT_HEAD: p->flags |= TERMP_NOBREAK | TERMP_BRTRSP; p->trailspace = 1; break; case ROFFT_BODY: p->flags |= TERMP_NOSPACE; break; case ROFFT_BLOCK: print_bvspace(p, n, mt->pardist); /* FALLTHROUGH */ default: return 1; } /* Calculate offset. */ if ((nn = n->parent->head->child) != NULL && nn->string != NULL && ! (MAN_LINE & nn->flags) && a2roffsu(nn->string, &su, SCALE_EN)) { len = term_hspan(p, &su) / 24; if (len < 0 && (size_t)(-len) > mt->offset) len = -mt->offset; else if (len > SHRT_MAX) len = term_len(p, p->defindent); mt->lmargin[mt->lmargincur] = len; } else len = mt->lmargin[mt->lmargincur]; switch (n->type) { case ROFFT_HEAD: p->offset = mt->offset; p->rmargin = mt->offset + len; savelit = MANT_LITERAL & mt->fl; mt->fl &= ~MANT_LITERAL; /* Don't print same-line elements. */ nn = n->child; while (NULL != nn && 0 == (MAN_LINE & nn->flags)) nn = nn->next; while (NULL != nn) { print_man_node(p, mt, nn, meta); nn = nn->next; } if (savelit) mt->fl |= MANT_LITERAL; return 0; case ROFFT_BODY: p->offset = mt->offset + len; p->rmargin = p->maxrmargin; p->trailspace = 0; p->flags &= ~(TERMP_NOBREAK | TERMP_BRTRSP); break; default: break; } return 1; }