-/* $Id: term.c,v 1.188 2011/05/14 18:15:20 kristaps Exp $ */
+/* $Id: term.c,v 1.189 2011/05/15 14:50:01 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>
{
size_t sz, rsz, i;
int ssz;
- enum mandoc_esc esc;
const char *seq, *rhs;
+ static const char rej[] = { '\\', ASCII_HYPH, ASCII_NBRSP, '\0' };
/*
* Account for escaped sequences within string length
*/
sz = 0;
- while ('\0' != *cp)
+ while ('\0' != *cp) {
+ rsz = strcspn(cp, rej);
+ for (i = 0; i < rsz; i++)
+ sz += (*p->width)(p, *cp++);
+
switch (*cp) {
case ('\\'):
- ++cp;
- esc = mandoc_escape(&cp, &seq, &ssz);
- if (ESCAPE_ERROR == esc)
+ cp++;
+ switch (mandoc_escape(&cp, &seq, &ssz)) {
+ case (ESCAPE_ERROR):
return(sz);
-
- switch (esc) {
case (ESCAPE_PREDEF):
rhs = mchars_res2str
(p->symtab, seq, ssz, &rsz);
cp++;
break;
default:
- sz += (*p->width)(p, *cp++);
break;
}
+ }
return(sz);
}
-
/* ARGSUSED */
size_t
term_vspan(const struct termp *p, const struct roffsu *su)
r);
}
-
size_t
term_hspan(const struct termp *p, const struct roffsu *su)
{