version 1.16, 2009/02/27 08:20:15 |
version 1.18, 2009/02/27 10:55:16 |
|
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
* PERFORMANCE OF THIS SOFTWARE. |
* PERFORMANCE OF THIS SOFTWARE. |
*/ |
*/ |
|
#include <sys/utsname.h> |
|
|
#include <assert.h> |
#include <assert.h> |
#include <ctype.h> |
#include <ctype.h> |
#include <err.h> |
#include <err.h> |
|
|
#define TERMSYM_LARROW "<-" |
#define TERMSYM_LARROW "<-" |
#define TERMSYM_RARROW "->" |
#define TERMSYM_RARROW "->" |
#define TERMSYM_UARROW "^" |
#define TERMSYM_UARROW "^" |
|
#define TERMSYM_DARROW "v" |
#define TERMSYM_LSQUOTE "`" |
#define TERMSYM_LSQUOTE "`" |
#define TERMSYM_RSQUOTE "\'" |
#define TERMSYM_RSQUOTE "\'" |
#define TERMSYM_SQUOTE "\'" |
#define TERMSYM_SQUOTE "\'" |
|
|
#define TERMSYM_GRAVE "`" |
#define TERMSYM_GRAVE "`" |
#define TERMSYM_PI "pi" |
#define TERMSYM_PI "pi" |
#define TERMSYM_PLUSMINUS "+=" |
#define TERMSYM_PLUSMINUS "+=" |
#define TERMSYM_INFINITY "infinity" |
#define TERMSYM_INF "oo" |
|
#define TERMSYM_INF2 "infinity" |
#define TERMSYM_NAN "NaN" |
#define TERMSYM_NAN "NaN" |
#define TERMSYM_BAR "|" |
#define TERMSYM_BAR "|" |
#define TERMSYM_BULLET "o" |
#define TERMSYM_BULLET "o" |
Line 338 nescape(struct termp *p, const char *word, size_t len) |
|
Line 342 nescape(struct termp *p, const char *word, size_t len) |
|
stringa(p, TERMSYM_RBRACK); |
stringa(p, TERMSYM_RBRACK); |
else if ('l' == word[0] && 'B' == word[1]) |
else if ('l' == word[0] && 'B' == word[1]) |
stringa(p, TERMSYM_LBRACK); |
stringa(p, TERMSYM_LBRACK); |
|
else if ('l' == word[0] && 'q' == word[1]) |
|
stringa(p, TERMSYM_LDQUOTE); |
|
else if ('r' == word[0] && 'q' == word[1]) |
|
stringa(p, TERMSYM_RDQUOTE); |
|
else if ('o' == word[0] && 'q' == word[1]) |
|
stringa(p, TERMSYM_LSQUOTE); |
|
else if ('a' == word[0] && 'q' == word[1]) |
|
stringa(p, TERMSYM_RSQUOTE); |
else if ('<' == word[0] && '-' == word[1]) |
else if ('<' == word[0] && '-' == word[1]) |
stringa(p, TERMSYM_LARROW); |
stringa(p, TERMSYM_LARROW); |
else if ('-' == word[0] && '>' == word[1]) |
else if ('-' == word[0] && '>' == word[1]) |
stringa(p, TERMSYM_RARROW); |
stringa(p, TERMSYM_RARROW); |
else if ('l' == word[0] && 'q' == word[1]) |
|
stringa(p, TERMSYM_DQUOTE); |
|
else if ('r' == word[0] && 'q' == word[1]) |
|
stringa(p, TERMSYM_DQUOTE); |
|
else if ('b' == word[0] && 'u' == word[1]) |
else if ('b' == word[0] && 'u' == word[1]) |
stringa(p, TERMSYM_BULLET); |
stringa(p, TERMSYM_BULLET); |
else if ('L' == word[0] && 'e' == word[1]) |
|
stringa(p, TERMSYM_LE); |
|
else if ('<' == word[0] && '=' == word[1]) |
else if ('<' == word[0] && '=' == word[1]) |
stringa(p, TERMSYM_LE); |
stringa(p, TERMSYM_LE); |
else if ('G' == word[0] && 'e' == word[1]) |
|
stringa(p, TERMSYM_GE); |
|
else if ('>' == word[0] && '=' == word[1]) |
else if ('>' == word[0] && '=' == word[1]) |
stringa(p, TERMSYM_GE); |
stringa(p, TERMSYM_GE); |
else if ('R' == word[0] && 'q' == word[1]) |
else if ('=' == word[0] && '=' == word[1]) |
stringa(p, TERMSYM_RDQUOTE); |
stringa(p, TERMSYM_EQ); |
else if ('L' == word[0] && 'q' == word[1]) |
else if ('+' == word[0] && '-' == word[1]) |
stringa(p, TERMSYM_LDQUOTE); |
stringa(p, TERMSYM_PLUSMINUS); |
else if ('u' == word[0] && 'a' == word[1]) |
else if ('u' == word[0] && 'a' == word[1]) |
stringa(p, TERMSYM_UARROW); |
stringa(p, TERMSYM_UARROW); |
|
else if ('d' == word[0] && 'a' == word[1]) |
|
stringa(p, TERMSYM_DARROW); |
else if ('a' == word[0] && 'a' == word[1]) |
else if ('a' == word[0] && 'a' == word[1]) |
stringa(p, TERMSYM_ACUTE); |
stringa(p, TERMSYM_ACUTE); |
else if ('g' == word[0] && 'a' == word[1]) |
else if ('g' == word[0] && 'a' == word[1]) |
stringa(p, TERMSYM_GRAVE); |
stringa(p, TERMSYM_GRAVE); |
else if ('P' == word[0] && 'i' == word[1]) |
else if ('!' == word[0] && '=' == word[1]) |
stringa(p, TERMSYM_PI); |
|
else if ('N' == word[0] && 'e' == word[1]) |
|
stringa(p, TERMSYM_NEQ); |
stringa(p, TERMSYM_NEQ); |
else if ('L' == word[0] && 't' == word[1]) |
else if ('i' == word[0] && 'f' == word[1]) |
stringa(p, TERMSYM_LT); |
stringa(p, TERMSYM_INF); |
|
else if ('n' == word[0] && 'a' == word[1]) |
|
stringa(p, TERMSYM_NAN); |
|
else if ('b' == word[0] && 'a' == word[1]) |
|
stringa(p, TERMSYM_BAR); |
|
|
|
/* Deprecated forms. */ |
|
else if ('B' == word[0] && 'a' == word[1]) |
|
stringa(p, TERMSYM_BAR); |
|
else if ('I' == word[0] && 'f' == word[1]) |
|
stringa(p, TERMSYM_INF2); |
|
else if ('G' == word[0] && 'e' == word[1]) |
|
stringa(p, TERMSYM_GE); |
else if ('G' == word[0] && 't' == word[1]) |
else if ('G' == word[0] && 't' == word[1]) |
stringa(p, TERMSYM_GT); |
stringa(p, TERMSYM_GT); |
else if ('P' == word[0] && 'm' == word[1]) |
else if ('L' == word[0] && 'e' == word[1]) |
stringa(p, TERMSYM_PLUSMINUS); |
stringa(p, TERMSYM_LE); |
else if ('I' == word[0] && 'f' == word[1]) |
else if ('L' == word[0] && 'q' == word[1]) |
stringa(p, TERMSYM_INFINITY); |
stringa(p, TERMSYM_LDQUOTE); |
|
else if ('L' == word[0] && 't' == word[1]) |
|
stringa(p, TERMSYM_LT); |
else if ('N' == word[0] && 'a' == word[1]) |
else if ('N' == word[0] && 'a' == word[1]) |
stringa(p, TERMSYM_NAN); |
stringa(p, TERMSYM_NAN); |
else if ('B' == word[0] && 'a' == word[1]) |
else if ('N' == word[0] && 'e' == word[1]) |
stringa(p, TERMSYM_BAR); |
stringa(p, TERMSYM_NEQ); |
|
else if ('P' == word[0] && 'i' == word[1]) |
|
stringa(p, TERMSYM_PI); |
|
else if ('P' == word[0] && 'm' == word[1]) |
|
stringa(p, TERMSYM_PLUSMINUS); |
|
else if ('R' == word[0] && 'q' == word[1]) |
|
stringa(p, TERMSYM_RDQUOTE); |
break; |
break; |
default: |
default: |
break; |
break; |
Line 652 footer(struct termp *p, const struct mdoc_meta *meta) |
|
Line 676 footer(struct termp *p, const struct mdoc_meta *meta) |
|
static void |
static void |
header(struct termp *p, const struct mdoc_meta *meta) |
header(struct termp *p, const struct mdoc_meta *meta) |
{ |
{ |
char *buf, *title, *bufp; |
char *buf, *title, *bufp, *vbuf; |
const char *pp; |
const char *pp; |
|
struct utsname uts; |
|
|
|
p->rmargin = p->maxrmargin; |
|
p->offset = 0; |
|
|
if (NULL == (buf = malloc(p->rmargin))) |
if (NULL == (buf = malloc(p->rmargin))) |
err(1, "malloc"); |
err(1, "malloc"); |
if (NULL == (title = malloc(p->rmargin))) |
if (NULL == (title = malloc(p->rmargin))) |
err(1, "malloc"); |
err(1, "malloc"); |
|
if (NULL == (vbuf = malloc(p->rmargin))) |
|
err(1, "malloc"); |
|
|
if (NULL == (pp = mdoc_vol2a(meta->vol))) |
if (NULL == (pp = mdoc_vol2a(meta->vol))) { |
switch (meta->msec) { |
switch (meta->msec) { |
case (MSEC_1): |
case (MSEC_1): |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
Line 685 header(struct termp *p, const struct mdoc_meta *meta) |
|
Line 715 header(struct termp *p, const struct mdoc_meta *meta) |
|
pp = mdoc_vol2a(VOL_KM); |
pp = mdoc_vol2a(VOL_KM); |
break; |
break; |
default: |
default: |
/* FIXME: capitalise. */ |
|
if (NULL == (pp = mdoc_msec2a(meta->msec))) |
|
pp = mdoc_msec2a(MSEC_local); |
|
break; |
break; |
} |
} |
|
} |
|
vbuf[0] = 0; |
|
|
|
if (pp) { |
|
if (-1 == uname(&uts)) |
|
err(1, "uname"); |
|
(void)strlcat(vbuf, uts.sysname, p->rmargin); |
|
(void)strlcat(vbuf, " ", p->rmargin); |
|
} else if (NULL == (pp = mdoc_msec2a(meta->msec))) |
|
pp = mdoc_msec2a(MSEC_local); |
|
|
|
(void)strlcat(vbuf, pp, p->rmargin); |
|
|
/* |
/* |
* The header is strange. It has three components, which are |
* The header is strange. It has three components, which are |
* really two with the first duplicated. It goes like this: |
* really two with the first duplicated. It goes like this: |
Line 706 header(struct termp *p, const struct mdoc_meta *meta) |
|
Line 745 header(struct termp *p, const struct mdoc_meta *meta) |
|
|
|
if (mdoc_arch2a(meta->arch)) |
if (mdoc_arch2a(meta->arch)) |
(void)snprintf(buf, p->rmargin, "%s (%s)", |
(void)snprintf(buf, p->rmargin, "%s (%s)", |
pp, mdoc_arch2a(meta->arch)); |
vbuf, mdoc_arch2a(meta->arch)); |
else |
else |
(void)strlcpy(buf, pp, p->rmargin); |
(void)strlcpy(buf, vbuf, p->rmargin); |
|
|
pp = mdoc_msec2a(meta->msec); |
pp = mdoc_msec2a(meta->msec); |
|
|
Line 745 header(struct termp *p, const struct mdoc_meta *meta) |
|
Line 784 header(struct termp *p, const struct mdoc_meta *meta) |
|
p->flags &= ~TERMP_NOSPACE; |
p->flags &= ~TERMP_NOSPACE; |
|
|
free(title); |
free(title); |
|
free(vbuf); |
free(buf); |
free(buf); |
} |
} |