version 1.2, 2008/12/04 16:34:59 |
version 1.3, 2008/12/04 19:31:57 |
|
|
#include "private.h" |
#include "private.h" |
|
|
|
|
static int rofftok_dashes(const char *); |
static int rofftok_dashes(const char *, int *); |
static int rofftok_special(const char *); |
static int rofftok_special(const char *, int *); |
static int rofftok_predef(const char *); |
static int rofftok_predef(const char *, int *); |
static int rofftok_defined(const char *); |
static int rofftok_defined(const char *, int *); |
|
|
|
|
static int |
static int |
rofftok_defined(const char *buf) |
rofftok_defined(const char *buf, int *i) |
{ |
{ |
if (0 == *buf) |
const char *p; |
|
|
|
if (0 == buf[*i]) |
return(-1); |
return(-1); |
if (0 == *(buf + 1)) |
if (0 == buf[*i + 1]) |
return(-1); |
return(-1); |
if (0 != *(buf + 2)) |
|
return(-1); |
|
|
|
if (0 == strcmp(buf, ">=")) |
(*i)++; |
|
p = &buf[(*i)++]; |
|
|
|
if (0 == memcmp(p, ">=", 2)) |
return(ROFFTok_Ge); |
return(ROFFTok_Ge); |
else if (0 == strcmp(buf, "<=")) |
else if (0 == memcmp(p, "<=", 2)) |
return(ROFFTok_Le); |
return(ROFFTok_Le); |
else if (0 == strcmp(buf, "Rq")) |
else if (0 == memcmp(p, "Rq", 2)) |
return(ROFFTok_Rquote); |
return(ROFFTok_Rquote); |
else if (0 == strcmp(buf, "Lq")) |
else if (0 == memcmp(p, "Lq", 2)) |
return(ROFFTok_Lquote); |
return(ROFFTok_Lquote); |
else if (0 == strcmp(buf, "ua")) |
else if (0 == memcmp(p, "ua", 2)) |
return(ROFFTok_Uparrow); |
return(ROFFTok_Uparrow); |
else if (0 == strcmp(buf, "aa")) |
else if (0 == memcmp(p, "aa", 2)) |
return(ROFFTok_Acute); |
return(ROFFTok_Acute); |
else if (0 == strcmp(buf, "ga")) |
else if (0 == memcmp(p, "ga", 2)) |
return(ROFFTok_Grave); |
return(ROFFTok_Grave); |
else if (0 == strcmp(buf, "Pi")) |
else if (0 == memcmp(p, "Pi", 2)) |
return(ROFFTok_Pi); |
return(ROFFTok_Pi); |
else if (0 == strcmp(buf, "Ne")) |
else if (0 == memcmp(p, "Ne", 2)) |
return(ROFFTok_Ne); |
return(ROFFTok_Ne); |
else if (0 == strcmp(buf, "Le")) |
else if (0 == memcmp(p, "Le", 2)) |
return(ROFFTok_Le); |
return(ROFFTok_Le); |
else if (0 == strcmp(buf, "Ge")) |
else if (0 == memcmp(p, "Ge", 2)) |
return(ROFFTok_Ge); |
return(ROFFTok_Ge); |
else if (0 == strcmp(buf, "Lt")) |
else if (0 == memcmp(p, "Lt", 2)) |
return(ROFFTok_Lt); |
return(ROFFTok_Lt); |
else if (0 == strcmp(buf, "Gt")) |
else if (0 == memcmp(p, "Gt", 2)) |
return(ROFFTok_Gt); |
return(ROFFTok_Gt); |
else if (0 == strcmp(buf, "Pm")) |
else if (0 == memcmp(p, "Pm", 2)) |
return(ROFFTok_Plusmin); |
return(ROFFTok_Plusmin); |
else if (0 == strcmp(buf, "If")) |
else if (0 == memcmp(p, "If", 2)) |
return(ROFFTok_Infty); |
return(ROFFTok_Infty); |
else if (0 == strcmp(buf, "Na")) |
else if (0 == memcmp(p, "Na", 2)) |
return(ROFFTok_Nan); |
return(ROFFTok_Nan); |
else if (0 == strcmp(buf, "Ba")) |
else if (0 == memcmp(p, "Ba", 2)) |
return(ROFFTok_Bar); |
return(ROFFTok_Bar); |
|
|
return(-1); |
return(-1); |
Line 80 rofftok_defined(const char *buf) |
|
Line 83 rofftok_defined(const char *buf) |
|
|
|
|
|
static int |
static int |
rofftok_predef(const char *buf) |
rofftok_predef(const char *buf, int *i) |
{ |
{ |
if (0 == *buf) |
if (0 == buf[*i]) |
return(-1); |
return(-1); |
|
if ('(' == buf[*i]) |
|
return(rofftok_defined(buf, i)); |
|
|
if ('(' == *buf) |
switch (buf[*i]) { |
return(rofftok_defined(++buf)); |
|
|
|
switch (*buf) { |
|
case ('q'): |
case ('q'): |
return(ROFFTok_Quote); |
return(ROFFTok_Quote); |
default: |
default: |
Line 100 rofftok_predef(const char *buf) |
|
Line 102 rofftok_predef(const char *buf) |
|
|
|
|
|
static int |
static int |
rofftok_dashes(const char *buf) |
rofftok_dashes(const char *buf, int *i) |
{ |
{ |
|
|
if (0 == *buf) |
if (0 == buf[*i]) |
return(-1); |
return(-1); |
else if (*buf++ != 'e') |
else if (buf[(*i)++] != 'e') |
return(-1); |
return(-1); |
|
if (0 == buf[*i]) |
if (0 == *buf) |
|
return(-1); |
return(-1); |
else if (0 != *(buf + 1)) |
|
return(-1); |
|
|
|
switch (*buf) { |
switch (buf[*i]) { |
case ('m'): |
case ('m'): |
return(ROFFTok_Em); |
return(ROFFTok_Em); |
case ('n'): |
case ('n'): |
Line 126 rofftok_dashes(const char *buf) |
|
Line 125 rofftok_dashes(const char *buf) |
|
|
|
|
|
static int |
static int |
rofftok_special(const char *buf) |
rofftok_special(const char *buf, int *i) |
{ |
{ |
|
|
if (0 == *buf) |
if (0 == buf[*i]) |
return(-1); |
return(ROFFTok_Slash); |
else if (0 != *(buf + 1)) |
|
return(-1); |
|
|
|
switch (*buf) { |
switch (buf[*i]) { |
case ('a'): |
case ('a'): |
return(ROFFTok_Sp_A); |
return(ROFFTok_Sp_A); |
case ('b'): |
case ('b'): |
Line 149 rofftok_special(const char *buf) |
|
Line 146 rofftok_special(const char *buf) |
|
return(ROFFTok_Sp_T); |
return(ROFFTok_Sp_T); |
case ('v'): |
case ('v'): |
return(ROFFTok_Sp_V); |
return(ROFFTok_Sp_V); |
|
case ('0'): |
|
return(ROFFTok_Sp_0); |
default: |
default: |
break; |
break; |
} |
} |
Line 157 rofftok_special(const char *buf) |
|
Line 156 rofftok_special(const char *buf) |
|
|
|
|
|
int |
int |
rofftok_scan(const char *buf) |
rofftok_scan(const char *buf, int *i) |
{ |
{ |
|
|
assert(*buf); |
assert(*buf); |
if ('\\' != *buf++) |
assert(buf[*i] == '\\'); |
return(ROFFTok_MAX); |
|
|
|
for ( ; *buf; buf++) { |
(*i)++; |
switch (*buf) { |
|
|
for ( ; buf[*i]; (*i)++) { |
|
switch (buf[*i]) { |
case ('e'): |
case ('e'): |
return(rofftok_special(++buf)); |
(*i)++; |
|
return(rofftok_special(buf, i)); |
case ('('): |
case ('('): |
return(rofftok_dashes(++buf)); |
(*i)++; |
|
return(rofftok_dashes(buf, i)); |
case (' '): |
case (' '): |
return(ROFFTok_Space); |
return(ROFFTok_Space); |
case ('&'): |
case ('&'): |
Line 177 rofftok_scan(const char *buf) |
|
Line 179 rofftok_scan(const char *buf) |
|
case ('-'): |
case ('-'): |
return(ROFFTok_Hyphen); |
return(ROFFTok_Hyphen); |
case ('*'): |
case ('*'): |
return(rofftok_predef(++buf)); |
(*i)++; |
|
return(rofftok_predef(buf, i)); |
case ('\\'): |
case ('\\'): |
return(ROFFTok_MAX); |
return(ROFFTok_Slash); |
default: |
default: |
break; |
break; |
} |
} |