summaryrefslogtreecommitdiffstatshomepage
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
commit1e85c3949ce76b81aa8b89f634e30797ddc81cc8 (patch)
tree94023f59de54c2900c60d1b1369cf956e8470fb8 /mdocterm.c
parent162ce81d3a61862bea3503763f631cf91bd28023 (diff)
downloadmandoc-1e85c3949ce76b81aa8b89f634e30797ddc81cc8.tar.gz
mandoc-1e85c3949ce76b81aa8b89f634e30797ddc81cc8.tar.zst
mandoc-1e85c3949ce76b81aa8b89f634e30797ddc81cc8.zip
Noted lacking areas in mdocterm.1.
Put styles into symtab (for real this time).
Diffstat (limited to 'mdocterm.c')
-rw-r--r--mdocterm.c53
1 files changed, 17 insertions, 36 deletions
diff --git a/mdocterm.c b/mdocterm.c
index 0e36fb30..f2f05dfa 100644
--- a/mdocterm.c
+++ b/mdocterm.c
@@ -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);
@@ -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.