summaryrefslogtreecommitdiffstatshomepage
path: root/term.c
diff options
context:
space:
mode:
Diffstat (limited to 'term.c')
-rw-r--r--term.c81
1 files changed, 33 insertions, 48 deletions
diff --git a/term.c b/term.c
index fa9d8d68..dcd8c519 100644
--- a/term.c
+++ b/term.c
@@ -1,4 +1,4 @@
-/* $Id: term.c,v 1.94 2009/07/27 12:02:49 kristaps Exp $ */
+/* $Id: term.c,v 1.95 2009/07/27 12:35:54 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -31,15 +31,16 @@ extern int mdoc_run(struct termp *,
static struct termp *term_alloc(enum termenc);
static void term_free(struct termp *);
-static void term_pescape(struct termp *, const char **);
-static void term_nescape(struct termp *,
+
+static void do_escaped(struct termp *, const char **);
+static void do_special(struct termp *,
const char *, size_t);
-static void term_sescape(struct termp *,
+static void do_reserved(struct termp *,
const char *, size_t);
-static void term_chara(struct termp *, char);
-static void term_encodea(struct termp *, char);
-static int term_isopendelim(const char *);
-static int term_isclosedelim(const char *);
+static void buffer(struct termp *, char);
+static void encode(struct termp *, char);
+static int isopendelim(const char *);
+static int isclosedelim(const char *);
void *
@@ -112,7 +113,7 @@ term_alloc(enum termenc enc)
static int
-term_isclosedelim(const char *p)
+isclosedelim(const char *p)
{
if ( ! (*p && 0 == *(p + 1)))
@@ -146,7 +147,7 @@ term_isclosedelim(const char *p)
static int
-term_isopendelim(const char *p)
+isopendelim(const char *p)
{
if ( ! (*p && 0 == *(p + 1)))
@@ -207,12 +208,6 @@ term_isopendelim(const char *p)
* Otherwise, the line will break at the right margin. Extremely long
* lines will cause the system to emit a warning (TODO: hyphenate, if
* possible).
- *
- * FIXME: newline breaks occur (in groff) also occur when a single
- * space follows a NOBREAK (try `Bl -tag')
- *
- * FIXME: there's a newline error where a `Bl -diag' will have a
- * trailing newline if the line is exactly 73 chars long.
*/
void
term_flushln(struct termp *p)
@@ -387,13 +382,8 @@ term_vspace(struct termp *p)
}
-/*
- * Determine the symbol indicated by an escape sequences, that is, one
- * starting with a backslash. Once done, we pass this value into the
- * output buffer by way of the symbol table.
- */
static void
-term_nescape(struct termp *p, const char *word, size_t len)
+do_special(struct termp *p, const char *word, size_t len)
{
const char *rhs;
size_t sz;
@@ -404,12 +394,12 @@ term_nescape(struct termp *p, const char *word, size_t len)
if (NULL == rhs)
return;
for (i = 0; i < (int)sz; i++)
- term_encodea(p, rhs[i]);
+ encode(p, rhs[i]);
}
static void
-term_sescape(struct termp *p, const char *word, size_t len)
+do_reserved(struct termp *p, const char *word, size_t len)
{
const char *rhs;
size_t sz;
@@ -420,7 +410,7 @@ term_sescape(struct termp *p, const char *word, size_t len)
if (NULL == rhs)
return;
for (i = 0; i < (int)sz; i++)
- term_encodea(p, rhs[i]);
+ encode(p, rhs[i]);
}
@@ -430,7 +420,7 @@ term_sescape(struct termp *p, const char *word, size_t len)
* the escape sequence (we assert upon badly-formed escape sequences).
*/
static void
-term_pescape(struct termp *p, const char **word)
+do_escaped(struct termp *p, const char **word)
{
int j;
const char *wp;
@@ -449,7 +439,7 @@ term_pescape(struct termp *p, const char **word)
return;
}
- term_nescape(p, wp, 2);
+ do_special(p, wp, 2);
*word = ++wp;
return;
@@ -467,13 +457,13 @@ term_pescape(struct termp *p, const char **word)
return;
}
- term_sescape(p, wp, 2);
+ do_reserved(p, wp, 2);
*word = ++wp;
return;
case ('['):
break;
default:
- term_sescape(p, wp, 1);
+ do_reserved(p, wp, 1);
*word = wp;
return;
}
@@ -504,7 +494,7 @@ term_pescape(struct termp *p, const char **word)
return;
} else if ('[' != *wp) {
- term_nescape(p, wp, 1);
+ do_special(p, wp, 1);
*word = wp;
return;
}
@@ -518,7 +508,7 @@ term_pescape(struct termp *p, const char **word)
return;
}
- term_nescape(p, wp - j, (size_t)j);
+ do_special(p, wp - j, (size_t)j);
*word = wp;
}
@@ -533,28 +523,23 @@ term_word(struct termp *p, const char *word)
{
const char *sv;
- if (term_isclosedelim(word))
+ if (isclosedelim(word))
if ( ! (TERMP_IGNDELIM & p->flags))
p->flags |= TERMP_NOSPACE;
if ( ! (TERMP_NOSPACE & p->flags))
- term_chara(p, ' ');
+ buffer(p, ' ');
if ( ! (p->flags & TERMP_NONOSPACE))
p->flags &= ~TERMP_NOSPACE;
- /*
- * If ANSI (word-length styling), then apply our style now,
- * before the word.
- */
-
for (sv = word; *word; word++)
if ('\\' != *word)
- term_encodea(p, *word);
+ encode(p, *word);
else
- term_pescape(p, &word);
+ do_escaped(p, &word);
- if (term_isopendelim(sv))
+ if (isopendelim(sv))
p->flags |= TERMP_NOSPACE;
}
@@ -565,7 +550,7 @@ term_word(struct termp *p, const char *word)
* size.
*/
static void
-term_chara(struct termp *p, char c)
+buffer(struct termp *p, char c)
{
size_t s;
@@ -583,18 +568,18 @@ term_chara(struct termp *p, char c)
static void
-term_encodea(struct termp *p, char c)
+encode(struct termp *p, char c)
{
if (' ' != c && TERMP_STYLE & p->flags) {
if (TERMP_BOLD & p->flags) {
- term_chara(p, c);
- term_chara(p, 8);
+ buffer(p, c);
+ buffer(p, 8);
}
if (TERMP_UNDER & p->flags) {
- term_chara(p, '_');
- term_chara(p, 8);
+ buffer(p, '_');
+ buffer(p, 8);
}
}
- term_chara(p, c);
+ buffer(p, c);
}