diff options
-rw-r--r-- | mdocterm.1 | 19 | ||||
-rw-r--r-- | mdocterm.c | 51 | ||||
-rw-r--r-- | term.c | 3 |
3 files changed, 37 insertions, 36 deletions
@@ -220,3 +220,22 @@ See .Xr mdoc 3 for a list of bugs, caveats, and incomplete macros regarding the document parse. +.Pp +The +.Nm +utility doesn't yet know how to display the following: +.Pp +.Bl -bullet -compact +.It +Only \-bullet , \-dash , \-enum , \-hyphen , \-tag and \-ohang +.Sq \&Bl +lists are supported. +.It +The \-literal and \-unfilled +.Sq \&Bd +displays only accept text contents. +.It +The +.Sq \&Xo/Xc +pair isn't supported (and never will be). +.El @@ -44,13 +44,13 @@ static void footer(struct termp *, static void pword(struct termp *, const char *, size_t); static void pescape(struct termp *, const char *, size_t *, size_t); -static void style(struct termp *, enum tstyle); static void nescape(struct termp *, const char *, size_t); static void chara(struct termp *, char); static void stringa(struct termp *, const char *, size_t); static void symbola(struct termp *, enum tsym); +static void stylea(struct termp *, enum tstyle); #ifdef __linux__ extern size_t strlcat(char *, const char *, size_t); @@ -730,37 +730,6 @@ nescape(struct termp *p, const char *word, size_t len) /* - * Apply a style to the output buffer. This is looked up by means of - * the styletab. - */ -static void -style(struct termp *p, enum tstyle esc) -{ - - if (p->col + 4 >= p->maxcols) - errx(1, "line overrun"); - - p->buf[(p->col)++] = 27; - p->buf[(p->col)++] = '['; - switch (esc) { - case (TERMSTYLE_CLEAR): - p->buf[(p->col)++] = '0'; - break; - case (TERMSTYLE_BOLD): - p->buf[(p->col)++] = '1'; - break; - case (TERMSTYLE_UNDER): - p->buf[(p->col)++] = '4'; - break; - default: - abort(); - /* NOTREACHED */ - } - p->buf[(p->col)++] = 'm'; -} - - -/* * Handle an escape sequence: determine its length and pass it to the * escape-symbol look table. Note that we assume mdoc(3) has validated * the escape sequence (we assert upon badly-formed escape sequences). @@ -835,9 +804,9 @@ pword(struct termp *p, const char *word, size_t len) */ if (p->flags & TERMP_BOLD) - style(p, TERMSTYLE_BOLD); + stylea(p, TERMSTYLE_BOLD); if (p->flags & TERMP_UNDERLINE) - style(p, TERMSTYLE_UNDER); + stylea(p, TERMSTYLE_UNDER); for (i = 0; i < len; i++) { if ('\\' == word[i]) { @@ -849,7 +818,7 @@ pword(struct termp *p, const char *word, size_t len) if (p->flags & TERMP_BOLD || p->flags & TERMP_UNDERLINE) - style(p, TERMSTYLE_CLEAR); + stylea(p, TERMSTYLE_CLEAR); } @@ -866,6 +835,18 @@ symbola(struct termp *p, enum tsym sym) /* + * Add a style to the output line buffer. + */ +static void +stylea(struct termp *p, enum tstyle style) +{ + + assert(p->styletab[style].sym); + stringa(p, p->styletab[style].sym, p->styletab[style].sz); +} + + +/* * Like chara() but for arbitrary-length buffers. Resize the buffer by * a factor of two (if the buffer is less than that) or the buffer's * size. @@ -30,7 +30,6 @@ * post-fix operations are defined here. */ -/* FIXME: indent/tab. */ /* FIXME: macro arguments can be escaped. */ #define TTYPE_PROG 0 @@ -59,6 +58,8 @@ * the same thing (like .Ex -std cmd and .Nm cmd). */ +/* TODO: abstract this into mdocterm.c. */ + const int ttypes[TTYPE_NMAX] = { TERMP_BOLD, /* TTYPE_PROG */ TERMP_BOLD, /* TTYPE_CMD_FLAG */ |