summaryrefslogtreecommitdiffstats
path: root/mdocterm.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-03-02 17:29:16 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-03-02 17:29:16 +0000
commit582f744fa00f667caac63eb928c9ef665d3ef54d (patch)
tree3b46f08b9949d0f0bdb0aa08ff94e1d37630ed2f /mdocterm.c
parentf57412d689f445d6786167aac98dfde81c90ea12 (diff)
downloadmandoc-582f744fa00f667caac63eb928c9ef665d3ef54d.tar.gz
Noted lacking areas in mdocterm.1.
Put styles into symtab (for real this time).
Diffstat (limited to 'mdocterm.c')
-rw-r--r--mdocterm.c51
1 files changed, 16 insertions, 35 deletions
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.