-#include <term.h>
-#include <unistd.h>
-
-#include "private.h"
-
-
-enum termesc {
- ESC_CLEAR,
- ESC_BOLD,
- ESC_UNDERLINE
-};
-
-struct termp {
- size_t maxvisible;
- size_t maxcols;
- size_t indent;
- size_t col;
- int flags;
-#define TERMP_BOLD (1 << 0)
-#define TERMP_UNDERLINE (1 << 1)
-#define TERMP_NOSPACE (1 << 2)
- char *buf;
-};
-
-struct termact {
- int (*pre)(struct termp *,
- const struct mdoc_meta *,
- const struct mdoc_node *);
- int (*post)(struct termp *,
- const struct mdoc_meta *,
- const struct mdoc_node *);
-};
-
-static void termprint_r(struct termp *,
- const struct mdoc_meta *,
- const struct mdoc_node *);
-static void termprint_header(struct termp *,
- const struct mdoc_meta *);
-static void termprint_footer(struct termp *,
- const struct mdoc_meta *);
-
-static void newln(struct termp *);
-static void vspace(struct termp *);
-static void pword(struct termp *, const char *, size_t);
-static void word(struct termp *, const char *);
-
-static int termp_it_pre(struct termp *,
- const struct mdoc_meta *,
- const struct mdoc_node *);
-static int termp_ns_pre(struct termp *,
- const struct mdoc_meta *,
- const struct mdoc_node *);
-static int termp_pp_pre(struct termp *,
- const struct mdoc_meta *,
- const struct mdoc_node *);
-static int termp_fl_pre(struct termp *,
- const struct mdoc_meta *,
- const struct mdoc_node *);
-static int termp_op_pre(struct termp *,
- const struct mdoc_meta *,
- const struct mdoc_node *);
-static int termp_op_post(struct termp *,
- const struct mdoc_meta *,
- const struct mdoc_node *);
-static int termp_bl_post(struct termp *,
- const struct mdoc_meta *,
- const struct mdoc_node *);
-static int termp_sh_post(struct termp *,
- const struct mdoc_meta *,
- const struct mdoc_node *);
-static int termp_sh_pre(struct termp *,
- const struct mdoc_meta *,
- const struct mdoc_node *);
-static int termp_nd_pre(struct termp *,
- const struct mdoc_meta *,
- const struct mdoc_node *);
-static int termp_bold_pre(struct termp *,
- const struct mdoc_meta *,
- const struct mdoc_node *);
-static int termp_under_pre(struct termp *,
- const struct mdoc_meta *,
- const struct mdoc_node *);
-static int termp_bold_post(struct termp *,
- const struct mdoc_meta *,
- const struct mdoc_node *);
-static int termp_under_post(struct termp *,
- const struct mdoc_meta *,
- const struct mdoc_node *);
-
-const struct termact termacts[MDOC_MAX] = {
- { NULL, NULL }, /* \" */
- { NULL, NULL }, /* Dd */
- { NULL, NULL }, /* Dt */
- { NULL, NULL }, /* Os */
- { termp_sh_pre, termp_sh_post }, /* Sh */
- { NULL, NULL }, /* Ss */
- { termp_pp_pre, NULL }, /* Pp */
- { NULL, NULL }, /* D1 */
- { NULL, NULL }, /* Dl */
- { NULL, NULL }, /* Bd */
- { NULL, NULL }, /* Ed */
- { NULL, termp_bl_post }, /* Bl */
- { NULL, NULL }, /* El */
- { termp_it_pre, NULL }, /* It */
- { NULL, NULL }, /* Ad */
- { NULL, NULL }, /* An */
- { termp_under_pre, termp_under_post }, /* Ar */
- { NULL, NULL }, /* Cd */
- { NULL, NULL }, /* Cm */
- { NULL, NULL }, /* Dv */
- { NULL, NULL }, /* Er */
- { NULL, NULL }, /* Ev */
- { NULL, NULL }, /* Ex */
- { NULL, NULL }, /* Fa */
- { NULL, NULL }, /* Fd */
- { termp_fl_pre, termp_bold_post }, /* Fl */
- { NULL, NULL }, /* Fn */
- { NULL, NULL }, /* Ft */
- { NULL, NULL }, /* Ic */
- { NULL, NULL }, /* In */
- { NULL, NULL }, /* Li */
- { termp_nd_pre, NULL }, /* Nd */
- { termp_bold_pre, termp_bold_post }, /* Nm */
- { termp_op_pre, termp_op_post }, /* Op */
- { NULL, NULL }, /* Ot */
- { NULL, NULL }, /* Pa */
- { NULL, NULL }, /* Rv */
- { NULL, NULL }, /* St */
- { NULL, NULL }, /* Va */
- { NULL, NULL }, /* Vt */
- { NULL, NULL }, /* Xr */
- { NULL, NULL }, /* %A */
- { NULL, NULL }, /* %B */
- { NULL, NULL }, /* %D */
- { NULL, NULL }, /* %I */
- { NULL, NULL }, /* %J */
- { NULL, NULL }, /* %N */
- { NULL, NULL }, /* %O */
- { NULL, NULL }, /* %P */
- { NULL, NULL }, /* %R */
- { NULL, NULL }, /* %T */
- { NULL, NULL }, /* %V */
- { NULL, NULL }, /* Ac */
- { NULL, NULL }, /* Ao */
- { NULL, NULL }, /* Aq */
- { NULL, NULL }, /* At */
- { NULL, NULL }, /* Bc */
- { NULL, NULL }, /* Bf */
- { NULL, NULL }, /* Bo */
- { NULL, NULL }, /* Bq */
- { NULL, NULL }, /* Bsx */
- { NULL, NULL }, /* Bx */
- { NULL, NULL }, /* Db */
- { NULL, NULL }, /* Dc */
- { NULL, NULL }, /* Do */
- { NULL, NULL }, /* Dq */
- { NULL, NULL }, /* Ec */
- { NULL, NULL }, /* Ef */
- { NULL, NULL }, /* Em */
- { NULL, NULL }, /* Eo */
- { NULL, NULL }, /* Fx */
- { NULL, NULL }, /* Ms */
- { NULL, NULL }, /* No */
- { termp_ns_pre, NULL }, /* Ns */
- { NULL, NULL }, /* Nx */
- { NULL, NULL }, /* Ox */
- { NULL, NULL }, /* Pc */
- { NULL, NULL }, /* Pf */
- { NULL, NULL }, /* Po */
- { NULL, NULL }, /* Pq */
- { NULL, NULL }, /* Qc */
- { NULL, NULL }, /* Ql */
- { NULL, NULL }, /* Qo */
- { NULL, NULL }, /* Qq */
- { NULL, NULL }, /* Re */
- { NULL, NULL }, /* Rs */
- { NULL, NULL }, /* Sc */
- { NULL, NULL }, /* So */
- { NULL, NULL }, /* Sq */
- { NULL, NULL }, /* Sm */
- { NULL, NULL }, /* Sx */
- { NULL, NULL }, /* Sy */
- { NULL, NULL }, /* Tn */
- { NULL, NULL }, /* Ux */
- { NULL, NULL }, /* Xc */
- { NULL, NULL }, /* Xo */
- { NULL, NULL }, /* Fo */
- { NULL, NULL }, /* Fc */
- { NULL, NULL }, /* Oo */
- { NULL, NULL }, /* Oc */
- { NULL, NULL }, /* Bk */
- { NULL, NULL }, /* Ek */
- { NULL, NULL }, /* Bt */
- { NULL, NULL }, /* Hf */
- { NULL, NULL }, /* Fr */
- { NULL, NULL }, /* Ud */
-};
-
-
-static void
-flush(struct termp *p)
-{
- size_t i, j, vsz, vis, maxvis;