aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/term.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2011-05-15 22:29:50 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2011-05-15 22:29:50 +0000
commita96cac2f523bff3d1c811444fa013f8d9eca81c9 (patch)
treed505d7dd07408c0eb77d550214a76fd5bc283ea9 /term.c
parentd60df528affe8e1fa6467b843167b9697cb433ad (diff)
downloadmandoc-a96cac2f523bff3d1c811444fa013f8d9eca81c9.tar.gz
mandoc-a96cac2f523bff3d1c811444fa013f8d9eca81c9.tar.zst
mandoc-a96cac2f523bff3d1c811444fa013f8d9eca81c9.zip
Remove function calls to res() and so forth in term_word(). These were
only used once and simply bloated the binary. Also fix mchars_num2char to correctly render the character instead of using atoi(). This makes the conversation more strict, but it's more correct.
Diffstat (limited to 'term.c')
-rw-r--r--term.c69
1 files changed, 16 insertions, 53 deletions
diff --git a/term.c b/term.c
index 110bbc46..0ea561cb 100644
--- a/term.c
+++ b/term.c
@@ -1,4 +1,4 @@
-/* $Id: term.c,v 1.190 2011/05/15 15:47:46 kristaps Exp $ */
+/* $Id: term.c,v 1.191 2011/05/15 22:29:50 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>
@@ -33,12 +33,9 @@
#include "term.h"
#include "main.h"
-static void spec(struct termp *, const char *, size_t);
-static void res(struct termp *, const char *, size_t);
-static void bufferc(struct termp *, char);
-static void adjbuf(struct termp *p, int);
-static void encode(struct termp *, const char *, size_t);
-
+static void adjbuf(struct termp *p, int);
+static void bufferc(struct termp *, char);
+static void encode(struct termp *, const char *, size_t);
void
term_free(struct termp *p)
@@ -344,43 +341,6 @@ term_vspace(struct termp *p)
(*p->endline)(p);
}
-
-static void
-numbered(struct termp *p, const char *word, size_t len)
-{
- char c;
-
- if ('\0' != (c = mchars_num2char(word, len)))
- encode(p, &c, 1);
-}
-
-
-static void
-spec(struct termp *p, const char *word, size_t len)
-{
- const char *rhs;
- size_t sz;
-
- rhs = mchars_spec2str(p->symtab, word, len, &sz);
- if (rhs)
- encode(p, rhs, sz);
- else if (1 == len)
- encode(p, word, len);
-}
-
-
-static void
-res(struct termp *p, const char *word, size_t len)
-{
- const char *rhs;
- size_t sz;
-
- rhs = mchars_res2str(p->symtab, word, len, &sz);
- if (rhs)
- encode(p, rhs, sz);
-}
-
-
void
term_fontlast(struct termp *p)
{
@@ -445,7 +405,6 @@ term_fontpop(struct termp *p)
p->fonti--;
}
-
/*
* Handle pwords, partial words, which may be either a single word or a
* phrase that cannot be broken down (such as a literal string). This
@@ -454,7 +413,8 @@ term_fontpop(struct termp *p)
void
term_word(struct termp *p, const char *word)
{
- const char *seq;
+ const char *seq, *cp;
+ char c;
int sz;
size_t ssz;
enum mandoc_esc esc;
@@ -492,13 +452,20 @@ term_word(struct termp *p, const char *word)
switch (esc) {
case (ESCAPE_NUMBERED):
- numbered(p, seq, sz);
+ if ('\0' != (c = mchars_num2char(seq, sz)))
+ encode(p, &c, 1);
break;
case (ESCAPE_PREDEF):
- res(p, seq, sz);
+ cp = mchars_res2str(p->symtab, seq, sz, &ssz);
+ if (NULL != cp)
+ encode(p, cp, ssz);
break;
case (ESCAPE_SPECIAL):
- spec(p, seq, sz);
+ cp = mchars_spec2str(p->symtab, seq, sz, &ssz);
+ if (NULL != cp)
+ encode(p, cp, ssz);
+ else if (1 == ssz)
+ encode(p, seq, sz);
break;
case (ESCAPE_FONTBOLD):
term_fontrepl(p, TERMFONT_BOLD);
@@ -522,7 +489,6 @@ term_word(struct termp *p, const char *word)
}
}
-
static void
adjbuf(struct termp *p, int sz)
{
@@ -536,7 +502,6 @@ adjbuf(struct termp *p, int sz)
(p->buf, sizeof(int) * (size_t)p->maxcols);
}
-
static void
bufferc(struct termp *p, char c)
{
@@ -547,7 +512,6 @@ bufferc(struct termp *p, char c)
p->buf[p->col++] = c;
}
-
static void
encode(struct termp *p, const char *word, size_t sz)
{
@@ -592,7 +556,6 @@ encode(struct termp *p, const char *word, size_t sz)
}
}
-
size_t
term_len(const struct termp *p, size_t sz)
{