summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mdocterm.119
-rw-r--r--mdocterm.c51
-rw-r--r--term.c3
3 files changed, 37 insertions, 36 deletions
diff --git a/mdocterm.1 b/mdocterm.1
index 6acb7dbf..ea0f0f48 100644
--- a/mdocterm.1
+++ b/mdocterm.1
@@ -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
diff --git a/mdocterm.c b/mdocterm.c
index 0f2f3b5f..f9c89230 100644
--- a/mdocterm.c
+++ b/mdocterm.c
@@ -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.
diff --git a/term.c b/term.c
index ab2dd9b1..3eeb25d6 100644
--- a/term.c
+++ b/term.c
@@ -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 */