version 1.2, 2002/03/02 16:20:33 |
version 1.3, 2002/06/03 17:53:32 |
|
|
for (sp = cp; --sp >= word && !vowel(*sp);) |
for (sp = cp; --sp >= word && !vowel(*sp);) |
; /* nothing */ |
; /* nothing */ |
if (sp < word) |
if (sp < word) |
return(0); |
return (0); |
if ((*t->p1)(ep-t->n1, t->d1, t->a1, lev+1)) |
if ((*t->p1)(ep-t->n1, t->d1, t->a1, lev+1)) |
return(1); |
return (1); |
if (t->p2 != NULL) { |
if (t->p2 != NULL) { |
deriv[lev] = deriv[lev+1] = '\0'; |
deriv[lev] = deriv[lev+1] = '\0'; |
return((*t->p2)(ep-t->n2, t->d2, t->a2, lev)); |
return ((*t->p2)(ep-t->n2, t->d2, t->a2, lev)); |
} |
} |
return(0); |
return (0); |
next: ; |
next: ; |
} |
} |
return(0); |
return (0); |
} |
} |
|
|
int |
int |
nop(void) |
nop(void) |
{ |
{ |
|
|
return(0); |
return (0); |
} |
} |
|
|
int |
int |
strip(char *ep, char *d, char *a, int lev) |
strip(char *ep, char *d, char *a, int lev) |
{ |
{ |
|
|
return(trypref(ep, a, lev) || suffix(ep, lev)); |
return (trypref(ep, a, lev) || suffix(ep, lev)); |
} |
} |
|
|
int |
int |
|
|
{ |
{ |
|
|
if (lev > DLEV + 1) |
if (lev > DLEV + 1) |
return(0); |
return (0); |
if (*ep == 's' && ep[-1] == 's') |
if (*ep == 's' && ep[-1] == 's') |
return(0); |
return (0); |
return(strip(ep, d, a, lev)); |
return (strip(ep, d, a, lev)); |
} |
} |
|
|
int |
int |
|
|
{ |
{ |
|
|
if (!isupper(*word)) /* must be proper name */ |
if (!isupper(*word)) /* must be proper name */ |
return(0); |
return (0); |
return(trypref(ep,a,lev)); |
return (trypref(ep,a,lev)); |
} |
} |
|
|
int |
int |
|
|
{ |
{ |
|
|
*ep++ = 'e'; |
*ep++ = 'e'; |
return(strip(ep ,"", d, lev)); |
return (strip(ep ,"", d, lev)); |
} |
} |
|
|
int |
int |
|
|
{ |
{ |
|
|
if (ep[-1] == 'i') |
if (ep[-1] == 'i') |
return(i_to_y(ep, d, a, lev)); |
return (i_to_y(ep, d, a, lev)); |
else |
else |
return(strip(ep, d, a, lev)); |
return (strip(ep, d, a, lev)); |
} |
} |
|
|
int |
int |
|
|
{ |
{ |
|
|
if (skipv(skipv(ep-1)) < word) |
if (skipv(skipv(ep-1)) < word) |
return(0); |
return (0); |
ep[-1] = 't'; |
ep[-1] = 't'; |
return(strip(ep, d, a, lev)); |
return (strip(ep, d, a, lev)); |
} |
} |
|
|
int |
int |
|
|
{ |
{ |
|
|
*ep++ = 'l'; |
*ep++ = 'l'; |
return(y_to_e(ep, d, a, lev)); |
return (y_to_e(ep, d, a, lev)); |
} |
} |
|
|
int |
int |
|
|
ep[-1] = 'y'; |
ep[-1] = 'y'; |
a = d; |
a = d; |
} |
} |
return(strip(ep, "", a, lev)); |
return (strip(ep, "", a, lev)); |
} |
} |
|
|
int |
int |
|
|
{ |
{ |
|
|
if (lev > DLEV) |
if (lev > DLEV) |
return(0); |
return (0); |
|
|
switch (ep[-1]) { |
switch (ep[-1]) { |
default: |
default: |
return(0); |
return (0); |
case 'i': |
case 'i': |
return(i_to_y(ep, d, a, lev)); |
return (i_to_y(ep, d, a, lev)); |
case 's': |
case 's': |
case 'h': |
case 'h': |
case 'z': |
case 'z': |
case 'x': |
case 'x': |
return(strip(ep, d, a, lev)); |
return (strip(ep, d, a, lev)); |
} |
} |
} |
} |
|
|
|
|
|
|
ep[-2] = 'e'; |
ep[-2] = 'e'; |
ep[-1] = 'r'; |
ep[-1] = 'r'; |
return(strip(ep, d, a, lev)); |
return (strip(ep, d, a, lev)); |
} |
} |
|
|
int |
int |
|
|
switch (ep[-2]) { |
switch (ep[-2]) { |
case 'c': |
case 'c': |
case 'r': |
case 'r': |
return(trypref(ep, a, lev)); |
return (trypref(ep, a, lev)); |
case 'a': |
case 'a': |
return(y_to_e(ep, d, a, lev)); |
return (y_to_e(ep, d, a, lev)); |
} |
} |
return(0); |
return (0); |
} |
} |
|
|
/* |
/* |
|
|
case 'w': |
case 'w': |
break; |
break; |
default: |
default: |
return(y_to_e(ep, d, a, lev)); |
return (y_to_e(ep, d, a, lev)); |
} |
} |
break; |
break; |
case 's': |
case 's': |
|
|
case 'c': |
case 'c': |
case 'g': |
case 'g': |
if (*ep == 'a') |
if (*ep == 'a') |
return(0); |
return (0); |
case 'v': |
case 'v': |
case 'z': |
case 'z': |
if (vowel(ep[-2])) |
if (vowel(ep[-2])) |
break; |
break; |
case 'u': |
case 'u': |
if (y_to_e(ep, d, a, lev)) |
if (y_to_e(ep, d, a, lev)) |
return(1); |
return (1); |
if (!(ep[-2] == 'n' && ep[-1] == 'g')) |
if (!(ep[-2] == 'n' && ep[-1] == 'g')) |
return(0); |
return (0); |
} |
} |
return(VCe(ep, d, a, lev)); |
return (VCe(ep, d, a, lev)); |
} |
} |
|
|
/* |
/* |
|
|
|
|
c = ep[-1]; |
c = ep[-1]; |
if (c == 'e') |
if (c == 'e') |
return(0); |
return (0); |
if (!vowel(c) && vowel(ep[-2])) { |
if (!vowel(c) && vowel(ep[-2])) { |
c = *ep; |
c = *ep; |
*ep++ = 'e'; |
*ep++ = 'e'; |
if (trypref(ep, d, lev) || suffix(ep, lev)) |
if (trypref(ep, d, lev) || suffix(ep, lev)) |
return(1); |
return (1); |
ep--; |
ep--; |
*ep = c; |
*ep = c; |
} |
} |
return(strip(ep, d, a, lev)); |
return (strip(ep, d, a, lev)); |
} |
} |
|
|
char * |
char * |
|
|
for (cp = bp; cp < ep; cp++) { |
for (cp = bp; cp < ep; cp++) { |
if (vowel(*cp)) { |
if (vowel(*cp)) { |
*wp = bp; |
*wp = bp; |
return(*sp); |
return (*sp); |
} |
} |
} |
} |
next: ; |
next: ; |
} |
} |
return(0); |
return (0); |
} |
} |
|
|
/* |
/* |
|
|
|
|
deriv[lev] = a; |
deriv[lev] = a; |
if (tryword(word, ep, lev)) |
if (tryword(word, ep, lev)) |
return(1); |
return (1); |
bp = word; |
bp = word; |
pp = space; |
pp = space; |
deriv[lev+1] = pp; |
deriv[lev+1] = pp; |
|
|
break; |
break; |
} |
} |
if (pp - space >= sizeof(space)) |
if (pp - space >= sizeof(space)) |
return(0); |
return (0); |
} |
} |
deriv[lev+1] = deriv[lev+2] = '\0'; |
deriv[lev+1] = deriv[lev+2] = '\0'; |
return(val); |
return (val); |
} |
} |
|
|
int |
int |
|
|
char duple[3]; |
char duple[3]; |
|
|
if (ep-bp <= 1) |
if (ep-bp <= 1) |
return(0); |
return (0); |
if (vowel(*ep) && monosyl(bp, ep)) |
if (vowel(*ep) && monosyl(bp, ep)) |
return(0); |
return (0); |
|
|
i = dict(bp, ep); |
i = dict(bp, ep); |
if (i == 0 && vowel(*ep) && ep[-1] == ep[-2] && monosyl(bp, ep-1)) { |
if (i == 0 && vowel(*ep) && ep[-1] == ep[-2] && monosyl(bp, ep-1)) { |
|
|
i = dict(bp, ep); |
i = dict(bp, ep); |
} |
} |
if (vflag == 0 || i == 0) |
if (vflag == 0 || i == 0) |
return(i); |
return (i); |
|
|
/* Also tack on possible derivations. (XXX - warn on truncation?) */ |
/* Also tack on possible derivations. (XXX - warn on truncation?) */ |
for (j = lev; j > 0; j--) { |
for (j = lev; j > 0; j--) { |
if (deriv[j]) |
if (deriv[j]) |
strlcat(affix, deriv[j], sizeof(affix)); |
strlcat(affix, deriv[j], sizeof(affix)); |
} |
} |
return(i); |
return (i); |
} |
} |
|
|
int |
int |
|
|
{ |
{ |
|
|
if (ep < bp + 2) |
if (ep < bp + 2) |
return(0); |
return (0); |
if (vowel(*--ep) || !vowel(*--ep) || ep[1] == 'x' || ep[1] == 'w') |
if (vowel(*--ep) || !vowel(*--ep) || ep[1] == 'x' || ep[1] == 'w') |
return(0); |
return (0); |
while (--ep >= bp) |
while (--ep >= bp) |
if (vowel(*ep)) |
if (vowel(*ep)) |
return(0); |
return (0); |
return(1); |
return (1); |
} |
} |
|
|
char * |
char * |
|
|
s--; |
s--; |
while (s >= word && !vowel(*s)) |
while (s >= word && !vowel(*s)) |
s--; |
s--; |
return(s); |
return (s); |
} |
} |
|
|
int |
int |
|
|
case 'o': |
case 'o': |
case 'u': |
case 'u': |
case 'y': |
case 'y': |
return(1); |
return (1); |
} |
} |
return(0); |
return (0); |
} |
} |
|
|
/* |
/* |
|
|
|
|
if ((d = strdup(s)) == NULL) |
if ((d = strdup(s)) == NULL) |
err(1, "strdup"); |
err(1, "strdup"); |
return(d); |
return (d); |
} |
} |
|
|
/* |
/* |
|
|
break; |
break; |
} |
} |
*ep = c; |
*ep = c; |
return(rval); |
return (rval); |
} |
} |
|
|
__dead void |
__dead void |