]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdocterm.c
Noted lacking areas in mdocterm.1.
[mandoc.git] / mdocterm.c
index 0e36fb308d6fff12cdc44f656ba10bec31cc719d..f2f05dfa9edd92bbaf3bf2c98537c1042b4ca5c2 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: mdocterm.c,v 1.25 2009/03/02 17:14:46 kristaps Exp $ */
+/* $Id: mdocterm.c,v 1.26 2009/03/02 17:29:16 kristaps Exp $ */
 /*
  * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -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);
@@ -729,37 +729,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
@@ -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);
 }
 
 
@@ -865,6 +834,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