version 1.22, 2010/07/17 09:21:39 |
version 1.27, 2010/08/20 01:02:07 |
|
|
/* $Id$ */ |
/* $Id$ */ |
/* |
/* |
* Copyright (c) 2009 Kristaps Dzonsons <kristaps@bsd.lv> |
* Copyright (c) 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv> |
* |
* |
* Permission to use, copy, modify, and distribute this software for any |
* Permission to use, copy, modify, and distribute this software for any |
* purpose with or without fee is hereby granted, provided that the above |
* purpose with or without fee is hereby granted, provided that the above |
|
|
struct ln *next; |
struct ln *next; |
const char *code; |
const char *code; |
const char *ascii; |
const char *ascii; |
size_t asciisz; |
|
int unicode; |
int unicode; |
int type; |
int type; |
#define CHARS_CHAR (1 << 0) |
#define CHARS_CHAR (1 << 0) |
|
|
#define CHARS_BOTH (CHARS_CHAR | CHARS_STRING) |
#define CHARS_BOTH (CHARS_CHAR | CHARS_STRING) |
}; |
}; |
|
|
#define LINES_MAX 370 |
#define LINES_MAX 369 |
|
|
#define CHAR(in, ch, chsz, code) \ |
#define CHAR(in, ch, code) \ |
{ NULL, (in), (ch), (chsz), (code), CHARS_CHAR }, |
{ NULL, (in), (ch), (code), CHARS_CHAR }, |
#define STRING(in, ch, chsz, code) \ |
#define STRING(in, ch, code) \ |
{ NULL, (in), (ch), (chsz), (code), CHARS_STRING }, |
{ NULL, (in), (ch), (code), CHARS_STRING }, |
#define BOTH(in, ch, chsz, code) \ |
#define BOTH(in, ch, code) \ |
{ NULL, (in), (ch), (chsz), (code), CHARS_BOTH }, |
{ NULL, (in), (ch), (code), CHARS_BOTH }, |
|
|
#define CHAR_TBL_START static struct ln lines[LINES_MAX] = { |
#define CHAR_TBL_START static struct ln lines[LINES_MAX] = { |
#define CHAR_TBL_END }; |
#define CHAR_TBL_END }; |
Line 95 chars_init(enum chars type) |
|
Line 94 chars_init(enum chars type) |
|
tab = malloc(sizeof(struct tbl)); |
tab = malloc(sizeof(struct tbl)); |
if (NULL == tab) { |
if (NULL == tab) { |
perror(NULL); |
perror(NULL); |
exit(EXIT_FAILURE); |
exit(MANDOCLEVEL_SYSERR); |
} |
} |
|
|
htab = calloc(PRINT_HI - PRINT_LO + 1, sizeof(struct ln **)); |
htab = calloc(PRINT_HI - PRINT_LO + 1, sizeof(struct ln **)); |
if (NULL == htab) { |
if (NULL == htab) { |
perror(NULL); |
perror(NULL); |
exit(EXIT_FAILURE); |
exit(MANDOCLEVEL_SYSERR); |
} |
} |
|
|
for (i = 0; i < LINES_MAX; i++) { |
for (i = 0; i < LINES_MAX; i++) { |
Line 165 chars_spec2str(void *arg, const char *p, size_t sz, si |
|
Line 164 chars_spec2str(void *arg, const char *p, size_t sz, si |
|
if (NULL == ln) |
if (NULL == ln) |
return(NULL); |
return(NULL); |
|
|
*rsz = ln->asciisz; |
*rsz = strlen(ln->ascii); |
return(ln->ascii); |
return(ln->ascii); |
} |
} |
|
|
Line 182 chars_res2str(void *arg, const char *p, size_t sz, siz |
|
Line 181 chars_res2str(void *arg, const char *p, size_t sz, siz |
|
if (NULL == ln) |
if (NULL == ln) |
return(NULL); |
return(NULL); |
|
|
*rsz = ln->asciisz; |
*rsz = strlen(ln->ascii); |
return(ln->ascii); |
return(ln->ascii); |
} |
} |
|
|
Line 195 find(struct tbl *tab, const char *p, size_t sz, int ty |
|
Line 194 find(struct tbl *tab, const char *p, size_t sz, int ty |
|
int hash; |
int hash; |
|
|
assert(p); |
assert(p); |
assert(sz > 0); |
if (0 == sz) |
|
return(NULL); |
|
|
if (p[0] < PRINT_LO || p[0] > PRINT_HI) |
if (p[0] < PRINT_LO || p[0] > PRINT_HI) |
return(NULL); |
return(NULL); |