./PaxHeaders.22185/ispell-3.4.020000644000000000000000000000013213776416114012720 xustar0030 mtime=1610226764.421065341 30 atime=1610226764.417065334 30 ctime=1610226764.421065341 ispell-3.4.02/0000755003214100001440000000000013776416114013713 5ustar00geofffaculty00000000000000ispell-3.4.02/PaxHeaders.22185/makedent.c0000644000000000000000000000013213776416103014572 xustar0030 mtime=1610226755.249053668 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/makedent.c0000444003214100001440000010635313776416103015653 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: makedent.c,v 1.62 2021-01-09 13:12:35-08 geoff Exp $"; #endif /* * Copyright 1988, 1989, 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, * Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: makedent.c,v $ * Revision 1.62 2021-01-09 13:12:35-08 geoff * Rewrite the binary search in stringcharlen to use the new ordering of * stringchars, which uses the character type as the major sort key and * the character itself as the secondary key. * * Revision 1.61 2020-12-30 22:33:41-08 geoff * Fix a binary-search bug that could cause string characters to not be * found in some situations. * * Revision 1.60 2005-11-03 14:14:26-08 geoff * When combining capitals, insert new variants at the end of the variant * list. This maintains the order of variants in the personal dictionary. * * Revision 1.59 2005/04/20 23:16:32 geoff * Rename some variables to make them more meaningful. * * Revision 1.58 2005/04/14 23:11:36 geoff * Move initck from ispell.c. * * Revision 1.57 2005/04/14 15:19:37 geoff * Stick in a couple of strategic const declarations. * * Revision 1.56 2001/09/06 00:30:28 geoff * Many changes from Eli Zaretskii to support DJGPP compilation. * * Revision 1.55 2001/07/25 21:51:46 geoff * Minor license update. * * Revision 1.54 2001/07/23 20:24:04 geoff * Update the copyright and the license. * * Revision 1.53 2001/06/14 09:11:11 geoff * Use a non-conflicting macro for bzero to avoid compilation problems on * smarter compilers. * * Revision 1.52 2000/08/22 10:52:25 geoff * Fix a whole bunch of signed/unsigned discrepancies. * * Revision 1.51 1999/01/18 03:28:37 geoff * Turn many char declarations into unsigned char, so that we won't have * sign-extension problems. * * Revision 1.50 1999/01/07 01:23:09 geoff * Update the copyright. * * Revision 1.49 1999/01/03 01:46:39 geoff * Add support for the "plain" deformatters. * * Revision 1.48 1998/07/06 05:03:39 geoff * Don't issue bad-flag messages in -a mode; it confuses emacs * * Revision 1.47 1997/12/02 06:24:58 geoff * Get rid of some compile options that really shouldn't be optional. * * Revision 1.46 1995/11/08 05:09:20 geoff * Allow sgml as a deformatter type. * * Revision 1.45 1994/12/27 23:08:52 geoff * Add code to makedent to reject words that contain non-word characters. * This helps protect people who use ISO 8-bit characters when ispell * isn't configured for that option. * * Revision 1.44 1994/10/25 05:46:20 geoff * Fix some incorrect declarations in the lint versions of some routines. * * Revision 1.43 1994/09/16 03:32:34 geoff * Issue an error message for bad affix flags * * Revision 1.42 1994/02/07 04:23:43 geoff * Correctly identify the deformatter when changing file types * * Revision 1.41 1994/01/25 07:11:55 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include "config.h" #include "ispell.h" #include "proto.h" #include "msgs.h" #include int makedent P ((unsigned char * lbuf, int lbuflen, struct dent * ent)); long whatcap P ((ichar_t * word)); int addvheader P ((struct dent * ent)); int combinecaps P ((struct dent * hdr, struct dent * newent)); static void forcevheader P ((struct dent * hdrp, struct dent * oldp, struct dent * newp)); static int combine_two_entries P ((struct dent * hdrp, struct dent * oldp, struct dent * newp)); static int acoversb P ((struct dent * enta, struct dent * entb)); void upcase P ((ichar_t * string)); void lowcase P ((ichar_t * string)); void chupcase P ((unsigned char * s)); static int issubset P ((struct dent * ent1, struct dent * ent2)); static void combineaffixes P ((struct dent * ent1, struct dent * ent2)); void toutent P ((FILE * outfile, struct dent * hent, int onlykeep)); static void toutword P ((FILE * outfile, unsigned char * word, struct dent * cent)); static void flagout P ((FILE * outfile, int flag)); int stringcharlen P ((unsigned char * bufp, int canonical)); int strtoichar P ((ichar_t * out, unsigned char * in, int outlen, int canonical)); int ichartostr P ((unsigned char * out, const ichar_t * in, int outlen, int canonical)); ichar_t * strtosichar P ((unsigned char * in, int canonical)); unsigned char * ichartosstr P ((const ichar_t * in, int canonical)); char * printichar P ((int in)); #ifndef ICHAR_IS_CHAR ichar_t * icharcpy P ((ichar_t * out, ichar_t * in)); int icharlen P ((ichar_t * str)); int icharcmp P ((ichar_t * s1, ichar_t * s2)); int icharncmp P ((ichar_t * s1, ichar_t * s2, int n)); #endif /* ICHAR_IS_CHAR */ int findfiletype P ((char * name, int searchnames, int * deformatter)); void initckch P ((const char * wchars)); static int has_marker; /* * Fill in a directory entry, including setting the capitalization flags, and * allocate and initialize memory for the d->word field. Returns -1 * if there was trouble. The input word must be in canonical form. */ int makedent (lbuf, lbuflen, d) unsigned char * lbuf; int lbuflen; struct dent * d; { ichar_t ibuf[INPUTWORDLEN + MAXAFFIXLEN]; ichar_t * ip; unsigned char * p; int bit; int len; /* Strip off any trailing newlines and returns */ len = (int) strlen ((char *) lbuf) - 1; while (len >= 0 && (lbuf[len] == '\n' || lbuf[len] == '\r')) lbuf[len--] = '\0'; d->next = NULL; /* WARNING: flagfield might be the same as mask! See ispell.h. */ d->flagfield = 0; (void) BZERO ((char *) d->mask, sizeof (d->mask)); d->flagfield |= USED; d->flagfield &= ~KEEP; p = (unsigned char *) index ((char *) lbuf, hashheader.flagmarker); if (p != NULL) *p = 0; /* ** Convert the word to an ichar_t and back; this makes sure that ** it is in canonical form and thus that the length is correct. */ if (strtoichar (ibuf, lbuf, INPUTWORDLEN * sizeof (ichar_t), 1) || ichartostr (lbuf, ibuf, lbuflen, 1)) { (void) fprintf (stderr, WORD_TOO_LONG ((char *) lbuf)); return (-1); } /* ** Make sure the word is well-formed (contains only legal characters). */ for (ip = ibuf; *ip != 0; ip++) { if (!iswordch (*ip)) { /* Boundary characters are legal as long as they're not at edges */ if (!isboundarych (*ip) || ip == ibuf || ip[1] == 0) { (void) fprintf (stderr, MAKEDENT_C_BAD_WORD_CHAR, MAYBE_CR (stderr), (char *) lbuf, MAYBE_CR (stderr)); return -1; } } } len = (int) strlen ((char *) lbuf); /* ** Figure out the capitalization rules from the capitalization of ** the sample entry. */ d->flagfield |= whatcap (ibuf); if (len > INPUTWORDLEN - 1) { (void) fprintf (stderr, WORD_TOO_LONG ((char *) lbuf)); return (-1); } d->word = mymalloc ((unsigned) len + 1); if (d->word == NULL) { (void) fprintf (stderr, MAKEDENT_C_NO_WORD_SPACE, MAYBE_CR (stderr), (char *) lbuf, MAYBE_CR (stderr)); return -1; } (void) strcpy ((char *) d->word, (char *) lbuf); if (captype (d->flagfield) != FOLLOWCASE) chupcase (d->word); if (p == NULL) return (0); p++; while (*p != '\0' && *p != '\n') { bit = CHARTOBIT ((unsigned char) *p); if (bit >= 0 && bit <= LARGESTFLAG) SETMASKBIT (d->mask, bit); else if (!aflag) (void) fprintf (stderr, BAD_FLAG, MAYBE_CR (stderr), (unsigned char) *p, MAYBE_CR (stderr)); p++; if (*p == hashheader.flagmarker) p++; /* Handle old-format dictionaries too */ } return (0); } /* ** Classify the capitalization of a sample entry. Returns one of the ** four capitalization codes ANYCASE, ALLCAPS, CAPITALIZED, or FOLLOWCASE. */ long whatcap (word) register ichar_t * word; { register ichar_t * p; for (p = word; *p; p++) { if (mylower (*p)) break; } if (*p == '\0') return ALLCAPS; else { for ( ; *p; p++) { if (myupper (*p)) break; } if (*p == '\0') { /* ** No uppercase letters follow the lowercase ones. ** If there is more than one uppercase letter, it's ** "followcase". If only the first one is capitalized, ** it's "capitalize". If there are no capitals ** at all, it's ANYCASE. */ if (myupper (word[0])) { for (p = word + 1; *p != '\0'; p++) { if (myupper (*p)) return FOLLOWCASE; } return CAPITALIZED; } else return ANYCASE; } else return FOLLOWCASE; /* .../lower/upper */ } } /* ** Add a variant-capitalization header to a word. This routine may be ** called even for a followcase word that doesn't yet have a header. ** ** Returns 0 if all was ok, -1 if allocation error. */ int addvheader (dp) register struct dent * dp; /* Entry to update */ { register struct dent * tdent; /* Copy of entry */ /* ** Add a second entry with the correct capitalization, and then make ** dp into a special dummy entry. */ tdent = (struct dent *) mymalloc (sizeof (struct dent)); if (tdent == NULL) { (void) fprintf (stderr, MAKEDENT_C_NO_WORD_SPACE, MAYBE_CR (stderr), (char *) dp->word, MAYBE_CR (stderr)); return -1; } *tdent = *dp; if (captype (tdent->flagfield) != FOLLOWCASE) tdent->word = NULL; else { /* Followcase words need a copy of the capitalization */ tdent->word = mymalloc ((unsigned int) strlen ((char *) tdent->word) + 1); if (tdent->word == NULL) { (void) fprintf (stderr, MAKEDENT_C_NO_WORD_SPACE, MAYBE_CR (stderr), (char *) dp->word, MAYBE_CR (stderr)); myfree ((char *) tdent); return -1; } (void) strcpy ((char *) tdent->word, (char *) dp->word); } chupcase (dp->word); dp->next = tdent; dp->flagfield &= ~CAPTYPEMASK; dp->flagfield |= (ALLCAPS | MOREVARIANTS); return 0; } /* ** Combine and resolve the entries describing two capitalizations of the same ** word. This may require allocating yet more entries. ** ** Hdrp is a pointer into a hash table. If the word covered by hdrp has ** variations, hdrp must point to the header. Newp is a pointer to temporary ** storage, and space is malloc'ed if newp is to be kept. The newp->word ** field must have been allocated with mymalloc, so that this routine may free ** the space if it keeps newp but not the word. ** ** Return value: 0 if the word was added, 1 if the word was combined ** with an existing entry, and -1 if trouble occurred (e.g., malloc). ** If 1 is returned, newp->word may have been be freed using myfree. ** ** Life is made much more difficult by the KEEP flag's possibilities. We ** must ensure that a !KEEP word doesn't find its way into the personal ** dictionary as a result of this routine's actions. However, a !KEEP ** word that has affixes must have come from the main dictionary, so it ** is acceptable to combine entries in that case (got that?). ** ** The net result of all this is a set of rules that is a bloody pain ** to figure out. Basically, we want to choose one of the following actions: ** ** (1) Add newp's affixes and KEEP flag to oldp, and discard newp. ** (2) Add oldp's affixes and KEEP flag to newp, replace oldp with ** newp, and discard newp. ** (3) Insert newp as a new entry in the variants list. If there is ** currently no variant header, this requires adding one. Adding a ** header splits into two sub-cases: ** ** (3a) If oldp is ALLCAPS and the KEEP flags match, just turn it ** into the header. ** (3b) Otherwise, add a new entry to serve as the header. ** To ease list linking, this is done by copying oldp into ** the new entry, and then performing (3a). ** ** After newp has been added as a variant, its affixes and KEEP ** flag are OR-ed into the variant header. ** ** So how to choose which? The default is always case (3), which adds newp ** as a new entry in the variants list. Cases (1) and (2) are symmetrical ** except for which entry is discarded. We can use case (1) or (2) whenever ** one entry "covers" the other. "Covering" is defined as follows: ** ** (4) For entries with matching capitalization types, A covers B ** if: ** ** (4a) B's affix flags are a subset of A's, or the KEEP flags ** match, and ** (4b) either the KEEP flags match, or A's KEEP flag is set. ** (Since A has more suffixes, combining B with it won't ** cause any extra suffixes to be added to the dictionary.) ** (4c) If the words are FOLLOWCASE, the capitalizations match ** exactly. ** ** (5) For entries with mismatched capitalization types, A covers B ** if (4a) and (4b) are true, and: ** ** (5a) B is ALLCAPS, or ** (5b) A is ANYCASE, and B is CAPITALIZED. ** ** For any "hdrp" without variants, oldp is the same as hdrp. Otherwise, ** the above tests are applied using each variant in turn for oldp. */ int combinecaps (hdrp, newp) struct dent * hdrp; /* Header of entry currently in dictionary */ register struct dent * newp; /* Entry to add */ { register struct dent * oldp; /* Current "oldp" entry */ register struct dent * tdent; /* Entry we'll add to the dictionary */ register int retval = 0; /* Return value from combine_two_entries */ /* ** First, see if we can combine the two entries (cases 1 and 2). If ** combine_two_entries does so, it will return 1. If it has trouble, ** it will return zero. */ oldp = hdrp; if ((oldp->flagfield & (CAPTYPEMASK | MOREVARIANTS)) == (ALLCAPS | MOREVARIANTS)) { while (oldp->flagfield & MOREVARIANTS) { oldp = oldp->next; retval = combine_two_entries (hdrp, oldp, newp); if (retval != 0) /* Did we combine them? */ break; } } else retval = combine_two_entries (hdrp, oldp, newp); if (retval == 0) { /* ** Couldn't combine the two entries. Add a new variant. We ** stick it at the end of the variant list because it's ** important to maintain order; this causes the personal ** dictionary to have a stable ordering. */ forcevheader (hdrp, oldp, newp); tdent = (struct dent *) mymalloc (sizeof (struct dent)); if (tdent == NULL) { (void) fprintf (stderr, MAKEDENT_C_NO_WORD_SPACE, MAYBE_CR (stderr), (char *) newp->word, MAYBE_CR (stderr)); return -1; } *tdent = *newp; for (oldp = hdrp; oldp->next != NULL && oldp->flagfield & MOREVARIANTS; oldp = oldp->next) ; tdent->next = oldp->next; oldp->next = tdent; oldp->flagfield |= MOREVARIANTS; combineaffixes (hdrp, newp); hdrp->flagfield |= (newp->flagfield & KEEP); if (captype (newp->flagfield) == FOLLOWCASE) tdent->word = newp->word; else { tdent->word = NULL; myfree (newp->word); /* newp->word isn't needed */ } } return retval; } /* ** The following routine implements steps 3a and 3b in the commentary ** for "combinecaps". */ static void forcevheader (hdrp, oldp, newp) register struct dent * hdrp; struct dent * oldp; struct dent * newp; { if ((hdrp->flagfield & (CAPTYPEMASK | MOREVARIANTS)) == ALLCAPS && ((oldp->flagfield ^ newp->flagfield) & KEEP) == 0) return; /* Caller will set MOREVARIANTS */ else if ((hdrp->flagfield & (CAPTYPEMASK | MOREVARIANTS)) != (ALLCAPS | MOREVARIANTS)) (void) addvheader (hdrp); } /* ** This routine implements steps 4 and 5 of the commentary for "combinecaps". ** ** Returns 1 if newp can be discarded, 0 if nothing done. */ static int combine_two_entries (hdrp, oldp, newp) struct dent * hdrp; /* (Possible) header of variant chain */ register struct dent * oldp; /* Pre-existing dictionary entry */ register struct dent * newp; /* Entry to possibly combine */ { if (acoversb (oldp, newp)) { /* newp is superfluous. Drop it, preserving affixes and keep flag */ combineaffixes (oldp, newp); oldp->flagfield |= (newp->flagfield & KEEP); hdrp->flagfield |= (newp->flagfield & KEEP); myfree (newp->word); return 1; } else if (acoversb (newp, oldp)) { /* ** oldp is superfluous. Replace it with newp, preserving affixes and ** the keep flag. */ combineaffixes (newp, oldp); newp->flagfield |= (oldp->flagfield & (KEEP | MOREVARIANTS)); hdrp->flagfield |= (newp->flagfield & KEEP); newp->next = oldp->next; /* ** We really want to free oldp->word, but that might be part of ** "hashstrings". So we'll futz around to arrange things so we can ** free newp->word instead. This depends very much on the fact ** that both words are the same length. */ if (oldp->word != NULL) (void) strcpy ((char *) oldp->word, (char *) newp->word); myfree (newp->word); /* No longer needed */ newp->word = oldp->word; *oldp = *newp; /* We may need to add a header if newp is followcase */ if (captype (newp->flagfield) == FOLLOWCASE && (hdrp->flagfield & (CAPTYPEMASK | MOREVARIANTS)) != (ALLCAPS | MOREVARIANTS)) (void) addvheader (hdrp); return 1; } else return 0; } /* ** Determine if enta covers entb, according to the rules in steps 4 and 5 ** of the commentary for "combinecaps". */ static int acoversb (enta, entb) register struct dent * enta; /* "A" in the rules */ register struct dent * entb; /* "B" in the rules */ { int subset; /* NZ if entb is a subset of enta */ if ((subset = issubset (entb, enta)) != 0) { /* entb is a subset of enta; thus enta might cover entb */ if (((enta->flagfield ^ entb->flagfield) & KEEP) != 0 && (enta->flagfield & KEEP) == 0) /* Inverse of condition (4b) */ return 0; } else { /* not a subset; KEEP flags must match exactly (both (4a) and (4b)) */ if (((enta->flagfield ^ entb->flagfield) & KEEP) != 0) return 0; } /* Rules (4a) and (4b) are satisfied; check for capitalization match */ if (((enta->flagfield ^ entb->flagfield) & CAPTYPEMASK) == 0) { if (captype (enta->flagfield) != FOLLOWCASE /* Condition (4c) */ || strcmp ((char *) enta->word, (char *) entb->word) == 0) return 1; /* Perfect match */ else return 0; } else if (subset == 0) /* No flag subset, refuse */ return 0; /* ..near matches */ else if (captype (entb->flagfield) == ALLCAPS) return 1; else if (captype (enta->flagfield) == ANYCASE && captype (entb->flagfield) == CAPITALIZED) return 1; else return 0; } void upcase (s) register ichar_t * s; { while (*s) { *s = mytoupper (*s); s++; } } void lowcase (s) register ichar_t * s; { while (*s) { *s = mytolower (*s); s++; } } /* * Upcase variant that works on normal strings. Note that it is a lot * slower than the normal upcase. The input must be in canonical form. */ void chupcase (s) unsigned char * s; { ichar_t * is; is = strtosichar (s, 1); upcase (is); (void) ichartostr (s, is, strlen ((char *) s) + 1, 1); } /* ** See if one affix field is a subset of another. Returns NZ if ent1 ** is a subset of ent2. The KEEP flag is not taken into consideration. */ static int issubset (ent1, ent2) register struct dent * ent1; register struct dent * ent2; { /* The following is really testing for MASKSIZE > 1, but cpp can't do that */ #if MASKBITS > 32 register int flagword; #ifdef FULLMASKSET #define MASKMAX MASKSIZE #else #define MASKMAX MASKSIZE - 1 #endif /* FULLMASKSET */ for (flagword = MASKMAX; --flagword >= 0; ) { if ((ent1->mask[flagword] & ent2->mask[flagword]) != ent1->mask[flagword]) return 0; } #endif /* MASKBITS > 32 */ #ifdef FULLMASKSET return ((ent1->mask[MASKSIZE - 1] & ent2->mask[MASKSIZE - 1]) == ent1->mask[MASKSIZE - 1]); #else if (((ent1->mask[MASKSIZE - 1] & ent2->mask[MASKSIZE - 1]) ^ ent1->mask[MASKSIZE - 1]) & ~ALLFLAGS) return 0; else return 1; #endif /* FULLMASKSET */ } /* ** Add ent2's affix flags to ent1. */ static void combineaffixes (ent1, ent2) register struct dent * ent1; register struct dent * ent2; { /* The following is really testing for MASKSIZE > 1, but cpp can't do that */ #if MASKBITS > 32 register int flagword; if (ent1 == ent2) return; /* MASKMAX is defined in issubset, just above */ for (flagword = MASKMAX; --flagword >= 0; ) ent1->mask[flagword] |= ent2->mask[flagword]; #endif /* MASKBITS > 32 */ #ifndef FULLMASKSET ent1->mask[MASKSIZE - 1] |= ent2->mask[MASKSIZE - 1] & ~ALLFLAGS; #endif } /* ** Write out a dictionary entry, including capitalization variants. ** If onlykeep is true, only those variants with KEEP set will be ** written. */ void toutent (toutfile, hent, onlykeep) register FILE * toutfile; struct dent * hent; register int onlykeep; { register struct dent * cent; ichar_t wbuf[INPUTWORDLEN + MAXAFFIXLEN]; cent = hent; if (strtoichar (wbuf, cent->word, INPUTWORDLEN, 1)) (void) fprintf (stderr, WORD_TOO_LONG ((char *) cent->word)); for ( ; ; ) { if (!onlykeep || (cent->flagfield & KEEP)) { switch (captype (cent->flagfield)) { case ANYCASE: lowcase (wbuf); toutword (toutfile, ichartosstr (wbuf, 1), cent); break; case ALLCAPS: if ((cent->flagfield & MOREVARIANTS) == 0 || cent != hent) { upcase (wbuf); toutword (toutfile, ichartosstr (wbuf, 1), cent); } break; case CAPITALIZED: lowcase (wbuf); wbuf[0] = mytoupper (wbuf[0]); toutword (toutfile, ichartosstr (wbuf, 1), cent); break; case FOLLOWCASE: toutword (toutfile, cent->word, cent); break; } } if (cent->flagfield & MOREVARIANTS) cent = cent->next; else break; } } static void toutword (toutfile, word, cent) register FILE * toutfile; unsigned char * word; register struct dent * cent; { register int bit; has_marker = 0; (void) fprintf (toutfile, "%s", (char *) word); for (bit = 0; bit < LARGESTFLAG; bit++) { if (TSTMASKBIT (cent->mask, bit)) flagout (toutfile, BITTOCHAR (bit)); } (void) fprintf (toutfile, "\n"); } static void flagout (toutfile, flag) register FILE * toutfile; int flag; { if (!has_marker) (void) putc (hashheader.flagmarker, toutfile); has_marker = 1; (void) putc (flag, toutfile); } /* * If the string under the given pointer begins with a string character, * return the length of that "character". If not, return 0. * May be called any time, but it's best if "isstrstart" is first * used to filter out unnecessary calls. * * As a side effect, "laststringch" is set to the number of the string * found, or to -1 if none was found. This can be useful for such things * as case conversion. */ int stringcharlen (bufp, canonical) unsigned char * bufp; int canonical; /* NZ if input is in canonical form */ { #ifdef SLOWMULTIPLY static int * gp[MAXSTRINGCHARS]; /* Pointers to groupnos */ static unsigned char * sp[MAXSTRINGCHARS]; static int inited = 0; #endif /* SLOWMULTIPLY */ register unsigned char * bufcur; register unsigned char * stringcur; register int stringno; register int lowstringno; register int highstringno; int dupwanted; #ifdef SLOWMULTIPLY if (!inited) { inited = 1; for (stringno = 0; stringno < MAXSTRINGCHARS; stringno++) { gp[stringno] = &hashheader.groupnos[stringno]; sp[stringno] = &hashheader.stringchars[stringno][0]; } } #endif /* SLOWMULTIPLY */ lowstringno = 0; highstringno = hashheader.nstrchars - 1; dupwanted = canonical ? 0 : defstringgroup; while (lowstringno <= highstringno) { stringno = (lowstringno + highstringno) >> 1; #ifdef SLOWMULTIPLY if (dupwanted < gp[stringno]) { highstringno = stringno - 1; continue; } else if (dupwanted > gp[stringno]) { lowstringno = stringno + 1; continue; } stringcur = sp[stringno]; #else /* SLOWMULTIPLY */ if (dupwanted < hashheader.groupnos[stringno]) { highstringno = stringno - 1; continue; } else if (dupwanted > hashheader.groupnos[stringno]) { lowstringno = stringno + 1; continue; } stringcur = &hashheader.stringchars[stringno][0]; #endif /* SLOWMULTIPLY */ bufcur = bufp; /* * Doing a correct comparison is a touch tricky because the * data in bufp isn't null-terminated; we have to identify the * stringchar as a prefix in bufp. We don't bother to check * for a null byte in bufp because a null byte will just show * up as a mismatch with the current stringchar. */ while (*stringcur != '\0' && *bufcur == *stringcur) { stringcur++; bufcur++; } /* * If we got to the end of the stringchar, we have a match * regardless of what the next character in bufcur is. But * it's a "true" match only if dupwanted also matches. * Otherwise we need to continue the search. */ if (*stringcur == '\0') { laststringch = hashheader.stringdups[stringno]; #ifdef SLOWMULTIPLY return stringcur - sp[stringno]; #else /* SLOWMULTIPLY */ return stringcur - &hashheader.stringchars[stringno][0]; #endif /* SLOWMULTIPLY */ } /* * We aren't at the end of the stringchar, so we can decide * our direction based on the mismatch between the stringchar * and bufp. */ if (*bufcur < *stringcur) highstringno = stringno - 1; else lowstringno = stringno + 1; } laststringch = -1; return 0; /* Not a string character */ } /* * Convert an external string to an ichar_t string. * * Returns NZ if the output string overflowed. */ int strtoichar (out, in, outlen, canonical) register ichar_t * out; /* Where to put result */ register unsigned char * in; /* String to convert */ int outlen; /* Size of output buffer, *BYTES* */ int canonical; /* NZ if input is in canonical form */ { register int len; /* Length of next character */ outlen /= sizeof (ichar_t); /* Convert to an ichar_t count */ for ( ; --outlen > 0 && *in != '\0'; in += len) { if (l1_isstringch (in, len, canonical)) *out++ = SET_SIZE + laststringch; else *out++ = *in; } *out = 0; return outlen <= 0; } /* * Convert an ichar_t string to an external string. * * WARNING: the resulting string may wind up being longer than the * original. In fact, even the sequence strtoichar->ichartostr may * produce a result longer than the original, because the output form * may use a different string type set than the original input form. * * Returns NZ if the output string overflowed. */ int ichartostr (out, in, outlen, canonical) register unsigned char * out; /* Where to put result */ register const ichar_t * in; /* String to convert */ int outlen; /* Size of output buffer, bytes */ int canonical; /* NZ for canonical form */ { register unsigned int ch; /* Next character to store */ register int i; /* Index into duplicates list */ register unsigned char * scharp; /* Pointer into a string char */ while (--outlen > 0 && (ch = *in++) != '\0') { if (ch < SET_SIZE) *out++ = (char) ch; else { ch -= SET_SIZE; if (!canonical) { for (i = hashheader.nstrchars; --i >= 0; ) { if (hashheader.groupnos[i] == defstringgroup && hashheader.stringdups[i] == ch) { ch = i; break; } } } scharp = hashheader.stringchars[(unsigned) ch]; while ((*out++ = *scharp++) != '\0') ; out--; } } *out = '\0'; return outlen <= 0; } /* * Convert a string to an ichar_t *, storing the result in a static area. */ ichar_t * strtosichar (in, canonical) unsigned char * in; /* String to convert */ int canonical; /* NZ if input is in canonical form */ { static ichar_t out[STRTOSICHAR_SIZE / sizeof (ichar_t)]; if (strtoichar (out, in, sizeof out, canonical)) (void) fprintf (stderr, WORD_TOO_LONG ((char *) in)); return out; } /* * Convert an ichar_t * to a string, storing the result in a static area. */ unsigned char * ichartosstr (in, canonical) const ichar_t * in; /* Internal string to convert */ int canonical; /* NZ for canonical conversion */ { static unsigned char out[ICHARTOSSTR_SIZE]; if (ichartostr (out, in, sizeof out, canonical)) (void) fprintf (stderr, WORD_TOO_LONG (out)); return out; } /* * Convert a single ichar to a printable string, storing the result in * a static area. */ char * printichar (in) int in; { static char out[MAXSTRINGCHARLEN + 1]; if (in < SET_SIZE) { out[0] = (char) in; out[1] = '\0'; } else (void) strcpy (out, (char *) hashheader.stringchars[(unsigned) in - SET_SIZE]); return out; } #ifndef ICHAR_IS_CHAR /* * Copy an ichar_t. */ ichar_t * icharcpy (out, in) register ichar_t * out; /* Destination */ register ichar_t * in; /* Source */ { ichar_t * origout; /* Copy of destination for return */ origout = out; while ((*out++ = *in++) != 0) ; return origout; } /* * Return the length of an ichar_t. */ int icharlen (in) register ichar_t * in; /* String to count */ { register int len; /* Length so far */ for (len = 0; *in++ != 0; len++) ; return len; } /* * Compare two ichar_t's. */ int icharcmp (s1, s2) register ichar_t * s1; register ichar_t * s2; { while (*s1 != 0) { if (*s1++ != *s2++) return *--s1 - *--s2; } return *s1 - *s2; } /* * Strncmp for two ichar_t's. */ int icharncmp (s1, s2, n) register ichar_t * s1; register ichar_t * s2; register int n; { while (--n >= 0 && *s1 != 0) { if (*s1++ != *s2++) return *--s1 - *--s2; } if (n < 0) return 0; else return *s1 - *s2; } #endif /* ICHAR_IS_CHAR */ int findfiletype (name, searchnames, deformatter) char * name; /* Name to look up in suffix table */ int searchnames; /* NZ to search name field of table */ int * deformatter; /* Where to set deformatter type */ { char * cp; /* Pointer into suffix list */ int cplen; /* Length of current suffix */ register unsigned int i; /* Index into type table */ int len; /* Length of the name */ len = strlen (name); if (searchnames) { for (i = 0; i < hashheader.nstrchartype; i++) { if (strcmp (name, (char *) chartypes[i].name) == 0) { if (deformatter != NULL) { if (strcmp (chartypes[i].deformatter, "plain") == 0) *deformatter = DEFORMAT_NONE; else if (strcmp (chartypes[i].deformatter, "tex") == 0) *deformatter = DEFORMAT_TEX; else if (strcmp (chartypes[i].deformatter, "sgml") == 0) *deformatter = DEFORMAT_SGML; else *deformatter = DEFORMAT_NROFF; } return i; } } } for (i = 0; i < hashheader.nstrchartype; i++) { for (cp = chartypes[i].suffixes; *cp != '\0'; cp += cplen + 1) { cplen = strlen (cp); if (len >= cplen && strcmp (&name[len - cplen], cp) == 0) { if (deformatter != NULL) { if (strcmp (chartypes[i].deformatter, "tex") == 0) *deformatter = DEFORMAT_TEX; else if (strcmp (chartypes[i].deformatter, "sgml") == 0) *deformatter = DEFORMAT_SGML; else *deformatter = DEFORMAT_NROFF; } return i; } } } return -1; } void initckch (wchars) const char * wchars; /* Characters in -w option, if any */ { register ichar_t c; char num[4]; for (c = 0; c < (ichar_t) (SET_SIZE + hashheader.nstrchars); ++c) { if (iswordch (c)) { if (!mylower (c)) { Try[Trynum] = c; ++Trynum; } } else if (isboundarych (c)) { Try[Trynum] = c; ++Trynum; } } if (wchars != NULL) { while (Trynum < SET_SIZE + MAXSTRINGCHARS && *wchars != '\0') { if (*wchars != 'n' && *wchars != '\\') { c = *wchars; ++wchars; } else { ++wchars; num[0] = '\0'; num[1] = '\0'; num[2] = '\0'; num[3] = '\0'; if (isdigit (wchars[0])) { num[0] = wchars[0]; if (isdigit (wchars[1])) { num[1] = wchars[1]; if (isdigit (wchars[2])) num[2] = wchars[2]; } } if (wchars[-1] == 'n') { wchars += strlen (num); c = atoi (num); } else { wchars += strlen (num); c = 0; if (num[0]) c = num[0] - '0'; if (num[1]) { c <<= 3; c += num[1] - '0'; } if (num[2]) { c <<= 3; c += num[2] - '0'; } } } c &= 0xFF; if (!hashheader.wordchars[c]) { hashheader.wordchars[c] = 1; hashheader.sortorder[c] = hashheader.sortval++; Try[Trynum] = c; ++Trynum; } } } } /* * The following routines are all dummies for the benefit of lint. */ #ifdef lint int TSTMASKBIT (mask, bit) MASKTYPE * mask; int bit; { return bit + (int) *mask; } void CLRMASKBIT (mask, bit) MASKTYPE * mask; int bit; { bit += (int) *mask; } void SETMASKBIT (mask, bit) MASKTYPE * mask; int bit; { bit += (int) *mask; } int BITTOCHAR (bit) int bit; { return bit; } int CHARTOBIT (ch) int ch; { return ch; } int myupper (ch) unsigned int ch; { return (int) ch; } int mylower (ch) unsigned int ch; { return (int) ch; } int myspace (ch) unsigned int ch; { return (int) ch; } int iswordch (ch) unsigned int ch; { return (int) ch; } int isboundarych (ch) unsigned int ch; { return (int) ch; } int isstringstart (ch) unsigned int ch; { return ch; } ichar_t mytolower (ch) unsigned int ch; { return (ichar_t) ch; } ichar_t mytoupper (ch) unsigned int ch; { return (ichar_t) ch; } #endif /* lint */ ispell-3.4.02/PaxHeaders.22185/hash.c0000644000000000000000000000007410227500137013717 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/hash.c0000444003214100001440000000725410227500137014773 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: hash.c,v 1.25 2005/04/14 14:38:23 geoff Exp $"; #endif /* * hash.c - a simple hash function for ispell * * Pace Willisson, 1983 * * Copyright 1992, 1993, 1999, 2001, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: hash.c,v $ * Revision 1.25 2005/04/14 14:38:23 geoff * Update license. * * Revision 1.24 2001/07/25 21:51:45 geoff * Minor license update. * * Revision 1.23 2001/07/23 20:24:03 geoff * Update the copyright and the license. * * Revision 1.22 1999/01/07 01:22:38 geoff * Update the copyright. * * Revision 1.21 1997/12/02 06:24:44 geoff * Get rid of some compile options that really shouldn't be optional. * * Revision 1.20 1994/01/25 07:11:34 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include "config.h" #include "ispell.h" #include "proto.h" int hash P ((ichar_t * word, int hashtblsize)); /* * The following hash algorithm is due to Ian Dall, with slight modifications * by Geoff Kuenning to reflect the results of testing with the English * dictionaries actually distributed with ispell. */ #define HASHSHIFT 5 #define HASHUPPER(c) mytoupper(c) int hash (s, hashtblsize) register ichar_t * s; register int hashtblsize; { register long h = 0; register int i; #ifdef ICHAR_IS_CHAR for (i = 4; i-- && *s != 0; ) h = (h << 8) | HASHUPPER (*s++); #else /* ICHAR_IS_CHAR */ for (i = 2; i-- && *s != 0; ) h = (h << 16) | HASHUPPER (*s++); #endif /* ICHAR_IS_CHAR */ while (*s != 0) { /* * We have to do circular shifts the hard way, since C doesn't * have them even though the hardware probably does. Oh, well. */ h = (h << HASHSHIFT) | ((h >> (32 - HASHSHIFT)) & ((1 << HASHSHIFT) - 1)); h ^= HASHUPPER (*s++); } return (unsigned long) h % hashtblsize; } ispell-3.4.02/PaxHeaders.22185/dump.c0000644000000000000000000000007410227500137013741 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/dump.c0000444003214100001440000001463210227500137015013 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: dump.c,v 1.19 2005/04/14 14:38:23 geoff Exp $"; #endif /* * dump.c - Ispell's dump mode * * This code originally resided in ispell.c, but was moved here to keep * file sizes smaller. * * Copyright 1992, 1993, 1999, 2001, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * Revision 1.18 2001/07/25 21:51:47 geoff * Minor license update. * * Revision 1.17 2001/07/23 20:24:03 geoff * Update the copyright and the license. * * Revision 1.16 1999/01/18 03:28:30 geoff * Turn many char declarations into unsigned char, so that we won't have * sign-extension problems. * * Revision 1.15 1999/01/07 01:57:56 geoff * Update the copyright. * * Revision 1.14 1994/01/25 07:11:27 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include "config.h" #include "ispell.h" #include "proto.h" void dumpmode P ((void)); static void tbldump P ((struct flagent * flagp, int numflags)); static void entdump P ((struct flagent * flagp)); static void setdump P ((char * setp, int mask)); static void subsetdump P ((char * setp, int mask, int dumpval)); void dumpmode () { if (hashheader.flagmarker == '\\' || hashheader.flagmarker == '#' || hashheader.flagmarker == '>' || hashheader.flagmarker == ':' || hashheader.flagmarker == '-' || hashheader.flagmarker == ',' || hashheader.flagmarker == '[') /* ] */ (void) printf ("flagmarker \\%c\n", hashheader.flagmarker); else if (hashheader.flagmarker < ' ' || hashheader.flagmarker >= 0177) (void) printf ("flagmarker \\%3.3o\n", (unsigned int) hashheader.flagmarker & 0xFF); else (void) printf ("flagmarker %c\n", hashheader.flagmarker); if (numpflags) { (void) printf ("prefixes\n"); tbldump (pflaglist, numpflags); } if (numsflags) { (void) printf ("suffixes\n"); tbldump (sflaglist, numsflags); } } static void tbldump (flagp, numflags) /* Dump a flag table */ register struct flagent * flagp; /* First flag entry to dump */ register int numflags; /* Number of flags to dump */ { while (--numflags >= 0) entdump (flagp++); } static void entdump (flagp) /* Dump one flag entry */ register struct flagent * flagp; /* Flag entry to dump */ { register int cond; /* Condition number */ (void) printf (" flag %s%c: ", (flagp->flagflags & FF_CROSSPRODUCT) ? "*" : " ", BITTOCHAR (flagp->flagbit)); for (cond = 0; cond < flagp->numconds; cond++) { setdump (flagp->conds, 1 << cond); if (cond < flagp->numconds - 1) (void) putc (' ', stdout); } if (cond == 0) /* No conditions at all? */ (void) putc ('.', stdout); (void) printf ("\t> "); (void) putc ('\t', stdout); if (flagp->stripl) (void) printf ("-%s,", (char *) ichartosstr (flagp->strip, 1)); (void) printf ("%s\n", flagp->affl ? (char*) ichartosstr (flagp->affix, 1) : "-"); } static void setdump (setp, mask) /* Dump a set specification */ register char * setp; /* Set to be dumped */ register int mask; /* Mask for bit to be dumped */ { register int cnum; /* Next character's number */ register int firstnz; /* Number of first NZ character */ register int numnz; /* Number of NZ characters */ firstnz = numnz = 0; for (cnum = SET_SIZE; --cnum >= 0; ) { if (setp[cnum] & mask) { numnz++; firstnz = cnum; } } if (numnz == 1) (void) putc (firstnz, stdout); else if (numnz == SET_SIZE) (void) putc ('.', stdout); else if (numnz > SET_SIZE / 2) { (void) printf ("[^"); subsetdump (setp, mask, 0); (void) putc (']', stdout); } else { (void) putc ('[', stdout); subsetdump (setp, mask, mask); (void) putc (']', stdout); } } static void subsetdump (setp, mask, dumpval) /* Dump part of a set spec */ register char * setp; /* Set to be dumped */ register int mask; /* Mask for bit to be dumped */ register int dumpval; /* Value to be printed */ { register int cnum; /* Next character's number */ register int rangestart; /* Value starting a range */ for (cnum = 0; cnum < SET_SIZE; setp++, cnum++) { if (((*setp ^ dumpval) & mask) == 0) { for (rangestart = cnum; cnum < SET_SIZE; setp++, cnum++) { if ((*setp ^ dumpval) & mask) break; } if (cnum == rangestart + 1) (void) putc (rangestart, stdout); else if (cnum <= rangestart + 3) { while (rangestart < cnum) { (void) putc (rangestart, stdout); rangestart++; } } else (void) printf ("%c-%c", rangestart, cnum - 1); } } } ispell-3.4.02/PaxHeaders.22185/unsq.c0000644000000000000000000000007410227500137013762 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/unsq.c0000444003214100001440000001035710227500137015034 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: unsq.c,v 1.18 2005/04/14 14:38:23 geoff Exp $"; #endif /* * Copyright 1993, 1999, 2001, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: unsq.c,v $ * Revision 1.18 2005/04/14 14:38:23 geoff * Update license. * * Revision 1.17 2001/07/25 21:51:47 geoff * Minor license update. * * Revision 1.16 2001/07/23 20:24:04 geoff * Update the copyright and the license. * * Revision 1.15 1999/01/07 01:58:02 geoff * Update the copyright. * * Revision 1.14 1994/01/25 07:12:19 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include #include "msgs.h" #ifdef __STDC__ #define P(x) x #else /* __STDC__ */ #define P(x) () #endif /* __STDC__ */ int main P ((int argc, char * argv[])); static int expand P ((char * word, char * prev)); /* * The following table encodes prefix sizes as a single character. A * matching table will be found in sq.c. */ static char size_encodings[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', /* 00-09 */ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', /* 10-19 */ 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', /* 20-29 */ 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', /* 30-39 */ 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', /* 40-49 */ 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', /* 50-59 */ 'y', 'z' /* 60-61 */ }; #define MAX_PREFIX (sizeof (size_encodings) - 1) extern void exit P ((int status)); int main (argc, argv) int argc; char * argv[]; { char word[257]; static char prev[257] = ""; while (!expand (word, prev)) puts (word); return 0; } static int expand (word, prev) char * word; char * prev; { register char * wordp; register char * prevp; register int same_count; register int count_char; count_char = getchar (); if (count_char == EOF) return(1); for (same_count = 0; same_count < MAX_PREFIX && size_encodings[same_count] != count_char; same_count++) ; if (same_count == MAX_PREFIX) { (void) fprintf (stderr, UNSQ_C_BAD_COUNT, (unsigned int) count_char); exit (1); } prevp = prev; wordp = word; while (same_count--) *wordp++ = (*prevp++); if (gets (wordp) == NULL) { (void) fprintf (stderr, UNSQ_C_SURPRISE_EOF); exit (1); } (void) strcpy (prev, word); return 0 ; } ispell-3.4.02/PaxHeaders.22185/local.h.macos0000644000000000000000000000007410245104041015166 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/local.h.macos0000444003214100001440000000667610245104041016251 0ustar00geofffaculty00000000000000#ifndef LOCAL_H_INCLUDED #define LOCAL_H_INCLUDED /* * $Id: local.h.macos,v 1.3 2005/05/25 14:13:53 geoff Exp $ */ /* * Copyright 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * This file is a sample local.h file. It shows what I believe nearly every * site will want to include in their local.h. You will probably want to * expand this file; see "config.X" to learn of #defines that you might * like to add to. */ /* * WARNING WARNING WARNING * * This file is *NOT* a normal C header file! Although it uses C * syntax and is included in C programs, it is also processed by shell * scripts that are very stupid about format. * * Do not try to use #if constructs to configure this file for more * than one configuration. Do not place whitespace after the "#" in * "#define". Do not attempt to disable lines by commenting them out. * Do not use backslashes to reduce the length of long lines. * None of these things will work the way you expect them to. * * WARNING WARNING WARNING */ #define MINIMENU /* Display a mini-menu at the bottom of the screen */ #define HAS_RENAME #define TERMLIB "-lcurses" /* * Important directory paths. If you change MAN45DIR from man5 to * something else, you probably also want to set MAN45SECT and * MAN45EXT (but not if you keep the man pages in section 5 and just * store them in a different place). */ #define BINDIR "/usr/local/bin" #define LIBDIR "/usr/local/lib" #define MAN1DIR "/usr/local/man/man1" #define MAN45DIR "/usr/local/man/man4" #define MAN45EXT ".4" /* * Place any locally-required #include statements here */ #endif /* LOCAL_H_INCLUDED */ ispell-3.4.02/PaxHeaders.22185/fields.h0000644000000000000000000000007410233541507014252 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/fields.h0000444003214100001440000000430210233541507015315 0ustar00geofffaculty00000000000000#ifndef FIELDS_H_INCLUDED #define FIELDS_H_INCLUDED /* * $Id: fields.h,v 1.6 2005/04/26 22:40:07 geoff Exp $ * * $Log: fields.h,v $ * Revision 1.6 2005/04/26 22:40:07 geoff * Add double-inclusion protection. Include ispell.h for the definition of P. * * Revision 1.5 2005/04/14 14:38:23 geoff * Make maxf unsigned. * * Revision 1.4 1994/01/05 20:13:43 geoff * Add the maxf parameter * * Revision 1.3 1994/01/04 02:40:22 geoff * Add field_line_inc, field_field_inc, and the FLD_NOSHRINK flag. * * Revision 1.2 1993/09/09 01:11:12 geoff * Add a return value to fieldwrite and support for backquotes. * * Revision 1.1 1993/08/25 21:32:05 geoff * Initial revision * */ /* * Structures used by the field-access package. */ #include "ispell.h" typedef struct { unsigned int nfields; /* Number of fields in the line */ int hadnl; /* NZ if line ended with a newline */ char * linebuf; /* Malloc'ed buffer containing the line */ char ** fields; /* Malloc'ed array of pointers to fields */ } field_t; /* * Flags to fieldread and fieldmake */ #define FLD_RUNS 0x0001 /* Consider runs of delimiters same as one */ #define FLD_SNGLQUOTES 0x0002 /* Accept single-quoted fields */ #define FLD_BACKQUOTES 0x0004 /* Accept back-quoted fields */ #define FLD_DBLQUOTES 0x0008 /* Accept double-quoted fields */ #define FLD_SHQUOTES 0x0010 /* Use shell-style (embedded) quoting rules */ #define FLD_STRIPQUOTES 0x0020 /* Strip quotes from fields */ #define FLD_BACKSLASH 0x0040 /* Process C-style backslashes */ #define FLD_NOSHRINK 0x0080 /* Don't shrink memory before return */ #undef P #ifdef __STDC__ #define P(x) x #else /* __STDC__ */ #define P(x) () #endif /* __STDC__ */ extern field_t * fieldread P ((FILE * file, char * delims, int flags, unsigned int maxf)); extern field_t * fieldmake P ((char * line, int allocated, char * delims, int flags, unsigned int maxf)); extern int fieldwrite P ((FILE * file, field_t * fieldp, int delim)); extern void fieldfree P ((field_t * fieldp)); extern unsigned int field_field_inc; /* Increment for expanding fields */ extern unsigned int field_line_inc; /* Increment for expanding lines */ #endif /* FIELDS */ ispell-3.4.02/PaxHeaders.22185/local.h.cygwin0000644000000000000000000000007410245122232015366 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/local.h.cygwin0000444003214100001440000000727010245122232016440 0ustar00geofffaculty00000000000000#ifndef LOCAL_H_INCLUDED #define LOCAL_H_INCLUDED /* * $Id: local.h.cygwin,v 1.1 2005/05/25 16:15:12 geoff Exp $ */ /* * Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * This file is a sample local.h file. It shows what I believe nearly every * site will want to include in their local.h. You will probably want to * expand this file; see "config.X" to learn of #defines that you might * like to add to. */ /* * WARNING WARNING WARNING * * This file is *NOT* a normal C header file! Although it uses C * syntax and is included in C programs, it is also processed by shell * scripts that are very stupid about format. * * Do not try to use #if constructs to configure this file for more * than one configuration. Do not place whitespace after the "#" in * "#define". Do not attempt to disable lines by commenting them out. * Do not use backslashes to reduce the length of long lines. * None of these things will work the way you expect them to. * * WARNING WARNING WARNING */ #define MINIMENU /* Display a mini-menu at the bottom of the screen */ #define USG /* Define on System V or if term.c won't compile */ #undef NO_FCNTL_H /* Define if you get compile errors on fcntl.h */ #undef NO_MKSTEMP /* Define if you get compile or link errors */ #define EXEEXT ".exe" /* * Important directory paths. If you change MAN45DIR from man5 to * something else, you probably also want to set MAN45SECT and * MAN45EXT (but not if you keep the man pages in section 5 and just * store them in a different place). */ #define BINDIR "/usr/local/bin" #define LIBDIR "/usr/local/lib" #define MAN1DIR "/usr/local/man/man1" #define MAN45DIR "/usr/local/man/man5" /* Also define MAN45EXT if you don't like section 5 for file formats. */ /* * Place any locally-required #include statements here */ #endif /* LOCAL_H_INCLUDED */ ispell-3.4.02/PaxHeaders.22185/ispell.h0000644000000000000000000000013213776174612014305 xustar0030 mtime=1610152330.280272897 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/ispell.h0000644003214100001440000006732013776174612015370 0ustar00geofffaculty00000000000000#ifndef ISPELL_H_INCLUDED #define ISPELL_H_INCLUDED /* * $Id: ispell.h,v 1.85 2020-12-30 22:33:41-08 geoff Exp geoff $ */ /* * Copyright 1992, 1993, 1999, 2001, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: ispell.h,v $ * Revision 1.85 2020-12-30 22:33:41-08 geoff * Add support for character-set options. * * Revision 1.84 2005-04-28 07:46:51-07 geoff * Add support for a correction log file. * * Revision 1.83 2005/04/26 22:40:07 geoff * Add double-inclusion protection. Include config.h to be sure it's * available. * * Revision 1.82 2005/04/20 23:16:32 geoff * Rename some variables to make them more meaningful. * * Revision 1.81 2005/04/14 14:38:23 geoff * Update license. * * Revision 1.80 2001/07/25 21:51:46 geoff * Minor license update. * * Revision 1.79 2001/07/23 20:24:03 geoff * Update the copyright and the license. * * Revision 1.78 2000/08/22 10:52:25 geoff * Fix a whole bunch of signed/unsigned discrepancies. * * Revision 1.77 2000/08/22 00:11:25 geoff * Add support for correct_verbose_mode. * * Revision 1.76 1999/01/18 02:14:09 geoff * Change most char declarations to unsigned char, to avoid * sign-extension problems with 8-bit characters. * * Revision 1.75 1999/01/07 01:23:05 geoff * Update the copyright. * * Revision 1.74 1999/01/03 01:46:37 geoff * Add support for external deformatters. * * Revision 1.73 1998/07/06 06:55:19 geoff * Add struct kwtable and some new variables, to support the new * generalized keyword-lookup stuff. * * Revision 1.72 1997/12/02 06:24:54 geoff * Get rid of some compile options that really shouldn't be optional. * * Revision 1.71 1997/12/01 00:53:49 geoff * Add HTML support variables. * * Revision 1.70 1995/11/08 05:09:18 geoff * Add the DEFORMAT_xxx constants and askverbose. Improve the stylistic * consistency of the HTML support. * * Revision 1.69 1995/10/25 04:05:26 geoff * Patch by Gerry Tierney 1995/10/14. Added * variables htmlflag and insidehtml for use in html-mode. * * Revision 1.68 1995/03/06 02:42:41 geoff * Be vastly more paranoid about parenthesizing macro arguments. This * fixes a bug in defmt.c where a complex argument was passed to * isstringch. * * Revision 1.67 1995/01/03 19:24:12 geoff * Get rid of a non-global declaration. * * Revision 1.66 1994/12/27 23:08:49 geoff * Fix a lot of subtly bad assumptions about the widths of ints and longs * which only show up on 64-bit machines like the Cray and the DEC Alpha. * * Revision 1.65 1994/11/02 06:56:10 geoff * Remove the anyword feature, which I've decided is a bad idea. * * Revision 1.64 1994/10/25 05:46:18 geoff * Add the FF_ANYWORD flag for defining an affix that will apply to any * word, even if not explicitly specified. (Good for French.) * * Revision 1.63 1994/09/16 04:48:28 geoff * Make stringdups and laststringch unsigned ints, and dupnos a plain * int, so that we can handle more than 128 stringchars and stringchar * types. * * Revision 1.62 1994/09/01 06:06:39 geoff * Change erasechar/killchar to uerasechar/ukillchar to avoid * shared-library problems on HP systems. * * Revision 1.61 1994/08/31 05:58:35 geoff * Add contextoffset, used in -a mode to handle extremely long lines. * * Revision 1.60 1994/05/17 06:44:15 geoff * Add support for controlled compound formation and the COMPOUNDONLY * option to affix flags. * * Revision 1.59 1994/03/15 06:25:16 geoff * Change deftflag's initialization so we can tell if -t/-n appeared. * * Revision 1.58 1994/02/07 05:53:28 geoff * Add typecasts to the the 7-bit versions of ichar* routines * * Revision 1.57 1994/01/25 07:11:48 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include "config.h" #include #ifdef __STDC__ #define P(x) x #define VOID void #else /* __STDC__ */ #define P(x) () #define VOID char #define const #endif /* __STDC__ */ #define SET_SIZE 256 #define MASKSIZE (MASKBITS / MASKTYPE_WIDTH) #ifdef lint extern void SETMASKBIT P ((MASKTYPE * mask, int bit)); extern void CLRMASKBIT P ((MASKTYPE * mask, int bit)); extern int TSTMASKBIT P ((MASKTYPE * mask, int bit)); #else /* lint */ /* The following is really testing for MASKSIZE <= 1, but cpp can't do that */ #if MASKBITS <= MASKTYPE_WIDTH #define SETMASKBIT(mask, bit) ((mask)[0] |= (MASKTYPE) 1 << (bit)) #define CLRMASKBIT(mask, bit) ((mask)[0] &= (MASKTYPE) ~(1 << (bit))) #define TSTMASKBIT(mask, bit) ((mask)[0] & ((MASKTYPE) 1 << (bit))) #else #define SETMASKBIT(mask, bit) \ ((mask)[(bit) / MASKTYPE_WIDTH] |= \ (MASKTYPE) 1 << ((bit) & (MASKTYPE_WIDTH - 1))) #define CLRMASKBIT(mask, bit) \ ((mask)[(bit) / MASKTYPE_WIDTH] &= \ ~((MASKTYPE) 1 << ((bit) & (MASKTYPE_WIDTH - 1)))) #define TSTMASKBIT(mask, bit) \ ((mask)[(bit) / MASKTYPE_WIDTH] & \ ((MASKTYPE) 1 << ((bit) & (MASKTYPE_WIDTH - 1)))) #endif #endif /* lint */ #if MASKBITS > 64 #define FULLMASKSET #endif #ifdef lint extern int BITTOCHAR P ((int bit)); extern int CHARTOBIT P ((int ch)); #endif /* lint */ #if MASKBITS <= 32 # ifndef lint #define BITTOCHAR(bit) ((bit) + 'A') #define CHARTOBIT(ch) ((ch) - 'A') # endif /* lint */ #define LARGESTFLAG 26 /* 5 are needed for flagfield below */ #define FLAGBASE ((MASKTYPE_WIDTH) - 6) #else # if MASKBITS <= 64 # ifndef lint #define BITTOCHAR(bit) ((bit) + 'A') #define CHARTOBIT(ch) ((ch) - 'A') # endif /* lint */ #define LARGESTFLAG (64 - 6) /* 5 are needed for flagfield below */ #define FLAGBASE ((MASKTYPE_WIDTH) - 6) # else # ifndef lint #define BITTOCHAR(bit) (bit) #define CHARTOBIT(ch) (ch) # endif /* lint */ #define LARGESTFLAG MASKBITS /* flagfield is a separate field */ #define FLAGBASE 0 # endif #endif /* ** Data type for internal word storage. If necessary, we use shorts rather ** than chars so that string characters can be encoded as a single unit. */ #if (SET_SIZE + MAXSTRINGCHARS) <= 256 #ifndef lint #define ICHAR_IS_CHAR #endif /* lint */ #endif #ifdef ICHAR_IS_CHAR typedef unsigned char ichar_t; /* Internal character */ #define icharlen(s) strlen ((char *) (s)) #define icharcpy(a, b) strcpy ((char *) (a), (char *) (b)) #define icharcmp(a, b) strcmp ((char *) (a), (char *) (b)) #define icharncmp(a, b, n) strncmp ((char *) (a), (char *) (b), (n)) #define chartoichar(x) ((ichar_t) (x)) #else typedef unsigned short ichar_t; /* Internal character */ #define chartoichar(x) ((ichar_t) (unsigned char) (x)) #endif struct dent { struct dent * next; unsigned char * word; MASKTYPE mask[MASKSIZE]; #ifdef FULLMASKSET char flags; #endif }; /* ** Flags in the directory entry. If FULLMASKSET is undefined, these are ** stored in the highest bits of the last longword of the mask field. If ** FULLMASKSET is defined, they are stored in the extra "flags" field. ** ** If a word has only one capitalization form, and that form is not ** FOLLOWCASE, it will have exactly one entry in the dictionary. The ** legal capitalizations will be indicated by the 2-bit capitalization ** field, as follows: ** ** ALLCAPS The word must appear in all capitals. ** CAPITALIZED The word must be capitalized (e.g., London). ** It will also be accepted in all capitals. ** ANYCASE The word may appear in lowercase, capitalized, ** or all-capitals. ** ** Regardless of the capitalization flags, the "word" field of the entry ** will point to an all-uppercase copy of the word. This is to simplify ** the large portion of the code that doesn't care about capitalization. ** Ispell will generate the correct version when needed. ** ** If a word has more than one capitalization, there will be multiple ** entries for it, linked together by the "next" field. The initial ** entry for such words will be a dummy entry, primarily for use by code ** that ignores capitalization. The "word" field of this entry will ** again point to an all-uppercase copy of the word. The "mask" field ** will contain the logical OR of the mask fields of all variants. ** A header entry is indicated by a capitalization type of ALLCAPS, ** with the MOREVARIANTS bit set. ** ** The following entries will define the individual variants. Each ** entry except the last has the MOREVARIANTS flag set, and each ** contains one of the following capitalization options: ** ** ALLCAPS The word must appear in all capitals. ** CAPITALIZED The word must be capitalized (e.g., London). ** It will also be accepted in all capitals. ** FOLLOWCASE The word must be capitalized exactly like the ** sample in the entry. Prefix (suffix) characters ** must be rendered in the case of the first (last) ** "alphabetic" character. It will also be accepted ** in all capitals. ("Alphabetic" means "mentioned ** in a 'casechars' statement".) ** ANYCASE The word may appear in lowercase, capitalized, ** or all-capitals. ** ** The "mask" field for the entry contains only the affix flag bits that ** are legal for that capitalization. The "word" field will be null ** except for FOLLOWCASE entries, where it will point to the ** correctly-capitalized spelling of the root word. ** ** It is worth discussing why the ALLCAPS option is used in ** the header entry. The header entry accepts an all-capitals ** version of the root plus every affix (this is always legal, since ** words get capitalized in headers and so forth). Further, all of ** the following variant entries will reject any all-capitals form ** that is illegal due to an affix. ** ** Finally, note that variations in the KEEP flag can cause a multiple-variant ** entry as well. For example, if the personal dictionary contains "ALPHA", ** (KEEP flag set) and the user adds "alpha" with the KEEP flag clear, a ** multiple-variant entry will be created so that "alpha" will be accepted ** but only "ALPHA" will actually be kept. */ #ifdef FULLMASKSET #define flagfield flags #else #define flagfield mask[MASKSIZE - 1] #endif #define USED ((MASKTYPE) 1 << (FLAGBASE + 0)) #define KEEP ((MASKTYPE) 1 << (FLAGBASE + 1)) #define ANYCASE ((MASKTYPE) 0 << (FLAGBASE + 2)) #define ALLCAPS ((MASKTYPE) 1 << (FLAGBASE + 2)) #define CAPITALIZED ((MASKTYPE) 2 << (FLAGBASE + 2)) #define FOLLOWCASE ((MASKTYPE) 3 << (FLAGBASE + 2)) #define CAPTYPEMASK ((MASKTYPE) 3 << (FLAGBASE + 2)) #define MOREVARIANTS ((MASKTYPE) 1 << (FLAGBASE + 4)) #define ALLFLAGS (USED | KEEP | CAPTYPEMASK | MOREVARIANTS) #define captype(x) ((x) & CAPTYPEMASK) /* * Language tables used to encode prefix and suffix information. */ struct flagent { ichar_t * strip; /* String to strip off */ ichar_t * affix; /* Affix to append */ short flagbit; /* Flag bit this ent matches */ short stripl; /* Length of strip */ short affl; /* Length of affix */ short numconds; /* Number of char conditions */ short flagflags; /* Modifiers on this flag */ char conds[SET_SIZE + MAXSTRINGCHARS]; /* Adj. char conds */ }; /* * Bits in flagflags */ #define FF_CROSSPRODUCT (1 << 0) /* Affix does cross-products */ #define FF_COMPOUNDONLY (1 << 1) /* Afx works in compounds */ union ptr_union /* Aid for building flg ptrs */ { struct flagptr * fp; /* Pointer to more indexing */ struct flagent * ent; /* First of a list of ents */ }; struct flagptr { union ptr_union pu; /* Ent list or more indexes */ int numents; /* If zero, pu.fp is valid */ }; /* * Description of a single string character type. */ struct strchartype { unsigned char * name; /* Name of the type */ char * deformatter; /* Deformatter to use */ char * suffixes; /* File suffixes, null seps */ unsigned char options; /* Options for the type */ }; /* * Options for string character types */ #define RAW_DISPLAY (1 << 0) /* Display raw strchars */ #define SQUEEZE_STRINGS (1 << 1) /* Count strchar as 1 byte */ /* * Header placed at the beginning of the hash file. */ struct hashheader { unsigned short magic; /* Magic number for ID */ unsigned short compileoptions; /* How we were compiled */ unsigned short maxstringchars; /* Max # strchrs we support */ unsigned short maxstringcharlen; /* Max strchr len supported */ unsigned short compoundmin; /* Min lth of compound parts */ short compoundbit; /* Flag 4 compounding roots */ unsigned int stringsize; /* Size of string table */ unsigned int lstringsize; /* Size of lang. str tbl */ unsigned int tblsize; /* No. entries in hash tbl */ unsigned int stblsize; /* No. entries in sfx tbl */ unsigned int ptblsize; /* No. entries in pfx tbl */ unsigned int sortval; /* Largest sort ID assigned */ unsigned int nstrchars; /* No. strchars defined */ unsigned int nstrchartype; /* No. strchar types */ unsigned int strtypestart; /* Start of strtype table */ char nrchars[5]; /* Nroff special characters */ char texchars[13]; /* TeX special characters */ char compoundflag; /* Compund-word handling */ char defhardflag; /* Default tryveryhard flag */ char flagmarker; /* "Start-of-flags" char */ unsigned short sortorder[SET_SIZE + MAXSTRINGCHARS]; /* Sort ordering */ ichar_t lowerconv[SET_SIZE + MAXSTRINGCHARS]; /* Lower-conversion table */ ichar_t upperconv[SET_SIZE + MAXSTRINGCHARS]; /* Upper-conversion table */ char wordchars[SET_SIZE + MAXSTRINGCHARS]; /* NZ for chars found in wrds */ char upperchars[SET_SIZE + MAXSTRINGCHARS]; /* NZ for uppercase chars */ char lowerchars[SET_SIZE + MAXSTRINGCHARS]; /* NZ for lowercase chars */ char boundarychars[SET_SIZE + MAXSTRINGCHARS]; /* NZ for boundary chars */ char stringstarts[SET_SIZE]; /* NZ if char can start str */ unsigned char stringchars[MAXSTRINGCHARS][MAXSTRINGCHARLEN + 1]; /* String chars */ unsigned int stringdups[MAXSTRINGCHARS]; /* No. of "base" char */ int groupnos[MAXSTRINGCHARS]; /* Group char is in # */ unsigned short magic2; /* Second magic for dbl chk */ }; /* hash table magic number */ #define MAGIC 0x9602 /* compile options, put in the hash header for consistency checking */ # define MAGICNOTUSED1 0x01 /* No longer used */ # define MAGICNOTUSED2 0x02 /* No longer used */ #if MASKBITS <= 32 # define MAGICMASKSET 0x00 #else # if MASKBITS <= 64 # define MAGICMASKSET 0x04 # else # if MASKBITS <= 128 # define MAGICMASKSET 0x08 # else # define MAGICMASKSET 0x0C # endif # endif #endif #define COMPILEOPTIONS (MAGICNOTUSED1 | MAGICNOTUSED2 | MAGICMASKSET) /* * Structure used to record data about successful lookups; these values * are used in the ins_root_cap routine to produce correct capitalizations. */ struct success { struct dent * dictent; /* Header of dict entry chain for wd */ struct flagent * prefix; /* Prefix flag used, or NULL */ struct flagent * suffix; /* Suffix flag used, or NULL */ }; /* * Structure used to describe keyword-lookup tables. The lookup * routine uses binary search on the keyword array. Maxlen and minlen * are just optimizations: if the string length isn't in this range, * the lookup routine can fail immediately. */ struct kwtable { unsigned char ** kwlist; /* Sorted array of keywords */ unsigned int numkw; /* Number of keywords in array */ unsigned int minlen; /* Length of shortest keyword */ unsigned int maxlen; /* Length of longest keyword */ int forceupper; /* NZ to force uppercase in match */ }; /* ** Offsets into the nroff special-character array */ #define NRLEFTPAREN hashheader.nrchars[0] #define NRRIGHTPAREN hashheader.nrchars[1] #define NRDOT hashheader.nrchars[2] #define NRBACKSLASH hashheader.nrchars[3] #define NRSTAR hashheader.nrchars[4] /* ** Offsets into the TeX special-character array */ #define TEXLEFTPAREN hashheader.texchars[0] #define TEXRIGHTPAREN hashheader.texchars[1] #define TEXLEFTSQUARE hashheader.texchars[2] #define TEXRIGHTSQUARE hashheader.texchars[3] #define TEXLEFTCURLY hashheader.texchars[4] #define TEXRIGHTCURLY hashheader.texchars[5] #define TEXLEFTANGLE hashheader.texchars[6] #define TEXRIGHTANGLE hashheader.texchars[7] #define TEXBACKSLASH hashheader.texchars[8] #define TEXDOLLAR hashheader.texchars[9] #define TEXSTAR hashheader.texchars[10] #define TEXDOT hashheader.texchars[11] #define TEXPERCENT hashheader.texchars[12] #define HTMLTAGSTART '<' #define HTMLTAGEND '>' #define HTMLSLASH '/' #define HTMLSPECSTART '&' #define HTMLSPECEND ';' #define HTMLQUOTE '"' /* ** Values for compoundflag */ #define COMPOUND_NEVER 0 /* Compound words are never good */ #define COMPOUND_ANYTIME 1 /* Accept run-together words */ #define COMPOUND_CONTROLLED 2 /* Compounds controlled by afx flags */ /* ** Values for deftflag and tflag (deformatting style) */ #define DEFORMAT_NONE 0 /* No deformatting (or external) */ #define DEFORMAT_NROFF 1 /* Nroff/troff-style deformatting */ #define DEFORMAT_TEX 2 /* TeX/LaTeX-style deformatting */ #define DEFORMAT_SGML 3 /* SGML/HTML-style deformatting */ /* ** The isXXXX macros normally only check ASCII range, and don't support ** the character sets of other languages. These private versions handle ** whatever character sets have been defined in the affix files. */ #ifdef lint extern int myupper P ((unsigned int ch)); extern int mylower P ((unsigned int ch)); extern int myspace P ((unsigned int ch)); extern int iswordch P ((unsigned int ch)); extern int isboundarych P ((unsigned int ch)); extern int isstringstart P ((unsigned int ch)); extern ichar_t mytolower P ((unsigned int ch)); extern ichar_t mytoupper P ((unsigned int ch)); #else /* lint */ #define myupper(X) (hashheader.upperchars[(X)]) #define mylower(X) (hashheader.lowerchars[(X)]) #define myspace(X) (((X) > 0) && ((X) < 0x80) \ && isspace((unsigned char) (X))) #define iswordch(X) (hashheader.wordchars[(X)]) #define isboundarych(X) (hashheader.boundarychars[(X)]) #define isstringstart(X) (hashheader.stringstarts[(unsigned char) (X)]) #define mytolower(X) (hashheader.lowerconv[(X)]) #define mytoupper(X) (hashheader.upperconv[(X)]) #endif /* lint */ /* ** These macros are similar to the ones above, but they take into account ** the possibility of string characters. Note well that they take a POINTER, ** not a character. ** ** The "l_" versions set "len" to the length of the string character as a ** handy side effect. (Note that the global "laststringch" is also set, ** and sometimes used, by these macros.) ** ** The "l1_" versions go one step further and guarantee that the "len" ** field is valid for *all* characters, being set to 1 even if the macro ** returns false. This macro is a great example of how NOT to write ** readable C. */ #define isstringch(ptr, canon) (isstringstart (*(ptr)) \ && stringcharlen ((ptr), (canon)) > 0) #define l_isstringch(ptr, len, canon) \ (isstringstart (*(ptr)) \ && (len = stringcharlen ((ptr), (canon))) \ > 0) #define l1_isstringch(ptr, len, canon) \ (len = 1, \ isstringstart (*(ptr)) \ && ((len = \ stringcharlen ((ptr), (canon))) \ > 0 \ ? 1 : (len = 1, 0))) /* * Sizes of buffers returned by ichartosstr/strtosichar. */ #define ICHARTOSSTR_SIZE (INPUTWORDLEN + 4 * MAXAFFIXLEN + 4) #define STRTOSICHAR_SIZE ((INPUTWORDLEN + 4 * MAXAFFIXLEN + 4) \ * sizeof (ichar_t)) /* * termcap variables */ #ifdef MAIN # define EXTERN /* nothing */ #else # define EXTERN extern #endif EXTERN char * BC; /* backspace if not ^H */ EXTERN char * cd; /* clear to end of display */ EXTERN char * cl; /* clear display */ EXTERN char * cm; /* cursor movement */ EXTERN char * ho; /* home */ EXTERN char * nd; /* non-destructive space */ EXTERN char * so; /* standout */ EXTERN char * se; /* standout end */ EXTERN int sg; /* space taken by so/se */ EXTERN char * ti; /* terminal initialization sequence */ EXTERN char * te; /* terminal termination sequence */ EXTERN int li; /* lines */ EXTERN int co; /* columns */ EXTERN int contextsize; /* number of lines of context to show */ EXTERN unsigned char contextbufs[MAXCONTEXT][BUFSIZ]; /* Context of current line */ EXTERN int contextoffset; /* Offset of line start in contextbufs[0] */ EXTERN unsigned char ctoken[INPUTWORDLEN + MAXAFFIXLEN]; /* Current token as char */ EXTERN unsigned char filteredbuf[BUFSIZ]; /* Filtered line */ EXTERN ichar_t itoken[INPUTWORDLEN + MAXAFFIXLEN]; /* Ctoken as ichar_t str */ EXTERN char termcap[2048]; /* termcap entry */ EXTERN char termstr[2048]; /* for string values */ EXTERN char * termptr; /* pointer into termcap, used by tgetstr */ EXTERN int numhits; /* number of hits in dictionary lookups */ EXTERN struct success hits[MAX_HITS]; /* table of hits gotten in lookup */ EXTERN unsigned char * hashstrings; /* Strings in hash table */ EXTERN struct hashheader hashheader; /* Header of hash table */ EXTERN struct dent * hashtbl; /* Main hash table, for dictionary */ EXTERN unsigned int hashsize; /* Size of main hash table */ EXTERN char hashname[MAXPATHLEN]; /* Name of hash table file */ EXTERN int aflag; /* NZ if -a or -A option specified */ EXTERN int cflag; /* NZ if -c (crunch) option */ EXTERN int lflag; /* NZ if -l (list) option */ EXTERN int incfileflag; /* whether xgets() acts exactly like gets() */ EXTERN int nodictflag; /* NZ if dictionary not needed */ EXTERN int uerasechar; /* User's erase character, from stty */ EXTERN int ukillchar; /* User's kill character */ EXTERN unsigned int laststringch; /* Number of last string character */ EXTERN int defstringgroup; /* Default string character group type */ EXTERN unsigned int numpflags; /* Number of prefix flags in table */ EXTERN unsigned int numsflags; /* Number of suffix flags in table */ EXTERN struct flagptr pflagindex[SET_SIZE + MAXSTRINGCHARS]; /* Fast index to pflaglist */ EXTERN struct flagent * pflaglist; /* Prefix flag control list */ EXTERN struct flagptr sflagindex[SET_SIZE + MAXSTRINGCHARS]; /* Fast index to sflaglist */ EXTERN struct flagent * sflaglist; /* Suffix flag control list */ EXTERN struct strchartype * /* String character type collection */ chartypes; EXTERN FILE * infile; /* File being corrected */ EXTERN FILE * outfile; /* Corrected copy of infile */ EXTERN FILE * sourcefile; /* File with full input data */ EXTERN FILE * logfile; /* File for logging corrections */ EXTERN char * askfilename; /* File specified in -f option */ EXTERN int changes; /* NZ if changes made to cur. file */ EXTERN int readonly; /* NZ if current file is readonly */ EXTERN int quit; /* NZ if we're done with this file */ #define MAXPOSSIBLE 100 /* Max no. of possibilities to generate */ EXTERN char possibilities[MAXPOSSIBLE][INPUTWORDLEN + MAXAFFIXLEN]; /* Table of possible corrections */ EXTERN int pcount; /* Count of possibilities generated */ EXTERN int maxposslen; /* Length of longest possibility */ EXTERN int easypossibilities; /* Number of "easy" corrections found */ /* ..(defined as those using legal affixes) */ /* * The following array contains a list of characters that should be tried * in "missingletter." Note that lowercase characters are omitted. */ EXTERN int Trynum; /* Size of "Try" array */ EXTERN ichar_t Try[SET_SIZE + MAXSTRINGCHARS]; /* * Tables of keywords, used in defmt.c */ EXTERN struct kwtable htmlchecklist; /* List of HTML tags to always check */ EXTERN struct kwtable htmlignorelist; /* List of HTML tags to be ignored */ EXTERN struct kwtable texskip1list; /* List of TEX tags to skip 1 arg */ EXTERN struct kwtable texskip2list; /* List of TEX tags to skip 2 args */ /* * Initialized variables. These are generated using macros so that they * may be consistently declared in all programs. Numerous examples of * usage are given below. */ #ifdef MAIN #define INIT(decl, init) decl = init #else #define INIT(decl, init) extern decl #endif #ifdef MINIMENU INIT (int minimenusize, 2); /* MUST be either 2 or zero */ #else /* MINIMENU */ INIT (int minimenusize, 0); /* MUST be either 2 or zero */ #endif /* MINIMENU */ INIT (int askverbose, 0); /* NZ for verbose ask mode */ INIT (int eflag, 0); /* NZ for expand mode */ INIT (char * defmtpgm, NULL); /* Filter to use for deformatting */ INIT (int dumpflag, 0); /* NZ to do dump mode */ INIT (int fflag, 0); /* NZ if -f specified */ #ifndef USG INIT (int sflag, 0); /* NZ to stop self after EOF */ #endif INIT (int vflag, 0); /* NZ to display characters as M-xxx */ INIT (int xflag, DEFNOBACKUPFLAG); /* NZ to suppress backups */ INIT (int deftflag, -1); /* Default deformatting mode, chosen */ /* ..from DEFORMAT_* values */ INIT (int tflag, DEFTEXFLAG); /* Deformatting for current file */ INIT (int prefstringchar, -1); /* Preferred string character type */ INIT (int insidehtml, 0); /* Flag to indicate we're amid HTML */ /* 0 = normal text */ #define HTML_IN_TAG 0x01 /* in <...> tag */ #define HTML_IN_ENDTAG 0x02 /* in tag */ #define HTML_IN_SPEC 0x04 /* in &...; special-char sequence */ #define HTML_IN_QUOTE 0x08 /* in quoted text within tag */ #define HTML_CHECKING_QUOTE 0x10 /* checking quoted text within tag */ #define HTML_IGNORE 0x20 /* in text to be ignored */ /* ...must be last, because we use */ /* ...the higher bits as a nesting */ /* ...counter */ #define HTML_ISIGNORED (~(HTML_IGNORE - 1)) /* Mask for testing ignore bits */ INIT (int terse, 0); /* NZ for "terse" mode */ INIT (int correct_verbose_mode, 0); /* NZ for "verbose" -a mode */ INIT (char tempfile[MAXPATHLEN], ""); /* Name of file we're spelling into */ INIT (int minword, MINWORD); /* Longest always-legal word */ INIT (int sortit, 1); /* Sort suggestions alphabetically */ INIT (int compoundflag, -1); /* How to treat compounds: see above */ INIT (int tryhardflag, -1); /* Always call tryveryhard */ INIT (char * currentfile, NULL); /* Name of current input file */ /* Odd numbers for math mode in LaTeX; even for LR or paragraph mode */ INIT (int math_mode, 0); /* P -- paragraph or LR mode * b -- parsing a \begin statement * e -- parsing an \end statement * r -- parsing a \ref type of argument. * m -- looking for a \begin{minipage} argument. */ INIT (char LaTeX_Mode, 'P'); #endif /* ISPELL_H_INCLUDED */ ispell-3.4.02/PaxHeaders.22185/README0000644000000000000000000000007410245122266013513 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/README0000444003214100001440000002650610245122266014570 0ustar00geofffaculty00000000000000 This is ispell version 3.3, an interactive spelling checker. Contents of this README file: What Is Ispell and Why Do I Want It? What's New in This Version? Where Can I Get Ispell? OK, How Do I Install It? Who Wrote Ispell? Where Do I Send Bug Reports? How Do I Reference Ispell in Scholarly Papers? Where Do I Get Dictionaries? How Long Does It Take to Make Dictionaries? Special Installation Notes for Certain Machines What About Ispell for MS-DOS? Note: this README file might not contain the latest information about ispell. For that information, visit the ispell Web page: http://www.lasr.cs.ucla.edu/geoff/ispell.html ------------------------------------------------------------------------ What Is Ispell and Why Do I Want It? Ispell is a fast screen-oriented spelling checker that shows you your errors in the context of the original file, and suggests possible corrections when it can figure them out. Compared to UNIX spell, it is faster and much easier to use. Ispell can also handle languages other than English. What's New in This Version? Ispell 3.3 offers improved support for international languages, improved deformatting, and better support for compilation on Windows systems. All known security holes have been closed. A number of small bugs are also fixed. Where Can I Get Ispell? Point your Web browser at the ispell home page: http://www.lasr.cs.ucla.edu/geoff/ispell.html The current version of ispell is available for Web download from www.lasr.cs.ucla.edu using the following URL: http://www.lasr.cs.ucla.edu/geoff/tars The latest version is always named "ispell-3.3.xx.tar.gz", where "xx" is the patch level. There are also sometimes files named "README-patchxx", which contain notes specific to a given version. A number of ftp mirror sites also store ispell. Check your favorite search engine for "ispell-3.3" to find a site near you. Ispell comes with English dictionaries. For other languages, visit the ispell dictionaries Web page at: http://www.lasr.cs.ucla.edu/geoff/ispell-dictionaries.html OK, How Do I Install It? Quick installation instructions for American English: 1) Download Ispell from http://www.lasr.cs.ucla.edu/geoff/ispell.html 2) gunzip ispell-3.3.xx.tar.gz 3) tar -xvf ispell-3.3.xx.tar 4) cd ispell-3.3.xx 5) Copy one of the sample local.h files to local.h: cp local.h.bsd local.h cp local.h.cygwin local.h cp local.h.linux local.h cp local.h.macos local.h cp local.h.solaris local.h or cp local.h.generic local.h 6) If you used the generic local.h file and are using a USG-style system (Linux, IRIX, HP-UX, Solaris, etc): Edit local.h and change: #undef USG to: #define USG 7) make all If you get compile errors in term.c, do step 6 (or undo it if you already did it). 8) make install Long installation instructions: (For installation on MS-DOS, see the section about MS-DOS at the end of this file.) Ispell is quite portable (thanks to many people). If you speak American English and have one of the pre-configured systems, follow the instructions above. For more complex installations, you will have to create a fancier local.h file. All customization of ispell, even for the Makefile, is done by creating or editing the file "local.h" to override the default definitions of certain variables. The most common change is to add or remove "#define USG" so that term.c will compile. The next most common changes will be to the LANGUAGES variable (to set the languages; see also the Makefiles in the various language subdirectories), CC (to choose gcc), and BINDIR through MAN45DIR (to control where ispell is installed). There are many other configuration parameters; see config.X for the complete list and further instructions. *DO NOT* make changes to config.X or to any of the Makefiles. Anything you define in "local.h" will override definitions in those files. The English-language dictionary comes in four sizes: small, medium, large, and extra-large. I recommend using the medium dictionary unless you are very short on space. The small and medium dictionaries have been hand-checked against a paper dictionary to improve their accuracy. This is not true of the two larger ones. The large and extra-large dictionaries contain less-frequently-used words and are known to have misspelling in them. Also, even a correct large dictionary can hide misspellings of short words because there is some similar word that nobody uses. (For example, the crossword-puzzle favorite "ort" can keep you from finding a place where you mistyped "or".) If you have a list of extra words (such as /usr/share/dict/words on some commercial Unixes), you can also choose to make a "plus" version, named by adding a plus sign to the size indication, to include that list in your dictionary. Because many modern computers don't have /usr/share/dict/words, the default dictionary is the "non-plus" version. After all edits, you are ready to compile ispell. Simply type "make all" to compile all the programs, put the dictionaries together, and build the hash file. If you get errors while compiling term.c, change the setting of "#define USG" in your local.h file and try again. After your first make completes, you are ready to install ispell. The standard "make install" will install ispell, the auxiliary programs and scripts, the manual page, and the dictionary hash file, all in the directories you have chosen for them. This usually has to be done as root, and on some systems you will not be able to redirect the output to a file. (If you're the careful sort, you'll check the output of "make -n install" first to be sure there are no hidden surprises.) If you don't want to install the dictionary-building tools, you can type "make partial-install" to install just the files needed to use ispell itself. As well as the standard "make clean" and "make realclean" targets, there is also a "make dictclean" target which will get rid of constructed dictionary files such as "english.med+". This is a separate target because of the time it takes to build dictionaries. Finally, there is a directory named "addons", which contains shar kits for ispell helper programs that were generously written by other people. These are not copyrighted or supported by the ispell maintainer. Contact the original authors (listed in README files in the kits) for more information. Who Wrote Ispell? Ispell is a very old program. The original was written in PDP-10 assembly in 1971, by R. E. Gorin. The C version was written by Pace Willisson of MIT. Walt Buehring of Texas Instruments added the emacs interface and posted it to the net. Geoff Kuenning added the international support and created the current release. Ken Stevens has maintained the Emacs interface (ispell.el) for many years. Many, many other people contributed to the current version; a partial list (with a much more detailed history) can be found in the file "Contributors". Where Do I Send Bug Reports? Most ispell bug reports, except bugs related to the emacs-lisp interface, should be sent to "ispell-bugs@itcorp.com". Bugs in the emacs interface (ispell.el) should be sent to "ispell-el-bugs@itcorp.com". If you're not sure which address to use, send your report to "ispell-bugs@itcorp.com" and I'll sort it out from there. Note that the bug aliases are not discussion lists; membership is limited. Bugs in add-on packages (found in the "addons" subdirectory) should not be sent to itcorp.com. Instead, send reports to the developers of those packages (see the README file for the package you are using). How Do I Reference Ispell in Scholarly Papers? There is no published paper on ispell, so if you make use of ispell in a fashion that requires a reference (e.g., using the dictionary as a word list in a research project), you are limited to an Internet reference. The full proper title is printed by "ispell -v": "International Ispell Version x.y.z". Please include the full version number in your reference so that people can discover the exact variant that you used; sometimes it's important. If you're feeling really nice, you can also credit me, Geoff Kuenning, as the author. Usually, you should also include a link to the ispell Web page: http://www.lasr.cs.ucla.edu/geoff/ispell.html so that readers of your paper can locate a copy of ispell if they wish. Where Do I Get Dictionaries? Ispell comes with American and British dictionaries. American-style spellings are the default. To get British spellings, copy the LANGUAGES and MASTERHASH definitions from config.X into your local.h, and then globally replace "american" with "british". For other languages, consult the file "languages/Where", which lists everything I know about. You can also check the ispell dictionaries page: http://www.lasr.cs.ucla.edu/geoff/ispell-dictionaries.html which contains pointers to all known dictionaries. As a general rule, if you use a dictionary that was not intended for ispell, or if you combine multiple dictionaries, you should use munchlist to reduce the size of the dictionary. If you create a dictionary of your own and make it available for ftp, please send a notification to ispell-bugs@itcorp.com so that I can add your dictionary to the ftp list. How Long Does It Take to Make Dictionaries? Long ago, making a big dictionary took hours. But on a modern machine, it should only take a few minutes. Special Installation Notes for Certain Machines: Although I have tried to avoid putting in specific machine dependencies as a general rule, some machine-specific #defines will be found at the end of config.X. If you get lots of warnings when compiling term.c, check to be sure that you have correctly defined SIGNAL_TYPE in your local.h. Some recent "internationalized" Unixes (such as HP, and anything using the GNU tools, such as Linux) vary the behavior of sort(1) based on an environment variable such as LANG, LOCALE, or LC_xxx. The symptom is that munchlist does not produce an optimal dictionary. The shell scripts try to protect against this by setting all of these variables to "C", but if your system uses different environment variables, you may have to do this by hand. If you get core dumps from the sort command (reported on HP systems building large German dictionaries), try adding the "-y" flag to the appropriate invocation of sort in the Makefile or in munchlist. This flag is only available on some systems. Some BSDI systems have a screwy sort command that uses -T to specify the record (as opposed to field) delimiter. You'll have to disable SORTTMP and enable MAKE_SORTTMP. What About Ispell for MS-DOS? Although the ispell maintainer does not support MS-DOS and Windows, a generous contributor, Eli Zaretskii, has added MS-DOS support. You can build ispell for MS-DOS with either EMX/GCC or DJGPP. See the file pc/README for compilation instructions. ispell-3.4.02/PaxHeaders.22185/term.c0000644000000000000000000000013213773270306013751 xustar0030 mtime=1609396422.003282125 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/term.c0000444003214100001440000004163113773270306015027 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: term.c,v 1.57 2020-12-30 22:33:41-08 geoff Exp $"; #endif /* * term.c - deal with termcap, and unix terminal mode settings * * Pace Willisson, 1983 * * Copyright 1987, 1988, 1989, 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, * Claremont, CA. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: term.c,v $ * Revision 1.57 2020-12-30 22:33:41-08 geoff * Get rid of an undeclared-function warning. This might not be * backward-compatible to very old systems. * * Revision 1.56 2020-10-26 11:39:55-07 geoff * Include header files needed for C99 function declarations. This probably * breaks backwards compatibility but I don't have time to research it and * add appropriate config.X options. Sigh. * * Revision 1.55 2015-02-08 00:35:41-08 geoff * Add POSIX termios support (thanks to Christian Weisgerber for the patch). * * Revision 1.54 2005-04-14 16:11:36-07 geoff * Correctly handle control-Z, including resetting the terminal. The * only remaining problem is that the screen isn't automatically * refreshed. (Doing the latter would either require major changes to * make the screen-refresh code callable from the signal handler, or * fixing GETKEYSTROKE to fail on signals. That's probably not hugely * hard but doing it portably probably is.) * * Revision 1.53 2005/04/14 14:38:23 geoff * Update license. Rename move/erase to avoid library conflicts. * * Revision 1.52 2001/09/06 00:30:28 geoff * Many changes from Eli Zaretskii to support DJGPP compilation. * * Revision 1.51 2001/07/25 21:51:46 geoff * Minor license update. * * Revision 1.50 2001/07/23 20:24:04 geoff * Update the copyright and the license. * * Revision 1.49 1999/01/07 01:22:53 geoff * Update the copyright. * * Revision 1.48 1994/10/25 05:46:11 geoff * Fix a couple of places where ifdefs were omitted, though apparently * harmlessly. * * Revision 1.47 1994/09/01 06:06:32 geoff * Change erasechar/killchar to uerasechar/ukillchar to avoid * shared-library problems on HP systems. * * Revision 1.46 1994/01/25 07:12:11 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include "config.h" #include "ispell.h" #include "proto.h" #include "msgs.h" #if defined(TERMIOS) #include #elif defined(USG) #include #else #ifndef __DJGPP__ #include #endif #endif #include #include #include void ierase P ((void)); void imove P ((int row, int col)); void inverse P ((void)); void normal P ((void)); void backup P ((void)); static int iputch P ((int c)); void terminit P ((void)); SIGNAL_TYPE done P ((int signo)); #ifdef SIGTSTP static SIGNAL_TYPE onstop P ((int signo)); #endif /* SIGTSTP */ void stop P ((void)); int shellescape P ((char * buf)); #ifdef USESH void shescape P ((char * buf)); #endif /* USESH */ static int termchanged = 0; #ifdef __DJGPP__ #include "pc/djterm.c" #endif void ierase () { if (cl) tputs (cl, li, iputch); else { if (ho) tputs (ho, 100, iputch); else if (cm) tputs (tgoto (cm, 0, 0), 100, iputch); tputs (cd, li, iputch); } } void imove (row, col) int row; int col; { tputs (tgoto (cm, col, row), 100, iputch); } void inverse () { tputs (so, 10, iputch); } void normal () { tputs (se, 10, iputch); } void backup () { if (BC) tputs (BC, 1, iputch); else (void) putchar ('\b'); } static int iputch (c) int c; { return putchar (c); } #if defined(TERMIOS) static struct termios sbuf; static struct termios osbuf; #elif defined(USG) static struct termio sbuf; static struct termio osbuf; #else static struct sgttyb sbuf; static struct sgttyb osbuf; #ifdef TIOCSLTC static struct ltchars ltc; static struct ltchars oltc; #endif #endif static SIGNAL_TYPE (*oldint) (); static SIGNAL_TYPE (*oldterm) (); #ifdef SIGTSTP static SIGNAL_TYPE (*oldttin) (); static SIGNAL_TYPE (*oldttou) (); static SIGNAL_TYPE (*oldtstp) (); #endif void terminit () { #ifdef TIOCPGRP int tpgrp; #else #ifdef TIOCGPGRP int tpgrp; #endif #endif #ifdef TIOCGWINSZ struct winsize wsize; #endif /* TIOCGWINSZ */ tgetent (termcap, getenv ("TERM")); termptr = termstr; BC = tgetstr ("bc", &termptr); cd = tgetstr ("cd", &termptr); cl = tgetstr ("cl", &termptr); cm = tgetstr ("cm", &termptr); ho = tgetstr ("ho", &termptr); nd = tgetstr ("nd", &termptr); so = tgetstr ("so", &termptr); /* inverse video on */ se = tgetstr ("se", &termptr); /* inverse video off */ if ((sg = tgetnum ("sg")) < 0) /* space taken by so/se */ sg = 0; ti = tgetstr ("ti", &termptr); /* terminal initialization */ te = tgetstr ("te", &termptr); /* terminal termination */ co = tgetnum ("co"); li = tgetnum ("li"); #ifdef TIOCGWINSZ if (ioctl (0, TIOCGWINSZ, (char *) &wsize) >= 0) { if (wsize.ws_col != 0) co = wsize.ws_col; if (wsize.ws_row != 0) li = wsize.ws_row; } #endif /* TIOCGWINSZ */ /* * Let the variables "LINES" and "COLUMNS" override the termcap * entry. Technically, this is a terminfo-ism, but I think the * vast majority of users will find it pretty handy. */ if (getenv ("COLUMNS") != NULL) co = atoi (getenv ("COLUMNS")); if (getenv ("LINES") != NULL) li = atoi (getenv ("LINES")); #if MAX_SCREEN_SIZE > 0 if (li > MAX_SCREEN_SIZE) li = MAX_SCREEN_SIZE; #endif /* MAX_SCREEN_SIZE > 0 */ #if MAXCONTEXT == MINCONTEXT contextsize = MINCONTEXT; #else /* MAXCONTEXT == MINCONTEXT */ if (contextsize == 0) #ifdef CONTEXTROUNDUP contextsize = (li * CONTEXTPCT + 99) / 100; #else /* CONTEXTROUNDUP */ contextsize = (li * CONTEXTPCT) / 100; #endif /* CONTEXTROUNDUP */ if (contextsize > MAXCONTEXT) contextsize = MAXCONTEXT; else if (contextsize < MINCONTEXT) contextsize = MINCONTEXT; #endif /* MAX_CONTEXT == MIN_CONTEXT */ /* * Insist on 2 lines for the screen header, 2 for blank lines * separating areas of the screen, 2 for word choices, and 2 for * the minimenu, plus however many are needed for context. If * possible, make the context smaller to fit on the screen. */ if (li < contextsize + 8 && contextsize > MINCONTEXT) { contextsize = li - 8; if (contextsize < MINCONTEXT) contextsize = MINCONTEXT; } if (li < MINCONTEXT + 8) (void) fprintf (stderr, TERM_C_SMALL_SCREEN, MINCONTEXT + 8); #ifdef SIGTSTP #ifdef TIOCPGRP retry: #endif /* SIGTSTP */ #endif /* TIOCPGRP */ #if defined(TERMIOS) if (!isatty (0)) { (void) fprintf (stderr, TERM_C_NO_BATCH); exit (1); } (void) tcgetattr (0, &osbuf); termchanged = 1; sbuf = osbuf; sbuf.c_lflag &= ~(ECHO | ECHOK | ECHONL | ICANON); sbuf.c_oflag &= ~(OPOST); sbuf.c_iflag &= ~(INLCR | IGNCR | ICRNL); sbuf.c_cc[VMIN] = 1; sbuf.c_cc[VTIME] = 1; (void) tcsetattr (0, TCSADRAIN, &sbuf); uerasechar = osbuf.c_cc[VERASE]; ukillchar = osbuf.c_cc[VKILL]; #elif defined(USG) if (!isatty (0)) { (void) fprintf (stderr, TERM_C_NO_BATCH); exit (1); } (void) ioctl (0, TCGETA, (char *) &osbuf); termchanged = 1; sbuf = osbuf; sbuf.c_lflag &= ~(ECHO | ECHOK | ECHONL | ICANON); sbuf.c_oflag &= ~(OPOST); sbuf.c_iflag &= ~(INLCR | IGNCR | ICRNL); sbuf.c_cc[VMIN] = 1; sbuf.c_cc[VTIME] = 1; (void) ioctl (0, TCSETAW, (char *) &sbuf); uerasechar = osbuf.c_cc[VERASE]; ukillchar = osbuf.c_cc[VKILL]; #endif #ifdef SIGTSTP #ifndef USG (void) sigsetmask (1<<(SIGTSTP-1) | 1<<(SIGTTIN-1) | 1<<(SIGTTOU-1)); #endif #endif #ifdef TIOCGPGRP if (ioctl (0, TIOCGPGRP, (char *) &tpgrp) != 0) { (void) fprintf (stderr, TERM_C_NO_BATCH); exit (1); } #endif #ifdef SIGTSTP #ifdef TIOCPGRP if (tpgrp != getpgrp(0)) /* not in foreground */ { #ifndef USG (void) sigsetmask (1 << (SIGTSTP - 1) | 1 << (SIGTTIN - 1)); #endif (void) signal (SIGTTOU, SIG_DFL); (void) kill (0, SIGTTOU); /* job stops here waiting for SIGCONT */ goto retry; } #endif #endif #if !defined(TERMIOS) && !defined(USG) (void) ioctl (0, TIOCGETP, (char *) &osbuf); #ifdef TIOCGLTC (void) ioctl (0, TIOCGLTC, (char *) &oltc); #endif termchanged = 1; sbuf = osbuf; sbuf.sg_flags &= ~ECHO; sbuf.sg_flags |= TERM_MODE; (void) ioctl (0, TIOCSETP, (char *) &sbuf); uerasechar = sbuf.sg_erase; ukillchar = sbuf.sg_kill; #ifdef TIOCSLTC ltc = oltc; ltc.t_suspc = -1; (void) ioctl (0, TIOCSLTC, (char *) <c); #endif #endif /* TERMIOS && USG */ if ((oldint = signal (SIGINT, SIG_IGN)) != SIG_IGN) (void) signal (SIGINT, done); if ((oldterm = signal (SIGTERM, SIG_IGN)) != SIG_IGN) (void) signal (SIGTERM, done); #ifdef SIGTSTP #ifndef USG (void) sigsetmask (0); #endif if ((oldttin = signal (SIGTTIN, SIG_IGN)) != SIG_IGN) (void) signal (SIGTTIN, onstop); if ((oldttou = signal (SIGTTOU, SIG_IGN)) != SIG_IGN) (void) signal (SIGTTOU, onstop); if ((oldtstp = signal (SIGTSTP, SIG_IGN)) != SIG_IGN) (void) signal (SIGTSTP, onstop); #endif if (ti) tputs (ti, 1, iputch); } /* ARGSUSED */ SIGNAL_TYPE done (signo) int signo; { if (tempfile[0] != '\0') (void) unlink (tempfile); if (termchanged) { if (te) tputs (te, 1, iputch); #if defined(TERMIOS) (void) tcsetattr (0, TCSADRAIN, &osbuf); #elif defined(USG) (void) ioctl (0, TCSETAW, (char *) &osbuf); #else (void) ioctl (0, TIOCSETP, (char *) &osbuf); #ifdef TIOCSLTC (void) ioctl (0, TIOCSLTC, (char *) &oltc); #endif #endif } exit (0); } #ifdef SIGTSTP static SIGNAL_TYPE onstop (signo) int signo; { if (termchanged) { imove (li - 1, 0); if (te) tputs (te, 1, iputch); #if defined(TERMIOS) (void) tcsetattr (0, TCSADRAIN, &osbuf); #elif defined(USG) (void) ioctl (0, TCSETAW, (char *) &osbuf); #else (void) ioctl (0, TIOCSETP, (char *) &osbuf); #ifdef TIOCSLTC (void) ioctl (0, TIOCSLTC, (char *) &oltc); #endif #endif } (void) fflush (stdout); (void) signal (signo, SIG_DFL); #ifndef USG (void) sigsetmask (sigblock (0) & ~(1 << (signo - 1))); #endif (void) kill (0, SIGSTOP); /* stop here until continued */ (void) signal (signo, onstop); if (termchanged) { #if defined(TERMIOS) (void) tcsetattr (0, TCSADRAIN, &sbuf); #elif defined(USG) (void) ioctl (0, TCSETAW, (char *) &sbuf); #else (void) ioctl (0, TIOCSETP, (char *) &sbuf); #ifdef TIOCSLTC (void) ioctl (0, TIOCSLTC, (char *) <c); #endif #endif if (ti) tputs (ti, 1, iputch); } } #endif #ifndef USESH #define NEED_SHELLESCAPE #endif /* USESH */ #ifndef REGEX_LOOKUP #define NEED_SHELLESCAPE #endif /* REGEX_LOOKUP */ void stop () { #ifdef SIGTSTP onstop (SIGTSTP); #else /* for System V and MSDOS */ imove (li - 1, 0); (void) fflush (stdout); #ifdef NEED_SHELLESCAPE if (getenv ("SHELL")) (void) shellescape (getenv ("SHELL")); else (void) shellescape ("sh"); #else shescape (""); #endif /* NEED_SHELLESCAPE */ #endif /* SIGTSTP */ } /* Fork and exec a process. Returns NZ if command found, regardless of ** command's return status. Returns zero if command was not found. ** Doesn't use a shell. */ #ifdef NEED_SHELLESCAPE int shellescape (buf) char * buf; { char * argv[100]; char * cp = buf; int i = 0; int termstat; /* parse buf to args (destroying it in the process) */ while (*cp != '\0') { while (*cp == ' ' || *cp == '\t') ++cp; if (*cp == '\0') break; argv[i++] = cp; while (*cp != ' ' && *cp != '\t' && *cp != '\0') ++cp; if (*cp != '\0') *cp++ = '\0'; } argv[i] = NULL; #if defined(TERMIOS) (void) tcsetattr (0, TCSADRAIN, &osbuf); #elif defined(USG) (void) ioctl (0, TCSETAW, (char *) &osbuf); #else (void) ioctl (0, TIOCSETP, (char *) &osbuf); #ifdef TIOCSLTC (void) ioctl (0, TIOCSLTC, (char *) &oltc); #endif /* TIOCSLTC */ #endif (void) signal (SIGINT, oldint); (void) signal (SIGTERM, oldterm); #ifdef SIGTSTP (void) signal (SIGTTIN, oldttin); (void) signal (SIGTTOU, oldttou); (void) signal (SIGTSTP, oldtstp); #endif if ((i = fork ()) == 0) { (void) execvp (argv[0], (char **) argv); _exit (123); /* Command not found */ } else if (i > 0) { while (wait (&termstat) != i) ; termstat = (termstat == (123 << 8)) ? 0 : -1; } else { (void) printf (TERM_C_CANT_FORK, MAYBE_CR (stderr)); termstat = -1; /* Couldn't fork */ } if (oldint != SIG_IGN) (void) signal (SIGINT, done); if (oldterm != SIG_IGN) (void) signal (SIGTERM, done); #ifdef SIGTSTP if (oldttin != SIG_IGN) (void) signal (SIGTTIN, onstop); if (oldttou != SIG_IGN) (void) signal (SIGTTOU, onstop); if (oldtstp != SIG_IGN) (void) signal (SIGTSTP, onstop); #endif #if defined(TERMIOS) (void) tcsetattr (0, TCSADRAIN, &sbuf); #elif defined(USG) (void) ioctl (0, TCSETAW, (char *) &sbuf); #else (void) ioctl (0, TIOCSETP, (char *) &sbuf); #ifdef TIOCSLTC (void) ioctl (0, TIOCSLTC, (char *) <c); #endif /* TIOCSLTC */ #endif if (termstat) { (void) printf (TERM_C_TYPE_SPACE); (void) fflush (stdout); #ifdef COMMANDFORSPACE i = GETKEYSTROKE (); if (i != ' ' && i != '\n' && i != '\r') (void) ungetc (i, stdin); #else while (GETKEYSTROKE () != ' ') ; #endif } return (termstat); } #endif /* NEED_SHELLESCAPE */ #ifdef USESH void shescape (buf) char * buf; { #ifdef COMMANDFORSPACE int ch; #endif #ifdef __DJGPP__ char curdir[MAXPATHLEN]; #endif #if defined(TERMIOS) (void) tcsetattr (0, TCSADRAIN, &osbuf); #elif defined(USG) (void) ioctl (0, TCSETAW, (char *) &osbuf); #else (void) ioctl (0, TIOCSETP, (char *) &osbuf); #ifdef TIOCSLTC (void) ioctl (0, TIOCSLTC, (char *) &oltc); #endif #endif #ifdef __DJGPP__ /* Don't erase the screen if they want to run a single command, * otherwise they will be unable to see its output. */ if (buf[0] == '\0') djgpp_restore_screen (); /* Change and restore the current directory, because it's a global * notion on MS-DOS/MS-Windows. */ getcwd (curdir, MAXPATHLEN); #endif (void) signal (SIGINT, oldint); (void) signal (SIGTERM, oldterm); #ifdef SIGTSTP (void) signal (SIGTTIN, oldttin); (void) signal (SIGTTOU, oldttou); (void) signal (SIGTSTP, oldtstp); #endif (void) system (buf); if (oldint != SIG_IGN) (void) signal (SIGINT, done); if (oldterm != SIG_IGN) (void) signal (SIGTERM, done); #ifdef SIGTSTP if (oldttin != SIG_IGN) (void) signal (SIGTTIN, onstop); if (oldttou != SIG_IGN) (void) signal (SIGTTOU, onstop); if (oldtstp != SIG_IGN) (void) signal (SIGTSTP, onstop); #endif #ifdef __DJGPP__ if (buf[0] == '\0') djgpp_ispell_screen (); chdir (curdir); #endif #if defined(TERMIOS) (void) tcsetattr (0, TCSADRAIN, &sbuf); #elif defined(USG) (void) ioctl (0, TCSETAW, (char *) &sbuf); #else (void) ioctl (0, TIOCSETP, (char *) &sbuf); #ifdef TIOCSLTC (void) ioctl (0, TIOCSLTC, (char *) <c); #endif #endif (void) printf (TERM_C_TYPE_SPACE); (void) fflush (stdout); #ifdef COMMANDFORSPACE ch = GETKEYSTROKE (); if (ch != ' ' && ch != '\n' && ch != '\r') (void) ungetc (ch, stdin); #else while (GETKEYSTROKE () != ' ') ; #endif } #endif ispell-3.4.02/PaxHeaders.22185/defmt.c0000644000000000000000000000013213773270305014100 xustar0030 mtime=1609396421.943281945 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/defmt.c0000444003214100001440000012166213773270305015161 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: defmt.c,v 1.65 2020-12-30 22:33:41-08 geoff Exp $"; #endif /* * defmt.c - Handle formatter constructs, mostly by scanning over them. * * This code originally resided in ispell.c, but was moved here to keep * file sizes smaller. * * Copyright (c), 1983, by Pace Willisson * * Copyright 1992, 1993, 1999, 2001, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The TeX code is originally by Greg Schaffer, with many improvements from * Ken Stevens. The nroff code is primarily from Pace Willisson, although * other people have improved it. */ /* * $Log: defmt.c,v $ * Revision 1.65 2020-12-30 22:33:41-08 geoff * Support SQUEEZE_STRINGS. * * Revision 1.64 2015-02-08 16:09:24-08 geoff * When skipping curly-braced environment arguments, allow nested curlies. * * Revision 1.63 2015-02-08 01:28:09-08 geoff * Keep track of how many dollar signs were used to enter math mode, so * that we only parse the same number on exit. * * Revision 1.62 2005-04-20 16:16:32-07 geoff * Use inpossibilities to deal with the case where uppercase SS in German * causes ambiguities. * * Revision 1.61 2005/04/14 14:38:23 geoff * Update license. * * Revision 1.60 2001/11/28 22:39:26 geoff * Add Ken Stevens's fix for newlines in \verb * * Revision 1.59 2001/09/06 00:30:29 geoff * Many changes from Eli Zaretskii to support DJGPP compilation. * * Revision 1.58 2001/08/01 22:15:56 geoff * When processing quoted strings inside HTML tags, don't handle * ampersand sequences unless the quoted string is being spell-checked. * That way, ampersands inside HREF links won't confuse the deformatter, * but ampersand sequence inside ALT= tags will be handled correctly. * Also, when skipping ampersand sequences inside quoted strings, give up * the search for the semicolon if the closing quote is hit. This change * makes us a bit more robust in the fact of HTML syntax errors. * * Revision 1.57 2001/07/25 21:51:47 geoff * Minor license update. * * Revision 1.56 2001/07/23 20:24:03 geoff * Update the copyright and the license. * * Revision 1.55 2000/08/22 10:52:25 geoff * Fix a whole bunch of signed/unsigned compiler warnings. * * Revision 1.54 2000/08/22 00:11:25 geoff * Add support for correct_verbose_mode. * * Revision 1.53 1999/11/04 08:16:54 geoff * Add a few more special TeX sequences * * Revision 1.52 1999/01/18 03:28:27 geoff * Turn many char declarations into unsigned char, so that we won't have * sign-extension problems. * * Revision 1.51 1999/01/07 01:57:53 geoff * Update the copyright. * * Revision 1.50 1999/01/03 01:46:28 geoff * Add support for external deformatters. * * Revision 1.49 1998/07/07 02:30:53 geoff * Implement the plus notation for adding to keyword lists * * Revision 1.48 1998/07/06 06:55:13 geoff * Generalize the HTML tag routines to be handy keyword lookup routines, * and fix some (but by no means all) of the TeX deformatting to take * advantage of these routines to allow a bit more flexibility in * processing private TeX commands. * * Revision 1.47 1998/07/06 05:34:10 geoff * Add a few more TeX commands * * Revision 1.46 1997/12/01 00:53:47 geoff * Add HTML support. Fix the "\ " bug again, this time (hopefully) right. * * Revision 1.45 1995/11/08 05:09:29 geoff * Add the new interactive mode ("askverbose"). * * Revision 1.44 1995/11/08 04:32:51 geoff * Modify the HTML support to be stylistically more consistent and to * interoperate more cleanly with the nroff and TeX modes. * * Revision 1.43 1995/10/25 04:05:31 geoff * html-mode code added by Gerry Tierney 14th of * Oct '95. * * Revision 1.42 1995/10/25 03:35:42 geoff * After skipping over a backslash sequence, make sure that we don't skip * over the first character of the following word. Also, support the * verbatim environment of LaTex. * * Revision 1.41 1995/08/05 23:19:47 geoff * Get rid of an obsolete comment. Add recognition of documentclass and * usepackage for Latex2e support. * * Revision 1.40 1995/03/06 02:42:43 geoff * Change TeX backslash processing so that it only assumes alpha * characters and the commonly-used "@" character are part of macro * names, and so that any other backslashed character (specifically * dollar signs) is skipped. * * Revision 1.39 1995/01/08 23:23:54 geoff * Fix typos in a couple of comments. * * Revision 1.38 1995/01/03 19:24:14 geoff * Add code to handle the LaTeX \verb command. * * Revision 1.37 1994/12/27 23:08:54 geoff * Fix a bug in TeX backslash processing that caused ispell to become * confused when it encountered an optional argument to a * double-backslash command. Be a little smarter about scanning for * curly-brace matches, so that we avoid missing a math-mode transition * during the scan. * * Revision 1.36 1994/10/25 05:46:34 geoff * Recognize a few more Latex commands: pagestyle, pagenumbering, * setcounter, addtocounter, setlength, addtolength, settowidth. * * Revision 1.35 1994/10/18 04:03:19 geoff * Add code to skip hex numbers if they're preceded by '0x'. * * Revision 1.34 1994/10/04 03:51:24 geoff * Modify the parsing so that TeX commands are ignored even within * comments, but do not affect the overall parsing state. (This is * slightly imperfect, in that some types of modality are ignored when * comments are entered. But it should solve nearly all the problems * with commented-out TeX commands.) This also fixes a couple of minor * bugs with TeX deformatting. * * Revision 1.33 1994/10/03 17:06:07 geoff * Remember to use contextoffset when reporting complete misses * * Revision 1.32 1994/08/31 05:58:41 geoff * Report the offset-within-line correctly in -a mode even if the line is * longer than BUFSIZ characters. * * Revision 1.31 1994/05/25 04:29:28 geoff * If two boundary characters appear in a row, consider it the end of the * word. * * Revision 1.30 1994/05/17 06:44:08 geoff * Add the new argument to all calls to good and compoundgood. * * Revision 1.29 1994/03/16 06:30:41 geoff * Don't lose track of math mode when an array environment is embedded. * * Revision 1.28 1994/03/15 05:31:57 geoff * Add TeX_strncmp, which allows us to handle AMS-TeX constructs like * \endroster without getting confused. * * Revision 1.27 1994/02/14 00:34:53 geoff * Pass length arguments to correct(). * * Revision 1.26 1994/01/25 07:11:25 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include #include "config.h" #include "ispell.h" #include "proto.h" #include "msgs.h" static unsigned char * skiptoword P ((unsigned char * bufp)); unsigned char * skipoverword P ((unsigned char * bufp)); void checkline P ((FILE * ofile)); static int TeX_math_end P ((unsigned char ** bufp)); static int TeX_math_begin P ((unsigned char ** bufp)); static int TeX_LR_begin P ((unsigned char ** bufp)); static int TeX_LR_check P ((int begin_p, unsigned char ** bufp)); static void TeX_skip_args P ((unsigned char ** bufp)); static int TeX_math_check P ((int cont_char, unsigned char ** bufp)); static void TeX_skip_parens P ((unsigned char ** bufp)); static void TeX_open_paren P ((unsigned char ** bufp)); static void TeX_skip_check P ((unsigned char ** bufp)); static int TeX_strncmp P ((unsigned char * a, char * b, int n)); int init_keyword_table P ((char * rawtags, char * envvar, char * deftags, int ignorecase, struct kwtable * keywords)); static int keyword_in_list P ((unsigned char * string, unsigned char * stringend, struct kwtable * keywords)); static int tagcmp P ((unsigned char ** a, unsigned char ** b)); #define ISTEXTERM(c) (((c) == TEXLEFTCURLY) || \ ((c) == TEXRIGHTCURLY) || \ ((c) == TEXLEFTSQUARE) || \ ((c) == TEXRIGHTSQUARE)) #define ISMATHCH(c) (((c) == TEXBACKSLASH) || \ ((c) == TEXDOLLAR) || \ ((c) == TEXPERCENT)) static int TeX_comment = 0; static int wordadjust; /* Stringchar difference in word len */ /* * The following variables are used to save the parsing state when * processing comments. This allows comments to be parsed without * affecting the overall nesting. */ static int save_math_mode; static char save_LaTeX_Mode; /* * The following variable indicates whether math mode was entered with * a single or double dollar sign. Each time math mode is entered * with dollar signs, it is shifted left by one bit, and it is shifted * right on math exit. If the low-order bit is a 1, math mode was * entered with a double dollar; otherwise it was entered with a * single dollar. Note that this is a kludge that breaks on illegal * syntax. */ static unsigned int math_mode_dollars = 0; /* * The following variables are used by the deformatter to keep * track of keywords that may indicate text to be ignored. */ static unsigned char * keywordbuf; /* Scratch buffer for keyword comparison */ static unsigned int maxkeywordlen; /* Length of longest keyword */ static unsigned char * skiptoword (bufp) /* Skip to beginning of a word */ unsigned char * bufp; { unsigned char * htmltagstart; /* Beginning of an HTML tag */ unsigned char * htmlsubfield = bufp; /* Ptr to start of subfield name */ while (*bufp && ((!isstringch (bufp, 0) && !iswordch (chartoichar (*bufp))) || isboundarych (chartoichar (*bufp)) || (tflag == DEFORMAT_TEX && ((math_mode & 1) || LaTeX_Mode != 'P')) || (insidehtml & (HTML_IN_SPEC | HTML_ISIGNORED)) != 0 || ((insidehtml & HTML_IN_TAG) != 0 && (insidehtml & (HTML_IN_QUOTE | HTML_CHECKING_QUOTE)) != (HTML_IN_QUOTE | HTML_CHECKING_QUOTE)) ) ) { /* * HTML deformatting */ if (tflag == DEFORMAT_SGML) { if ((insidehtml & HTML_IN_TAG) != 0 && *bufp == HTMLQUOTE) { if (insidehtml & HTML_IN_QUOTE) insidehtml &= ~(HTML_IN_QUOTE | HTML_CHECKING_QUOTE); else insidehtml |= HTML_IN_QUOTE; htmlsubfield = NULL; } else if ((insidehtml & (HTML_IN_TAG | HTML_IN_QUOTE)) == HTML_IN_TAG && *bufp == HTMLTAGEND) insidehtml &= ~(HTML_IN_TAG | HTML_IN_ENDTAG | HTML_CHECKING_QUOTE); /* * If we are checking an HTML file, we want to ignore any HTML * tags. These should start with a '<' and end with a '>', so * we simply skip over anything between these two symbols. If * we reach the end of the line before finding a matching '>', * we set 'insidehtml' appropriately. */ else if ((insidehtml & HTML_IN_TAG) == 0 && *bufp == HTMLTAGSTART) { insidehtml |= HTML_IN_TAG; bufp++; if (*bufp == HTMLSLASH) { bufp++; insidehtml |= HTML_IN_ENDTAG; } htmltagstart = bufp; /* * We found the start of an HTML tag. Skip to the end * of the tag. We assume that all tags are made up of * purely alphabetic characters. */ while (isalpha (*bufp)) bufp++; /* * Check to see if this is an ignored tag, and set * HTML_IGNORE properly. */ if (keyword_in_list (htmltagstart, bufp, &htmlignorelist)) { /* * Note that we use +/- here, rather than Boolean * operators. This is quite deliberate, because * it allows us to properly handle nested HTML * constructs that are supposed to be ignored. */ if (insidehtml & HTML_IN_ENDTAG) insidehtml -= HTML_IGNORE; else insidehtml += HTML_IGNORE; } htmlsubfield = NULL; if (bufp > htmltagstart) bufp--; } else if ((insidehtml & (HTML_IN_TAG | HTML_IN_QUOTE)) == HTML_IN_TAG) { if (htmlsubfield == NULL && isalpha (*bufp)) htmlsubfield = bufp; else if (htmlsubfield != NULL && !isalpha (*bufp)) { if (bufp != htmlsubfield && keyword_in_list (htmlsubfield, bufp, &htmlchecklist)) insidehtml |= HTML_CHECKING_QUOTE; htmlsubfield = NULL; } } /* * Skip over quoted entities such as """. These all * start with an ampersand and end with a semi-colon. We * do not need to worry about them extending over more * than one line. We also don't need to worry about them * being string characters, because the isstringch() test * above would have already broken us out of the enclosing * loop in that case. * * A complication is that quoted entities are only * interpreted in some quoted strings. For example, * they're valid in ALT= tags but not in HREF tags, where * ampersands have an entirely different meaning. We deal * with the problem by only interpreting HTMLSPECSTART if * we are checking the quoted string. */ else if ((insidehtml & HTML_IN_SPEC) != 0 || (*bufp == HTMLSPECSTART && ((insidehtml & HTML_CHECKING_QUOTE) || (insidehtml & HTML_IN_QUOTE) == 0))) { while (*bufp != HTMLSPECEND && *bufp != '\0') { if ((insidehtml & HTML_IN_QUOTE) && *bufp == HTMLQUOTE) { /* * The quoted string ended before the * ampersand sequence finished. The HTML is * probably incorrect, but it would be a * mistake to keep skipping until we reach the * next random semicolon. Instead, just stop * skipping right here. */ insidehtml &= ~(HTML_IN_QUOTE | HTML_CHECKING_QUOTE); break; } bufp++; } if (*bufp == '\0') insidehtml |= HTML_IN_SPEC; else insidehtml &= ~HTML_IN_SPEC; } } else if (tflag == DEFORMAT_TEX) /* TeX or LaTeX stuff */ { /* Odd numbers mean we are in "math mode" */ /* Even numbers mean we are in LR or */ /* paragraph mode */ if (*bufp == TEXPERCENT && LaTeX_Mode != 'v') { if (!TeX_comment) { save_math_mode = math_mode; save_LaTeX_Mode = LaTeX_Mode; math_mode = 0; LaTeX_Mode = 'P'; TeX_comment = 1; } } else if (math_mode & 1) { if ((LaTeX_Mode == 'e' && TeX_math_check('e', &bufp)) || (LaTeX_Mode == 'm' && TeX_LR_check(1, &bufp))) math_mode--; /* end math mode */ else { while (*bufp && !ISMATHCH(*bufp)) bufp++; if (*bufp == 0) break; if (TeX_math_end(&bufp)) math_mode--; } if (math_mode < 0) { (void) fprintf (stderr, DEFMT_C_TEX_MATH_ERROR, MAYBE_CR (stderr)); math_mode = 0; } } else { if (math_mode > 1 && *bufp == TEXRIGHTCURLY && (math_mode < (math_mode & 127) * 128)) math_mode--; /* re-enter math */ else if (LaTeX_Mode == 'm' || (math_mode && (math_mode >= (math_mode & 127) * 128) && (TeX_strncmp(bufp, "\\end", 4) == 0))) { if (TeX_LR_check(0, &bufp)) math_mode--; } else if (LaTeX_Mode == 'b' && TeX_math_check('b', &bufp)) { /* continued begin */ math_mode++; } else if (LaTeX_Mode == 'r') { /* continued "reference" */ TeX_skip_parens(&bufp); LaTeX_Mode = 'P'; } else if (LaTeX_Mode == 'v') { /* continued "verb" */ while (*bufp != save_LaTeX_Mode && *bufp != '\0') bufp++; if (*bufp != 0) LaTeX_Mode = 'P'; } else if (TeX_math_begin(&bufp)) /* checks references and */ /* skips \ commands */ math_mode++; } if (*bufp == 0) break; } else if (tflag == DEFORMAT_NROFF) /* nroff deformatting */ { if (*bufp == NRBACKSLASH) { switch ( bufp[1] ) { case 'f': if(bufp[2] == NRLEFTPAREN) { /* font change: \f(XY */ bufp += 5; } else { /* ) */ /* font change: \fX */ bufp += 3; } continue; case 's': /* size change */ bufp += 2; if (*bufp == '+' || *bufp == '-') bufp++; /* This looks weird 'cause we ** assume *bufp is now a digit. */ bufp++; if (isdigit (*bufp)) bufp++; continue; default: if (bufp[1] == NRLEFTPAREN) { /* extended char set */ /* escape: \(XX */ /* ) */ bufp += 4; continue; } else if (bufp[1] == NRSTAR) { if (bufp[2] == NRLEFTPAREN) bufp += 5; else bufp += 3; continue; } break; } } } /* * Skip hex numbers, but not if we're in non-terse askmode. * (In that case, we'd lose sync if we skipped hex.) */ if (*bufp == '0' && (bufp[1] == 'x' || bufp[1] == 'X') && (terse || !aflag)) { bufp += 2; while (isxdigit (*bufp)) bufp++; } else bufp++; } if (*bufp == '\0') { if (TeX_comment) { math_mode = save_math_mode; LaTeX_Mode = save_LaTeX_Mode; TeX_comment = 0; } } return bufp; } /* * Return a pointer to the end of a word. As a side effect, sets * wordadjust to reflect the difference between the true length of the * word in bytes and its apparent length in characters; this is used * for the SQUEEZE_STRINGS option. */ unsigned char * skipoverword (bufp) /* Return pointer to end of a word */ register unsigned char * bufp; /* Start of word -- MUST BE A REAL START */ { register unsigned char * lastboundary; register int scharlen; /* Length of a string character */ lastboundary = NULL; wordadjust = 0; for ( ; ; ) { if (*bufp == '\0') { if (TeX_comment) { math_mode = save_math_mode; LaTeX_Mode = save_LaTeX_Mode; TeX_comment = 0; } break; } else if (l_isstringch(bufp, scharlen, 0)) { bufp += scharlen; lastboundary = NULL; if (chartypes[defstringgroup].options & SQUEEZE_STRINGS) wordadjust += scharlen - 1; } /* ** Note that we get here if a character satisfies ** isstringstart() but isn't in the string table; this ** allows string characters to start with word characters. */ else if (iswordch (chartoichar (*bufp))) { bufp++; lastboundary = NULL; } else if (isboundarych (chartoichar (*bufp))) { if (lastboundary == NULL) lastboundary = bufp; else if (lastboundary == bufp - 1) break; /* Double boundary -- end of word */ bufp++; } else break; /* End of the word */ } /* ** If the word ended in one or more boundary characters, ** the address of the first of these is in lastboundary, and it ** is the end of the word. Otherwise, bufp is the end. */ return (lastboundary != NULL) ? lastboundary : bufp; } void checkline (ofile) FILE * ofile; { unsigned char * currentchar; /* Location in contextbufs */ register unsigned char * p; register unsigned char * endp; int hadlf; register int len; register int i; int ilen; unsigned char * wordstart; /* Where current word started */ currentchar = filteredbuf; len = strlen ((char *) filteredbuf) - 1; hadlf = filteredbuf[len] == '\n'; if (hadlf) { filteredbuf[len] = '\0'; contextbufs[0][len] = '\0'; } if (tflag == DEFORMAT_NROFF) { /* skip over .if */ if (*currentchar == NRDOT && (strncmp ((char *) currentchar + 1, "if t", 4) == 0 || strncmp ((char *) currentchar + 1, "if n", 4) == 0)) { copyout (¤tchar,5); while (*currentchar && myspace (chartoichar (*currentchar))) copyout (¤tchar, 1); } /* skip over .ds XX or .nr XX */ if (*currentchar == NRDOT && (strncmp ((char *) currentchar + 1, "ds ", 3) == 0 || strncmp ((char *) currentchar + 1, "de ", 3) == 0 || strncmp ((char *) currentchar + 1, "nr ", 3) == 0)) { copyout (¤tchar, 4); while (*currentchar && myspace (chartoichar (*currentchar))) copyout(¤tchar, 1); while (*currentchar && !myspace (chartoichar (*currentchar))) copyout(¤tchar, 1); if (*currentchar == 0) { if (!lflag && hadlf) (void) putc ('\n', ofile); return; } } } /* if this is a formatter command, skip over it */ if (tflag == DEFORMAT_NROFF && *currentchar == NRDOT) { while (*currentchar && !myspace (chartoichar (*currentchar))) { if (!aflag && !lflag) (void) putc (*currentchar, ofile); currentchar++; } if (*currentchar == 0) { if (!lflag && hadlf) (void) putc ('\n', ofile); return; } } for ( ; ; contextoffset -= wordadjust) { wordstart = skiptoword (currentchar); if (wordstart != currentchar) copyout (¤tchar, wordstart - currentchar); if (*currentchar == 0) break; p = ctoken; endp = skipoverword (currentchar); while (currentchar < endp && p < ctoken + sizeof ctoken - 1) *p++ = *currentchar++; *p = 0; if (strtoichar (itoken, ctoken, INPUTWORDLEN * sizeof (ichar_t), 0)) (void) fprintf (stderr, WORD_TOO_LONG ((char *) ctoken)); ilen = icharlen (itoken); if (lflag) { if (ilen > minword && !good (itoken, 0, 0, 0, 0) && !cflag && !compoundgood (itoken, 0)) (void) fprintf (ofile, "%s\n", (char *) ctoken); } else { if (aflag) { if (ilen <= minword) { /* matched because of minword */ if (!terse) { if (askverbose) (void) fprintf (ofile, "ok\n"); else { if (correct_verbose_mode) (void) fprintf (ofile, "* %s\n", ctoken ); else (void) fprintf (ofile, "*\n"); } } continue; } if (good (itoken, 0, 0, 0, 0)) { if (hits[0].prefix == NULL && hits[0].suffix == NULL) { /* perfect match */ if (!terse) { if (askverbose) (void) fprintf (ofile, "ok\n"); else { if (correct_verbose_mode) (void) fprintf (ofile, "* %s\n", ctoken ); else (void) fprintf (ofile, "*\n"); } } } else if (!terse) { /* matched because of root */ if (askverbose) (void) fprintf (ofile, "ok (derives from root %s)\n", (char *) hits[0].dictent->word); else { if (correct_verbose_mode) (void) fprintf (ofile, "+ %s %s\n", ctoken, hits[0].dictent->word); else (void) fprintf (ofile, "+ %s\n", hits[0].dictent->word); } } } else if (compoundgood (itoken, 0)) { /* compound-word match */ if (!terse) { if (askverbose) (void) fprintf (ofile, "ok (compound word)\n"); else { if (correct_verbose_mode) (void) fprintf (ofile, "- %s\n", ctoken); else (void) fprintf (ofile, "-\n"); } } } else { makepossibilities (itoken); if (inpossibilities (ctoken)) /* Kludge for German, etc. */ { /* might not be perfect match, but we'll lie */ if (!terse) { if (askverbose) (void) fprintf (ofile, "ok\n"); else { if (correct_verbose_mode) (void) fprintf (ofile, "* %s\n", ctoken ); else (void) fprintf (ofile, "*\n"); } } } else if (pcount) { /* ** print & or ?, ctoken, then ** character offset, possibility ** count, and the possibilities. */ if (askverbose) (void) fprintf (ofile, "how about"); else (void) fprintf (ofile, "%c %s %d %d", easypossibilities ? '&' : '?', (char *) ctoken, easypossibilities, (int) (wordstart - filteredbuf + contextoffset)); for (i = 0; i < MAXPOSSIBLE; i++) { if (possibilities[i][0] == 0) break; (void) fprintf (ofile, "%c %s", i ? ',' : ':', possibilities[i]); } (void) fprintf (ofile, "\n"); } else { /* ** No possibilities found for word TOKEN */ if (askverbose) (void) fprintf (ofile, "not found\n"); else (void) fprintf (ofile, "# %s %d\n", (char *) ctoken, (int) (wordstart - filteredbuf + contextoffset)); } } } else { if (!quit) correct (ctoken, sizeof ctoken, itoken, sizeof itoken, ¤tchar); } } if (!aflag && !lflag) (void) fprintf (ofile, "%s", (char *) ctoken); } if (!lflag && hadlf) (void) putc ('\n', ofile); } /* must check for \begin{mbox} or whatever makes new text region. */ static int TeX_math_end (bufp) unsigned char ** bufp; { if (**bufp == TEXDOLLAR) { if ((*bufp)[1] == TEXDOLLAR && (math_mode_dollars & 1) != 0) (*bufp)++; math_mode_dollars >>= 1; return 1; } else if (**bufp == TEXPERCENT) { if (!TeX_comment) { save_math_mode = math_mode; save_LaTeX_Mode = LaTeX_Mode; math_mode = 0; LaTeX_Mode = 'P'; TeX_comment = 1; } return 0; } /* processing extended TeX command */ (*bufp)++; if (**bufp == TEXRIGHTPAREN || **bufp == TEXRIGHTSQUARE) return 1; if (TeX_LR_begin (bufp)) /* check for switch back to LR mode */ return 1; if (TeX_strncmp (*bufp, "end", 3) == 0) /* find environment that is ending */ return TeX_math_check ('e', bufp); else return 0; } static int TeX_math_begin (bufp) unsigned char ** bufp; { int didskip = 0; if (**bufp == TEXDOLLAR) { math_mode_dollars <<= 1; if ((*bufp)[1] == TEXDOLLAR) { math_mode_dollars |= 1; (*bufp)++; } return 1; } while (**bufp == TEXBACKSLASH) { didskip = 1; (*bufp)++; /* check for null char here? */ if (**bufp == TEXLEFTPAREN || **bufp == TEXLEFTSQUARE) return 1; else if (!isalpha(**bufp) && **bufp != '@') { (*bufp)++; continue; } else if (TeX_strncmp (*bufp, "begin", 5) == 0) { if (TeX_math_check ('b', bufp)) return 1; else (*bufp)--; } else { TeX_skip_check (bufp); return 0; } } /* * Ignore references for the tib (1) bibliography system, that * is, text between a ``[.'' or ``<.'' and ``.]'' or ``.>''. * We don't care whether they match, tib doesn't care either. * * A limitation is that the entire tib reference must be on one * line, or we break down and check the remainder anyway. */ if ((**bufp == TEXLEFTSQUARE || **bufp == TEXLEFTANGLE) && (*bufp)[1] == TEXDOT) { (*bufp)++; while (**bufp) { if (*(*bufp)++ == TEXDOT && (**bufp == TEXRIGHTSQUARE || **bufp == TEXRIGHTANGLE)) return TeX_math_begin (bufp); } return 0; } else if (didskip) { /* * If we've skipped over anything, it's possible that we are * pointing at an important character. If so, we need to back up * one byte, because our caller will increment bufp. Yes, * this is a kludge. This whole TeX deformatter is a mess. */ (*bufp)--; } return 0; } static int TeX_LR_begin (bufp) unsigned char ** bufp; { if ((TeX_strncmp (*bufp, "mbox", 4) == 0) || (TeX_strncmp (*bufp, "makebox", 7) == 0) || (TeX_strncmp (*bufp, "text", 4) == 0) || (TeX_strncmp (*bufp, "intertext", 9) == 0) || (TeX_strncmp (*bufp, "fbox", 4) == 0) || (TeX_strncmp (*bufp, "framebox", 8) == 0)) math_mode += 2; else if ((TeX_strncmp (*bufp, "parbox", 6) == 0) || (TeX_strncmp (*bufp, "raisebox", 8) == 0)) { math_mode += 2; TeX_open_paren (bufp); if (**bufp) (*bufp)++; else LaTeX_Mode = 'r'; /* same as reference -- skip {} */ } else if (TeX_strncmp (*bufp, "begin", 5) == 0) return TeX_LR_check (1, bufp); /* minipage */ else return 0; /* skip tex command name and optional or width arguments. */ TeX_open_paren (bufp); return 1; } static int TeX_LR_check (begin_p, bufp) int begin_p; unsigned char ** bufp; { TeX_open_paren (bufp); if (**bufp == 0) /* { */ { LaTeX_Mode = 'm'; return 0; /* remain in math mode until '}' encountered. */ } else LaTeX_Mode = 'P'; if (strncmp ((char *) ++(*bufp), "minipage", 8) == 0) { TeX_skip_parens (bufp); if (**bufp) (*bufp)++; if (begin_p) { TeX_skip_parens (bufp); /* now skip opt. args if on this line. */ math_mode += 2; /* indicate minipage mode. */ math_mode += ((math_mode & 127) - 1) * 128; } else { math_mode -= (math_mode & 127) * 128; if (math_mode < 0) { (void) fprintf (stderr, DEFMT_C_LR_MATH_ERROR, MAYBE_CR (stderr)); math_mode = 1; } } return 1; } (*bufp)--; return 0; } /* Skips the begin{ARG}, and optionally up to two {PARAM}{PARAM}'s to * the begin if they are required. However, Only skips if on this line. */ static void TeX_skip_args (bufp) unsigned char ** bufp; { register int skip_cnt = 0; /* Max of 2. */ if (strncmp((char *) *bufp, "tabular", 7) == 0 || strncmp((char *) *bufp, "minipage", 8) == 0) skip_cnt++; if (strncmp((char *) *bufp, "tabular*", 8) == 0) skip_cnt++; TeX_skip_parens (bufp); /* Skip to the end of the \begin{} parens */ if (**bufp) (*bufp)++; else return; if (skip_cnt--) TeX_skip_parens (bufp); /* skip 1st {PARAM}. */ else return; if (**bufp) (*bufp)++; else return; if (skip_cnt) TeX_skip_parens (bufp); /* skip to end of 2nd {PARAM}. */ } static int TeX_math_check (cont_char, bufp) int cont_char; unsigned char ** bufp; { TeX_open_paren (bufp); /* Check for end of line, continue later. */ if (**bufp == 0) { LaTeX_Mode = (char) cont_char; return 0; } else LaTeX_Mode = 'P'; if (strncmp ((char *) ++(*bufp), "equation", 8) == 0 || strncmp ((char *) *bufp, "eqnarray", 8) == 0 || strncmp ((char *) *bufp, "displaymath", 11) == 0 || strncmp ((char *) *bufp, "picture", 7) == 0 || strncmp ((char *) *bufp, "gather", 6) == 0 || strncmp ((char *) *bufp, "align", 5) == 0 || strncmp ((char *) *bufp, "multline", 8) == 0 || strncmp ((char *) *bufp, "flalign", 7) == 0 || strncmp ((char *) *bufp, "alignat", 7) == 0 #ifdef IGNOREBIB || strncmp ((char *) *bufp, "thebibliography", 15) == 0 #endif || strncmp ((char *) *bufp, "verbatim", 8) == 0 || strncmp ((char *) *bufp, "math", 4) == 0) { (*bufp)--; TeX_skip_parens (bufp); return 1; } if (cont_char == 'b') TeX_skip_args (bufp); else TeX_skip_parens (bufp); return 0; } static void TeX_skip_parens (bufp) unsigned char ** bufp; { int nesting = 0; while (**bufp) { if (**bufp == '\\' && (*bufp)[1] != '\0') (*bufp)++; else if (**bufp == TEXLEFTCURLY) nesting++; else if (**bufp == TEXRIGHTCURLY) { --nesting; if (nesting <= 0) return; } (*bufp)++; } } static void TeX_open_paren (bufp) unsigned char ** bufp; { while (**bufp && **bufp != TEXLEFTCURLY && **bufp != TEXDOLLAR) { if (**bufp == '\\' && (*bufp)[1] != '\0') (*bufp)++; (*bufp)++; } } static void TeX_skip_check (bufp) unsigned char ** bufp; { unsigned char * endp; int skip_ch; for (endp = *bufp; isalpha(*endp) || *endp == '@'; endp++) ; if (keyword_in_list (*bufp, endp, &texskip1list)) { TeX_skip_parens (bufp); if (**bufp == 0) LaTeX_Mode = 'r'; } else if (keyword_in_list (*bufp, endp, &texskip2list)) /* skip two args. */ { TeX_skip_parens (bufp); if (**bufp == 0) /* Only skips one {} if not on same line. */ LaTeX_Mode = 'r'; else /* Skip second arg. */ { (*bufp)++; TeX_skip_parens (bufp); if (**bufp == 0) LaTeX_Mode = 'r'; } } else if (TeX_strncmp (*bufp, "verb", 4) == 0) { skip_ch = (*bufp)[4]; *bufp += 5; while (**bufp != skip_ch && **bufp != '\0') (*bufp)++; /* skip to end of verb field when not in a comment or math field */ if (**bufp == 0 && !TeX_comment && !(math_mode & 1)) { LaTeX_Mode = 'v'; save_LaTeX_Mode = skip_ch; } } else { /* Optional tex arguments sometimes should and ** sometimes shouldn't be checked ** (eg \section [C Programming] {foo} vs ** \rule [3em] {0.015in} {5em}) ** SO -- we'll always spell-check it rather than make a ** full LaTeX parser. */ /* Must look at the space after the command. */ while (isalpha(**bufp) || **bufp == '@') (*bufp)++; /* ** Our caller expects to skip over a single character. So we ** need to back up by one. Ugh. */ (*bufp)--; } } /* * TeX_strncmp is like strncmp, except that it returns inequality if * the following character of a is alphabetic. We do not use * iswordch here because TeX itself won't normally accept * nonalphabetics (except maybe on ISO Latin-1 installations? I'll * have to look into that). As a special hack, because LaTeX uses the * @ sign so much, we'll also accept that character. * * Properly speaking, the @ sign should be settable in the hash file * header, but I doubt that it varies, and I don't want to change the * syntax of affix files right now. * * Incidentally, TeX_strncmp uses unequal signedness for its arguments * because that's how it's always called, and it's easier to do one * typecast here than lots of casts in the calls. */ static int TeX_strncmp (a, b, n) unsigned char * a; /* Strings to compare */ char * b; /* ... */ int n; /* Number of characters to compare */ { int cmpresult; /* Result of calling strncmp */ cmpresult = strncmp ((char *) a, b, n); if (cmpresult == 0) { if (isascii (a[n]) && isalpha (a[n])) return 1; /* Force inequality if alpha follows */ } return cmpresult; } /* * Set up a table of keywords to be treated specially. The input is * "rawtags", which is a comma-separated list of keywords to be * inserted into the table. If rawtags is null, the environment * variable "envvar" is consulted; if this isn't set, the list in * "deftags" is used instead. * * If either rawtags or the contents of envvar begins with a + sign, * then this value is appended to the string in deftags, rather than * replacing it. This effect is cumulative. Thus, there are the * following possibilities: * * rawtags envvar deftags result * xxx * * xxx * +xxx yyy * xxx,yyy * +xxx +yyy zzz xxx,yyy,zzz * null yyy * yyy * null +yyy zzz yyy,zzz * null null zzz zzz * * The result of this routine is the initialization of a "struct * kwtable" that can be passed to keyword_in_list for lookup purposes. * Before the first time this routine is called, the "kwlist" pointer * in the struct kwtable must be set to NULL, to indicate that the * structure is uninitialized. * * Returns nonzero if the list has already been initialized, zero if * all is well. */ int init_keyword_table (rawtags, envvar, deftags, ignorecase, keywords) char * rawtags; /* Comma-separated list of tags to look up */ char * envvar; /* Environment variable containing tag list */ char * deftags; /* Default tag list */ int ignorecase; /* NZ to ignore case in keyword matching */ struct kwtable * keywords; /* Where to put the keyword table */ { char * end; /* End of current tag */ char * envtags; /* Tags from envvar */ unsigned char ** nextkw; /* Next keyword-table entry */ char * start; /* Start of current tag */ char * wlist; /* Modifiable copy of raw list */ unsigned int wsize; /* Size of wlist */ if (keywords->kwlist != NULL) return 1; envtags = (envvar == NULL) ? NULL : getenv (envvar); if (rawtags != NULL && rawtags[0] != '+') { envtags = NULL; deftags = NULL; } if (envtags != NULL && envtags[0] != '+') deftags = NULL; /* * Allocate space for the modifiable tag list. This may * over-allocate by up to 2 bytes if the "+" notation is used. */ wsize = 0; if (rawtags != NULL) wsize += strlen (rawtags) + 1; if (envtags != NULL) wsize += strlen (envtags) + 1; if (deftags != NULL) wsize += strlen (deftags) + 1; wlist = malloc (wsize); if (wlist == NULL) { (void) fprintf (stderr, DEFMT_C_NO_SPACE, MAYBE_CR (stderr)); exit (1); } wlist[0] = '\0'; if (rawtags != NULL) { if (rawtags[0] == '+') rawtags++; strcpy (wlist, rawtags); } if (envtags != NULL) { if (envtags[0] == '+') envtags++; if (wlist[0] != '\0') strcat (wlist, ","); strcat (wlist, envtags); } if (deftags != NULL) { if (wlist[0] != '\0') strcat (wlist, ","); strcat (wlist, deftags); } /* * Count the keywords and allocate space for the pointers. */ keywords->numkw = 1; keywords->forceupper = ignorecase; for (end = wlist; *end != '\0'; ++end) { if (*end == ',' || *end == ':') ++keywords->numkw; } keywords->kwlist = (unsigned char **) malloc (keywords->numkw * sizeof keywords->kwlist[0]); if (keywords->kwlist == NULL) { fprintf (stderr, DEFMT_C_NO_SPACE, MAYBE_CR (stderr)); exit (1); } end = wlist; nextkw = keywords->kwlist; keywords->maxlen = 0; keywords->minlen = 0; while (nextkw < keywords->kwlist + keywords->numkw) { for (start = end; *end != '\0' && *end != ',' && *end != ':'; end++) ; *end = '\0'; if (ignorecase) chupcase ((unsigned char *) start); if (end == start) --keywords->numkw; else { *nextkw++ = (unsigned char *) start; if ((unsigned) (end - start) > keywords->maxlen) keywords->maxlen = end - start; if (keywords->minlen == 0 || (unsigned) (end - start) < keywords->minlen) keywords->minlen = end - start; } end++; } qsort ((char *) keywords->kwlist, keywords->numkw, sizeof keywords->kwlist[0], (int (*) P ((const void *, const void *))) tagcmp); if (keywords->maxlen > maxkeywordlen) { maxkeywordlen = keywords->maxlen; if (keywordbuf != NULL) free (keywordbuf); keywordbuf = (unsigned char *) malloc ((maxkeywordlen + 1) * sizeof keywordbuf[0]); if (keywordbuf == NULL) { fprintf (stderr, DEFMT_C_NO_SPACE, MAYBE_CR (stderr)); exit(1); } } return 0; } /* * Decide whether a given keyword is in a list of those that need * special treatment. The list of tags is so small that there's * little point in being fancy, but the code given to me used a binary * search and it seemed silly to throw it away. * * Returns nonzero if the keyword is in the chosen list. */ static int keyword_in_list (str, strend, keywords) unsigned char * str; /* String to be tested (not null-terminated) */ unsigned char * strend; /* Character following end of test string */ struct kwtable * keywords; /* Table of keywords to be searched */ { int cmpresult; /* Result of string comparison */ unsigned int i; /* Current binary-search position */ int imin; /* Bottom of binary search */ int imax; /* Top of binary search */ i = strend - str; if (i < keywords->minlen || i > keywords->maxlen) return 0; strncpy ((char *) keywordbuf, (char *) str, i); keywordbuf[i] = '\0'; if (keywords->forceupper) chupcase (keywordbuf); /* * Binary search through the tags list */ imin = 0; imax = keywords->numkw - 1; while (imin <= imax) { i = (imin + imax) >> 1; cmpresult = strcmp ((char *) keywordbuf, (char *) keywords->kwlist[i]); if (cmpresult == 0) return 1; else if (cmpresult > 0 ) imin = i + 1; else imax = i - 1; } return 0; /* Not a tag to be ignored */ } /* * Compare two pointed-to strings */ static int tagcmp (a, b) unsigned char ** a; /* Strings to be compared */ unsigned char ** b; /* ... */ { return strcmp ((char *) *a, (char *) *b); } ispell-3.4.02/PaxHeaders.22185/exp_table.h0000644000000000000000000000007410233541507014747 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/exp_table.h0000444003214100001440000000611510233541507016016 0ustar00geofffaculty00000000000000#ifndef EXP_TABLE_H_INCLUDED #define EXP_TABLE_H_INCLUDED /* * $Id: exp_table.h,v 1.3 2005/04/26 22:40:07 geoff Exp $ */ /* * Note: this header file was written by Edward Avis. Thus, it is not * distributed under the same license as the rest of ispell. */ /* * $Log: exp_table.h,v $ * Revision 1.3 2005/04/26 22:40:07 geoff * Add double-inclusion protection. * * Revision 1.2 2005/04/14 15:19:37 geoff * Reformat to be more consistent with ispell style. * * Revision 1.1 2002/07/02 00:06:50 geoff * Initial revision * */ /* * Provides the exp_table type, which stores the expansions of a word. * Use it like this: * * int i; * struct exp_table t; * exp_table_init (&t, "paint"); * add_expansion_copy (&t, "painted", mask0); * add_expansion_copy (&t, "painting", mask1); * add_expansion_copy (&t, "painter", mask2); * for (i = 0; i < num_expansions (&t); i++) * printf("expansion: %s\n", get_expansion (&t, i)); * exp_table_empty (&t); * * where mask0 is a MASKTYPE with the flags used to add 'ed' set, * mask1 gives the flags for 'ing', etc. * * Note that allocating the struct itself is up to you, but you * should initialize it with exp_table_init() before use and call * exp_table_empty() before you free it. */ /* * The structure itself. Normally, it is better to use the accessors * below rather than access the structure directly. */ struct exp_table { char ** exps; /* Table of expansions */ MASKTYPE * flags; /* Flags used to get the expansions */ int size; /* Current number of expansions */ int max_size; /* Maximum number of expansions */ ichar_t * orig_word; /* Root word that flags were applied to */ }; /* * Initialize a struct exp_table. After initialization the number of * expansions will be zero. Pass in the original word from which the * expansions are generated - this will be stored by reference. */ extern void exp_table_init (struct exp_table * e, ichar_t * orig_name); /* Return the original word in an expansion. */ extern const ichar_t * get_orig_word (const struct exp_table * e); /* Return expansion number i (numbered from zero). */ extern const char * get_expansion (const struct exp_table * e, int i); /* Return the flags used to get expansion number i. */ extern MASKTYPE get_flags (const struct exp_table * e, int i); /* Return number of expansions in the table. */ extern int num_expansions (const struct exp_table * e); /* Add a new expansion to the list, if it is not already in there. * Returns true iff the expansion was added. Specify the result of * the expansion and the flags that were used. Takes a copy of the * string passed in. */ extern int add_expansion_copy (struct exp_table * e, const char * s, MASKTYPE flags[]); /* * Empty the table of expansions, freeing any resources allocated. * Returns a pointer to the now empty struct. */ extern struct exp_table * exp_table_empty (struct exp_table * e); /* Dump the contents of a table to stderr, for debugging. */ extern void exp_table_dump (const struct exp_table * e); #endif /* EXP_TABLE_H_INCLUDED */ ispell-3.4.02/PaxHeaders.22185/xgets.c0000644000000000000000000000007410227500137014126 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/xgets.c0000444003214100001440000001175010227500137015176 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: xgets.c,v 1.28 2005/04/14 14:38:23 geoff Exp $"; #endif /* * Copyright 1987, 1988, 1989, 1992, 1993, 1999, 2001, Geoff Kuenning, * Claremont, CA. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: xgets.c,v $ * Revision 1.28 2005/04/14 14:38:23 geoff * Update license. * * Revision 1.27 2002/02/06 05:58:03 geoff * Janos Mandli: trim trailing whitespace from include-file names * * Revision 1.26 2001/07/25 21:51:46 geoff * Minor license update. * * Revision 1.25 2001/07/23 20:24:04 geoff * Update the copyright and the license. * * Revision 1.24 1999/01/18 03:28:47 geoff * Get of a warning message caused by poor style. * * Revision 1.23 1999/01/07 01:23:01 geoff * Update the copyright. * * Revision 1.22 1994/09/16 04:48:34 geoff * Be sure to deliver newlines to the caller, so that it can tell whether * or not a complete line was read. * * Revision 1.21 1994/01/25 07:12:22 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include "config.h" #include "ispell.h" #include "proto.h" #include char * xgets P ((char * string, int size, FILE * stream)); #ifndef MAXINCLUDEFILES #define MAXINCLUDEFILES 1 /* maximum number of new files in stack */ #endif /* * xgets () acts just like gets () except that if a line matches * "&Include_File&" xgets () will start reading from the * file . * * Andrew Vignaux -- andrew@vuwcomp Fri May 8 16:40:23 NZST 1987 * modified * Mark Davies -- mark@vuwcomp Mon May 11 22:38:10 NZST 1987 */ char * xgets (str, size, stream) char str[]; int size; FILE * stream; { #if MAXINCLUDEFILES == 0 return fgets (str, size, stream); #else static char * Include_File = DEFINCSTR; static int Include_Len = 0; static FILE * F[MAXINCLUDEFILES+1]; static FILE ** current_F = F; char * s = str; int c; /* read the environment variable if we havent already */ if (Include_Len == 0) { char * env_variable; if ((env_variable = getenv (INCSTRVAR)) != NULL) Include_File = env_variable; Include_Len = strlen (Include_File); /* initialise the file stack */ *current_F = stream; } for ( ; ; ) { c = '\0'; if ((s - str) + 1 < size && (c = getc (*current_F)) != EOF) { *s++ = (char) c; if (c != '\n') continue; } *s = '\0'; /* end of line */ if (c == EOF) { if (current_F == F) /* if end of standard input */ { if (s == str) return (NULL); } else { (void) fclose (*(current_F--)); if (s == str) continue; } } if (incfileflag != 0 && strncmp (str, Include_File, (unsigned int) Include_Len) == 0) { char * file_name = str + Include_Len; if (*file_name != '\0') { char* p = file_name + strlen (file_name) - 1; while (p >= file_name && isspace (*p)) { *p = '\0'; --p; } } if (current_F - F < MAXINCLUDEFILES && *file_name != '\0') { FILE * f; if ((f = fopen (file_name, "r")) != NULL) *(++current_F) = f; } s = str; continue; } break; } return (str); #endif } ispell-3.4.02/PaxHeaders.22185/Makepatch0000644000000000000000000000007410233564152014454 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/Makepatch0000555003214100001440000001674610233564152015541 0ustar00geofffaculty00000000000000: Use /bin/sh # # # Copyright 1992, 1993, 1999, 2001, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # Make an ispell patch kit. This is not a clever script, # just a handy one. # # Usage: # USAGE="Usage: Makepatch [-n] [-d destdir] [-o file] ... [new-files]" # # destdir is the directory in which the kits and patches are kept. # # new-files are any new files to be added to the distribution. # # The -n switch suppresses RCS updates, so that the patch can be # tested. # # The -o switch can be used to limit patching to certain files. # This is useful to control the size of patches. Version.h is # always patched. This switch can appear more than once. # # $Log: Makepatch,v $ # Revision 1.21 2005/04/27 01:18:34 geoff # Work around idiotic POSIX incompatibilies in tail. # # Revision 1.20 2005/04/14 14:38:23 geoff # Update license. # # Revision 1.19 2001/07/25 21:51:47 geoff # Minor license update. # # Revision 1.18 2001/07/23 20:24:02 geoff # Update the copyright and the license. # # Revision 1.17 1999/01/07 01:58:06 geoff # Update the copyright. # # Revision 1.16 1994/11/01 05:54:33 geoff # When doing a partial run, update the fields code in the right RCS # directory. # # Revision 1.15 1994/11/01 05:27:14 geoff # Change the special code for handling the fields routines to reflect my # latest source-tree reorganization. # # Revision 1.14 1994/05/18 02:56:48 geoff # Correctly detect dictionary files for context selection # # Revision 1.13 1994/05/17 06:37:27 geoff # Add the -o switch, to help handle overly-large patches. Remember to # return a success status at the end (rcsdiff can return a nonzero # status). # # Revision 1.12 1994/02/08 06:03:56 geoff # Don't expect a comma after version number (it makes patch barf) # # Revision 1.11 1994/01/25 07:11:15 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # destdir=kits baserelease=3.1 trialrun= files= partialrun=false nl=' ' while [ $# -gt 0 ] do case "$1" in -d) destdir="$2" shift; shift ;; -n) trialrun=echo shift ;; -o) files="$files $2" partialrun=true shift; shift ;; -*) echo "$USAGE" 1>&2 exit 1 ;; *) break ;; esac done allfiles=`Makekit -e` if $partialrun then : else files="$allfiles" fi [ -d "$destdir" ] || mkdir "$destdir" # # Because some cretin decided to break backwards compatibility in # tail, we'll use sed to achieve the effect of "tail -1". # if [ -r "$destdir/Patch${baserelease}.01" ] then lastpatch=`ls $destdir/Patch${baserelease}.?? | sed -n -e '$p' \ | sed "s;$destdir/Patch${baserelease}.;;"` else lastpatch=00 fi patchno=`expr $lastpatch + 1` case "$patchno" in [1-9]) patchno=0$patchno ;; esac patchfile="$destdir/Patch${baserelease}.$patchno" case "$trialrun" in echo) patchfile="${patchfile}-test" ;; esac lastpatchid=`echo Patch${baserelease}.$lastpatch | sed 's/\./_/g'` patchid=`echo Patch${baserelease}.$patchno | sed 's/\./_/g'` echo 'Index: version.h' > "$patchfile" prereq=`co -r$lastpatchid -p RCS/version.h \ | egrep 'International Ispell Version' \ | sed -e 's/^.*International Ispell Version //' -e 's/ .*$//'` echo "Prereq: $prereq" >> "$patchfile" echo "" >> "$patchfile" patchlevel=`egrep "International Ispell Version $baserelease" version.h \ | sed -e "s/^.*Version $baserelease\.//" -e 's/ .*$//'` case "$patchlevel" in $patchno) ;; $lastpatch) $trialrun co -l version.h # Note this requires System V date command! date=`date +%D` co -p -q version.h \ | sed "/International/s;$baserelease.$lastpatch ../../..;$baserelease.$patchno $date;" \ | case "$trialrun" in '') cat > version.h ;; echo) echo 'Edit version.h to produce:' egrep 'International Ispell Version' ;; esac ;; *) echo "Sorry, I can't figure out what level you're patching!" 1>&2 exit 1 ;; esac lastrev=`rlog -h version.h | sed -n 's/head:[ ]*//p'` if $partialrun then $trialrun rcs -N$patchid:$lastpatchid \ `echo $allfiles | tr ' ' "$nl" \ | sed '/^fields.[ch3]$/s;^;'"$HOME/src/local/fields/;"` fi case "$trialrun" in '') rcs -N$patchid:$lastrev version.h rcsdiff -r$lastpatchid -r$patchid version.h >> "$patchfile" ;; echo) echo rcs -N$patchid:$lastrev version.h rcsdiff -r$lastpatchid version.h >> "$patchfile" ;; esac for basefile in $files do case "$basefile" in fields.[ch3]) rcsfile=$HOME/src/local/fields/RCS/$basefile,v ;; *) rcsfile=`rlog -R $basefile` ;; esac lastrev=`rlog -h $rcsfile | sed -n 's/head:[ ]*//p'` case "$basefile" in version.h) ;; *) $trialrun rcs -N$patchid:$lastrev $rcsfile case "$trialrun" in '') changes=`rcsdiff -r$lastpatchid -r$patchid $rcsfile \ $basefile 2>/dev/null \ | sed 1q` ;; echo) changes=`rcsdiff -r$lastpatchid $rcsfile $basefile \ 2>/dev/null \ | sed 1d` ;; esac case "$changes" in '') ;; *) case "$basefile" in languages/english/*.[0-9]) context= ;; *) context=-u ;; esac echo "" >> "$patchfile" echo "Index: $basefile" >> "$patchfile" echo "" >> "$patchfile" case "$trialrun" in '') rcsdiff $context -r$lastpatchid -r$patchid \ $rcsfile $basefile \ >> "$patchfile" ;; echo) rcsdiff $context -r$lastpatchid $rcsfile \ $basefile \ >> "$patchfile" ;; esac ;; esac esac done # # Do new files # for basefile do echo "" >> "$patchfile" echo "Index: $basefile" >> "$patchfile" echo "" >> "$patchfile" diff -c /dev/null $basefile | sed "s;/dev/null;$basefile;" >> "$patchfile" done exit 0 ispell-3.4.02/PaxHeaders.22185/pc0000644000000000000000000000013213776416114013165 xustar0030 mtime=1610226764.421065341 30 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/pc/0000755003214100001440000000000013776416114014315 5ustar00geofffaculty00000000000000ispell-3.4.02/pc/PaxHeaders.22185/cfgmain.sed0000644000000000000000000000007407340316074015342 xustar0030 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/pc/cfgmain.sed0000444003214100001440000000105707340316074016411 0ustar00geofffaculty00000000000000/^ *\$\$SORTTMP/i\ -e 's@/munch\\$$\\$$@/mu$$$$@g' \\\ -e 's@/faff\\$$\\$$@/fa$$$$@g' \\\ -e 's@/sset\\$$\\$$\\.@/se$$$$@g' \\ /^ *while \[ "X\$\$LANGUAGES" != X \]/i\ [ -r languages/english/Makefile.orig ] \\\ || (cd languages/english; mv -f Makefile Makefile.orig; \\\ ../../pc/cfglang.sed Makefile.orig > Makefile); \\ /^ cd languages\/$$dir; \\/a\ [ -r Makefile.orig ] \\\ || (mv -f Makefile Makefile.orig; \\\ ../../pc/cfglang.sed Makefile.orig > Makefile); \\ /^ijoin.o:/i\ term.o: pc/djterm.c ispell-3.4.02/pc/PaxHeaders.22185/README0000644000000000000000000000007410235255672014124 xustar0030 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/pc/README0000444003214100001440000003264210235255672015177 0ustar00geofffaculty00000000000000 How to build Ispell on MS-DOS ----------------------------- This directory includes files necessary to build Ispell on MS-DOS and MS-Windows systems. Two environments are supported: EMX/GCC and DJGPP; they both generate 32-bit protected-mode programs and therefore aren't afflicted by most of the MS-DOS memory-related limitations. The EMX setup does not currently support building the dictionaries, so you will need to either build the dictionaries with DJGPP tools or get them elsewhere. The DJGPP executables will also run on all versions of MS-Windows (3.x, 9x, ME, W2K, XP, and NT4) as DOS console applications. 1. Building Ispell with EMX/GCC ---------------------------- You will only need the basic EMX development tools to compile Ispell. After unzipping the source archive, invoke the MAKEEMX.BAT batch file, like so: pc\makeemx This generates ispell.exe and the following auxiliary programs: buildhas.exe icombine.exe ijoin.exe Install the programs anywhere along your PATH. See the section named "Environment Variables" for information on environment variables used by the MS-DOS port of Ispell. 2. Building Ispell (no dictionaries) with DJGPP -------------------------------------------- If you only need to compile Ispell without building the dictionaries, use the MAKE-DJ.BAT batch file: pc\make-dj You will need the standard DJGPP development environment (djdevNNN.zip, gccNNNNb.zip, bnuNNNb.zip) and the DJGPP port of GNU Bison (bsnNNNb.zip) for the above to work. After the build is finished, read the section below about environment variables and install the executables and the dictionaries as you see fit. 3. Building Ispell and the dictionaries with DJGPP ----------------------------------------------- In addition to the standard development environment, you will need additional tools to build Ispell and the dictionaries. If you are building on Windows 2000 or XP, make sure to download and install the latest djdevNNN.zip and the latest ports of all the utilities mentioned below; old binaries might be incompatible with the DOS emulation that is part of Windows 2K/XP. Here's the list of packages you will need: a. A port of Unix-like shell. The only shell that was used successfully to build Ispell on MS-DOS is the port of Bash, which should be available from DJGPP archives: ftp://ftp.delorie.com/pub/djgpp/current/v2gnu/bshNNNb.zip If you are thinking about using Stewartson's `ms_sh', don't: its method of passing long command lines is incompatible with DJGPP, and it will crash and burn on complex shell scripts. b. A DJGPP port of GNU Make 3.79 or later. This is available from DJGPP archives at the following URL: ftp://ftp.delorie.com/pub/djgpp/current/v2gnu/makNNNb.zip Note that ports of GNU Make prior to 3.75 didn't support a Unix-like shell, so you won't be able to build Ispell with them. c. A DJGPP port of GNU Fileutils, GNU Textutils and GNU Sh-utils, also available from DJGPP archives: ftp://ftp.delorie.com/pub/djgpp/current/v2gnu/filNNNb.zip ftp://ftp.delorie.com/pub/djgpp/current/v2gnu/txtNNNb.zip ftp://ftp.delorie.com/pub/djgpp/current/v2gnu/shlNNNb.zip In all of these URLs, NNN is a version number. If there is more than one ported version, get the latest one. The build process doesn't need *all* of the programs from these packages, so if you are short on disk space, you should be able to get away with these programs (I hope I didn't forget some): Fileutils: rm, mv, chmod, install, mkdir, ln, cp, touch, ls Textutils: cat, head, tail, sort, comm, wc, join, uniq Sh-utils: echo, expr, false, true d. GNU Sed (sedNNNb.zip from the DJGPP archives). e. GNU Awk (or any other port of Awk). Gawk is available from the DJGPP site above (v2gnu/gwkNNNb.zip). f. GNU Bison (bsnNNNb.zip from the DJGPP site). g. GNU Grep (grepNNb.zip from the DJGPP site). h. ctags and etags (for the `TAGS' and `tags' targets of the Makefile). These are available from the Emacs distribution, also on the DJGPP archive site above (v2gnu/emNNNNb.zip). While you probably can find quite a few different ports of the above utilities, I would generally advise against using anything but the DJGPP ports, since the Makefiles and the shell scripts depend on long command lines and will most probably break otherwise. DJGPP ports are a coherent set of tools which will work together well and ensure that the Makefiles and the scripts work as advertised. Here is what you should do to build Ispell: 1) Install the above utilities anywhere along your PATH. Make sure that you don't have any other executable called `sh' either in /bin (if you have such a directory) or anywhere else along your PATH *prior* to the directory where you installed the bash port. When Make runs, it will invoke the first program named `sh' that it finds in /bin or along the PATH, and you need to ensure that the right program is called. 2) Review the options set in pc/local.djgpp and change them as you see fit. Some things that you might consider changing are the pathnames of the standard directories, the dictionaries that will be built (see below), the backup extension ("~" by default), and the dictionaries you want to build. 3) By default, the American medium dictionary is built. I recommend building the ``plus'' version, but it requires an extra dictionary that is copyrighted. However, you should be able to find it on any Unix or GNU/Linux box, usually in the file /usr/dict/words or /usr/share/dict/words. If you do decide to build a ``plus'' version of the dictionary, be sure to put its full path in the EXTRADICTS variable in the file local.djgpp (default: "c:/usr/lib/words". 4) Set the TMPDIR environment variable to point to a place that has at least 20MB of free space, for the temporary files produced by the dictionary build process. This is especially important to those who point TMPDIR to a RAM drive, since these tend to be much smaller than 20MB. 5) Type these commands: pc\configdj make This will run for some time, depending on the dictionaries that you've chosen to build. The default setup builds a non-plus version of a medium-sized american dictionary, and should take about 1/2 a minute on a reasonably fast PC. Note that on MS-DOS the build time does not depend so much on the dictionary size as it does on Unix: it takes less than 2 minutes for a 2.4GHz PC to build the extra-large plus version with a 200KB /usr/dict/words file. I believe the reason for this is that the build process is much more I/O-bound on MS-DOS than it is on Unix, since MS-DOS pipes are simulated with disk files. If pc/configdj.bat complains that it runs out of environment space, enlarge the environment available to COMMAND.COM (or whatever your interactive command processor is). When the dictionaries are built, you might see error messages, about ``Improper links'', like so: c:/djgpp/bin/ln: cannot create symbolic link `./english.0' \ to `../english/english.0': Improper link (EXDEV) You can safely disregard these messages: they are due to the fact that MS-DOS doesn't support symbolic links. The Makefile already has a provision for alternative methods, which are automatically used in case of failures and which do work on MS-DOS. Another error message that you might see is something like this: Word 'U.S.A' contains illegal characters This means that some of the words in the EXTRADICT dictionary are incompatible with Ispell, and Ispell is ignoring them when it builds hashed dictionary. (The file `/usr/dict/words' from Solaris machines is known to have this problem.) The rest of the words are OK and will be used by Ispell, so here, too, you don't have to do anything about the error message. 6) After Make finishes, install the programs and the dictionaries as you see fit. The dictionary files you need to install are the files with a .hash extension in the subdirectories of languages/ directory (e.g. languages/american/amermedx.hash), the file languages/english/english.aff, and the documentation files ispell.1, ispell.5, fields.3, and english.5. If you say "make install", Make should do this automatically. 7) If you need to use some of the shell scripts (such as iwhich and Makekit), you will need to edit them to replace the first which says: : Use /bin/sh to say this instead: #!/bin/sh 4. Dictionary names ---------------- The filenames used for the dictionaries on Unix are too long for MS-DOS, and will cause filename clashes or failed programs. Therefore, the MS-DOS configuration script for DJGPP edits the Makefiles to change these names as follows: americansml -> amersml americanmed -> amermed americanlrg -> amerlrg americanxlg -> amerxlg altamersml -> altasml altamermed -> altamed altamerlrg -> altalrg altamerxlg -> altaxlg britishsml -> britsml britishmed -> britmed britishlrg -> britlrg britishxlg -> britxlg In addition, the `+' character (which is invalid in MS-DOS filenames) is converted into an `x', and if the `+' is at the end of the extension, it is moved into the first 8 characters of the basename. Thus, americanlrg+.hash is converted into amerlrgx.hash and american.sml+ into americax.sml: american.sml+ -> americax.sml american.med+ -> americax.med american.lrg+ -> americax.lrg american.xlg+ -> americax.xlg british.sml+ -> britishx.sml british.med+ -> britishx.med british.lrg+ -> britishx.lrg british.xlg+ -> britishx.xlg These DOSified filenames are the ones that you should use if you decide to change the dictionaries generated by the build process. The easiest way to know what are the DOS names of the different dictionaries is to look at the edited Makefiles in languages/ subdirectories after you build Ispell once for the default dictionaries. 5. Environment variables --------------------- Ispell uses environment variables to make it easier to support different installations. Most of these variables tell Ispell where to look for its hashed and private dictionaries. These variables are documented on the ispell.1 man page and in the Info docs for Ispell. Below is the list of DOS-specific environment variables that are not covered by the Ispell docs: ISPELL_OPTIONS - the default options to pass to Ispell. These are passed to Ispell as if they were typed by you before all the options you actually mentioned on the Ispell command line. Since Ispell parses options left to right, options from the command line may override those in `ISPELL_OPTIONS' variable. ISPELL_DICTDIR - the directory where Ispell will look for the alternate hashed dictionary file. The default dictionary pathname is built into Ispell when it is compiled (see the definition of LIBDIR and DEFHASH on local.h file, local.djgpp or local.emx), but you can set this variable, which will allow you to name alternate dictionaries relative to the directory named by it, avoiding a long pathname. ISPELL_HOME - replaces HOME on Unix systems. This is where Ispell looks for a personal dictionary if it is given as a relative pathname. ISPELL_COLORS - the colors which will be used by Ispell for the normal and "standout" text. By default, these are the normal and inverse video colors, but you may set them to any colors you like. The color descriptor is a pair of numbers separated by a dot; the first number is the color text attribute that will be set for the normal text, and the second is the attribute for the "standout" text (the misspelled words). The text color attributes are the usual PC background/foreground definitions. My favorite setting is this: set ISPELL_COLORS=0x1e.0x74 which sets the normal colors to yellow on blue and the "standout" colors to red on white. The color descriptor is parsed by a call to `strtoul' library function, so you can use octal and hex numbers as well as decimal ones. This color feature is only supported by the DJGPP port of Ispell. LINES - the size of the screen to be used by Ispell. Although this is not a DOS-specific variable, it does have a DOS-specific effect on the DJGPP port of Ispell: if the value of this variable is different from the current screen size, Ispell will set the screen size to the size given by LINES (and restore the original size when it exits or shells out to DOS). The following sizes are supported by the DJGPP port on a standard VGA display: 25, 28, 35, 40, 43 and 50 lines. If you want to run Ispell in some other non-standard screen size, set the display to that size before running Ispell and set LINES to that size. Enjoy, Eli Zaretskii ispell-3.4.02/pc/PaxHeaders.22185/configdj.bat0000644000000000000000000000007407340316160015510 xustar0030 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/pc/configdj.bat0000444003214100001440000000054207340316160016555 0ustar00geofffaculty00000000000000@echo off echo Configuring Ispell for DJGPP... update pc/local.djgpp local.h if not exist Makefile.orig ren Makefile Makefile.orig sed -f pc/cfgmain.sed Makefile.orig > Makefile if "%TMPDIR%"=="" set TMPDIR=. set PATH_SEPARATOR=: set TEST_FINDS_EXE=y rem if not exist %SYSROOT%\tmp\nul md %SYSROOT%\tmp echo You are now ready to run Make :End ispell-3.4.02/pc/PaxHeaders.22185/local.emx0000644000000000000000000000007410235252354015043 xustar0030 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/pc/local.emx0000444003214100001440000000463310235252354016115 0ustar00geofffaculty00000000000000/* * Local.h for MSDOS emx */ #define CC "gcc" #define MSDOS #define BINDIR "c:/ispell/bin" #define LIBDIR "c:/ispell/lib" #define ELISPDIR "c:/ispell/lib/emacs/site-el" #define TEXINFODIR "c:/ispell/info" #define MAN1DIR "c:/ispell/man" #define MAN4DIR "c:/ispell/man" #define LANGUAGES "{american,MASTERDICTS=american.med+,HASHFILES=amerimed+.has,EXTRADICT=c:/ispell/dict/words} {deutsch,DICTALWAYS=deutsch.sml,DICTOPTIONS=}" /* above only for Makefiles not for ispell! */ #define SORTTMP "-e '/!!SORTTMP!!/s/=.*$/=/'" #define MAKE_SORTTMP "" #include #include #include #undef NO8BIT #define HAS_RENAME #define REGLIB "-lregexp" #define DEFPDICT "_" #define DEFPAFF "words" #define OLDPDICT "_" #define OLDPAFF "words" #define TEMPNAME "isXXXXXX" #define REGEX_LOOKUP #define REGCTYPE char * #define REGCMP(re,str) regcomp (str,(char *) 0) #define REGEX(re, str, dummy) regexec (re, str, dummy, dummy, dummy, dummy, \ dummy, dummy, dummy, dummy, dummy, dummy) #define REGFREE(re) (void)0 #define EGREPCMD "grep386 -E" #define WORDS "c:/ispell/dict/words" #define MAXNAMLEN 12 /* basename + "." + extension */ #ifdef MSDOS #define MAXEXTLEN 4 /* max. extension length including '.' */ #define MAXBASENAMELEN 8 /* max. base filename length without ext */ #define MAXARGS 100 /* max. number of arguments passed to * ispell by OPTIONVAR */ #endif /* MSDOS */ #define TRUNCATEBAK #define INPUTWORDLEN 100 /* word accepted from a file + 1; dflt: 100 */ #define MAXAFFIXLEN 20 /* amount a word might be extended; dflt: 20 */ #define MASKBITS 32 /* # of affix flags; dflt: 32 */ #define MAXSTRINGCHARS 100 /* # of "string" chars in affix file; dflt: 100 */ #define MAXSTRINGCHARLEN 10 /* max. length of a "string" char; dflt: 10 */ #define USESH #define DEFTEXFLAG 1 #define MINIMENU #define PIECEMEAL_HASH_WRITES #define GETKEYSTROKE() getch () #define HOME "ISPELL_HOME" #define OPTIONVAR "ISPELL_OPTIONS" #define LIBRARYVAR "ISPELL_DICTDIR" #define PDICTHOME "c:" #define HASHSUFFIX ".has" #define STATSUFFIX ".stt" #define COUNTSUFFIX ".cnt" #define MASKTYPE_STRING "long" #define SIGNAL_TYPE_STRING "void" ispell-3.4.02/pc/PaxHeaders.22185/cfglang.sed0000644000000000000000000000007410235255672015342 xustar0030 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/pc/cfglang.sed0000444003214100001440000000112410235255672016404 0ustar00geofffaculty00000000000000#!/bin/sed -f # # Fix up file names which are either invalid on MSDOS, or clash with each # other in the restricted 8+3 file-name space # s/americansml/amersml/g s/americanmed/amermed/g s/americanlrg/amerlrg/g s/americanxlg/amerxlg/g s/altamersml/altasml/g s/altamermed/altamed/g s/altamerlrg/altalrg/g s/altamerxlg/altaxlg/g s/britishsml/britsml/g s/britishmed/britmed/g s/britishlrg/britlrg/g s/britishxlg/britxlg/g s/\(..*\)-alt\./alt\1./g s/+\.hash/x.hash/g s/\([^.]\)\.\([^.+][^.+]*\)+/\1x.\2/g s/americanx/americax/g # # Make sure Bash uses Unix-style PATH # /^SHELL *=/i\ PATH_SEPARATOR=: ispell-3.4.02/pc/PaxHeaders.22185/djterm.c0000644000000000000000000000007410235260075014666 xustar0030 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/pc/djterm.c0000444003214100001440000002522410235260075015737 0ustar00geofffaculty00000000000000#ifndef lint static char DJGPP_Rcs_Id[] = "$Id"; #endif /* * djterm.c - DJGPP-specific terminal driver for Ispell * * Eli Zaretskii , 1996, 2001 * * Copyright 1996, Geoff Kuenning, Granada Hills, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: djterm.c,v $ * Revision 1.4 2005/05/01 23:03:25 geoff * Updates from Eli Zaretskii. * * Revision 1.3 2005/04/13 23:54:23 geoff * Update license. * * Revision 1.2 2001/09/06 00:33:35 geoff * Make the license consistent, and do some style cleanups. * * Revision 1.1 2001/09/01 06:40:21 geoff * As received from Eli * */ /* ** DJGPP currently doesn't support Unixy ioctl directly, so we ** have to define minimal support here via the filesystem extensions. */ #include #include #include #include #include #include static struct text_info txinfo; static unsigned char * saved_screen; static unsigned char ispell_norm_attr, ispell_sout_attr; /* These declarations are on , but as of DJGPP v2.03 they are ifdefed away. To accomodate for both old and new versions, where some of the TIOC* commands might be supported, we override any possible definitions of those commands, but provide declarations of structures they use only if they are not provided by the library. */ #ifdef TIOCGWINSZ #undef TIOCGWINSZ #else struct winsize { unsigned short ws_row; unsigned short ws_col; unsigned short ws_xpixel; unsigned short ws_ypixel; }; #endif #ifdef TIOCGETP #undef TIOCGETP #else struct sgttyb { char sg_ispeed; char sg_ospeed; char sg_erase; char sg_kill; short sg_flags; }; #endif #undef IOCPARM_MASK #undef IOC_OUT #undef IOC_IN #undef IOC_INOUT #define IOCPARM_MASK 0x7f #define IOC_OUT 0x40000000 #define IOC_IN 0x80000000 #define IOC_INOUT (IOC_IN|IOC_OUT) #undef _IOR #undef _IOW #undef _IOWR #define _IOR(x,y,t) (IOC_OUT|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y) #define _IOW(x,y,t) (IOC_IN|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y) #define _IOWR(x,y,t) (IOC_INOUT|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y) #undef TIOCGPGRP #undef TIOCSETP #undef CBREAK #undef ECHO /* These are the only ones we support here. */ #define TIOCGWINSZ _IOR('t', 104, struct winsize) #define TIOCGPGRP _IOR('t', 119, int) #define TIOCGETP _IOR('t', 8, struct sgttyb) #define TIOCSETP _IOW('t', 9, struct sgttyb) #define CBREAK 0x00000002 #define ECHO 0x00000008 /* This will be called by low-level I/O functions. */ static int djgpp_term (__FSEXT_Fnumber func, int *retval, va_list rest_args) { int fhandle = va_arg (rest_args, int); /* ** We only support ioctl on STDIN and write on STDOUT/STDERR. */ if (func == __FSEXT_ioctl && fhandle == fileno (stdin) && isatty (fhandle)) { int cmd = va_arg (rest_args, int); switch (cmd) { case TIOCGWINSZ: { struct winsize *winfo = va_arg (rest_args, struct winsize *); winfo->ws_row = ScreenRows (); winfo->ws_col = ScreenCols (); winfo->ws_xpixel = 1; winfo->ws_ypixel = 1; *retval = 0; break; } case TIOCGPGRP: *retval = 0; break; case TIOCGETP: { struct sgttyb * gtty = va_arg (rest_args, struct sgttyb *); gtty->sg_ispeed = gtty->sg_ospeed = 0; /* unused */ gtty->sg_erase = K_BackSpace; gtty->sg_kill = K_Control_U; gtty->sg_flags = 0; /* unused */ *retval = 0; break; } case TIOCSETP: *retval = 0; break; default: *retval = -1; break; } return 1; } else if (func == __FSEXT_write && (fhandle == fileno (stdout) || fhandle == fileno (stderr)) && isatty (fhandle) && termchanged) { /* ** Cannot write the output as is, because it might include ** TABS. We need to expand them into suitable number of spaces. */ int col; int dummy; char * buf = va_arg (rest_args, char *); size_t buflen = va_arg (rest_args, size_t); char * local_buf; char * s; char * d; if (!buf) { errno = EINVAL; *retval = -1; return 1; } *retval = buflen; /* `_write' expects number of bytes written */ local_buf = (char *) alloca (buflen+8+1); /* 8 for TAB, 1 for '\0' */ ScreenGetCursor (&dummy, &col); for (s = buf, d = local_buf; buflen--; s++) { if (*s == '\0') /* `cputs' treats '\0' as end of string */ { *d = *s; cputs (local_buf); putch (*s); d = local_buf; col++; } else if (*s == '\t') { *d++ = ' '; col++; while (col % 8) { *d++ = ' '; col++; } *d = '\0'; cputs (local_buf); d = local_buf; } else { *d++ = *s; if (*s == '\r') col = 0; else if (*s != '\n') col++; } } if (d > local_buf) { *d = '\0'; cputs (local_buf); } return 1; } else return 0; } /* This is called before `main' to install our terminal handler. */ static void __attribute__((constructor)) djgpp_ispell_startup (void) { __FSEXT_set_function (fileno (stdin), djgpp_term); __FSEXT_set_function (fileno (stdout), djgpp_term); __FSEXT_set_function (fileno (stderr), djgpp_term); } /* DJGPP-specific screen initialization and deinitialization. */ static void djgpp_init_terminal (void) { if (li == 0) { /* ** On MSDOS/DJGPP platforms, colors are used for normal and ** inverse-video displays. The colors and screen size seen ** at program startup are saved, to be restored before exit. ** The screen contents are also saved and restored. */ char * ispell_colors; gettextinfo (&txinfo); saved_screen = (unsigned char *) malloc ( txinfo.screenwidth * txinfo.screenheight * 2); if (saved_screen) ScreenRetrieve (saved_screen); /* ** Let the user specify their favorite colors for normal ** and standout text, like so: ** ** set ISPELL_COLORS=0x1e.0x74 ** se so */ ispell_colors = getenv ("ISPELL_COLORS"); if (ispell_colors != NULL) { char * next; unsigned long coldesc = strtoul (ispell_colors, &next, 0); if (next == ispell_colors || coldesc > UCHAR_MAX) ispell_colors = NULL; else { char * endp; ispell_norm_attr = (unsigned char) coldesc; coldesc = strtoul (next + 1, &endp, 0); if (endp == next + 1 || coldesc > UCHAR_MAX) ispell_colors = NULL; else ispell_sout_attr = (unsigned char) coldesc; } } if (ispell_colors == NULL) { /* Use dull B&W color scheme */ ispell_norm_attr = LIGHTGRAY + (BLACK << 4); ispell_sout_attr = BLACK + (LIGHTGRAY << 4); } } } static void djgpp_restore_screen (void) { if (li != txinfo.screenheight) _set_screen_lines (txinfo.screenheight); textmode (txinfo.currmode); textattr (txinfo.attribute); gotoxy (1, txinfo.screenheight); clreol (); } static void djgpp_deinit_term (void) { termchanged = 0; /* so output uses stdio again */ printf ("\n"); /* in case some garbage is pending */ fflush (stdout); if (saved_screen) { ScreenUpdate (saved_screen); gotoxy (txinfo.curx, txinfo.cury); } } static void djgpp_ispell_screen () { fflush (stdout); if (li != txinfo.screenheight) _set_screen_lines (li); textattr (ispell_norm_attr); } static int djgpp_column; static int djgpp_row; char * tgoto (char * cmd, int col, int row) { djgpp_column = col; djgpp_row = row; return "\2"; } char * tputs (const char * cmd, int cnt, int (*func)(int)) { fflush (stdout); if (!cmd) abort (); switch (*cmd) { case '\1': /* erase */ clrscr (); break; case '\2': /* move */ gotoxy (djgpp_column + 1, djgpp_row + 1); break; case '\3': /* stand-out */ textattr (ispell_sout_attr); break; case '\4': /* end stand-out */ textattr (ispell_norm_attr); break; case '\5': /* backup */ gotoxy (wherex () - cnt, wherey ()); break; case '\6': /* terminal init */ djgpp_ispell_screen (); clrscr (); break; case '\7': /* terminal termination */ djgpp_restore_screen (); djgpp_deinit_term (); break; default: abort (); } } int tgetent (char * buf, const char * term_name) { djgpp_init_terminal (); } char * tgetstr (const char * cmd, char ** buf) { static struct emulated_cmd { char *external_name; char *internal_code; } commands[] = { { "cl", "\1" }, { "cm", "\2" }, { "so", "\3" }, { "se", "\4" }, { "bc", "\5" }, { "ti", "\6" }, { "te", "\7" }, }; int i; for (i = 0; i < sizeof (commands) / sizeof (commands[0]); i++) { if (strcmp (cmd, commands[i].external_name) == 0) return commands[i].internal_code; } return NULL; } int tgetnum (const char * cmd) { if (cmd && strcmp (cmd, "co") == 0) return 80; else if (cmd && strcmp (cmd, "li") == 0) return 24; return -1; } ispell-3.4.02/pc/PaxHeaders.22185/local.djgpp0000644000000000000000000000007410235260075015355 xustar0030 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/pc/local.djgpp0000444003214100001440000002760010235260075016426 0ustar00geofffaculty00000000000000/* * Written by Eli Zaretskii * * This is local.h file suitable for compiling Ispell on MS-DOS systems * with version 2.x of DJGPP port of GNU C/C++ compiler. * * $Id: local.djgpp,v 1.4 2005/05/01 23:03:25 geoff Exp $ * */ /* * WARNING WARNING WARNING * * This file is *NOT* a normal C header file! Although it uses C * syntax and is included in C programs, it is also processed by shell * scripts that are very stupid about format. * * Do not try to use #if constructs to configure this file for more * than one configuration. Do not place whitespace after the "#" in * "#define". Do not attempt to disable lines by commenting them out. * Do not use backslashes to reduce the length of long lines. * None of these things will work the way you expect them to. * * WARNING WARNING WARNING */ /* ** Things that normally go in a Makefile. Define these just like you ** might in the Makefile, except you should use #define instead of ** make's assignment syntax. Everything must be double-quoted, and ** (unlike make) you can't use any sort of $-syntax to pick up the ** values of other definitions. */ #define CC "gcc" #define CFLAGS "-O2 -g" #define YACC "bison -y" /* ** LINK - MS-DOS generally doesn't support links, so use copy instead. */ #define LINK "cp -p" /* ** TERMLIB - DJGPP doesn't have one, it uses direct screen writes. */ #define TERMLIB "" /* ** Where to install various components of ispell. BINDIR contains ** binaries. LIBDIR contains hash tables and affix files. MAN1DIR ** and MAN4DIR will hold the chapter-1 and chapter-4 manual pages, ** respectively. ** ** If you intend to use multiple dictionary files, I would suggest ** LIBDIR be a directory that will contain nothing else, so sensible ** names can be constructed for the -d option without conflict. ** ** The magic string "/dev/env/FOO" expands at run time into the value ** of the environment variable FOO. DJDIR is defined by the startup ** code of every DJGPP program to point to the root of the DJGPP ** installation tree. */ #define BINDIR "/dev/env/DJDIR/bin" #define LIBDIR "/dev/env/DJDIR/lib" #define MAN1DIR "/dev/env/DJDIR/man/man1" #define MAN45DIR "/dev/env/DJDIR/man/man5" /* ** List of all hash files (languages) which will be supported by ispell. ** ** This variable has a complex format so that many options can be ** specified. The format is as follows: ** ** [,...] [ [, ...] ...] ** ** where ** ** language is the name of a subdirectory of the ** "languages" directory ** make-options are options that are to be passed to "make" in ** the specified directory. The make-options ** should not, in general, specify a target, as ** this will be provided by the make process. ** ** For example, if LANGUAGES is: ** ** "{american,MASTERDICTS=american.med+,HASHFILES=americanmed+.hash,EXTRADICT=/usr/dict/words /usr/dict/web2} {deutsch,DICTALWAYS=deutsch.sml,DICTOPTIONS=}" ** ** then the American-English and Deutsch (German) languages will be supported, ** and the following variable settings will be passed to the two Makefiles: ** ** American: ** ** MASTERDICTS='american.med+' ** HASHFILES='americanmed+.hash' ** EXTRADICT='/usr/dict/words /usr/dict/web2' ** ** Deutsch: ** ** DICTALWAYS='deutsch.sml' ** DICTOPTIONS='' ** ** Notes on the syntax: The makefile is not very robust. If you have ** make problems, or if make seems to to fail in the language-subdirs ** dependency, check your syntax. The makefile adds single quotes to ** the individual variables in the LANGUAGES specification, so don't ** use quotes of any kind. ** ** In the future, the first language listed in this variable will ** become the default, and the DEFHASH, DEFLANG, and DEFPAFF, ** variables will all become obsolete. So be sure to put your default ** language first, to make later conversion easier! ** ** Notes on options for the various languages will be found in the ** Makefiles for those languages. Some of those languages may require ** you to also change various limits limits like MASKBITS or the ** length parameters. ** ** A special note on the English language: because the British and ** American dialects use different spelling, you should usually select ** one or the other of these. If you select both, the setting of ** MASTERHASH will determine which becomes the language linked to ** DEFHASH (which will usually be named english.hash). ** ** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ** !!! Note the pathname for the `words' file: it might be different !!! ** !!! If you don't have this file, make EXTRADICT empty !!! ** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ #define LANGUAGES "{american,MASTERDICTS=american.med,HASHFILES=amermed.hash,EXTRADICT=}" /* ** If you have acces to a /usr/dict/words file, and wish to check ** British spelling in addition to American, you may wish to use this: ** */ /* ** #define LANGUAGES "{american,MASTERDICTS=americax.med americax.lrg american.xlg,HASHFILES=amermedx.hash amerlrgx.hash amerxlg.hash,EXTRADICT=c:/usr/lib/words} {british,MASTERDICTS=british.med british.lrg british.xlg,HASHFILES=britmed.hash britlrg.hash britxlg.hash}" ** ** */ /* ** If your sort command accepts the -T switch to set temp file ** locations (try it out; on some systems it exists but is ** undocumented), make the following variable the null string. ** Otherwise leave it as the sed script. ** ** With DJGPP, you will probably use GNU Sort which accepts -T, so: */ #define SORTTMP "" /* ** INSTALL program. Could be a copy program like cp or something fancier ** like /usr/ucb/install -c */ #define INSTALL "ginstall -c" /* ** If your system has the rename(2) system call, define HAS_RENAME and ** ispell will use that call to rename backup files. Otherwise, it ** will use link/unlink. There is no harm in this except on MS-DOS, ** which might not support link/unlink (DJGPP does, but also has rename). */ #define HAS_RENAME 1 /* environment variable for user's word list */ #ifndef PDICTVAR #define PDICTVAR "WORDLIST" #endif /* ** Prefix part of default private dictionary. Under MS-DOS 8.3 ** filename limitation, we are in trouble... */ #define DEFPDICT "_isp_" /* old place to look for default word list */ #define OLDPDICT "_isp_" /* ** mktemp template for temporary file - MUST contain 6 consecutive X's. ** ** If this is a relative name, Ispell will try to determine the directory ** by checking the environment variables TMPDIR, TEMP, and TMP (in that ** order). */ #define TEMPNAME "isXXXXXX" /* ** If REGEX_LOOKUP is NOT defined, the lookup command (L) will use the look(1) ** command (if available) or the egrep command. If REGEX_LOOKUP is defined, ** the lookup command will use the internal dictionary and the ** regular-expression library (which you must supply separately. ** DJGPP v2 has POSIX regexp functions. */ #define REGEX_LOOKUP 1 /* ** Choose the proper type of regular-expression routines here. BSD ** and public-domain systems have routines called re_comp and re_exec; ** System V uses regcmp and regex. */ #include #include #define REGCTYPE regex_t * #define REGCMP(re,str) (regcomp (re, str, 0), re) #define REGEX(re, str, dummy) \ (re != 0 && regexec (re, str, 0, 0, 0) == 0 ? (char *)1 : NULL) #define REGFREE(re) \ do { \ if (re == 0) \ re = (regex_t *)calloc (1, sizeof (regex_t)); \ else \ regfree(re); \ } while (0) /* ** ** The 2 following definitions are only meaningfull if you don't use ** any regex library. */ /* path to egrep (use speeded up version if available); defined without explicit path, since there are no standard places for programs on MS-DOS. */ #define EGREPCMD "egrep -i" /* path to wordlist for Lookup command (typically /usr/dict/{words|web2}) */ /* note that /usr/dict/web2 is usually a bad idea due to obscure words */ #undef WORDS /* ** FIXME: The filename truncation below is not flexible enough for DJGPP ** which can support long filenames on some platforms, since we ** will only know if the support is available at runtime. */ /* max file name length (will truncate to fit BAKEXT) if not in sys/param.h */ #ifdef NAME_MAX #define MAXNAMLEN NAME_MAX #else #define MAXNAMLEN 12 #endif #define MAXEXTLEN 4 /* max. extension length including '.' */ #define MAXBASENAMELEN 8 /* max. base filename length without ext */ /* define if you want .bak file names truncated to MAXNAMLEN characters */ /* On MS-DOS, we really have no choice... */ #define TRUNCATEBAK 1 /* ** This is the extension that will be added to backup files. ** On MS-DOS, it makes sense to use the shortest possible extension. */ #define BAKEXT "~" /* ** Define this if you want to use the shell for interpretation of commands ** issued via the "L" command, "^Z" under System V, and "!". If this is ** not defined then a direct spawnvp() will be used in place of the ** normal system(). This may speed up these operations if the SHELL ** environment variable points to a Unix-like shell (such as `sh' or `bash'). ** ** However, if you undefine USESH, commands which use pipes, redirection ** and shell wildcards won't work, and you will need support for the SIGTSTP ** signal, for the above commands to work at all. */ #define USESH 1 /* ** Define this if you want to be able to type any command at a "type space ** to continue" prompt. */ #define COMMANDFORSPACE 1 /* ** The next three variables are used to provide a variable-size context ** display at the bottom of the screen. Normally, the user will see ** a number of lines equal to CONTEXTPCT of his screen, rounded down ** (thus, with CONTEXTPCT == 10, a 24-line screen will produce two lines ** of context). The context will never be greater than MAXCONTEXT or ** less than MINCONTEXT. To disable this feature entirely, set MAXCONTEXT ** and MINCONTEXT to the same value. To round context percentages up, ** define CONTEXTROUNDUP. ** ** Warning: don't set MAXCONTEXT ridiculously large. There is a ** static buffer of size MAXCONTEXT*BUFSIZ; since BUFSIZ is frequently ** 1K or larger, this can create a remarkably large executable. */ #define CONTEXTPCT 20 /* Use 20% of the screen for context */ #define MINCONTEXT 2 /* Always show at least 2 lines of context */ #define MAXCONTEXT 10 /* Never show more than 10 lines of context */ #define CONTEXTROUNDUP 1 /* Round context up */ /* ** Define this if you want the "mini-menu," which gives the most important ** options at the bottom of the screen, to be the default (in any case, it ** can be controlled with the "-M" switch). */ #define MINIMENU /* ** Redefine GETKEYSTROKE() to whatever appropriate on some MS-DOS systems ** where getchar() doesn't operate properly in raw mode. */ #ifdef __DJGPP__ #include #include #define GETKEYSTROKE() getxkey() #else #define GETKEYSTROKE() getch() #endif /* ** We include to have the definition of O_BINARY. The ** configuration script will notice this and define MSDOS_BINARY_OPEN. */ #include /* ** We include to get the definitions of R_OK and W_OK. */ #include /* ** Environment variable to use to locate the home directory. On DOS ** systems we set this to ISPELL_HOME to avoid conflicts with ** other programs that look for a HOME environment variable. */ #define HOME "ISPELL_HOME" #define PDICTHOME "c:" /* ** On MS-DOS systems, we define the following variables so that ** ispell's files have legal suffixes. Note that these suffixes ** must agree with the way you've defined dictionary files which ** incorporate these suffixes. ** ** Actually, it is not recommended at all to change the suffixes, ** since they are hardwired in the Makefile's under languages/ ** subdirectory, and MS-DOS will silently truncate excess letters anyway. */ #define HASHSUFFIX ".hash" #define STATSUFFIX ".stat" #define COUNTSUFFIX ".cnt" /* ** The extension of executable files. */ #define EXEEXT ".exe" ispell-3.4.02/pc/PaxHeaders.22185/makeemx.bat0000644000000000000000000000007410606344526015362 xustar0030 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/pc/makeemx.bat0000444003214100001440000000231210606344526016424 0ustar00geofffaculty00000000000000set CC=gcc set CFLAGS=-O set REGLIB=-lregexp set TERMLIB=-ltermcap set YACC=yacc copy languages\english\msgs.h copy pc\local.emx local.h copy config.x config.h :: goto build gcc -O -c buildhash.c gcc -O -c correct.c gcc -O -c defmt.c gcc -O -c dump.c gcc -O -c exp_table.c gcc -O -c fields.c gcc -O -c good.c gcc -O -c hash.c gcc -O -c icombine.c gcc -O -c ijoin.c gcc -O -c ispell.c gcc -O -c lookup.c gcc -O -c makedent.c gcc -O -DUSG -c term.c gcc -O -c tgood.c gcc -O -c tree.c gcc -O -c xgets.c yacc parse.y gcc -O -c y_tab.c move y_tab.o parse.o del y_tab.c gcc -O -o buildhas buildhas.o hash.o makedent.o parse.o %LIBES% emxbind -b buildhas emxbind -s buildhas.exe gcc -O -o icombine icombine.o makedent.o parse.o %LIBES% emxbind -b icombine emxbind -s icombine.exe gcc -O -o ijoin ijoin.o fields.o %LIBES% emxbind -b ijoin emxbind -s ijoin.exe :build ar -q ispell.a term.o ispell.o correct.o defmt.o dump.o exp_table.o fields.o good.o lookup.o hash.o makedent.o tgood.o tree.o xgets.o gcc -o ispell ispell.a %TERMLIB% %REGLIB% %LIBES% :: strip ispell emxbind -b -s ispell :: because of use of system() emxbind -a ispell -p :: goto end :end del ispell.a ispell-3.4.02/pc/PaxHeaders.22185/make-dj.bat0000644000000000000000000000007410235256710015236 xustar0030 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/pc/make-dj.bat0000444003214100001440000000276510235256710016314 0ustar00geofffaculty00000000000000@Rem Do not turn echo off so they will see what is going on copy language\english\msgs.h msgs.h > nul copy pc\local.djgpp local.h > nul copy config.X config.h > nul echo /* AUTOMATICALLY-GENERATED SYMBOLS */ >> config.h echo #define SIGNAL_TYPE_STRING "void" >> config.h echo #define MASKTYPE_STRING "long" >> config.h @Rem @Rem Use the following Goto when you only change a few source @Rem files and do not want to recompile all of them :: goto build gcc -c -O2 -g buildhash.c gcc -c -O2 -g hash.c gcc -c -O2 -g makedent.c bison -y parse.y if exist y.tab.c ren y.tab.c y_tab.c gcc -c -O2 -g y_tab.c -o parse.o if exist y_tab.c del y_tab.c gcc -o -g buildhash buildhash.o hash.o makedent.o parse.o gcc -c -O2 -g icombine.c gcc -o -g icombine icombine.o makedent.o parse.o gcc -c -O2 -g ijoin.c gcc -c -O2 -g fields.c gcc -o -g ijoin ijoin.o fields.o gcc -c -O2 -g term.c gcc -c -O2 -g ispell.c gcc -c -O2 -g correct.c gcc -c -O2 -g defmt.c gcc -c -O2 -g dump.c gcc -c -O2 -g exp_table.c gcc -c -O2 -g good.c gcc -c -O2 -g lookup.c gcc -c -O2 -g tgood.c gcc -c -O2 -g tree.c gcc -c -O2 -g xgets.c :build @echo ispell.o term.o correct.o defmt.o dump.o good.o lookup.o > link.lst @echo fields.o exp_table.o hash.o makedent.o tgood.o tree.o xgets.o >> link.lst @del link.lst gcc -o -g ispell @link.lst @Rem @Rem Strip the .exe but leave the COFF images with debug info strip *.exe cd deformatters gcc -O2 -g -o defmt-c defmt-c.c gcc -O2 -g -o defmt-sh defmt-sh.c strip *.exe cd .. ispell-3.4.02/PaxHeaders.22185/ijoin.c0000644000000000000000000000007410227500137014104 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/ijoin.c0000444003214100001440000003577610227500137015172 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: ijoin.c,v 1.12 2005/04/14 14:38:23 geoff Exp $"; #endif /* * Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * "Join" command for ispell. * * This command is a complete reimplementation of the UNIX "join" * command, except that fields cannot be separated by a newline, it * can handle lines of unlimited length, and the preceding sort can * treat characters as either signed or unsigned. * * Usage: * * ijoin [options] file1 file2 * * See the UNIX "join" manual page for option descriptions. Only * nonstandard options are described here. * * Either file1 or file2 may be "-", in which case the standard input * is used for that file. * * Normally, ijoin uses "strcmp" to compare fields. This is the * correct thing to do on most systems if you are using the * system-provided "sort" command to sort the input files before * feeding them to ijoin. In some cases, however, the sort command * you use will disagree with strcmp about how to handle characters * with the high bit set. If this is the case, you can specify the * "-s" (signed comparisons) or "-u" (unsigned comparisons) option to * force ijoin to conform to the method used by the sort program. * This is only necessary if one of the input files contains 8-bit * characters in the field that is being joined on. * * On some older machines with non-ANSI compilers, the "-s" option * will be ineffective because characters default to unsigned. * However, this option should be unnecessary on those machines, so no * harm will be done. */ /* * $Log: ijoin.c,v $ * Revision 1.12 2005/04/14 14:38:23 geoff * Update license. Integrate Ed Avis's changes (making certain things * unsigned). * * Revision 1.11.1.1 2002/06/21 00:35:54 geoff * Edward Avis's changes * * Revision 1.2 2001/10/05 14:22:25 epa98 * Imported 3.2.06.epa1 release. This was previously developed using * sporadic RCS for certain files, but I'm not really bothered about * rolling back beyond this release. * * Revision 1.11 2001/07/25 21:51:47 geoff * Minor license update. * * Revision 1.10 2001/07/23 20:24:03 geoff * Update the copyright and the license. * * Revision 1.9 2001/06/07 19:06:33 geoff * Add a workaround for the strcmp-as-macro problem found on recent * releases of gcc. * * Revision 1.8 2000/08/22 10:52:25 geoff * Fix some compiler warnings. * * Revision 1.7 1999/01/07 01:58:00 geoff * Update the copyright. * * Revision 1.6 1994/10/18 04:03:21 geoff * Fix a couple of bugs, one where the last field on a line could be * output incorrectly, and one where fields from the wrong file could be * output. * * Revision 1.5 1994/01/25 07:11:36 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include #include "config.h" #include "ispell.h" #include "proto.h" #include "fields.h" #ifdef __STDC__ #define SIGNED signed #else /* __STDC */ #define SIGNED #endif /* __STDC */ int main P ((int argc, char * argv[])); /* Join files */ static void usage P ((void)); /* Issue a usage message */ static void dojoin P ((void)); /* Actually perform the join */ static void full_output P ((field_t * line1, field_t * line2)); /* Output everything from both lines */ static void selected_output P ((field_t * line1, field_t * line2)); /* Output selected fields */ static int strscmp P ((SIGNED char * a, SIGNED char * b)); /* Signed version of strcmp */ static int strucmp P ((unsigned char * a, unsigned char * b)); /* Unsigned version of strcmp */ typedef struct { int file; /* Number of file to output from */ unsigned int field; /* Number of field to output */ } outlist_t; /* Output description list */ /* * Some excessively "smart" compilers (for which you are welcome to * read "stupid compiler implementers") try to get clever about * strcmp, turning it into a macro in some circumstances. That breaks * things, since you then can't take the address of what is supposed * to be a library function. To be safe, we'll #undef any possible * macro here to get around that particular lack of foresight. */ #undef strcmp static int (*compare) () = strcmp; /* Comparison function */ static char * emptyfield = ""; /* Use this to replace empty fields */ static FILE * file1; /* First file to join */ static FILE * file2; /* Second file to join */ static unsigned int join1field = 0; /* Field to join file 1 on */ static unsigned int join2field = 0; /* Field to join file 2 on */ static unsigned int maxf[2] = {0, 0}; /* Max field to parse in each file */ static outlist_t * outlist = NULL; /* List of fields to write */ static int outlistsize; /* Number of elements in outlist */ static int runs = FLD_RUNS; /* Set if runs of tabchar same as 1 */ static char * tabchar = " \t"; /* Field separator character(s) */ static int unpairable1 = 0; /* NZ if -a1 */ static int unpairable2 = 0; /* NZ if -a2 */ extern int strcmp (); int main (argc, argv) /* Join files */ int argc; /* Argument count */ char * argv[]; /* Argument vector */ { while (argc > 3 && argv[1][0] == '-') { argc--; argv++; switch (argv[0][1]) { case 'a': /* produce output for unpairables */ if (argv[0][2] == '1') unpairable1 = 1; else if (argv[0][2] == '2') unpairable2 = 1; else if (argv[0][2] == '\0') unpairable1 = unpairable2 = 1; else usage (); break; case 'e': /* Replace empty fields with this */ argc--; argv++; emptyfield = *argv; break; case 'j': /* Specify field to join on */ if (argv[0][2] == '1') join1field = atoi (argv[1]) - 1; else if (argv[0][2] == '2') join2field = atoi (argv[1]) - 1; else if (argv[0][2] == '\0') join1field = join2field = atoi (argv[1]) - 1; else usage (); argc--; argv++; break; case 'o': /* Specify output list */ /* * We will assume that all remaining switch arguments * are used to describe the output list. This will * occasionally result in malloc'ing a few too many * elements, but no real harm will be done. */ outlist = (outlist_t *) malloc ((argc - 3) * sizeof (outlist_t)); if (outlist == NULL) { (void) fprintf (stderr, "ijoin: out of memory!\n"); return 1; } for (outlistsize = 0, argc--, argv++; argc > 2 && (argv[0][0] == '1' || argv[0][0] == '2') && argv[0][1] == '.'; argc--, argv++, outlistsize++) { outlist[outlistsize].file = argv[0][0] - '0'; outlist[outlistsize].field = atoi (&argv[0][2]) - 1; if (maxf[outlist[outlistsize].file - 1] <= outlist[outlistsize].field) maxf[outlist[outlistsize].file - 1] = outlist[outlistsize].field + 1; } argc++; /* Un-do arg that stopped us */ argv--; break; case 't': tabchar = &argv[0][2]; runs &= ~FLD_RUNS; break; case 's': compare = strscmp; break; case 'u': compare = strucmp; break; default: usage (); break; } } if (argc != 3) usage (); if (strcmp (argv[1], "-") == 0) file1 = stdin; else { file1 = fopen (argv[1], "r"); if (file1 == NULL) perror (argv[1]); } file2 = fopen (argv[2], "r"); if (file2 == NULL) perror (argv[2]); if (file1 == NULL || file2 == NULL) return 1; dojoin (); return 0; } static void usage () /* Issue a usage message */ { (void) fprintf (stderr, "Usage: ijoin [-an] [-e s] [-jn m] [-o n.m ...] [-tc] file1 file2\n"); exit (1); } static void dojoin () /* Actually perform the join */ { int comparison; /* Result of comparing the lines */ long file2pos; /* Position file 2 started at */ register field_t * line1; /* Line from file 1 */ register field_t * line2; /* Line from file 2 */ int pairable; /* NZ if lines can be paired */ int skip2; /* No. of "unpairable" 2's to skip */ runs |= FLD_NOSHRINK; /* Don't do excessive reallocations */ field_line_inc = BUFSIZ; /* Allocate line bfr in huge chunks */ line1 = fieldread (file1, tabchar, runs, maxf[0]); file2pos = ftell (file2); skip2 = 0; if (file2pos == -1) { (void) fprintf (stderr, "ijoin: Can't seek file "); perror ("2"); exit (1); } line2 = fieldread (file2, tabchar, runs, maxf[1]); while (line1 != NULL || line2 != NULL) { /* * Do a little work to reduce the number of calls to realloc, at * the expense of slightly-increased memory usage. */ if (line1 != NULL && line1->nfields >= field_field_inc) field_field_inc = line1->nfields + 1; if (line2 != NULL && line2->nfields >= field_field_inc) field_field_inc = line2->nfields + 1; /* * Determine if the lines can be paired. */ pairable = 1; if (line1 == NULL) { pairable = 0; comparison = 1; /* This causes file 2 to advance */ } else if (join1field >= line1->nfields) { pairable = 0; comparison = -1; /* This causes file 1 to advance */ } if (line2 == NULL) { pairable = 0; comparison = -1; /* This causes file 1 to advance */ } else if (join2field >= line2->nfields) { pairable = 0; comparison = 1; /* This causes file 2 to advance */ } if (pairable) { comparison = (*compare) (line1->fields[join1field], line2->fields[join2field]); pairable = (comparison == 0); } if (pairable) { /* * The two lines can be paired. Produce output. */ if (outlist == NULL) full_output (line1, line2); else selected_output (line1, line2); } /* * Advance through the files */ if (comparison < 0) { if (unpairable1) { if (outlist == NULL) (void) fieldwrite (stdout, line1, tabchar[0]); else selected_output (line1, (field_t *) NULL); } fieldfree (line1); line1 = fieldread (file1, tabchar, runs, maxf[0]); } else if (comparison > 0) { if (skip2 > 0) skip2--; else if (unpairable2) { if (outlist == NULL) (void) fieldwrite (stdout, line2, tabchar[0]); else selected_output ((field_t *) NULL, line2); } fieldfree (line2); file2pos = ftell (file2); line2 = fieldread (file2, tabchar, runs, maxf[1]); } else { /* * Here's the tricky part. We have to advance file 2 * until comparisons fail, and then back it up and advance * file 1. */ skip2++; fieldfree (line2); line2 = fieldread (file2, tabchar, runs, maxf[1]); if (line2 == NULL || join2field >= line2->nfields || (*compare) (line1->fields[join1field], line2->fields[join2field]) != 0) { (void) fseek (file2, file2pos, 0); fieldfree (line2); line2 = fieldread (file2, tabchar, runs, maxf[1]); fieldfree (line1); line1 = fieldread (file1, tabchar, runs, maxf[0]); if (line1 != NULL && line2 != NULL && join1field < line1->nfields && join2field < line2->nfields && (*compare) (line1->fields[join1field], line2->fields[join2field]) == 0) skip2 = 0; } } } } static void full_output (line1, line2) /* Output everything from both lines */ register field_t * line1; /* Line from file 1 */ register field_t * line2; /* Line from file 2 */ { register unsigned int fieldno; /* Number of field being handled */ (void) fputs (line1->fields[join1field], stdout); for (fieldno = 0; fieldno < line1->nfields; fieldno++) { if (fieldno == join1field) continue; (void) putchar (tabchar[0]); if (line1->fields[fieldno][0] == '\0') (void) fputs (emptyfield, stdout); else (void) fputs (line1->fields[fieldno], stdout); } for (fieldno = 0; fieldno < line2->nfields; fieldno++) { if (fieldno == join2field) continue; (void) putchar (tabchar[0]); if (line2->fields[fieldno][0] == '\0') (void) fputs (emptyfield, stdout); else (void) fputs (line2->fields[fieldno], stdout); } (void) putchar ('\n'); } static void selected_output (line1, line2) /* Output selected fields */ field_t * line1; /* Line from file 1 */ field_t * line2; /* Line from file 2 */ { register field_t * cline; /* Current line being handled */ register int listno; /* Number of output list entry */ for (listno = 0; listno < outlistsize; listno++) { if (listno != 0) (void) putchar (tabchar[0]); if (outlist[listno].file == 1) cline = line1; else cline = line2; if (cline == NULL || outlist[listno].field >= cline->nfields || cline->fields[outlist[listno].field][0] == '\0') (void) fputs (emptyfield, stdout); else (void) fputs (cline->fields[outlist[listno].field], stdout); } (void) putchar ('\n'); } static int strscmp (a, b) /* Compare signed strings */ register SIGNED char * a; /* First string to compare */ register SIGNED char * b; /* Second string to compare */ { while (*a != '\0') { if (*a++ != *b++) return *--a - *--b; } return *a - *b; } static int strucmp (a, b) /* Compare unsigned strings */ register unsigned char * a; /* First string to compare */ register unsigned char * b; /* Second string to compare */ { while (*a != '\0') { if (*a++ != *b++) return *--a - *--b; } return *a - *b; } ispell-3.4.02/PaxHeaders.22185/ispell.1X0000644000000000000000000000013113523445476014344 xustar0029 mtime=1565412158.48858548 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/ispell.1X0000444003214100001440000013405213523445476015423 0ustar00geofffaculty00000000000000.\" .\" $Id: ispell.1X,v 1.103 2019-08-09 21:42:38-07 geoff Exp $ .\" .\" Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All modifications to the source code must be clearly marked as .\" such. Binary redistributions based on modified source code .\" must be clearly marked as modified versions in the documentation .\" and/or other materials provided with the distribution. .\" 4. The code that causes the 'ispell -v' command to display a prominent .\" link to the official ispell Web site may not be removed. .\" 5. The name of Geoff Kuenning may not be used to endorse or promote .\" products derived from this software without specific prior .\" written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" $Log: ispell.1X,v $ .\" Revision 1.103 2019-08-09 21:42:38-07 geoff .\" Remove ancient commentary about performance from BUGS. .\" .\" Revision 1.102 2017-11-13 11:37:15-08 geoff .\" Many cleanups from Bjarni Ingi Gislason .\" .\" Revision 1.101 2015-02-08 00:35:41-08 geoff .\" Identify helper programs as such in the synopsis (patch from Eric S. Raymond). .\" .\" Revision 1.100 2013-04-03 16:38:30-07 geoff .\" Add a warning about the -C option's dangers. .\" .\" Revision 1.99 2009-01-01 14:55:32-08 geoff .\" Get rid of a .IR that actually belongs in config.X (Richard Roger). .\" .\" Revision 1.98 2005-09-05 23:31:32-07 geoff .\" Get the version described from version.h, rather than hardwiring it. .\" .\" Revision 1.97 2005/05/01 22:35:00 geoff .\" Make the backup-file extension configurable. .\" .\" Revision 1.96 2005/04/26 22:42:22 geoff .\" Remove fixispell-a, since it doesn't really do the job .\" .\" Revision 1.95 2005/04/14 23:11:36 geoff .\" Document the -w switch to icombine. .\" .\" Revision 1.94 2005/04/14 21:25:52 geoff .\" Document MUNCHDEBUGDIR and ISPELL_CHARSET. .\" .\" Revision 1.93 2005/04/14 14:38:23 geoff .\" Update license. Incorporate Ed Avis's changes. Document fixispell-a. .\" Add the -o flag. Make certain external references configurable. .\" Document -e5. .\" .\" Revision 1.92 2001/10/01 23:32:07 geoff .\" Remove an obsolete reference to sq. .\" .\" Revision 1.91 2001/07/25 21:51:46 geoff .\" Minor license update. .\" .\" Revision 1.90 2001/07/23 20:24:03 geoff .\" Update the copyright and the license. .\" .\" Revision 1.89 2001/07/23 19:36:49 geoff .\" Document that -w doesn't work with / .\" .\" Revision 1.88 2000/08/24 06:48:40 geoff .\" Document correct_verbose_mode. .\" .\" Revision 1.87 1999/01/07 01:22:40 geoff .\" Update the copyright. .\" .\" Revision 1.86 1999/01/05 20:40:26 geoff .\" Improve the documentation of -F .\" .\" Revision 1.85 1999/01/03 01:46:31 geoff .\" Document the -F (external deformatter) switch. .\" .\" Revision 1.84 1998/07/12 20:42:15 geoff .\" Document the -k switch and associated environment variables. Fix a .\" couple of places where ispell wasn't italicized. .\" .\" Revision 1.83 1995/11/08 05:09:12 geoff .\" Document the new ispell-4-like interactive mode. .\" .\" Revision 1.82 1995/11/08 04:53:34 geoff .\" Change the HTML-mode documentation to reflect the compatibility .\" improvements and flag renaming I did. .\" .\" Revision 1.81 1995/10/25 04:05:20 geoff .\" Documentation for html-mode added by Gerry Tierney 10/14/1995. .\" .\" Revision 1.80 1995/01/08 23:23:31 geoff .\" Document the new personal-dictionary behavior (dictionary named after .\" the hash file is preferred). .\" .\" Revision 1.79 1994/10/25 05:46:02 geoff .\" Document the new DICTIONARY variable, and improve the documentation of .\" the -d flag. .\" .\" Revision 1.78 1994/09/16 05:06:58 geoff .\" Make it clear that the + command doesn't change the string-character .\" type. .\" .\" Revision 1.77 1994/04/27 01:50:35 geoff .\" Remove the bug about the tex parser getting confused by \endxxx. .\" .\" Revision 1.76 1994/03/21 01:54:08 geoff .\" Document the '&' command in -a mode. .\" .\" Revision 1.75 1994/03/15 06:24:26 geoff .\" Document the changes to the +/-/~ commands and the -T switch. .\" .\" Revision 1.74 1994/01/25 07:11:39 geoff .\" Get rid of all old RCS log lines in preparation for the 3.1 release. .\" .\" .TH ISPELL 1 local .SH NAME ispell, buildhash, munchlist, findaffix, tryaffix, icombine, ijoin \- Interactive spelling checking .SH SYNOPSIS .B ispell .RI [ common-flags ] .RB [ \-M | \-N ] .RB [ \-L \fIcontext\fP ] .RB [ \-V ] files .br .B ispell .RI [ common-flags ] .B \-l .br .B ispell .RI [ common-flags ] .RB [ \-f file] .RB [ \-s ] .RB [ \-a | \-A ] .br .B ispell .RB [ \-d .IR file ] .RB [ \-w .IR chars ] .B \-c .br .B ispell .RB [ \-d .IR file ] .RB [ \-w .IR chars ] .BR \-e [ e ] .br .B ispell .RB [ \-d .IR file ] .B \-D .br .B ispell .BR \-v [ v ] .IP \fIcommon-flags\fP: .RB [ \-t ] .RB [ \-n ] .RB [ \-H ] .RB [ \-o ] .RB [ \-b ] .RB [ \-x ] .RB [ \-B ] .RB [ \-C ] .RB [ \-P ] .RB [ \-m ] .RB [ \-S ] .RB [ \-d .IR file ] .RB [ \-p .IR file ] .RB [ \-w .IR chars ] .RB [ \-W .IR n ] .RB [ \-T .IR type ] .RB [ \-k\fIname\fP .IR list ] .RB [ \-F .IR program ] .PP Helper programs: .PP .B buildhash .RB [ \-s ] .I dict-file affix-file hash-file .br .B buildhash .B \-s .I count affix-file .if n .TP 10 .if t .PP .B munchlist .RB [ \-l .IR aff-file ] .RB [ \-c .IR conv-file ] .RB [ \-T .IR suffix ] .if n .br .RB [ \-s .IR hash-file ] .RB [ \-D ] .RB [ \-v ] .RB [ \-w .IR chars ] .RI [ files ] .if n .TP 10 .if t .PP .B findaffix .RB [ \-p | \-s ] .RB [ \-f ] .RB [ \-c ] .RB [ \-m .IR min ] .RB [ \-M .IR max ] .RB [ \-e .IR elim ] .if n .br .RB [ \-t .IR tabchar ] .RB [ \-l .IR low ] .RI [ files ] .PP .B tryaffix .RB [ \-p | \-s] .RB [ \-c ] .I expanded-file .IR affix [ +addition ] \&...\& .PP .B icombine .RB [ \-T .IR type ] .RB [ \-w .IR chars ] .RI [ aff-file ] .PP .B ijoin .RB [ \-s | \-u ] .I join-options .I file1 .I file2 .SH DESCRIPTION .PP .I Ispell is fashioned after the .I spell program from ITS (called .I ispell on Twenex systems.) The most common usage is "ispell filename". In this case, .I ispell will display each word which does not appear in the dictionary at the top of the screen and allow you to change it. If there are "near misses" in the dictionary (words which differ by only a single letter, a missing or extra letter, a pair of transposed letters, or a missing space or hyphen), then they are also displayed on following lines. As well as "near misses", ispell may display other guesses at ways to make the word from a known root, with each guess preceded by question marks. Finally, the line containing the word and the previous line are printed at the bottom of the screen. If your terminal can display in reverse video, the word itself is highlighted. You have the option of replacing the word completely, or choosing one of the suggested words. Commands are single characters as follows (case is ignored): .PP .RS .IP R Replace the misspelled word completely. .IP Space Accept the word this time only. .IP A Accept the word for the rest of this .I ispell session. .IP I Accept the word, capitalized as it is in the file, and update private dictionary. .IP U Accept the word, and add an uncapitalized (actually, all lower-case) version to the private dictionary. .IP 0\(en\fIn\fR Replace with one of the suggested words. .IP L Look up words in system dictionary (controlled by the WORDS compilation option). .IP X Write the rest of this file, ignoring misspellings, and start next file. .IP Q Exit immediately and leave the file unchanged. .IP ! Shell escape. .IP ^L Redraw screen. .IP ^Z Suspend ispell. .IP ? Give help screen. .RE .PP If the .B \-M switch is specified, a one-line mini-menu at the bottom of the screen will summarize these options. Conversely, the .B \-N switch may be used to suppress the mini-menu. (The minimenu is displayed by default if .I ispell was compiled with the MINIMENU option, but these two switches will always override the default). .PP If the .B \-L flag is given, the specified number is used as the number of lines of context to be shown at the bottom of the screen (The default is to calculate the amount of context as a certain percentage of the screen size). The amount of context is subject to a system-imposed limit. .PP If the .B \-V flag is given, characters that are not in the 7-bit ANSI printable character set will always be displayed in the style of "cat \-v", even if .I ispell thinks that these characters are valid ISO Latin-1 on your system. This is useful when working with older terminals. Without this switch, .I ispell will display 8-bit characters "as is" if they have been defined as string characters for the chosen file type. .PP "Normal" mode, as well as the .BR \-l , .BR \-a , and .B \-A options and interactive mode (see below) also accepts the following "common" flags on the command line: .RS .IP \fB\-t\fR The input file is in TeX or LaTeX format. .IP \fB\-n\fR The input file is in nroff/troff format. .IP \fB\-H\fR The input file is in SGML/HTML format. (This should really be .BR \-s , but for historical reasons that flag was already taken.) .IP \fB\-o\fR The input file should be treated as ordinary text. (This could be used to override DEFTEXFLAG.) .IP \fB\-b\fR Create a backup file by appending "!!BAKEXT!!" to the name of the input file. .IP \fB\-x\fR Delete the backup file after spell-checking is finished. .IP \fB\-B\fR Report run-together words with missing blanks as spelling errors. .IP \fB\-C\fR Consider run-together words as valid compounds. .IP \fB\-P\fR Don't generate extra root/affix combinations. .IP \fB\-m\fR Make possible root/affix combinations that aren't in the dictionary. .IP \fB\-S\fR Sort the list of guesses by probable correctness. .IP "\fB\-d\fR file" Specify an alternate dictionary file. For example, use .B "\-d deutsch" to choose a German dictionary in a German installation. .IP "\fB\-p\fR file" Specify an alternate personal dictionary. .IP "\fB\-w\fR chars" Specify additional characters that can be part of a word. .IP "\fB\-W\fR n" Specify length of words that are always valid. .IP "\fB\-T\fR type" Assume a given formatter type for all files. .RE .PP The .BR \-H , .BR \-n , .BR \-t , and .B \-o options select whether .I ispell runs in HTML .RB ( \-H ), nroff/troff .RB ( \-n ), TeX/LaTeX .RB ( \-t ), or ordinary text .RB ( \-o ) input mode. mode. (The default mode is controlled by the DEFTEXFLAG installation option, but is normally nroff/troff mode for historical reasons.) Unless overridden by one of the mode-selection switches, TeX/LaTeX mode is automatically selected if an input file has the extension ".tex", and HTML mode is automatically selected if an input file has the extension ".html" or ".htm". .PP In HTML mode, HTML tags delimited by <> signs are skipped, except that the "ALT=" construct is recognized if it appears with no spaces around the equals sign, and the text inside is spell-checked. .PP In TeX/LaTeX mode, whenever a backslash ("\e") is found, .I ispell will skip to the next whitespace or TeX/LaTeX delimiter. Certain commands contain arguments which should not be checked, such as labels and reference keys as are found in the \ecite command, since they contain arbitrary, non-word arguments. Spell checking is also suppressed when in math mode. Thus, for example, given .PP .RS \echapter {This is a Ckapter} \ecite{SCH86} .RE .PP .I ispell will find "Ckapter" but not "SCH". The .B \-t option does not recognize the TeX comment character "%", so comments are also spell-checked. It also assumes correct LaTeX syntax. Arguments to infrequently used commands and some optional arguments are sometimes checked unnecessarily. The bibliography will not be checked if .I ispell was compiled with .B IGNOREBIB defined. Otherwise, the bibliography will be checked but the reference key will not. .PP References for the !!TIB_XREF!! bibliography system, that is, text between a ``[.'' or ``<.'' and ``.]'' or ``.>'' will always be ignored in TeX/LaTeX mode. .PP The .B \-b and .B \-x options control whether .I ispell leaves a backup (!!BAKEXT!!\&) file for each input file. The !!BAKEXT!!\& file contains the pre-corrected text. If there are file opening or writing errors, the !!BAKEXT!!\& file may be left for recovery purposes even with the .B \-x option. The default for this option is controlled by the DEFNOBACKUPFLAG installation option. .PP The .B \-B and .B \-C options control how .I ispell handles run-together words, such as "notthe" for "not the". If .B \-B is specified, such words will be considered as errors, and .I ispell will list variations with an inserted blank or hyphen as possible replacements. If .B \-C is specified, run-together words will be considered to be valid compounds, so long as both components are in the dictionary, and each component is at least as long as a language-dependent minimum (3 characters, by default). This is useful for languages such as German and Norwegian, where many compound words are formed by concatenation. (Note that compounds formed from three or more root words will still be considered errors). The default for this option is language-dependent; in a multi-lingual installation the default may vary depending on which dictionary you choose. .B Warning: the .B \-C option can cause .I ispell to recognize non-words and misspellings. Use it with caution! .PP The .B \-P and .B \-m options control when .I ispell automatically generates suggested root/affix combinations for possible addition to your personal dictionary. (These are the entries in the "guess" list which are preceded by question marks.) If .B \-P is specified, such guesses are displayed only if .I ispell cannot generate any possibilities that match the current dictionary. If .B \-m is specified, such guesses are always displayed. This can be useful if the dictionary has a limited word list, or a word list with few suffixes. However, you should be careful when using this option, as it can generate guesses that produce invalid words. The default for this option is controlled by the dictionary file used. .PP The .B \-S option suppresses .IR ispell "'s" normal behavior of sorting the list of possible replacement words. Some people may prefer this, since it somewhat enhances the probability that the correct word will be low-numbered. .PP The .B \-d option is used to specify an alternate hashed dictionary file, other than the default. If the filename does not contain a "/", the library directory for the default dictionary file is prefixed; thus, to use a dictionary in the local directory "\-d \&./xxx.hash" must be used. This is useful to allow dictionaries for alternate languages. Unlike previous versions of .IR ispell , a dictionary of .I /dev/null is invalid, because the dictionary contains the affix table. If you need an effectively empty dictionary, create a one-entry list with an unlikely string (e.g., "qqqqq"). .PP The .B \-p option is used to specify an alternate personal dictionary file. If the file name does not begin with "/", $HOME is prefixed. Also, the shell variable WORDLIST may be set, which renames the personal dictionary in the same manner. The command line overrides any WORDLIST setting. If neither the .B \-p switch nor the WORDLIST environment variable is given, .I ispell will search for a personal dictionary in both the current directory and $HOME, creating one in $HOME if none is found. The preferred name is constructed by appending ".ispell_" to the base name of the hash file. For example, if you use the English dictionary, your personal dictionary would be named ".ispell_english". However, if the file ".ispell_words" exists, it will be used as the personal dictionary regardless of the language hash file chosen. This feature is included primarily for backwards compatibility. .PP If the .B \-p option is .I not specified, .I ispell will look for personal dictionaries in both the current directory and the home directory. If dictionaries exist in both places, they will be merged. If any words are added to the personal dictionary, they will be written to the current directory if a dictionary already existed in that place; otherwise they will be written to the dictionary in the home directory. .PP The .B \-w option may be used to specify characters other than alphabetics which may also appear in words. For instance, .B \-w "&" will allow "AT&T" to be picked up. Underscores are useful in many technical documents. There is an admittedly crude provision in this option for 8-bit international characters. Non-printing characters may be specified in the usual way by inserting a backslash followed by the octal character code; e.g., "\e014" for a form feed. Alternatively, if "n" appears in the character string, the (up to) three characters following are a DECIMAL code 0\(en255, for the character. For example, to include bells and form feeds in your words (an admittedly silly thing to do, but aren't most pedagogical examples): .PP .RS n007n012 .RE .PP Numeric digits other than the three following "n" are simply numeric characters. Use of "n" does not conflict with anything because actual alphabetics have no meaning - alphabetics are already accepted. .I Ispell will typically be used with input from a file, meaning that preserving parity for possible 8 bit characters from the input text is OK. If you specify the \-l option, and actually type text from the terminal, this may create problems if your stty settings preserve parity. .PP It is not possible to use .B \-w with certain characters. In particular, the flag-marker character for the language (defined in the affix file, but usually "/") can never be made into a word character. .PP The .B \-W option may be used to change the length of words that .I ispell always accepts as valid. Normally, .I ispell will accept all 1-character words as valid, which is equivalent to specifying "\fB\-W 1\fR." (The default for this switch is actually controlled by the MINWORD installation option, so it may vary at your installation.) If you want all words to be checked against the dictionary, regardless of length, you might want to specify "\fB\-W 0\fR". On the other hand, if your document specifies a lot of three-letter acronyms, you would specify "\fB\-W 3\fR" to accept all words of three letters or less. Regardless of the setting of this option, .I ispell will only generate words that are in the dictionary as suggested replacements for words; this prevents the list from becoming too long. Obviously, this option can be very dangerous, since short misspellings may be missed. If you use this option a lot, you should probably make a last pass without it before you publish your document, to protect yourself against errors. .PP The .B \-T option is used to specify a default formatter type for use in generating string characters. This switch overrides the default type determined from the file name. The .I type argument may be either one of the unique names defined in the language affix file (e.g., .BR nroff ) or a file suffix including the dot (e.g., .BR .tex ). If no .B \-T option appears and no type can be determined from the file name, the default string character type declared in the language affix file will be used. .PP The .B \-k option is used to enhance the behavior of certain deformatters. The .I name parameter gives the name of a deformatter keyword set (see below), and the .I list parameter gives a list of one or more keywords that are to be treated specially. If .I list begins with a plus (+) sign, it is added to the existing keywords; otherwise it replaces the existing keyword list. For example, .B "\-ktexskip1 +bibliographystyle" adds "bibliographystyle" to the TeX skip-1 list, while .B "\-khtmlignore pre,strong" replaces the HTML ignore list with "pre" and "strong". The lists available are: .IP texskip1 TeX/LaTeX commands that take a single argument that should not be spell-checked, such as "bibliographystyle". The default is "end", "vspace", "hspace", "cite", "ref", "parbox", "label", "input", "nocite", "include", "includeonly", "documentstyle", "documentclass", "usepackage", "selectlanguage", "pagestyle", "pagenumbering", "hyphenation", "pageref", and "psfig", plus "bibliography" in some installations. These keywords are case-sensitive. .IP texskip2 TeX/LaTeX commands that take two arguments that should not be spell-checked, such as "setlength". The default is "rule", "setcounter", "addtocounter", "setlength", "addtolength", and "settowidth". These keywords are case-sensitive. .IP htmlignore HTML tags that delimit text that should not be spell-checked until the matching end tag is reached. The default is "code", "samp", "kbd", "pre", "listing", and "address". These keywords are case-insensitive. (Note that the content inside HTML tags, such as HREF=, is not normally checked.) .IP htmlcheck Subfields that should be spell-checked even inside HTML tags. The default is "alt", so that the ALT= portion of IMG tags will be spell-checked. These keywords are case-insensitive. .PP All of the above keyword lists can also be modified by environment variables whose names are the same as above, except in uppercase, e.g., TEXSKIP1. The .B \-k switch overrides (or adds to) the environment variables, and the environment variables override or add to the built-in defaults. .PP The .B \-F switch specifies an external deformatter program. This program should read data from its standard input and write to its standard output. The program .I must produce exactly one character of output for each character of input, or ispell will lose synchronization and corrupt the output file. Whitespace characters (especially blanks, tabs, and newlines) and characters that should be spell-checked should be passed through unchanged. Characters that should not be spell-checked should be converted into blanks or other non-word characters. For example, an HTML deformatter might turn all HTML tags into blanks, and also blank out all text delimited by tags such as "code" or "kbd". .PP The .B \-F switch is the preferred way to deformat files for ispell, and eventually will become the only way. .PP If .I ispell is invoked without any filenames or mode switches, it enters an interactive mode designed to let the user check the spelling of individual words. The program repeatedly prompts on standard output with "word:" and responds with either "ok" (possibly with commentary), "not found", or "how about" followed by a list of suggestions. .PP The .B \-l or "list" option to .I ispell is used to produce a list of misspelled words from the standard input. .PP The .B \-a option is intended to be used from other programs through a pipe. In this mode, .I ispell prints a one-line version identification message, and then begins reading lines of input. For each input line, a single line is written to the standard output for each word checked for spelling on the line. If the word was found in the main dictionary, or your personal dictionary, then the line contains only a '*'. If the word was found through affix removal, then the line contains a '+', a space, and the root word. If the word was found through compound formation (concatenation of two words, controlled by the .B \-C option), then the line contains only a '\-'. .PP If the word is not in the dictionary, but there are near misses, then the line contains an '&', a space, the misspelled word, a space, the number of near misses, the number of characters between the beginning of the line and the beginning of the misspelled word, a colon, another space, and a list of the near misses separated by commas and spaces. Following the near misses (and identified only by the count of near misses), if the word could be formed by adding (invalid) affixes to a known root, is a list of suggested derivations, again separated by commas and spaces. If there are no near misses at all, the line format is the same, except that the '&' is replaced by '?' (and the near-miss count is always zero). The suggested derivations following the near misses are in the form: .PP .RS [prefix+] root [\-prefix] [\-suffix] [+suffix] .RE .PP (e.g., "re+fry-y+ies" to get "refries") where each optional .I pfx and .I sfx is a string. Also, each near miss or guess is capitalized the same as the input word unless such capitalization is invalid; in the latter case each near miss is capitalized correctly according to the dictionary. .PP Finally, if the word does not appear in the dictionary, and there are no near misses, then the line contains a '#', a space, the misspelled word, a space, and the character offset from the beginning of the line. Each sentence of text input is terminated with an additional blank line, indicating that .I ispell has completed processing the input line. .PP These output lines can be summarized as follows: .PP .RS .IP OK: * .IP Root: + .IP Compound: \- .IP Miss: & : , , \&...\&, , \&...\& .IP Guess: ? 0 : , , \&...\& .IP None: # .RE .PP For example, a dummy dictionary containing the words "fray", "Frey", "fry", and "refried" might produce the following response to the command "echo 'frqy refries' | ispell \-a \-m \-d \&./test.hash": .RS .nf (#) International Ispell Version 3.0.05 (beta), 08/10/91 & frqy 3 0: fray, Frey, fry & refries 1 5: refried, re+fry-y+ies .fi .RE .PP This mode is also suitable for interactive use when you want to figure out the spelling of a single word. .PP The .B \-A option works just like .BR \-a , except that if a line begins with the string "&Include_File&", the rest of the line is taken as the name of a file to read for further words. Input returns to the original file when the include file is exhausted. Inclusion may be nested up to five deep. The key string may be changed with the environment variable .B INCLUDE_STRING (the ampersands, if any, must be included). .PP When in the .B \-a mode, .I ispell will also accept lines of single words prefixed with any of '*', '&', '@', '+', '-', '\(ti', '#', '!', '%', '`', or '^'. A line starting with '*' tells .I ispell to insert the word into the user's dictionary (similar to the I command). A line starting with '&' tells .I ispell to insert an all-lowercase version of the word into the user's dictionary (similar to the U command). A line starting with '@' causes .I ispell to accept this word in the future (similar to the A command). A line starting with '+', followed immediately by .B tex or .B nroff will cause .I ispell to parse future input according the syntax of that formatter. A line consisting solely of a '+' will place .I ispell in TeX/LaTeX mode (similar to the .B \-t option) and '-' returns .I ispell to nroff/troff mode (but these commands are obsolete). However, the string character type is .I not changed; the '\(ti' command must be used to do this. A line starting with '\(ti' causes .I ispell to set internal parameters (in particular, the default string character type) based on the filename given in the rest of the line. (A file suffix is sufficient, but the period must be included. Instead of a file name or suffix, a unique name, as listed in the language affix file, may be specified.) However, the formatter parsing is .I not changed; the '+' command must be used to change the formatter. A line prefixed with '#' will cause the personal dictionary to be saved. A line prefixed with '!' will turn on .I terse mode (see below), and a line prefixed with '%' will return .I ispell to normal (non-terse) mode. A line prefixed with '`' will turn on verbose-correction mode (see below); this mode can only be disabled by turning on terse mode with '%'. .PP Any input following the prefix characters '+', '-', '#', '!', '%', or '`' is ignored, as is any input following the filename on a '\(ti' line. To allow spell-checking of lines beginning with these characters, a line starting with '^' has that character removed before it is passed to the spell-checking code. It is recommended that programmatic interfaces prefix every data line with an uparrow to protect themselves against future changes in .IR ispell . .PP To summarize these: .PP .RS .IP * Add to personal dictionary .IP @ Accept word, but leave out of dictionary .IP # Save current personal dictionary .IP \(ti Set parameters based on filename .IP + Enter TeX mode .IP - Exit TeX mode .IP ! Enter terse mode .IP % Exit terse mode .IP "`" Enter verbose-correction mode .IP ^ Spell-check rest of line .fi .RE .PP In .I terse mode, .I ispell will not print lines beginning with '*', '+', or '\-', all of which indicate correct words. This significantly improves running speed when the driving program is going to ignore correct words anyway. .PP In .I verbose-correction mode, .I ispell includes the original word immediately after the indicator character in output lines beginning with '*', '+', and '\-', which simplifies interaction for some programs. .PP The .B \-s option is only valid in conjunction with the .B \-a or .B \-A options, and only on BSD-derived systems. If specified, .I ispell will stop itself with a .B SIGTSTP signal after each line of input. It will not read more input until it receives a .B SIGCONT signal. This may be useful for handshaking with certain text editors. .PP The .B \-f option is only valid in conjunction with the .B \-a or .B \-A options. If .B \-f is specified, .I ispell will write its results to the given file, rather than to standard output. .PP The .B \-v option causes .I ispell to print its current version identification on the standard output and exit. If the switch is doubled, .I ispell will also print the options that it was compiled with. .PP The .BR \-c , .BR \-e [ 1\en5 ], and .B \-D options of .IR ispell , are primarily intended for use by the .I munchlist shell script. The .B \-c switch causes a list of words to be read from the standard input. For each word, a list of possible root words and affixes will be written to the standard output. Some of the root words will be invalid and must be filtered from the output by other means; the .I munchlist script does this. As an example, the command: .PP .RS echo BOTHER | ispell \-c .RE .PP produces: .PP .RS .nf BOTHER BOTHE/R BOTH/R .fi .RE .PP The .B \-e switch is the reverse of .BR \-c ; it expands affix flags to produce a list of words. For example, the command: .PP .RS echo BOTH/R | ispell \-e .RE .PP produces: .PP .RS .nf BOTH BOTHER .fi .RE .PP An optional expansion level can also be specified. A level of 1 .RB ( \-e1 ) is the same as .B \-e alone. A level of 2 causes the original root/affix combination to be prepended to the line: .PP .RS .nf BOTH/R BOTH BOTHER .fi .RE .PP A level of 3 causes multiple lines to be output, one for each generated word, with the original root/affix combination followed by the word it creates: .PP .RS .nf BOTH/R BOTH BOTH/R BOTHER .fi .RE .PP A level of 4 causes a floating-point number to be appended to each of the level-3 lines, giving the ratio between the length of the root and the total length of all generated words including the root: .PP .RS .nf BOTH/R BOTH 2.500000 BOTH/R BOTHER 2.500000 .fi .RE .PP A level of 5 causes multiple lines to be output, one for each generated word. If the generated word did not use any affixes, the line is just that word. If one or more affixes were used, the original root and the affixes actually used are printed, joined by a plus sign; then the generated word is printed: .PP .RS .nf BOTH BOTH+R BOTHER .fi .RE .PP Finally, the .B \-D flag causes the affix tables from the dictionary file to be dumped to standard output. .PP .I Ispell is aware of the correct capitalizations of words in the dictionary and in your personal dictionary. As well as recognizing words that must be capitalized (e.g., George) and words that must be all-capitals (e.g., NASA), it can also handle words with "unusual" capitalization (e.g., "ITCorp" or "TeX"). If a word is capitalized incorrectly, the list of possibilities will include all acceptable capitalizations. (More than one capitalization may be acceptable; for example, my dictionary lists both "ITCorp" and "ITcorp".) .PP Normally, this feature will not cause you surprises, but there is one circumstance you need to be aware of. If you use "I" to add a word to your dictionary that is at the beginning of a sentence (e.g., the first word of this paragraph if "normally" were not in the dictionary), it will be marked as "capitalization required". A subsequent usage of this word without capitalization (e.g., the quoted word in the previous sentence) will be considered a misspelling by .IR ispell , and it will suggest the capitalized version. You must then compare the actual spellings by eye, and then type "I" to add the uncapitalized variant to your personal dictionary. You can avoid this problem by using "U" to add the original word, rather than "I". .PP The rules for capitalization are as follows: .IP (1) Any word may appear in all capitals, as in headings. .IP (2) Any word that is in the dictionary in all-lowercase form may appear either in lowercase or capitalized (as at the beginning of a sentence). .IP (3) Any word that has "funny" capitalization (i.e., it contains both cases and there is an uppercase character besides the first) must appear exactly as in the dictionary, except as permitted by rule (1). If the word is acceptable in all-lowercase, it must appear thus in a dictionary entry. .SS buildhash .PP The .I buildhash program builds hashed dictionary files for later use by .I ispell. The raw word list (with affix flags) is given in .IR dict-file , and the affix flags are defined by .IR affix-file . The hashed output is written to .IR hash-file . The formats of the two input files are described in .IR ispell (!!MAN45SECT!!). The .B \-s (silent) option suppresses the usual status messages that are written to the standard error device. .SS munchlist .PP The .I munchlist shell script is used to reduce the size of dictionary files, primarily personal dictionary files. It is also capable of combining dictionaries from various sources. The given .I files are read (standard input if no arguments are given), reduced to a minimal set of roots and affixes that will match the same list of words, and written to standard output. .PP Input for munchlist contains of raw words (e.g from your personal dictionary files) or root and affix combinations (probably generated in earlier munchlist runs). Each word or root/affix combination must be on a separate line. .PP The .B \-D (debug) option leaves temporary files around under standard names instead of deleting them, so that the script can be debugged. Warning: on a multiuser system, this can be a security hole. To avoid possible destruction of important files, don't run the script as root, and set MUNCHDEBUGDIR to the name of a directory that only you can access. .PP The .B \-v (verbose) option causes progress messages to be reported to stderr so you won't get nervous that .I munchlist has hung. .PP If the .B \-s (strip) option is specified, words that are in the specified .I hash-file are removed from the word list. This can be useful with personal dictionaries. .PP The .B \-l option can be used to specify an alternate .I affix-file for munching dictionaries in languages other than English. .PP The .B \-c option can be used to convert dictionaries that were built with an older affix file, without risk of accidentally introducing unintended affix combinations into the dictionary. .PP The .B \-T option allows dictionaries to be converted to a canonical string-character format. The suffix specified is looked up in the affix file .RB ( \-l switch) to determine the string-character format used for the input file; the output always uses the canonical string-character format. For example, a dictionary collected from TeX source files might be converted to canonical format by specifying .BR "\-T tex" . .PP The .B \-w option is passed on to .IR ispell . .SS findaffix .PP The .I findaffix shell script is an aid to writers of new language descriptions in choosing affixes. The given dictionary .I files (standard input if none are given) are examined for possible prefixes .RB ( \-p switch) or suffixes .RB ( \-s switch, the default). Each commonly-occurring affix is presented along with a count of the number of times it appears and an estimate of the number of bytes that would be saved in a dictionary hash file if it were added to the language table. Only affixes that generate valid roots (found in the original input) are listed. .PP If the "\-c" option is not given, the output lines are in the following format: .IP strip/add/count/bytes .PP where .I strip is the string that should be stripped from a root word before adding the affix, .I add is the affix to be added, .I count is a count of the number of times that this .IR strip / add combination appears, and .I bytes is an estimate of the number of bytes that might be saved in the raw dictionary file if this combination is added to the affix file. The field separator in the output will be the tab character specified by the .B -t switch; the default is a slash ("/"). .PP If the .B \-c ("clean output") option is given, the appearance of the output is made visually cleaner (but harder to post-process) by changing it to: .IP -strip+addcountbytes .PP where .IR strip , .IR add , .IR count , and .I bytes are as before, and .I "" represents the ASCII tab character. .PP The method used to generate possible affixes will also generate longer affixes which have common headers or trailers. For example, the two words "moth" and "mother" will generate not only the obvious substitution "+er" but also "-h+her" and "-th+ther" (and possibly even longer ones, depending on the value of .IR min ). To prevent cluttering the output with such affixes, any affix pair that shares a common header (or, for prefixes, trailer) string longer than .I elim characters (default 1) will be suppressed. You may want to set "elim" to a value greater than 1 if your language has string characters; usually the need for this parameter will become obvious when you examine the output of your .I findaffix run. .PP Normally, the affixes are sorted according to the estimate of bytes saved. The .B \-f switch may be used to cause the affixes to be sorted by frequency of appearance. .PP To save output file space, affixes which occur fewer than 10 times are eliminated; this limit may be changed with the .B \-l switch. The .B \-M switch specifies a maximum affix length (default 8). Affixes longer than this will not be reported. (This saves on temporary disk space and makes the script run faster.) .PP Affixes which generate stems shorter than 3 characters are suppressed. (A stem is the word after the .I strip string has been removed, and before the .I add string has been added.) This reduces both the running time and the size of the output file. This limit may be changed with the .B \-m switch. The minimum stem length should only be set to 1 if you have a .I lot of free time and disk space (in the range of many days and hundreds of megabytes). .PP The .I findaffix script requires a non-blank field-separator character for internal use. Normally, this character is a slash ("/"), but if the slash appears as a character in the input word list, a different character can be specified with the .B \-t switch. .PP Ispell dictionaries should be expanded before being fed to .IR findaffix ; in addition, characters that are not in the English alphabet (if any) should be translated to lowercase. .SS tryaffix .PP The .I tryaffix shell script is used to estimate the effectiveness of a proposed prefix .RB ( \-p switch) or suffix .RB ( \-s switch, the default) with a given .IR expanded-file . Only one affix can be tried with each execution of .IR tryaffix , although multiple arguments can be used to describe varying forms of the same affix flag (e.g., the .B D flag for English can add either .I D or .I ED depending on whether a trailing E is already present). Each word in the expanded dictionary that ends (or begins) with the chosen suffix (or prefix) has that suffix (prefix) removed; the dictionary is then searched for root words that match the stripped word. Normally, all matching roots are written to standard output, but if the .B \-c (count) flag is given, only a statistical summary of the results is written. The statistics given are a count of words the affix potentially applies to and an estimate of the number of dictionary bytes that a flag using the affix would save. The estimate will be high if the flag generates words that are currently generated by other affix flags (e.g., in English, .I bathers can be generated by either .I bath/X or .IR bather/S ). .P The dictionary file, .IR expanded-file , must already be expanded (using the .B \-e switch of .IR ispell ) and sorted, and things will usually work best if uppercase has been folded to lower with 'tr'. .PP The .I affix arguments are things to be stripped from the dictionary file to produce trial roots: for English, .I con (prefix) and .I ing (suffix) are examples. The .I addition parts of the argument are letters that would have been stripped off the root before adding the affix. For example, in English the affix .I ing normally strips .I e for words ending in that letter (e.g., .I like becomes .IR liking ) so we might run: .PP .RS .nf tryaffix ing ing+e .fi .RE .PP to cover both cases. .PP All of the shell scripts contain documentation as commentary at the beginning; sometimes these comments contain useful information beyond the scope of this manual page. .PP It is possible to install .I ispell in such a way as to only support ASCII range text if desired. .SS icombine The .I icombine program is a helper for .IR munchlist . It reads a list of words in dictionary format (roots plus flags) from the standard input, and produces a reduced list on standard output which combines common roots found on adjacent entries. Identical roots which have differing flags will have their flags combined, and roots which have differing capitalizations will be combined in a way which only preserves important capitalization information. The optional .I aff-file specifies a language file which defines the character sets used and the meanings of the various flags. The .B \-T switch can be used to select among alternative string character types by giving a dummy suffix that can be found in an .B altstringtype statement. The .B \-w switch is identical to the same switch in .IR ispell . .SS ijoin The .I ijoin program is a re-implementation of .IR join (1) which handles long lines and 8-bit characters correctly. The .B \-s switch specifies that the .IR sort (1) program used to prepare the input to .I ijoin uses signed comparisons on 8-bit characters; the .B \-u switch specifies that .IR sort (1) uses unsigned comparisons. All other options and behaviors of .IR join (1) are duplicated as exactly as possible based on the manual page, except that .I ijoin will not handle newline as a field separator. See the .IR join (1) manual page for more information. .SH ENVIRONMENT .IP DICTIONARY Default dictionary to use, if no .B \-d flag is given. .IP ISPELL_CHARSET Formatter type or character encoding to use, if none is chosen by a flag option. .IP WORDLIST Personal dictionary file name .IP INCLUDE_STRING Code for file inclusion under the .B \-A option .IP TMPDIR Directory used for some of munchlist's temporary files .IP MUNCHDEBUGDIR Directory used to hold the output of munchlists' .B \-D option. .IP TEXSKIP1 List of single-argument TeX keywords that .I ispell should ignore. .IP TEXSKIP2 List of two-argument TeX keywords that .I ispell should ignore. .IP HTMLIGNORE List of HTML keywords that delimit text that should not be spell-checked. .IP HTMLCHECK List of HTML fields that should always be spell-checked, even inside a tag. .SH FILES .IP !!LIBDIR!!/!!DEFHASH!! Hashed dictionary (may be found in some other local directory, depending on the system). .IP !!LIBDIR!!/!!DEFLANG!! Affix-definition file for .I munchlist .IP !!WORDS!! For the Lookup function. .IP $HOME/.ispell_\fIhashfile\fP User's private dictionary .IP .ispell_\fIhashfile\fP Directory-specific private dictionary .SH SEE ALSO .IR egrep (1), !!LOOK_XREF!! .IR join (1), .IR sort (1), !!SPELL_XREF!! .IR sq (1), !!TIB_XREF!! .IR ispell (!!MAN45SECT!!), .IR english (!!MAN45SECT!!) .SH BUGS .I Ispell should understand more .I troff syntax, and deal more intelligently with contractions. .sp Although small personal dictionaries are sorted before they are written out, the order of capitalizations of the same word is somewhat random. .sp When the .B \-x flag is specified, .I ispell will unlink any existing !!BAKEXT!!\& file. .sp There are too many flags, and many of them have non-mnemonic names. .sp The .B \-e flag should accept mnemonic arguments instead of numeric ones. .sp .I Munchlist does not deal very gracefully with dictionaries which contain "non-word" characters. Such characters ought to be deleted from the dictionary with a warning message. .SH AUTHOR Pace Willisson (pace@mit-vax), 1983, based on the PDP-10 assembly version. That version was written by R.\& E.\& Gorin in 1971, and later revised by W.\& E.\& Matson (1974) and W.\& B.\& Ackerman (1978). .P Collected, revised, and enhanced for the Usenet by Walt Buehring, 1987. .P Table-driven multi-lingual version by Geoff Kuenning, 1987\(en88. .P Large dictionaries provided by Bob Devine (vianet!devine). .P A complete list of contributors is too large to list here, but is distributed with the .I ispell sources in the file "Contributors". .SH VERSION The version of .I ispell described by this manual page is !!VERSION!!. ispell-3.4.02/PaxHeaders.22185/version.h0000644000000000000000000000013213776416103014474 xustar0030 mtime=1610226755.297053715 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/version.h0000444003214100001440000000664513776416103015560 0ustar00geofffaculty00000000000000#ifndef VERSION_H_INCLUDED #define VERSION_H_INCLUDED /* * Since the strings in this file are printed out when the "-v" switch is * given to ispell, you may want to translate them into your native language. * However, any translation of these strings MUST accurately preserve the * legal rights under international law; you may wish to consult a lawyer * about this since you will be responsible for the results of any * incorrect translation. */ static char * Version_ID[] = { "@(#) International Ispell Version 3.4.02 08 Jan 2021", "@(#) Copyright (c), 1983, by Pace Willisson", "@(#) International version Copyright (c) 1987, 1988, 1990-1995, 1999,", "@(#) 2001, 2002, 2005, 2015, 2021 by Geoff Kuenning, Claremont, CA.", "@(#) All rights reserved.", "@(#)", "@(#) The official ispell Web site is at:", "@(#)", "@(#) http://www.cs.hmc.edu/geoff/ispell.html", "@(#)", "@(#) You should always check that site to see whether you have the", "@(#) latest version of ispell.", "@(#)", "@(#) Report bugs to ispell-bugs@itcorp.com. Report Emacs-related bugs", "@(#) to ispell-el-bugs@itcorp.com.", "@(#)", "@(#) Redistribution and use in source and binary forms, with or without", "@(#) modification, are permitted provided that the following conditions", "@(#) are met:", "@(#)", "@(#) 1. Redistributions of source code must retain the above copyright", "@(#) notice, this list of conditions and the following disclaimer.", "@(#) 2. Redistributions in binary form must reproduce the above", "@(#) copyright notice, this list of conditions and the following", "@(#) disclaimer in the documentation and/or other materials provided", "@(#) with the distribution.", "@(#) 3. All modifications to the source code must be clearly marked as", "@(#) such. Binary redistributions based on modified source code", "@(#) must be clearly marked as modified versions in the documentation", "@(#) and/or other materials provided with the distribution.", "@(#) 4. The code that causes the 'ispell -v' command to display a", "@(#) prominent link to the official ispell Web site may not be", "@(#) removed.", "@(#) 5. The name of Geoff Kuenning may not be used to endorse or promote", "@(#) products derived from this software without specific prior", "@(#) written permission.", "@(#)", "@(#) THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS", "@(#) IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT", "@(#) LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS", "@(#) FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GEOFF", "@(#) KUENNING OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,", "@(#) INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES", "@(#) (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR", "@(#) SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)", "@(#) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,", "@(#) STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)", "@(#) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED", "@(#) OF THE POSSIBILITY OF SUCH DAMAGE.", NULL }; static char RCS_Version_ID[] = "$Id: version.h,v 1.62 2021-01-09 13:12:35-08 geoff Exp $"; #endif /* VERSION_H_INCLUDED */ ispell-3.4.02/PaxHeaders.22185/sq.10000644000000000000000000000007410227500137013335 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/sq.10000444003214100001440000000724210227500137014406 0ustar00geofffaculty00000000000000.\" .\" $Id: sq.1,v 1.12 2005/04/14 14:38:23 geoff Exp $ .\" .\" Copyright 1992, 1993, 1999, 2001, Geoff Kuenning, Claremont, CA .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All modifications to the source code must be clearly marked as .\" such. Binary redistributions based on modified source code .\" must be clearly marked as modified versions in the documentation .\" and/or other materials provided with the distribution. .\" 4. The code that causes the 'ispell -v' command to display a prominent .\" link to the official ispell Web site may not be removed. .\" 5. The name of Geoff Kuenning may not be used to endorse or promote .\" products derived from this software without specific prior .\" written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" $Log: sq.1,v $ .\" Revision 1.12 2005/04/14 14:38:23 geoff .\" Update license. .\" .\" Revision 1.11 2001/07/25 21:51:46 geoff .\" Minor license update. .\" .\" Revision 1.10 2001/07/23 20:24:04 geoff .\" Update the copyright and the license. .\" .\" Revision 1.9 2000/07/19 23:30:12 geoff .\" Add a bugs section, and mention gzip instead of compress .\" .\" Revision 1.8 1999/01/07 01:57:39 geoff .\" Update the copyright. .\" .\" Revision 1.7 1995/11/08 05:09:25 geoff .\" Put the synopsis on one line so some versions of "makewhatis" don't .\" break. .\" .\" Revision 1.6 1994/01/25 07:12:07 geoff .\" Get rid of all old RCS log lines in preparation for the 3.1 release. .\" .\" .TH SQ 1 LOCAL .SH NAME sq, unsq \- squeeze or unsqueeze a sorted word list .SH SYNOPSIS .B sq < infile > outfile .PP .B unsq < infile > outfile .SH DESCRIPTION .I sq compresses a sorted list of words (a dictionary). For example: .RS sort -u /usr/dict/words | sq | gzip -9 > words.sq.Z .RE will compress dict by about a factor of 5. .PP .I unsq uncompress the output of .I sq. For example: .RS gunzip < words.sq.gz | unsq | sort -f -o words .RE will uncompress a dictionary compressed with .I sq. .P The squeezing is achieved by eliminating common prefixes, and replacing them with a single character which encodes the number of characters shared with the preceding word. The prefix size is encoded as a single printable character: 0-9 represent 0-9, A-Z represent 10-35, and a-z represent 36-61. .SH BUGS .I sq and .I unsq can only handle words of up to 256 characters. The input must be sorted, and duplicates must be suppressed. .SH AUTHOR Mike Wexler .SH SEE ALSO compress(1), sort(1). ispell-3.4.02/PaxHeaders.22185/buildhash.c0000644000000000000000000000013113773270305014743 xustar0029 mtime=1609396421.91528186 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/buildhash.c0000444003214100001440000004471313773270305016026 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: buildhash.c,v 1.76 2020-12-30 22:33:41-08 geoff Exp $"; #endif #define MAIN /* * buildhash.c - make a hash table for ispell * * Pace Willisson, 1983 * * Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: buildhash.c,v $ * Revision 1.76 2020-12-30 22:33:41-08 geoff * Add the character-set options to the hash file. * * Revision 1.75 2008-02-21 01:55:36-08 geoff * When the hash teable overflows, null out the "next" pointer so that if * the table is used, ispell won't follow a garbage pointer and crash. * * Revision 1.74 2005/04/28 00:26:06 geoff * Re-count the dictionary file every time, rather than depending on a * file to hold the correct count. This is necessary because the changes * for MS-DOS support caused us to generate non-unique count-file names, * which in turn could cause buildhash to fail. There really isn't a * need for count files any more; they were only a performance * improvement and modern computers are fast enough that it doesn't * matter. * * Revision 1.73 2005/04/14 21:25:52 geoff * Declare ints-that-hold-pointers as unsigned, just for safety. * * Revision 1.72 2005/04/14 14:38:23 geoff * Update license and copyright. Fix a count-file-naming bug introduced * in a recent delta. Regenerate the count file if it has the same mtime * as the dictionary (otherwise you can have bugs on fast machines). Fix * some small type bugs. * * Revision 1.71 2001/09/06 00:30:28 geoff * Many changes from Eli Zaretskii to support DJGPP compilation. * * Revision 1.70 2001/07/25 21:51:45 geoff * Minor license update. * * Revision 1.69 2001/07/23 20:24:02 geoff * Update the copyright and the license. * * Revision 1.68 2001/06/14 09:11:11 geoff * Use a non-conflicting macro for bcopy to avoid compilation problems on * smarter compilers. * * Revision 1.67 2000/08/22 10:52:25 geoff * Fix a whole bunch of signed/unsigned compiler warnings. * * Revision 1.66 1999/01/07 01:22:32 geoff * Update the copyright. * * Revision 1.65 1997/12/02 06:24:33 geoff * Get rid of an obsolete reference to "okspell". Get rid of some * compile options that really shouldn't be optional. * * Revision 1.64 1995/01/08 23:23:26 geoff * Make the various file suffixes configurable for DOS purposes. * * Revision 1.63 1994/10/26 05:12:25 geoff * Get rid of some duplicate declarations. * * Revision 1.62 1994/07/28 05:11:33 geoff * Log message for previous revision: distinguish a zero count from a bad * count file. * * Revision 1.61 1994/07/28 04:53:30 geoff * * Revision 1.60 1994/01/25 07:11:18 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include "config.h" #include "ispell.h" #include "proto.h" #include "msgs.h" #include "version.h" #include #include int main P ((int argc, char * argv[])); static void output P ((void)); static void filltable P ((void)); VOID * mymalloc P ((unsigned int size)); VOID * myrealloc P ((VOID * ptr, unsigned int size, unsigned int oldsize)); void myfree P ((VOID * ptr)); static void readdict P ((void)); static unsigned int newcount P ((void)); #define NSTAT 100 /* Size probe-statistics table */ char * Dfile; /* Name of dictionary file */ char * Hfile; /* Name of hash (output) file */ char * Lfile; /* Name of language file */ char Sfile[MAXPATHLEN]; /* Name of statistics file */ static int silent = 0; /* NZ to suppress count reports */ int main (argc, argv) int argc; char * argv[]; { int avg; char * lastdot; FILE * statf; int stats[NSTAT]; unsigned int i; int j; while (argc > 1 && *argv[1] == '-') { argc--; argv++; switch (argv[0][1]) { case 's': silent = 1; break; } } if (argc == 4) { Dfile = argv[1]; Lfile = argv[2]; Hfile = argv[3]; } else { (void) fprintf (stderr, BHASH_C_USAGE); return 1; } if (yyopen (Lfile)) /* Open the language file */ return 1; yyinit (); /* Set up for the parse */ if (yyparse ()) /* Parse the language tables */ exit (1); strcpy (Sfile, Dfile); lastdot = rindex (Sfile, '.'); if (lastdot != NULL) *lastdot = '\0'; strcat (Sfile, STATSUFFIX); #ifdef MSDOS /* ** MS-DOS doesn't allow more than one dot in the filename part. ** If we have more than that, convert all the dots but the last into ** underscores. The OS will truncate excess characters beyond 8+3. */ lastdot = rindex (Sfile, '.'); if (lastdot != NULL && lastdot > Sfile) { while (--lastdot >= Sfile) { if (*lastdot == '.') *lastdot = '_'; } } #endif /* MSDOS */ hashsize = newcount (); if (hashsize == 0) { (void) fprintf (stderr, BHASH_C_ZERO_COUNT); exit (1); } readdict (); if ((statf = fopen (Sfile, "w")) == NULL) { (void) fprintf (stderr, CANT_CREATE, Sfile, MAYBE_CR (stderr)); exit (1); } for (i = 0; i < NSTAT; i++) stats[i] = 0; for (i = 0; i < hashsize; i++) { struct dent * dp; dp = &hashtbl[i]; if ((dp->flagfield & USED) != 0) { for (j = 0; dp != NULL; j++, dp = dp->next) { if (j >= NSTAT) j = NSTAT - 1; stats[j]++; } } } for (i = 0, j = 0, avg = 0; i < NSTAT; i++) { j += stats[i]; avg += stats[i] * (i + 1); if (j == 0) (void) fprintf (statf, "%d:\t%d\t0\t0.0\n", i + 1, stats[i]); else (void) fprintf (statf, "%d:\t%d\t%d\t%f\n", i + 1, stats[i], j, (double) avg / j); } (void) fclose (statf); filltable (); output (); return 0; } static void output () { register FILE * houtfile; register struct dent * dp; unsigned long strptr; int n; unsigned int i; int maxplen; int maxslen; struct flagent * fentry; if ((houtfile = fopen (Hfile, "wb")) == NULL) { (void) fprintf (stderr, CANT_CREATE, Hfile, MAYBE_CR (stderr)); return; } hashheader.stringsize = 0; hashheader.lstringsize = 0; hashheader.tblsize = hashsize; (void) fwrite ((char *) &hashheader, sizeof hashheader, 1, houtfile); strptr = 0; /* ** Put out the strings from the flags table. This code assumes that ** the size of the hash header is a multiple of the size of ichar_t, ** and that any long can be converted to an (ichar_t *) and back ** without damage (or, more accurately, without damaging those ** low-order bits necessary to represent the largest offset in the ** string table). */ maxslen = 0; for (i = 0, fentry = sflaglist; i < numsflags; i++, fentry++) { if (fentry->stripl) { (void) fwrite ((char *) fentry->strip, fentry->stripl + 1, sizeof (ichar_t), houtfile); fentry->strip = (ichar_t *) strptr; strptr += (fentry->stripl + 1) * sizeof (ichar_t); } if (fentry->affl) { (void) fwrite ((char *) fentry->affix, fentry->affl + 1, sizeof (ichar_t), houtfile); fentry->affix = (ichar_t *) strptr; strptr += (fentry->affl + 1) * sizeof (ichar_t); } n = fentry->affl - fentry->stripl; if (n < 0) n = -n; if (n > maxslen) maxslen = n; } maxplen = 0; for (i = 0, fentry = pflaglist; i < numpflags; i++, fentry++) { if (fentry->stripl) { (void) fwrite ((char *) fentry->strip, fentry->stripl + 1, sizeof (ichar_t), houtfile); fentry->strip = (ichar_t *) strptr; strptr += (fentry->stripl + 1) * sizeof (ichar_t); } if (fentry->affl) { (void) fwrite ((char *) fentry->affix, fentry->affl + 1, sizeof (ichar_t), houtfile); fentry->affix = (ichar_t *) strptr; strptr += (fentry->affl + 1) * sizeof (ichar_t); } n = fentry->affl - fentry->stripl; if (n < 0) n = -n; if (n > maxplen) maxplen = n; } /* ** Write out the string character type tables. */ hashheader.strtypestart = strptr; for (i = 0; i < hashheader.nstrchartype; i++) { n = strlen ((char *) chartypes[i].name) + 1; (void) fwrite ((char *) chartypes[i].name, n, 1, houtfile); strptr += n; n = strlen (chartypes[i].deformatter) + 1; (void) fwrite (chartypes[i].deformatter, n, 1, houtfile); strptr += n; for (n = 0; chartypes[i].suffixes[n] != '\0'; n += strlen (&chartypes[i].suffixes[n]) + 1) ; n++; (void) fwrite (chartypes[i].suffixes, n, 1, houtfile); strptr += n; (void) fwrite (&chartypes[i].options, 1, 1, houtfile); strptr++; } hashheader.lstringsize = strptr; /* We allow one extra byte because missingletter() may add one byte */ maxslen += maxplen + 1; if (maxslen > MAXAFFIXLEN) { (void) fprintf (stderr, BHASH_C_BAFF_1 (MAXAFFIXLEN, maxslen - MAXAFFIXLEN)); (void) fprintf (stderr, BHASH_C_BAFF_2); } /* Put out the dictionary strings */ for (i = 0, dp = hashtbl; i < hashsize; i++, dp++) { if (dp->word == NULL) dp->word = (unsigned char *) -1; else { n = strlen ((char *) dp->word) + 1; (void) fwrite (dp->word, n, 1, houtfile); dp->word = (unsigned char *) strptr; strptr += n; } } /* Pad file to a struct dent boundary for efficiency. */ n = (strptr + sizeof hashheader) % sizeof (struct dent); if (n != 0) { n = sizeof (struct dent) - n; strptr += n; while (--n >= 0) (void) putc ('\0', houtfile); } /* Put out the hash table itself */ for (i = 0, dp = hashtbl; i < hashsize; i++, dp++) { if (dp->next != 0) { unsigned long x; x = dp->next - hashtbl; dp->next = (struct dent *)x; } else { dp->next = (struct dent *)-1; } #ifdef PIECEMEAL_HASH_WRITES (void) fwrite ((char *) dp, sizeof (struct dent), 1, houtfile); #endif /* PIECEMEAL_HASH_WRITES */ } #ifndef PIECEMEAL_HASH_WRITES (void) fwrite ((char *) hashtbl, sizeof (struct dent), hashsize, houtfile); #endif /* PIECEMEAL_HASH_WRITES */ /* Put out the language tables */ (void) fwrite ((char *) sflaglist, sizeof (struct flagent), numsflags, houtfile); hashheader.stblsize = numsflags; (void) fwrite ((char *) pflaglist, sizeof (struct flagent), numpflags, houtfile); hashheader.ptblsize = numpflags; /* Finish filling in the hash header. */ hashheader.stringsize = strptr; rewind (houtfile); (void) fwrite ((char *) &hashheader, sizeof hashheader, 1, houtfile); (void) fclose (houtfile); } static void filltable () { struct dent *freepointer, *nextword, *dp; struct dent *hashend; int i; int overflows; hashend = hashtbl + hashsize; for (freepointer = hashtbl; (freepointer->flagfield & USED) && freepointer < hashend; freepointer++) ; overflows = 0; for (nextword = hashtbl, i = hashsize; i != 0; nextword++, i--) { if ((nextword->flagfield & USED) == 0) continue; if (nextword->next >= hashtbl && nextword->next < hashend) continue; dp = nextword; while (dp->next) { if (freepointer >= hashend) { overflows++; dp->next = NULL; break; } else { *freepointer = *(dp->next); dp->next = freepointer; dp = freepointer; while ((freepointer->flagfield & USED) && freepointer < hashend) freepointer++; } } } if (overflows) (void) fprintf (stderr, BHASH_C_OVERFLOW, overflows); } #if MALLOC_INCREMENT == 0 VOID * mymalloc (size) unsigned int size; { return malloc (size); } /* ARGSUSED */ VOID * myrealloc (ptr, size, oldsize) VOID * ptr; unsigned int size; unsigned int oldsize; { return realloc (ptr, size); } void myfree (ptr) VOID * ptr; { free (ptr); } #else VOID * mymalloc (size) /* Fast, unfree-able variant of malloc */ unsigned int size; { VOID * retval; static unsigned int bytesleft = 0; static VOID * nextspace; if (size < 4) size = 4; size = (size + 7) & ~7; /* Assume doubleword boundaries are enough */ if (bytesleft < size) { bytesleft = (size < MALLOC_INCREMENT) ? MALLOC_INCREMENT : size; nextspace = malloc ((unsigned) bytesleft); if (nextspace == NULL) { bytesleft = 0; return NULL; } } retval = nextspace; nextspace = (VOID *) ((char *) nextspace + size); bytesleft -= size; return retval; } VOID * myrealloc (ptr, size, oldsize) VOID * ptr; unsigned int size; unsigned int oldsize; { VOID *nptr; nptr = mymalloc (size); if (nptr == NULL) return NULL; (void) BCOPY (ptr, nptr, oldsize); return nptr; } /* ARGSUSED */ void myfree (ptr) VOID * ptr; { } #endif static void readdict () { struct dent d; register struct dent * dp; struct dent * lastdp; unsigned char lbuf[INPUTWORDLEN + MAXAFFIXLEN + 2 * MASKBITS]; unsigned char ucbuf[INPUTWORDLEN + MAXAFFIXLEN + 2 * MASKBITS]; FILE * dictf; int i; int h; if ((dictf = fopen (Dfile, "r")) == NULL) { (void) fprintf (stderr, BHASH_C_CANT_OPEN_DICT); exit (1); } hashtbl = (struct dent *) calloc ((unsigned) hashsize, sizeof (struct dent)); if (hashtbl == NULL) { (void) fprintf (stderr, BHASH_C_NO_SPACE); exit (1); } i = 0; while (fgets ((char *) lbuf, sizeof lbuf, dictf) != NULL) { if (!silent && (i % 1000) == 0) { (void) fprintf (stderr, "%d ", i); (void) fflush (stdout); } i++; if (makedent (lbuf, sizeof lbuf, &d) < 0) continue; h = hash (strtosichar (d.word, 1), hashsize); dp = &hashtbl[h]; if ((dp->flagfield & USED) == 0) { *dp = d; /* ** If it's a followcase word, we need to make this a ** special dummy entry, and add a second with the ** correct capitalization. */ if (captype (d.flagfield) == FOLLOWCASE) { if (addvheader (dp)) exit (1); } } else { /* ** Collision. Skip to the end of the collision ** chain, or to a pre-existing entry for this ** word. Note that d.word always exists at ** this point. */ (void) strcpy ((char *) ucbuf, (char *) d.word); chupcase (ucbuf); while (dp != NULL) { if (strcmp ((char *) dp->word, (char *) ucbuf) == 0) break; while (dp->flagfield & MOREVARIANTS) dp = dp->next; dp = dp->next; } if (dp != NULL) { /* ** A different capitalization is already in ** the dictionary. Combine capitalizations. */ if (combinecaps (dp, &d) < 0) exit (1); } else { /* Insert a new word into the dictionary */ for (dp = &hashtbl[h]; dp->next != NULL; ) dp = dp->next; lastdp = dp; dp = (struct dent *) mymalloc (sizeof (struct dent)); if (dp == NULL) { (void) fprintf (stderr, BHASH_C_COLLISION_SPACE); exit (1); } *dp = d; lastdp->next = dp; dp->next = NULL; /* ** If it's a followcase word, we need to make this a ** special dummy entry, and add a second with the ** correct capitalization. */ if (captype (d.flagfield) == FOLLOWCASE) { if (addvheader (dp)) exit (1); } } } } if (!silent) (void) fprintf (stderr, "\n"); (void) fclose (dictf); } static unsigned int newcount () { unsigned char buf[INPUTWORDLEN + MAXAFFIXLEN + 2 * MASKBITS]; register unsigned int count; ichar_t ibuf[INPUTWORDLEN + MAXAFFIXLEN + 2 * MASKBITS]; register FILE * d; ichar_t lastibuf[sizeof ibuf / sizeof (ichar_t)]; int headercounted; int followcase; register char * cp; if (!silent) (void) fprintf (stderr, BHASH_C_COUNTING); if ((d = fopen (Dfile, "r")) == NULL) { (void) fprintf (stderr, BHASH_C_CANT_OPEN_DICT); exit (1); } headercounted = 0; lastibuf[0] = 0; for (count = 0; fgets ((char *) buf, sizeof buf, d); ) { if ((++count % 1000) == 0 && !silent) { (void) fprintf (stderr, "%d ", count); (void) fflush (stdout); } cp = index ((char *) buf, hashheader.flagmarker); if (cp != NULL) *cp = '\0'; if (strtoichar (ibuf, buf, INPUTWORDLEN * sizeof (ichar_t), 1)) (void) fprintf (stderr, WORD_TOO_LONG (buf)); followcase = (whatcap (ibuf) == FOLLOWCASE); upcase (ibuf); if (icharcmp (ibuf, lastibuf) != 0) headercounted = 0; else if (!headercounted) { /* First duplicate will take two entries */ if ((++count % 1000) == 0 && !silent) { (void) fprintf (stderr, "%d ", count); (void) fflush (stdout); } headercounted = 1; } if (!headercounted && followcase) { /* It's followcase and the first entry -- count again */ if ((++count % 1000) == 0 && !silent) { (void) fprintf (stderr, "%d ", count); (void) fflush (stdout); } headercounted = 1; } (void) icharcpy (lastibuf, ibuf); } (void) fclose (d); if (!silent) (void) fprintf (stderr, BHASH_C_WORD_COUNT, count); return count; } ispell-3.4.02/PaxHeaders.22185/subset.X0000644000000000000000000000013212465617735014304 xustar0030 mtime=1423384541.153510949 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/subset.X0000555003214100001440000001762512465617735015373 0ustar00geofffaculty00000000000000!!POUNDBANG!! # # $Id: subset.X,v 1.23 2015-02-08 00:35:41-08 geoff Exp $ # # Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # Combine and resolve various dictionaries so they are proper # subsets of one another, and so that maximal use is made of # flags in the smaller ones. # # Usage: # # subset [-b base] [-l langfile] small-dict bigger-dict ... biggest-dict # # The output is a an equal number of successively-larger # dictionaries. The smallest is written to "dict.0". Successive # files are named "dict.1", "dict.2", and so forth, and each contains # a list of words which should be added to the previous files to # generate a dictionary. Words which are in smaller dictionaries are # effectively propagated to the larger ones, so that the smaller ones # are proper subsets of their siblings. If dictionaries are # completely disjoint, this may result in an empty output dictionary. # Affix flags are propagated to the smallest dictionary containing # the root word; this expands the effectiveness of small dictionaries # at no cost in hash table space. # # The -b switch is used to specify a different base name for the # output files than "dict". (In other words, "-b english" would # produce output in english.0, english.1, etc.). # # If the -l switch is specified, the language tables are gotten # from the specified file; otherwise they come from $LIBDIR/!!DEFLANG!!. # # Input dictionaries should be "clean"; if non-word characters # appear in the dictionaries, the script may produce incorrect output. # # $Log: subset.X,v $ # Revision 1.23 2015-02-08 00:35:41-08 geoff # Be a bit more paranoid about creating temporary files. Fix a sorting # bug that caused join to complain. # # Revision 1.22 2005/04/27 01:18:35 geoff # Work around idiotic POSIX incompatibilities in sort. Add secure # temp-file handling. # # Revision 1.21 2005/04/14 14:39:33 geoff # Use /tmp as the default temp directory # # Revision 1.20 2005/04/14 14:38:23 geoff # Update license. Protect against modernized (i.e., incompatible) and # internationalized sort commands. Fix a place where the affix table # wasn't passed to munchlist. # # Revision 1.19 2001/09/06 00:30:29 geoff # Many changes from Eli Zaretskii to support DJGPP compilation. # # Revision 1.18 2001/07/25 21:51:46 geoff # Minor license update. # # Revision 1.17 2001/07/23 20:24:04 geoff # Update the copyright and the license. # # Revision 1.16 1999/01/07 01:57:42 geoff # Update the copyright. # # Revision 1.15 1995/01/08 23:23:47 geoff # Support variable hashfile suffixes for DOS purposes. # # Revision 1.14 1994/01/25 07:12:10 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # # # The following is necessary so that some internationalized versions of # sort(1) don't confuse things by sorting into a nonstandard order. # LANG=C LOCALE=C LC_ALL=C LC_COLLATE=C LC_CTYPE=C export LANG LOCALE LC_COLLATE LC_CTYPE # # The following aren't strictly necessary, but I've been made paranoid # by problems with the stuff above. It can't hurt to set them to a # sensible value. LC_MESSAGES=C LC_MONETARY=C LC_NUMERIC=C LC_TIME=C export LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME LIBDIR=!!LIBDIR!! TDIR=${TMPDIR-/tmp} TEMPDIR=`mktemp -d ${TDIR}/ssetXXXXXXXXXX 2>/dev/null` || (umask 077; mkdir "$TDIR/sset$$" || (echo "Can't create temp directory: ${TDIR}/sset$$" 1>&2; exit 1); TEMPDIR="$TDIR/sset$$") TMP=${TEMPDIR}/sset. SORTTMP="-T ${TDIR}" # !!SORTTMP!! USAGE="Usage: subset [-b base] [-l langfile] dict-0 dict-1 ..." langtabs=${LIBDIR}/!!DEFLANG!! outbase=dict while : do case "$1" in -b) outbase="$2" shift; shift ;; -l) langtabs="$2" shift; shift ;; -*) echo "$USAGE" 1>&2 exit 1 ;; *) break ;; esac done if [ $# -lt 2 ] then echo "$USAGE" 1>&2 exit 1 fi # Temp files MUNCHOUTPUT=${TMP}a MISSINGWORDS=${TMP}b TEMPDICT=${TMP}c FAKEDICT=${TMP}d FAKEHASH=${TMP}e!!HASHSUFFIX!! trap "rm -rf $TEMPDIR; exit 1" 1 2 15 trap "rm -rf $TEMPDIR; exit 0" 13 # # Create a dummy dictionary to hold a compiled copy of the language # tables. # echo 'QQQQQQQQ' > $FAKEDICT buildhash -s $FAKEDICT $langtabs $FAKEHASH \ || (echo "Couldn't create fake hash file" 1>&2; rm -rf $TEMPDIR; exit 1) \ || exit 1 rm -f ${FAKEDICT}* # # Figure out what the flag-marking character is. # flagmarker=`ispell -D -d $FAKEHASH \ | sed -n -e '/^flagmarker/s/flagmarker //p'` case "$flagmarker" in \\*) flagmarker=`expr "$flagmarker" : '.\(.\)'` ;; esac # # (1) Use munchlist to create a list of roots and maximal suffixes. # munchlist -l $langtabs "$@" | sort -t/ +0 -1 $SORTTMP > $MUNCHOUTPUT # # (2) Use join to add the maximal suffixes to each dictionary's roots. # Re-expand this, combine with the original, and save for later. # newline=' ' dictno=0 for dictfile do ispell -e -d $FAKEHASH < $dictfile | tr ' ' "$newline" \ | sort -t/ +0 -1 -u $SORTTMP | join "-t$flagmarker" -a1 - $MUNCHOUTPUT \ | ispell -e -d $FAKEHASH | tr ' ' "$newline" \ | sort -u $SORTTMP > ${TEMPDICT}.$dictno dictno=`expr $dictno + 1` done rm -f $MUNCHOUTPUT # # (3) For each adjacent pair of dictionaries, use comm to find words # in the smaller that are missing from the larger, and add them # to the larger. # firstdict="$1" shift lastdict="${TEMPDICT}.0" dictno=1 for dictfile do comm -23 $lastdict ${TEMPDICT}.$dictno > $MISSINGWORDS.$dictno if [ -s $MISSINGWORDS.$dictno ] then sort $SORTTMP -o ${TEMPDICT}.$dictno \ ${TEMPDICT}.$dictno $MISSINGWORDS.$dictno fi lastdict="${TEMPDICT}.$dictno" dictno=`expr $dictno + 1` done rm -f $MISSINGWORDS.* # # (4) For each pair of dictionaries, use comm to eliminate words in # the smaller from the larger, and shrink the result with munchlist. # From this point out, we ignore interrupts. # munchlist -l $langtabs ${TEMPDICT}.0 > $outbase.0 lastdict="${TEMPDICT}.0" dictno=1 trap "" 1 2 13 15 for dictfile do comm -13 $lastdict ${TEMPDICT}.$dictno \ | munchlist -l $langtabs > $outbase.$dictno rm -f $lastdict lastdict="${TEMPDICT}.$dictno" dictno=`expr $dictno + 1` done rm -rf $TEMPDIR ispell-3.4.02/PaxHeaders.22185/fields.30000644000000000000000000000007410227505244014166 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/fields.30000444003214100001440000002207510227505244015240 0ustar00geofffaculty00000000000000.\" .\" $Id: fields.3,v 1.3 1994/01/05 20:13:43 geoff Exp $ .\" .\" $Log: fields.3,v $ .\" Revision 1.3 1994/01/05 20:13:43 geoff .\" Add the maxf parameter .\" .\" Revision 1.2 1994/01/04 02:40:16 geoff .\" Add descriptions of field_line_inc, field_field_inc, and the .\" FLD_NOSHRINK flag. .\" .\" Revision 1.1 1993/09/09 01:09:44 geoff .\" Initial revision .\" .\" .TH FIELDS 3 local .SH NAME fieldread, fieldmake, fieldwrite, fieldfree \- field access package .SH SYNTAX .nf #include "fields.h" typedef struct { int nfields; int hadnl; char *linebuf; char **fields; } field_t; #define FLD_RUNS 0x0001 #define FLD_SNGLQUOTES 0x0002 #define FLD_BACKQUOTES 0x0004 #define FLD_DBLQUOTES 0x0008 #define FLD_SHQUOTES 0x0010 #define FLD_STRIPQUOTES 0x0020 #define FLD_BACKSLASH 0x0040 extern field_t *fieldread (FILE * file, char * delims, int flags, int maxf); extern field_t *fieldmake (char * line, int allocated, char * delims, int flags, int maxf); extern int fieldwrite (FILE * file, field_t * fieldp, int delim); extern void fieldfree (field_t * fieldp); extern unsigned int field_line_inc; extern unsigned int field_field_inc; .fi .SH DESCRIPTION .PP The fields access package eases the common task of parsing and accessing information which is separated into fields by whitespace or other delimiters. Various options can be specified to handle many common cases, including selectable delimiters, runs of delimiters, and quoting. .PP .I fieldread reads one line from a file, parses it into fields as specified by the parameters, and returns a .B field_t structure describing the result. .I fieldmake performs the same process on a buffer already in memory. .I fieldwrite creates an output line from a .B field_t structure and writes it to an output file. .I fieldfree frees a .B field_t structure and any associated memory allocated by the package. .PP The .B field_t structure describes the fields in a parsed line. A well-behaved should only access the .BR nfields , .BR fields , and .B hadnl elements; all other elements are used internally by the package and are not guaranteed to remain the same even though they are documented here. .B Nfields gives the number of fields in the parsed line, just like the .B argc argument to a C program; .B fields is a pointer to an array of string pointers, just like the .B argv argument to a C program. As in C, the last field pointer is followed by a null pointer, although the field count is the preferred method of accessing fields. The user may alter .B nfields by decreasing it, and may replace any pointer in .B fields without harm. This is often useful in replacing a single field with a calculated value preparatory to output. The .B hadnl element is nonzero if the original line was terminated with a newline when it was parsed; this is used to accurately reproduce the input when .I fieldwrite is called. .PP The .B linebuf element contains a pointer to an internal buffer allocated by .I fieldread or provided to .IR fieldmake . This buffer is .I not guaranteed to contain anything sensible, although in the current implementation all of the field contents can be found therein. .PP .I fieldread reads a single line of arbitrary length from .BR file , allocating as much memory as necessary to hold it, and then parses the line according to its remaining arguments. A pointer to the parsed .B field_t structure is returned, with .B NULL returned if an error occurs or if .B EOF is reached on the input file. Fields in the input line are considered to be separated by any of the delimiters in the .B delims parameter. For example, if delimiters of ":.;" are specified, a line containing "a:b;c.d" would be considered to have four fields. .PP The default parsing of fields considers each delimiter to indicate a separate field, and does not allow any quoting. This is similar to the parsing done by .IR cut (1). This behavior can be modified by specifying flags. Multiple flags may be OR'ed together. The available flags are: .IP \fBFLD_RUNS\fP Consider runs of delimiters to be the same as a single delimiter, suppressing all null fields. This is similar to the way utilities like .IR awk (1) and .IR sort (1) treat whitespace, but it is not limited to whitespace. A run does not have to consist of a single type of delimiter; if both semicolon and colon are delimiters, ";::;" is a run. .IP \fBFLD_SNGLQUOTES\fP Allow field contents to be quoted with single quotes. Delimiters and other quotes appearing within single quotes are ignored. This may appear in combination with other quote options. .IP \fBFLD_BACKQUOTES\fP Allow field contents to be quoted with reverse single quotes. Delimiters and other quotes appearing within reverse single quotes are ignored. This may appear in combination with other quote options. .IP \fBFLD_DBLQUOTES\fP Allow field contents to be quoted with single quotes. Delimiters and other quotes appearing within double quotes are ignored. This may appear in combination with other quote options. .IP \fBFLD_SHQUOTES\fP Allow shell-style quoting. In the absence of this option, quotes are only recognized at the beginning of a field, and characters following the close quote are removed from the field (and are thus lost from the input line). If this option is specified, quotes may appear within a field, in the same way as they are handled by .IR sh (1). Multiple quoting styles may be used in the same field. If none of .BR FLD_SNGLQUOTES , .BR FLD_BACKQUOTES , or .B FLD_DBLQUOTES is specified with .BR FLD_SHQUOTES , all three options are implied. .IP \fBFLD_STRIPQUOTES\fP Remove quotes and backslash sequences from the field while parsing, converting backslash sequences to their proper ASCII equivalent. The C sequences \ea, \eb, \ef, \en, \er, \ev, \ex\fInn\fP, and \e\fInnn\fP are supported. Any other sequence is simply converted to the backslashed character, as in .IR sh (1). .IP \fBFLD_BACKSLASH\fP Accept standard C-style backslash sequences. The sequence will be converted to an ASCII equivalent if .B FLD_STRIPQUOTES is specified (q.v.). .IP \fBFLD_NOSHRINK\fP Don't shrink allocated memory using .IR realloc (3) before returning. This option can have a significant effect on performance, especially when .I fieldfree is going to be called soon after .I fieldread or .IR fieldmake . The disadvantage is that slightly more memory will be occupied until the field structure is freed. .PP The .I maxf parameter, if nonzero, specifies the maximum number of fields to be generated. This may enhance performance if only the first few fields of a long line are of interest to the caller. The actual number of fields returned is one greater than .IR maxf , because the remainder of the line will be returned as a single contiguous (and uninterpreted, .B FLD_STRIPQUOTES or .B FLD_BACKSLASH is specified) field. .PP .I fieldmake operates exactly like .IR fieldread , except that the line parsed is provided by the caller rather than being read from a file. If the .I allocated parameter is nonzero, the memory pointed to by the .I line parameter will automatically be freed when .I fieldfree is called; otherwise this memory is the caller's responsibility. The memory pointed to by .I line is destroyed by .IR fieldmake . All other parameters are the same as for .IR fieldread. .PP .I fieldwrite writes a set of fields to the specified .IR file , separating them with the delimiter character .I delim (note that this is a character, not a string), and appending a newline if specified by the .I hadnl element of the structure. The field structure is not freed. .I fieldwrite will return nonzero if an I/O error is detected. .PP .I fieldfree frees the .B field_t structure passed to it, along with any associated auxiliary memory allocated by the package (or passed to .IR fieldmake ). The structure may not be accessed after .I fieldfree is called. .PP .B field_line_inc (default 512) and .B field_field_inc (default 20) describe the increments to use when expanding lines as they are read in and parsed. .I fieldread initially allocates a buffer of .B field_line_inc bytes and, if the input line is larger than that, expands the buffer in increments of the same amount until it is large enough. If input lines are known to consistently reach a certain size, performance will be improved by setting .B field_line_inc to a value larger than that size (larger because there must be room for a null byte). .B field_field_inc serves the same purpose in both .I fieldread and .IR fieldmake , except that it is related to the number of fields in the line rather than to the line length. If the number of fields is known, performance will be improved by setting .B field_field_inc to at least one more than that number. .SH RETURN VALUES .I fieldread and .I fieldmake return .B NULL if an error occurs or if .B EOF is reached on the input file. .I fieldwrite returns nonzero if an output error occurs. .SH BUGS Thanks to the vagaries of ANSI C, the .B fields.h header file defines an auxiliary macro named .BR P . If the user needs a similarly-named macro, this macro must be undefined first, and the user's macro must be defined after .B fields.h is included. ispell-3.4.02/PaxHeaders.22185/local.h.solaris0000644000000000000000000000007410233541510015543 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/local.h.solaris0000444003214100001440000000674610233541510016624 0ustar00geofffaculty00000000000000#ifndef LOCAL_H_INCLUDED #define LOCAL_H_INCLUDED /* * $Id: local.h.solaris,v 1.2 2005/04/26 22:40:08 geoff Exp $ */ /* * Copyright 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * This file is a sample local.h file. It shows what I believe nearly every * site will want to include in their local.h. You will probably want to * expand this file; see "config.X" to learn of #defines that you might * like to add to. */ /* * WARNING WARNING WARNING * * This file is *NOT* a normal C header file! Although it uses C * syntax and is included in C programs, it is also processed by shell * scripts that are very stupid about format. * * Do not try to use #if constructs to configure this file for more * than one configuration. Do not place whitespace after the "#" in * "#define". Do not attempt to disable lines by commenting them out. * Do not use backslashes to reduce the length of long lines. * None of these things will work the way you expect them to. * * WARNING WARNING WARNING */ #define MINIMENU /* Display a mini-menu at the bottom of the screen */ #define USG /* Define on System V or if term.c won't compile */ #define HAS_RENAME /* * Important directory paths. If you change MAN45DIR from man5 to * something else, you probably also want to set MAN45SECT and * MAN45EXT (but not if you keep the man pages in section 5 and just * store them in a different place). */ #define BINDIR "/usr/local/bin" #define LIBDIR "/usr/local/lib" #define MAN1DIR "/usr/local/man/man1" #define MAN45DIR "/usr/local/man/man4" #define MAN45EXT ".4" /* * Place any locally-required #include statements here */ #endif /* LOCAL_H_INCLUDED */ ispell-3.4.02/PaxHeaders.22185/sq.c0000644000000000000000000000007410227500137013417 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/sq.c0000444003214100001440000000761010227500137014467 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: sq.c,v 1.16 2005/04/14 14:38:23 geoff Exp $"; #endif /* * Copyright 1993, 1999, 2001, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: sq.c,v $ * Revision 1.16 2005/04/14 14:38:23 geoff * Update license. * * Revision 1.15 2001/07/25 21:51:46 geoff * Minor license update. * * Revision 1.14 2001/07/23 20:24:04 geoff * Update the copyright and the license. * * Revision 1.13 1999/01/07 01:57:41 geoff * Update the copyright. * * Revision 1.12 1994/01/25 07:12:09 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include #ifdef __STDC__ #define P(x) x #else /* __STDC__ */ #define P(x) () #endif /* __STDC__ */ int main P ((int argc, char * argv[])); static void trunc P ((char * word, char * prev)); /* * The following table encodes prefix sizes as a single character. A * matching table will be found in unsq.c. */ static char size_encodings[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', /* 00-09 */ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', /* 10-19 */ 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', /* 20-29 */ 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', /* 30-39 */ 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', /* 40-49 */ 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', /* 50-59 */ 'y', 'z' /* 60-61 */ }; #define MAX_PREFIX (sizeof (size_encodings) - 1) int main (argc, argv) int argc; char * argv[]; { char word[257]; static char prev[257] = ""; while (gets (word) != NULL) trunc (word, prev); return 0; } static void trunc (word, prev) char * word; char * prev; { register char * wordp; register char * prevp; register int same_count; wordp = word; prevp = prev; for (same_count = 0; *wordp == *prevp++; ++wordp, ++same_count) ; if (same_count>MAX_PREFIX) same_count = MAX_PREFIX; (void) putchar (size_encodings[same_count]); (void) puts (wordp); (void) strcpy (prev, word); } ispell-3.4.02/PaxHeaders.22185/lookup.c0000644000000000000000000000013213773270305014312 xustar0030 mtime=1609396421.967282017 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/lookup.c0000444003214100001440000003704113773270305015370 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: lookup.c,v 1.54 2020-12-30 22:33:41-08 geoff Exp $"; #endif /* * lookup.c - see if a word appears in the dictionary * * Pace Willisson, 1983 * * Copyright 1987, 1988, 1989, 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, * Claremont, CA. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: lookup.c,v $ * Revision 1.54 2020-12-30 22:33:41-08 geoff * Recover character-set options from the hash file when loading. * * Revision 1.53 2020-10-26 11:39:55-07 geoff * Include header files needed for C99 function declarations. This probably * breaks backwards compatibility but I don't have time to research it and * add appropriate config.X options. Sigh. * * Revision 1.52 2005-04-14 14:25:52-07 geoff * Fix a couple of tiny formatting inconsistencies. * * Revision 1.51 2005/04/14 14:38:23 geoff * Update license. Improve some typecasting. * * Revision 1.50 2001/09/06 00:30:28 geoff * Many changes from Eli Zaretskii to support DJGPP compilation. * * Revision 1.49 2001/07/25 21:51:46 geoff * Minor license update. * * Revision 1.48 2001/07/23 20:24:04 geoff * Update the copyright and the license. * * Revision 1.47 2000/08/22 10:52:25 geoff * Fix a whole bunch of signed/unsigned discrepancies. * * Revision 1.46 1999/01/18 03:28:35 geoff * Turn some char declarations into unsigned char, so that we won't have * sign-extension problems. * * Revision 1.45 1999/01/07 01:22:51 geoff * Update the copyright. * * Revision 1.44 1998/07/06 05:44:47 geoff * Use off_t in lseeks, for 64-bit and NetBSD machines * * Revision 1.43 1997/12/02 06:24:56 geoff * Get rid of some compile options that really shouldn't be optional. * * Revision 1.42 1995/01/08 23:23:42 geoff * Support MSDOS_BINARY_OPEN when opening the hash file to read it in. * * Revision 1.41 1994/01/25 07:11:51 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include "config.h" #include "ispell.h" #include "proto.h" #include "msgs.h" #include int linit P ((void)); #ifdef INDEXDUMP static void dumpindex P ((struct flagptr * indexp, int depth)); #endif /* INDEXDUMP */ struct dent * lookup P ((ichar_t * word, int dotree)); static int inited = 0; int linit () { int hashfd; register int i; register struct dent * dp; struct flagent * entry; struct flagptr * ind; int nextchar; int viazero; register ichar_t * cp; if (inited) return 0; if ((hashfd = open (hashname, 0 | MSDOS_BINARY_OPEN)) < 0) { (void) fprintf (stderr, CANT_OPEN, hashname, MAYBE_CR (stderr)); return (-1); } hashsize = read (hashfd, (char *) &hashheader, sizeof hashheader); if (hashsize < sizeof hashheader) { if (hashsize == (unsigned int) -1) (void) fprintf (stderr, LOOKUP_C_CANT_READ, hashname, MAYBE_CR (stderr)); else if (hashsize == 0) (void) fprintf (stderr, LOOKUP_C_NULL_HASH, hashname, MAYBE_CR (stderr)); else (void) fprintf (stderr, LOOKUP_C_SHORT_HASH (hashname, hashsize, (int) sizeof hashheader), MAYBE_CR (stderr)); return (-1); } else if (hashheader.magic != MAGIC) { (void) fprintf (stderr, LOOKUP_C_BAD_MAGIC (hashname, (unsigned int) MAGIC, (unsigned int) hashheader.magic), MAYBE_CR (stderr)); return (-1); } else if (hashheader.magic2 != MAGIC) { (void) fprintf (stderr, LOOKUP_C_BAD_MAGIC2 (hashname, (unsigned int) MAGIC, (unsigned int) hashheader.magic2), MAYBE_CR (stderr)); return (-1); } else if (hashheader.compileoptions != COMPILEOPTIONS || hashheader.maxstringchars != MAXSTRINGCHARS || hashheader.maxstringcharlen != MAXSTRINGCHARLEN) { (void) fprintf (stderr, LOOKUP_C_BAD_OPTIONS ((unsigned int) hashheader.compileoptions, hashheader.maxstringchars, hashheader.maxstringcharlen, (unsigned int) COMPILEOPTIONS, MAXSTRINGCHARS, MAXSTRINGCHARLEN), MAYBE_CR (stderr)); return (-1); } if (nodictflag) { /* * Dictionary is not needed - create an empty dummy table. We * actually have to have one entry since the hash * algorithm involves a divide by the table size * (actually modulo, but zero is still unacceptable). * So we create an empty entry. */ hashsize = 1; /* This prevents divides by zero */ hashtbl = (struct dent *) calloc (1, sizeof (struct dent)); if (hashtbl == NULL) { (void) fprintf (stderr, LOOKUP_C_NO_HASH_SPACE, MAYBE_CR (stderr)); return (-1); } hashtbl[0].word = NULL; hashtbl[0].next = NULL; hashtbl[0].flagfield &= ~(USED | KEEP); /* The flag bits don't matter, but calloc cleared them. */ hashstrings = (unsigned char *) malloc ((unsigned) hashheader.lstringsize); } else { hashtbl = (struct dent *) malloc ((unsigned) hashheader.tblsize * sizeof (struct dent)); hashsize = hashheader.tblsize; hashstrings = (unsigned char *) malloc ((unsigned) hashheader.stringsize); } numsflags = hashheader.stblsize; numpflags = hashheader.ptblsize; sflaglist = (struct flagent *) malloc ((numsflags + numpflags) * sizeof (struct flagent)); if (hashtbl == NULL || hashstrings == NULL || sflaglist == NULL) { (void) fprintf (stderr, LOOKUP_C_NO_HASH_SPACE, MAYBE_CR (stderr)); return (-1); } pflaglist = sflaglist + numsflags; if (nodictflag) { /* * Read just the strings for the language table, and * skip over the rest of the strings and all of the * hash table. */ if (read (hashfd, hashstrings, (unsigned) hashheader.lstringsize) != (int) hashheader.lstringsize) { (void) fprintf (stderr, LOOKUP_C_BAD_FORMAT, MAYBE_CR (stderr)); return (-1); } (void) lseek (hashfd, (off_t) hashheader.stringsize - (off_t) hashheader.lstringsize + (off_t) hashheader.tblsize * (off_t) sizeof (struct dent), 1); } else { if (read (hashfd, hashstrings, (unsigned) hashheader.stringsize) != (int) hashheader.stringsize || read (hashfd, (char *) hashtbl, (unsigned) hashheader.tblsize * sizeof (struct dent)) != (int) (hashheader.tblsize * sizeof (struct dent))) { (void) fprintf (stderr, LOOKUP_C_BAD_FORMAT, MAYBE_CR (stderr)); return (-1); } } if ((unsigned) read (hashfd, (char *) sflaglist, (unsigned) (numsflags + numpflags) * sizeof (struct flagent)) != (numsflags + numpflags) * sizeof (struct flagent)) { (void) fprintf (stderr, LOOKUP_C_BAD_FORMAT, MAYBE_CR (stderr)); return (-1); } (void) close (hashfd); if (!nodictflag) { for (i = hashsize, dp = hashtbl; --i >= 0; dp++) { if (dp->word == (unsigned char *) -1) dp->word = NULL; else dp->word = &hashstrings[(unsigned long) dp->word]; if (dp->next == (struct dent *) -1) dp->next = NULL; else dp->next = &hashtbl[(unsigned long) dp->next]; } } for (i = numsflags + numpflags, entry = sflaglist; --i >= 0; entry++) { if (entry->stripl) entry->strip = (ichar_t *) &hashstrings[(unsigned long) entry->strip]; else entry->strip = NULL; if (entry->affl) entry->affix = (ichar_t *) &hashstrings[(unsigned long) entry->affix]; else entry->affix = NULL; } /* ** Warning - 'entry' and 'i' are reset in the body of the loop ** below. Don't try to optimize it by (e.g.) moving the decrement ** of i into the loop condition. */ for (i = numsflags, entry = sflaglist; i > 0; i--, entry++) { if (entry->affl == 0) { cp = NULL; ind = &sflagindex[0]; viazero = 1; } else { cp = entry->affix + entry->affl - 1; ind = &sflagindex[*cp]; viazero = 0; while (ind->numents == 0 && ind->pu.fp != NULL) { if (cp == entry->affix) { ind = &ind->pu.fp[0]; viazero = 1; } else { ind = &ind->pu.fp[*--cp]; viazero = 0; } } } if (ind->numents == 0) ind->pu.ent = entry; ind->numents++; /* ** If this index entry has more than MAXSEARCH flags in ** it, we will split it into subentries to reduce the ** searching. However, the split doesn't make sense in ** two cases: (a) if we are already at the end of the ** current affix, or (b) if all the entries in the list ** have identical affixes. Since the list is sorted, (b) ** is true if the first and last affixes in the list ** are identical. */ if (!viazero && ind->numents >= MAXSEARCH && icharcmp (entry->affix, ind->pu.ent->affix) != 0) { /* Sneaky trick: back up and reprocess */ entry = ind->pu.ent - 1; /* -1 is for entry++ in loop */ i = numsflags - (entry - sflaglist); ind->pu.fp = (struct flagptr *) calloc ((unsigned) (SET_SIZE + hashheader.nstrchars), sizeof (struct flagptr)); if (ind->pu.fp == NULL) { (void) fprintf (stderr, LOOKUP_C_NO_LANG_SPACE, MAYBE_CR (stderr)); return (-1); } ind->numents = 0; } } /* ** Warning - 'entry' and 'i' are reset in the body of the loop ** below. Don't try to optimize it by (e.g.) moving the decrement ** of i into the loop condition. */ for (i = numpflags, entry = pflaglist; i > 0; i--, entry++) { if (entry->affl == 0) { cp = NULL; ind = &pflagindex[0]; viazero = 1; } else { cp = entry->affix; ind = &pflagindex[*cp++]; viazero = 0; while (ind->numents == 0 && ind->pu.fp != NULL) { if (*cp == 0) { ind = &ind->pu.fp[0]; viazero = 1; } else { ind = &ind->pu.fp[*cp++]; viazero = 0; } } } if (ind->numents == 0) ind->pu.ent = entry; ind->numents++; /* ** If this index entry has more than MAXSEARCH flags in ** it, we will split it into subentries to reduce the ** searching. However, the split doesn't make sense in ** two cases: (a) if we are already at the end of the ** current affix, or (b) if all the entries in the list ** have identical affixes. Since the list is sorted, (b) ** is true if the first and last affixes in the list ** are identical. */ if (!viazero && ind->numents >= MAXSEARCH && icharcmp (entry->affix, ind->pu.ent->affix) != 0) { /* Sneaky trick: back up and reprocess */ entry = ind->pu.ent - 1; /* -1 is for entry++ in loop */ i = numpflags - (entry - pflaglist); ind->pu.fp = (struct flagptr *) calloc (SET_SIZE + hashheader.nstrchars, sizeof (struct flagptr)); if (ind->pu.fp == NULL) { (void) fprintf (stderr, LOOKUP_C_NO_LANG_SPACE, MAYBE_CR (stderr)); return (-1); } ind->numents = 0; } } #ifdef INDEXDUMP (void) fprintf (stderr, "Prefix index table:\n"); dumpindex (pflagindex, 0); (void) fprintf (stderr, "Suffix index table:\n"); dumpindex (sflagindex, 0); #endif if (hashheader.nstrchartype == 0) chartypes = NULL; else { chartypes = (struct strchartype *) malloc (hashheader.nstrchartype * sizeof (struct strchartype)); if (chartypes == NULL) { (void) fprintf (stderr, LOOKUP_C_NO_LANG_SPACE, MAYBE_CR (stderr)); return (-1); } for (i = 0, nextchar = hashheader.strtypestart; i < (int) hashheader.nstrchartype; i++) { chartypes[i].name = &hashstrings[nextchar]; nextchar += strlen ((char *) chartypes[i].name) + 1; chartypes[i].deformatter = (char *) &hashstrings[nextchar]; nextchar += strlen (chartypes[i].deformatter) + 1; chartypes[i].suffixes = (char *) &hashstrings[nextchar]; while (hashstrings[nextchar] != '\0') nextchar += strlen ((char *) &hashstrings[nextchar]) + 1; nextchar++; chartypes[i].options = hashstrings[nextchar++]; } } inited = 1; return (0); } #ifdef INDEXDUMP static void dumpindex (indexp, depth) register struct flagptr * indexp; register int depth; { register int i; int j; int k; char stripbuf[INPUTWORDLEN + 4 * MAXAFFIXLEN + 4]; for (i = 0; i < SET_SIZE + hashheader.nstrchars; i++, indexp++) { if (indexp->numents == 0 && indexp->pu.fp != NULL) { for (j = depth; --j >= 0; ) (void) putc (' ', stderr); if (i >= ' ' && i <= '~') (void) putc (i, stderr); else (void) fprintf (stderr, "0x%x", i); (void) putc ('\n', stderr); dumpindex (indexp->pu.fp, depth + 1); } else if (indexp->numents) { for (j = depth; --j >= 0; ) (void) putc (' ', stderr); if (i >= ' ' && i <= '~') (void) putc (i, stderr); else (void) fprintf (stderr, "0x%x", i); (void) fprintf (stderr, " -> %d entries\n", indexp->numents); for (k = 0; k < indexp->numents; k++) { for (j = depth; --j >= 0; ) (void) putc (' ', stderr); if (indexp->pu.ent[k].stripl) { (void) ichartostr (stripbuf, indexp->pu.ent[k].strip, sizeof stripbuf, 1); (void) fprintf (stderr, " entry %d (-%s,%s)\n", &indexp->pu.ent[k] - sflaglist, stripbuf, indexp->pu.ent[k].affl ? ichartosstr (indexp->pu.ent[k].affix, 1) : "-"); } else (void) fprintf (stderr, " entry %d (%s)\n", &indexp->pu.ent[k] - sflaglist, ichartosstr (indexp->pu.ent[k].affix, 1)); } } } } #endif /* n is length of s */ struct dent * lookup (s, dotree) register ichar_t * s; int dotree; { register struct dent * dp; register unsigned char * s1; unsigned char schar[INPUTWORDLEN + MAXAFFIXLEN]; dp = &hashtbl[hash (s, hashsize)]; if (ichartostr (schar, s, sizeof schar, 1)) (void) fprintf (stderr, WORD_TOO_LONG (schar)); for ( ; dp != NULL; dp = dp->next) { /* quick strcmp, but only for equality */ s1 = dp->word; if (s1 && s1[0] == schar[0] && strcmp ((char *) s1 + 1, (char *) schar + 1) == 0) return dp; while (dp->flagfield & MOREVARIANTS) /* Skip variations */ dp = dp->next; } if (dotree) { dp = treelookup (s); return dp; } else return NULL; } ispell-3.4.02/PaxHeaders.22185/tryaffix.X0000644000000000000000000000007410233564153014622 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/tryaffix.X0000555003214100001440000001147310233564153015677 0ustar00geofffaculty00000000000000!!POUNDBANG!! # # $Id: tryaffix.X,v 1.13 2005/04/27 01:18:35 geoff Exp $ # # Copyright 1987-1989, 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, # Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # Try out affixes to see if they produce valid roots # # Usage: # # tryaffix [-p | -s] [-c] dict-file affix[+addition] ... # # The -p and -s flags specify whether prefixes or suffixes # are being tried; if neither is specified, suffixes are assumed. # # If the -c flag is given, statistics on the various affixes are given: # a count of words it potentially applies to, and an estimate of the # number of dictionary bytes the flag would save. The estimate will # be high if the flag generates words that are currently generated # by other flags. # # The dictionary file, dict-file, must already be expanded and sorted, # and things will work best if uppercase has been folded to lower with # 'tr'. # # The "affixes" are things to be stripped from the dictionary # file to produce trial roots: for English, "con" and "ing" # are examples. The "additions" are letters that would have # been stripped off the root before adding the affix. For # example, the affix "ing" strips "e" for words ending in "e" # (as in "like --> liking") so we might run: # # tryaffix ing ing+e # # to cover both cases. # # $Log: tryaffix.X,v $ # Revision 1.13 2005/04/27 01:18:35 geoff # Fix a typo in a comment. Work around idiotic POSIX incompatibilities # in sort. Add secure temp-file handling. # # Revision 1.12 2005/04/14 14:40:13 geoff # Use /tmp as the default temp directory # # Revision 1.11 2005/04/14 14:38:23 geoff # Update license. Protect against modernized (i.e., incompatible) and # internationalized sort commands. # # Revision 1.10 2001/09/06 00:30:29 geoff # Changes from Eli Zaretskii to support DJGPP compilation. # # Revision 1.9 2001/07/25 21:51:47 geoff # Minor license update. # # Revision 1.8 2001/07/23 20:24:04 geoff # Update the copyright and the license. # # Revision 1.7 1999/01/07 01:57:48 geoff # Update the copyright. # # Revision 1.6 1994/01/25 07:12:18 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # USAGE='tryaffix [-p | -s] [-c] dict-file affix[+addition] ...' counts=no pre= suf='$' while : do case "$1" in -p) pre='^' suf= ;; -s) pre= suf='$' ;; -c) counts=yes ;; -*) echo "$USAGE" 1>&2 exit 1 ;; *) break ;; esac shift done dict="$1" shift if [ ! -r "$dict" ] then echo "Can't read $dict" 1>&2 echo "$USAGE" 1>&2 exit 1 elif [ $# -eq 0 ] then echo "$USAGE" 1>&2 exit 1 fi while [ $# -ne 0 ] do case "$1" in *+*) affix=`expr "$1" : '\(.*\)+'` addition=`expr "$1" : '.*+\(.*\)'` sedscript="s/$pre$affix$suf/$addition/p" ;; *) sedscript="s/$pre$1$suf//p" ;; esac if [ "$counts" = no ] then echo ===== "$1" ===== sed -n -e "$sedscript" "$dict" | comm -12 - "$dict" else echo "$1" \ `sed -n -e "$sedscript" "$dict" | comm -12 - "$dict" | wc -lc` fi shift done ispell-3.4.02/PaxHeaders.22185/local.h.bsd0000644000000000000000000000007410233555061014645 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/local.h.bsd0000444003214100001440000000673510233555061015724 0ustar00geofffaculty00000000000000#ifndef LOCAL_H_INCLUDED #define LOCAL_H_INCLUDED /* * $Id: local.h.bsd,v 1.1 2005/04/27 00:17:46 geoff Exp $ */ /* * Copyright 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * This file is a sample local.h file. It shows what I believe nearly every * site will want to include in their local.h. You will probably want to * expand this file; see "config.X" to learn of #defines that you might * like to add to. */ /* * WARNING WARNING WARNING * * This file is *NOT* a normal C header file! Although it uses C * syntax and is included in C programs, it is also processed by shell * scripts that are very stupid about format. * * Do not try to use #if constructs to configure this file for more * than one configuration. Do not place whitespace after the "#" in * "#define". Do not attempt to disable lines by commenting them out. * Do not use backslashes to reduce the length of long lines. * None of these things will work the way you expect them to. * * WARNING WARNING WARNING */ #define MINIMENU /* Display a mini-menu at the bottom of the screen */ #define GENERATE_LIBRARY_PROTOS #define EGREPCMD "egrep -i" #define HAS_RENAME /* * Important directory paths. If you change MAN45DIR from man5 to * something else, you probably also want to set MAN45SECT and * MAN45EXT (but not if you keep the man pages in section 5 and just * store them in a different place). */ #define BINDIR "/usr/local/bin" #define LIBDIR "/usr/local/lib" #define MAN1DIR "/usr/local/man/man1" #define MAN45DIR "/usr/local/man/man5" #define MAN45EXT ".5" /* * Place any locally-required #include statements here */ #endif /* LOCAL_H_INCLUDED */ ispell-3.4.02/PaxHeaders.22185/ispell.c0000644000000000000000000000007410245104041014256 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/ispell.c0000444003214100001440000012503210245104041015325 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: ispell.c,v 1.161 2005/05/25 14:13:53 geoff Exp $"; #endif #define MAIN /* * ispell.c - An interactive spelling corrector. * * Copyright (c), 1983, by Pace Willisson * * Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: ispell.c,v $ * Revision 1.161 2005/05/25 14:13:53 geoff * Report the value of EXEEXT in "ispell -vv". * * Revision 1.160 2005/04/28 14:46:51 geoff * Open a correction log file in command mode. * * Revision 1.159 2005/04/28 00:26:06 geoff * Don't print the count-file suffix, since it's no longer used. * * Revision 1.158 2005/04/20 23:16:32 geoff * Rename some variables to make them more meaningful. * * Revision 1.157 2005/04/14 23:11:36 geoff * Move initckch to makedent.c. * * Revision 1.156 2005/04/14 21:25:52 geoff * Make DICTIONARYVAR configurable, add CHARSETVAR, and add both to ispell -vv. * * Revision 1.155 2005/04/14 15:19:37 geoff * Make sure all current config.X variables are represented in ispell -vv * (with the exception of a couple that are function macros), and clean * up the sorting of the printout. * * Revision 1.154 2005/04/14 14:38:23 geoff * Update license. Incorporate Ed Avis's changes. Add new config.X * variables to -vv output. For backwards compatibility, always put * !NO8BIT in config.X output. Add the -o switch. Add -e5. Be * intelligent about inferring the output file mode if there is an * external deformatter. * * Revision 1.153 2001/09/06 00:30:28 geoff * Many changes from Eli Zaretskii to support DJGPP compilation. * * Revision 1.152 2001/07/25 21:51:46 geoff * Minor license update. * * Revision 1.151 2001/07/23 20:24:03 geoff * Update the copyright and the license. * * Revision 1.150 2001/07/19 07:01:46 geoff * Fix a bug that effectively disabled the -w switch. * * Revision 1.149 2001/06/14 09:11:11 geoff * Use a non-conflicting macro for bzero to avoid compilation problems on * smarter compilers. * * Revision 1.148 2001/05/30 21:14:47 geoff * Invert the fcntl/mkstemp options so they will default to being used. * * Revision 1.147 2001/05/30 21:04:25 geoff * Add fcntl.h support (needed for the previous change), security * commentary, and mkstemp support. * * Revision 1.146 2001/05/30 09:38:26 geoff * Werner Fink's patch to get rid of a temp-file race condition. * * Revision 1.145 2001/05/07 04:47:18 geoff * Flush stdout after expansion, for use in pipes (Ed Avis) * * Revision 1.144 2000/08/22 10:52:25 geoff * Fix some compiler warnings. * * Revision 1.143 1999/01/13 01:34:21 geoff * Get rid of some obsolete variables in the -vv switch. * * Revision 1.142 1999/01/08 05:45:03 geoff * Allow shtml files to force HTML mode. * * Revision 1.141 1999/01/07 01:22:47 geoff * Update the copyright. * * Revision 1.140 1999/01/03 01:46:35 geoff * Add support for external deformatters. * * Revision 1.139 1998/07/12 20:42:18 geoff * Change the -i switch to -k, and make it take the name of a keyword * table. * * Revision 1.138 1998/07/06 06:55:16 geoff * Use the new general-keyword-lookup support to initialize HTML and TEX * tags from environment variables or defaults. * * Revision 1.137 1997/12/02 06:24:48 geoff * Get rid of some compile options that really shouldn't be optional. * Add HTML support ('i' switch). * * Revision 1.136 1995/11/08 05:09:14 geoff * Set "aflag" and "askverbose" (new interactive mode) if invoked without * filenames or mode arguments. * * Revision 1.135 1995/11/08 04:27:59 geoff * Improve the HTML support to interoperate better with nroff/troff, clean * it up, and use '-H' for the switch. * * Revision 1.134 1995/10/25 04:05:23 geoff * Modifications made by Gerry Tierney to allow * checking of html code. Adds -h switch and checking for html files by * .html or .htm extension. 14th of October 1995. * * Revision 1.133 1995/10/11 04:30:29 geoff * Get rid of an unused variable. * * Revision 1.132 1995/08/05 23:19:36 geoff * If the DICTIONARY environment variable is set, derive the default * personal-dictionary name from it. * * Revision 1.131 1995/01/08 23:23:39 geoff * Support variable hashfile suffixes for DOS purposes. Report all the * new configuration variables in the -vv switch. Do some better error * checking for mktemp failures. Support the rename system call. All of * this is to help make DOS porting easier. * * Revision 1.130 1995/01/03 19:24:08 geoff * When constructing a personal-dictioary name from the hash file name, * don't stupidly include path directory components. * * Revision 1.129 1995/01/03 02:23:19 geoff * Disable the setbuf call on BSDI systems, sigh. * * Revision 1.128 1994/10/26 05:12:28 geoff * Include boundary characters in the list of characters to be tried in * corrections. * * Revision 1.127 1994/10/25 05:46:07 geoff * Allow the default dictionary to be specified by an environment * variable (DICTIONARY) as well as a switch. * * Revision 1.126 1994/09/16 03:32:34 geoff * Issue an error message for bad affix flags * * Revision 1.125 1994/07/28 05:11:36 geoff * Log message for previous revision: fix backup-file checks to correctly * test for exceeding MAXNAMLEN. * * Revision 1.124 1994/07/28 04:53:39 geoff * * Revision 1.123 1994/05/17 06:44:12 geoff * Add support for controlled compound formation and the COMPOUNDONLY * option to affix flags. * * Revision 1.122 1994/04/27 01:50:37 geoff * Print MAX_CAPS in -vv mode. * * Revision 1.121 1994/03/16 03:49:10 geoff * Fix -vv to display the value of NO_STDLIB_H. * * Revision 1.120 1994/03/15 06:24:28 geoff * Allow the -t, -n, and -T switches to override each other, as follows: * if no switches are given, the deformatter and string characters are * chosen based on the file suffix. If only -t/-n are given, the * deformatter is forced but string characters come from the file suffix. * If only -T is given, the deformatter is chosen based on the value * given in the -T switch. Finally, if both -T and -t/-n are given, * string characters are controlled by -T and the deformatter by -t/-n. * * Revision 1.119 1994/03/15 05:58:07 geoff * Get rid of a gcc warning * * Revision 1.118 1994/03/15 05:30:37 geoff * Get rid of an unused-variable complaint by proper ifdeffing * * Revision 1.117 1994/03/12 21:26:48 geoff * Correctly limit maximum name lengths for files that have directory paths * included. Also don't use a wired-in 256 for the size of the backup file * name. * * Revision 1.116 1994/02/07 08:10:44 geoff * Print GENERATE_LIBRARY_PROTOS in the -vv switch. * * Revision 1.115 1994/01/26 07:44:47 geoff * Make yacc configurable through local.h. * * Revision 1.114 1994/01/25 07:11:44 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include "config.h" #include "ispell.h" #include "fields.h" #include "proto.h" #include "msgs.h" #include "version.h" #include #ifndef NO_FCNTL_H #include #endif /* NO_FCNTL_H */ #include static void usage P ((void)); int main P ((int argc, char * argv[])); static void dofile P ((char * filename)); static FILE * setupdefmt P ((char * filename, struct stat * statbuf)); static void update_file P ((char * filename, struct stat * statbuf)); static void expandmode P ((int printorig)); char * last_slash P ((char * file)); static char * Cmd; static char * LibDict = NULL; /* Pointer to name of $(LIBDIR)/dict */ static void usage () { (void) fprintf (stderr, ISPELL_C_USAGE1, Cmd); (void) fprintf (stderr, ISPELL_C_USAGE2, Cmd); (void) fprintf (stderr, ISPELL_C_USAGE3, Cmd); (void) fprintf (stderr, ISPELL_C_USAGE4, Cmd); (void) fprintf (stderr, ISPELL_C_USAGE5, Cmd); (void) fprintf (stderr, ISPELL_C_USAGE6, Cmd); (void) fprintf (stderr, ISPELL_C_USAGE7, Cmd); givehelp (0); exit (1); } int main (argc, argv) int argc; char * argv[]; { char * p; char libdir[MAXPATHLEN]; char * cpd; field_t * extra_args; /* Extra arguments from OPTIONVAR */ char ** versionp; char * wchars = NULL; char * preftype = NULL; static char libdictname[sizeof DEFHASH]; char logfilename[MAXPATHLEN]; static char outbuf[BUFSIZ]; int argno; int arglen; Cmd = *argv; Trynum = 0; p = getenv (LIBRARYVAR); if (p == NULL) (void) strcpy (libdir, LIBDIR); else { (void) strncpy (libdir, p, sizeof libdir); libdir[sizeof libdir - 1] = '\0'; } p = getenv (DICTIONARYVAR); if (p != NULL) { if (last_slash (p) != NULL) (void) strcpy (hashname, p); else (void) sprintf (hashname, "%s/%s", libdir, p); (void) strcpy (libdictname, p); p = rindex (p, '.'); if (p == NULL || strcmp (p, HASHSUFFIX) != 0) (void) strcat (hashname, HASHSUFFIX); LibDict = last_slash (libdictname); if (LibDict != NULL) LibDict++; else LibDict = libdictname; p = rindex (LibDict, '.'); if (p != NULL) *p = '\0'; } else (void) sprintf (hashname, "%s/%s", libdir, DEFHASH); cpd = NULL; /* ** If any options were given in OPTIONVAR, prepend them to the ** command-line arguments. We prepend so that the command-line ** arguments can override those from the environment. */ p = getenv (OPTIONVAR); if (p != NULL) { char ** newargv; extra_args = fieldmake (p, 0, " \t", FLD_RUNS | FLD_SNGLQUOTES | FLD_DBLQUOTES | FLD_SHQUOTES | FLD_STRIPQUOTES | FLD_BACKSLASH, 0); if (extra_args == NULL) { (void) fprintf (stderr, ISPELL_C_NO_OPTIONS_SPACE); return 1; } else { newargv = (char **) calloc (argc + extra_args->nfields, sizeof (char *)); if (newargv == NULL) { (void) fprintf (stderr, ISPELL_C_NO_OPTIONS_SPACE); return 1; } /* Copy arguments over */ newargv[0] = argv[0]; for (argno = 0; argno < (int) extra_args->nfields; argno++) newargv[argno + 1] = extra_args->fields[argno]; for (argc += extra_args->nfields, argno++; argno < argc; argno++) newargv[argno] = argv[argno - extra_args->nfields]; } argv = newargv; } argv++; argc--; while (argc && **argv == '-') { /* * Trying to add a new flag? Can't remember what's been used? * Here's a handy guide: * * Used: * * ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789 * ^^^^ ^ ^ ^^^ ^ ^^ ^^ * abcdefghijklmnopqrstuvwxyz * ^^^^^^ ^ ^^^ ^ ^^^ ^^^ */ arglen = strlen (*argv); switch ((*argv)[1]) { case 'v': if (arglen > 3) usage (); for (versionp = Version_ID; *versionp; ) { p = *versionp++; if (strncmp (p, "(#) ", 5) == 0) p += 5; (void) printf ("%s\n", p); } if ((*argv)[2] == 'v') { (void) printf (ISPELL_C_OPTIONS_ARE); /* * We print USG first because it's mis-set so often. * All others are in alphabetical order. */ #ifdef USG (void) printf ("\tUSG\n"); #else /* USG */ (void) printf ("\t!USG (BSD)\n"); #endif /* USG */ (void) printf ("\tBAKEXT = \"%s\"\n", BAKEXT); (void) printf ("\tBINDIR = \"%s\"\n", BINDIR); #ifdef BOTTOMCONTEXT (void) printf ("\tBOTTOMCONTEXT\n"); #else /* BOTTOMCONTEXT */ (void) printf ("\t!BOTTOMCONTEXT\n"); #endif /* BOTTOMCONTEXT */ (void) printf ("\tCC = \"%s\"\n", CC); (void) printf ("\tCFLAGS = \"%s\"\n", CFLAGS); (void) printf ("\tCHARSETVAR = \"%s\"\n", CHARSETVAR); #ifdef COMMANDFORSPACE (void) printf ("\tCOMMANDFORSPACE\n"); #else /* COMMANDFORSPACE */ (void) printf ("\t!COMMANDFORSPACE\n"); #endif /* COMMANDFORSPACE */ (void) printf ("\tCONTEXTPCT = %d\n", CONTEXTPCT); #ifdef CONTEXTROUNDUP (void) printf ("\tCONTEXTROUNDUP\n"); #else /* CONTEXTROUNDUP */ (void) printf ("\t!CONTEXTROUNDUP\n"); #endif /* CONTEXTROUNDUP */ (void) printf ("\tDEFAULT_FILE_MODE = 0%3.3o\n", DEFAULT_FILE_MODE); (void) printf ("\tDEFHASH = \"%s\"\n", DEFHASH); (void) printf ("\tDEFINCSTR = \"%s\"\n", DEFINCSTR); (void) printf ("\tDEFLANG = \"%s\"\n", DEFLANG); (void) printf ("\tDEFNOBACKUPFLAG = %d\n", DEFNOBACKUPFLAG); (void) printf ("\tDEFPAFF = \"%s\"\n", DEFPAFF); (void) printf ("\tDEFPDICT = \"%s\"\n", DEFPDICT); (void) printf ("\tDEFTEXFLAG = %d\n", DEFTEXFLAG); (void) printf ("\tDICTIONARYVAR = \"%s\"\n", DICTIONARYVAR); (void) printf ("\tEGREPCMD = \"%s\"\n", EGREPCMD); #ifdef EQUAL_COLUMNS (void) printf ("\tEQUAL_COLUMNS\n"); #else /* EQUAL_COLUMNS */ (void) printf ("\t!EQUAL_COLUMNS\n"); #endif /* EQUAL_COLUMNS */ (void) printf ("\tEXEEXT = \"%s\"\n", EXEEXT); #ifdef GENERATE_LIBRARY_PROTOS (void) printf ("\tGENERATE_LIBRARY_PROTOS\n"); #else /* GENERATE_LIBRARY_PROTOS */ (void) printf ("\t!GENERATE_LIBRARY_PROTOS\n"); #endif /* GENERATE_LIBRARY_PROTOS */ (void) printf ("\tHASHSUFFIX = \"%s\"\n", HASHSUFFIX); #ifdef HAS_RENAME (void) printf ("\tHAS_RENAME\n"); #else /* HAS_RENAME */ (void) printf ("\t!HAS_RENAME\n"); #endif /* HAS_RENAME */ (void) printf ("\tHOME = \"%s\"\n", HOME); (void) printf ("\tHTMLCHECK = \"%s\"\n", HTMLCHECK); (void) printf ("\tHTMLCHECKVAR = \"%s\"\n", HTMLCHECKVAR); (void) printf ("\tHTMLIGNORE = \"%s\"\n", HTMLIGNORE); (void) printf ("\tHTMLIGNOREVAR = \"%s\"\n", HTMLIGNOREVAR); #ifdef IGNOREBIB (void) printf ("\tIGNOREBIB\n"); #else /* IGNOREBIB */ (void) printf ("\t!IGNOREBIB\n"); #endif /* IGNOREBIB */ (void) printf ("\tINCSTRVAR = \"%s\"\n", INCSTRVAR); (void) printf ("\tINPUTWORDLEN = %d\n", INPUTWORDLEN); (void) printf ("\tINSTALL = \"%s\"\n", INSTALL); (void) printf ("\tLANGUAGES = \"%s\"\n", LANGUAGES); (void) printf ("\tLIBDIR = \"%s\"\n", LIBDIR); (void) printf ("\tLIBES = \"%s\"\n", LIBES); (void) printf ("\tLIBRARYVAR = \"%s\"\n", LIBRARYVAR); (void) printf ("\tLINK = \"%s\"\n", LINK); (void) printf ("\tLINT = \"%s\"\n", LINT); (void) printf ("\tLINTFLAGS = \"%s\"\n", LINTFLAGS); #ifndef REGEX_LOOKUP (void) printf ("\tLOOK = \"%s\"\n", LOOK); #endif /* REGEX_LOOKUP */ (void) printf ("\tLOOK_XREF = \"%s\"\n", LOOK_XREF); (void) printf ("\tMAKE_SORTTMP = \"%s\"\n", MAKE_SORTTMP); (void) printf ("\tMALLOC_INCREMENT = %d\n", MALLOC_INCREMENT); (void) printf ("\tMAN1DIR = \"%s\"\n", MAN1DIR); (void) printf ("\tMAN1EXT = \"%s\"\n", MAN1EXT); (void) printf ("\tMAN45DIR = \"%s\"\n", MAN45DIR); (void) printf ("\tMAN45EXT = \"%s\"\n", MAN45EXT); (void) printf ("\tMAN45SECT = \"%s\"\n", MAN45SECT); (void) printf ("\tMASKBITS = %d\n", MASKBITS); (void) printf ("\tMASKTYPE = \"%s\"\n", MASKTYPE_STRING); (void) printf ("\tMASKTYPE_WIDTH = %d\n", MASKTYPE_WIDTH); (void) printf ("\tMASTERHASH = \"%s\"\n", MASTERHASH); (void) printf ("\tMAXAFFIXLEN = %d\n", MAXAFFIXLEN); #ifdef MAXBASENAMELEN (void) printf ("\tMAXBASENAMELEN = %d\n", MAXBASENAMELEN); #endif (void) printf ("\tMAXCONTEXT = %d\n", MAXCONTEXT); #ifdef MAXEXTLEN (void) printf ("\tMAXEXTLEN = %d\n", MAXEXTLEN); #endif (void) printf ("\tMAXINCLUDEFILES = %d\n", MAXINCLUDEFILES); (void) printf ("\tMAXNAMLEN = %d\n", MAXNAMLEN); (void) printf ("\tMAXPATHLEN = %d\n", MAXPATHLEN); (void) printf ("\tMAXPCT = %d\n", MAXPCT); (void) printf ("\tMAXSEARCH = %d\n", MAXSEARCH); (void) printf ("\tMAXSTRINGCHARLEN = %d\n", MAXSTRINGCHARLEN); (void) printf ("\tMAXSTRINGCHARS = %d\n", MAXSTRINGCHARS); (void) printf ("\tMAX_CAPS = %d\n", MAX_CAPS); (void) printf ("\tMAX_HITS = %d\n", MAX_HITS); (void) printf ("\tMAX_SCREEN_SIZE = %d\n", MAX_SCREEN_SIZE); (void) printf ("\tMINCONTEXT = %d\n", MINCONTEXT); #ifdef MINIMENU (void) printf ("\tMINIMENU\n"); #else /* MINIMENU */ (void) printf ("\t!MINIMENU\n"); #endif /* MINIMENU */ (void) printf ("\tMINWORD = %d\n", MINWORD); #ifdef MSDOS (void) printf ("\tMSDOS\n"); #else /* MSDOS */ (void) printf ("\t!MSDOS\n"); #endif /* MSDSO */ (void) printf ("\tMSDOS_BINARY_OPEN = 0x%x\n", (unsigned int) MSDOS_BINARY_OPEN); (void) printf ("\tMSGLANG = \"%s\"\n", MSGLANG); /* * NO8BIT is an obsolete option, but some people depend * on it being in the ispell -vv output. */ (void) printf ("\t!NO8BIT (8BIT)\n"); #ifdef NO_FCNTL_H (void) printf ("\tNO_FCNTL_H\n"); #else /* NO_FCNTL_H */ (void) printf ("\t!NO_FCNTL_H (FCNTL_H)\n"); #endif /* NO_FCNTL_H */ #ifdef NO_MKSTEMP (void) printf ("\tNO_MKSTEMP\n"); #else /* NO_MKSTEMP */ (void) printf ("\t!NO_MKSTEMP (MKSTEMP)\n"); #endif /* NO_STDLIB_H */ #ifdef NO_STDLIB_H (void) printf ("\tNO_STDLIB_H\n"); #else /* NO_STDLIB_H */ (void) printf ("\t!NO_STDLIB_H (STDLIB_H)\n"); #endif /* NO_STDLIB_H */ (void) printf ("\tNRSPECIAL = \"%s\"\n", NRSPECIAL); (void) printf ("\tOLDPAFF = \"%s\"\n", OLDPAFF); (void) printf ("\tOLDPDICT = \"%s\"\n", OLDPDICT); (void) printf ("\tOPTIONVAR = \"%s\"\n", OPTIONVAR); #ifdef PDICTHOME (void) printf ("\tPDICTHOME = \"%s\"\n", PDICTHOME); #else /* PDICTHOME */ (void) printf ("\tPDICTHOME = (undefined)\n"); #endif /* PDICTHOME */ (void) printf ("\tPDICTVAR = \"%s\"\n", PDICTVAR); #ifdef PIECEMEAL_HASH_WRITES (void) printf ("\tPIECEMEAL_HASH_WRITES\n"); #else /* PIECEMEAL_HASH_WRITES */ (void) printf ("\t!PIECEMEAL_HASH_WRITES\n"); #endif /* PIECEMEAL_HASH_WRITES */ (void) printf ("\tPOUNDBANG = \"%s\"\n", POUNDBANG); #ifdef REGEX_LOOKUP (void) printf ("\tREGEX_LOOKUP\n"); #else /* REGEX_LOOKUP */ (void) printf ("\t!REGEX_LOOKUP\n"); #endif /* REGEX_LOOKUP */ (void) printf ("\tREGLIB = \"%s\"\n", REGLIB); (void) printf ("\tR_OK = %d\n", R_OK); (void) printf ("\tSIGNAL_TYPE = \"%s\"\n", SIGNAL_TYPE_STRING); (void) printf ("\tSORTPERSONAL = %d\n", SORTPERSONAL); (void) printf ("\tSORTTMP = \"%s\"\n", SORTTMP); (void) printf ("\tSPELL_XREF = \"%s\"\n", SPELL_XREF); (void) printf ("\tSTATSUFFIX = \"%s\"\n", STATSUFFIX); (void) printf ("\tTEMPNAME = \"%s\"\n", TEMPNAME); (void) printf ("\tTERMLIB = \"%s\"\n", TERMLIB); #if TERM_MODE == CBREAK (void) printf ("\tTERM_MODE = CBREAK\n"); #else /* TERM_MODE */ (void) printf ("\tTERM_MODE = RAW\n"); #endif /* TERM_MODE */ (void) printf ("\tTEXSKIP1 = \"%s\"\n", TEXSKIP1); (void) printf ("\tTEXSKIP1VAR = \"%s\"\n", TEXSKIP1VAR); (void) printf ("\tTEXSKIP2 = \"%s\"\n", TEXSKIP2); (void) printf ("\tTEXSKIP2VAR = \"%s\"\n", TEXSKIP2VAR); (void) printf ("\tTEXSPECIAL = \"%s\"\n", TEXSPECIAL); (void) printf ("\tTIB_XREF = \"%s\"\n", TIB_XREF); #ifdef TRUNCATEBAK (void) printf ("\tTRUNCATEBAK\n"); #else /* TRUNCATEBAK */ (void) printf ("\t!TRUNCATEBAK\n"); #endif /* TRUNCATEBAK */ #ifdef USESH (void) printf ("\tUSESH\n"); #else /* USESH */ (void) printf ("\t!USESH\n"); #endif /* USESH */ (void) printf ("\tWORDS = \"%s\"\n", WORDS); (void) printf ("\tW_OK = %d\n", W_OK); (void) printf ("\tYACC = \"%s\"\n", YACC); } exit (0); break; case 'n': if (arglen > 2) usage (); tflag = DEFORMAT_NROFF; /* nroff/troff mode */ deftflag = DEFORMAT_NROFF; if (preftype == NULL) preftype = "nroff"; break; case 't': /* TeX mode */ if (arglen > 2) usage (); tflag = DEFORMAT_TEX; deftflag = DEFORMAT_TEX; if (preftype == NULL) preftype = "tex"; break; case 'H': /* HTML mode */ if (arglen > 2) usage (); tflag = DEFORMAT_SGML; /* non-TeX mode */ deftflag = DEFORMAT_SGML; if (preftype == NULL) preftype = "sgml"; break; case 'o': /* Ordinary text mode */ if (arglen > 2) usage (); tflag = DEFORMAT_NONE; deftflag = DEFORMAT_NONE; if (preftype == NULL) preftype = "plain"; break; case 'k': /* Set keyword tables */ p = (*argv) + 2; argv++; argc--; if (argc == 0) usage (); if (strcmp (p, "texskip1") == 0) { if (init_keyword_table (*argv, TEXSKIP1VAR, TEXSKIP1, 0, &texskip1list)) usage (); } else if (strcmp (p, "texskip2") == 0) { if (init_keyword_table (*argv, TEXSKIP2VAR, TEXSKIP2, 0, &texskip2list)) usage (); } else if (strcmp (p, "htmlignore") == 0) { if (init_keyword_table (*argv, HTMLIGNOREVAR, HTMLIGNORE, 1, &htmlignorelist)) usage (); } else if (strcmp (p, "htmlcheck") == 0) { if (init_keyword_table (*argv, HTMLCHECKVAR, HTMLCHECK, 1, &htmlchecklist)) usage (); } break; case 'T': /* Set preferred file type */ p = (*argv) + 2; if (*p == '\0') { argv++; argc--; if (argc == 0) usage (); p = *argv; } preftype = p; break; case 'F': /* Set external deformatting program */ p = (*argv) + 2; if (*p == '\0') { argv++; argc--; if (argc == 0) usage (); p = *argv; } defmtpgm = p; tflag = DEFORMAT_NONE; deftflag = DEFORMAT_NONE; if (preftype == NULL) preftype = "plain"; break; case 'A': if (arglen > 2) usage (); incfileflag = 1; aflag = 1; break; case 'a': if (arglen > 2) usage (); aflag++; break; case 'D': if (arglen > 2) usage (); dumpflag++; nodictflag++; break; case 'e': if (arglen > 3) usage (); eflag = 1; if ((*argv)[2] == 'e') eflag = 2; else if ((*argv)[2] >= '1' && (*argv)[2] <= '5') eflag = (*argv)[2] - '0'; else if ((*argv)[2] != '\0') usage (); nodictflag++; break; case 'c': if (arglen > 2) usage (); cflag++; lflag++; nodictflag++; break; case 'b': if (arglen > 2) usage (); xflag = 0; /* Keep a backup file */ break; case 'x': if (arglen > 2) usage (); xflag = 1; /* Don't keep a backup file */ break; case 'f': fflag++; p = (*argv) + 2; if (*p == '\0') { argv++; argc--; if (argc == 0) usage (); p = *argv; } askfilename = p; if (*askfilename == '\0') askfilename = NULL; break; case 'L': p = (*argv) + 2; if (*p == '\0') { argv++; argc--; if (argc == 0) usage (); p = *argv; } contextsize = atoi (p); break; case 'l': if (arglen > 2) usage (); lflag++; break; #ifndef USG case 's': if (arglen > 2) usage (); sflag++; break; #endif case 'S': if (arglen > 2) usage (); sortit = 0; break; case 'B': /* -B: report missing blanks */ if (arglen > 2) usage (); compoundflag = COMPOUND_NEVER; break; case 'C': /* -C: compound words are acceptable */ if (arglen > 2) usage (); compoundflag = COMPOUND_ANYTIME; break; case 'P': /* -P: don't gen non-dict poss's */ if (arglen > 2) usage (); tryhardflag = 0; break; case 'm': /* -m: make all poss affix combos */ if (arglen > 2) usage (); tryhardflag = 1; break; case 'N': /* -N: suppress minimenu */ if (arglen > 2) usage (); minimenusize = 0; break; case 'M': /* -M: force minimenu */ if (arglen > 2) usage (); minimenusize = 2; break; case 'p': cpd = (*argv) + 2; if (*cpd == '\0') { argv++; argc--; if (argc == 0) usage (); cpd = *argv; if (*cpd == '\0') cpd = NULL; } LibDict = NULL; break; case 'd': p = (*argv) + 2; if (*p == '\0') { argv++; argc--; if (argc == 0) usage (); p = *argv; } if (last_slash (p) != NULL) (void) strcpy (hashname, p); else (void) sprintf (hashname, "%s/%s", libdir, p); if (cpd == NULL && *p != '\0') LibDict = p; p = rindex (p, '.'); if (p != NULL && strcmp (p, HASHSUFFIX) == 0) *p = '\0'; /* Don't want ext. in LibDict */ else (void) strcat (hashname, HASHSUFFIX); if (LibDict != NULL) { p = last_slash (LibDict); if (p != NULL) LibDict = p + 1; } break; case 'V': /* Display 8-bit characters as M-xxx */ if (arglen > 2) usage (); vflag = 1; break; case 'w': wchars = (*argv) + 2; if (*wchars == '\0') { argv++; argc--; if (argc == 0) usage (); wchars = *argv; } break; case 'W': if ((*argv)[2] == '\0') { argv++; argc--; if (argc == 0) usage (); minword = atoi (*argv); } else minword = atoi (*argv + 2); break; default: usage (); } argv++; argc--; } if (!argc && !lflag && !aflag && !eflag && !dumpflag) { if (argc != 0) usage (); else { aflag = 1; askverbose = 1; } } /* * Because of the high cost of reading the dictionary, we stat * the files specified first to see if they exist. If at least * one exists, we continue. */ for (argno = 0; argno < argc; argno++) { if (access (argv[argno], R_OK) >= 0) break; } if (argno >= argc && !lflag && !aflag && !eflag && !dumpflag) { (void) fprintf (stderr, argc == 1 ? ISPELL_C_NO_FILE : ISPELL_C_NO_FILES); exit (1); } if (linit () < 0) exit (1); if (preftype == NULL) preftype = getenv (CHARSETVAR); if (preftype != NULL) { prefstringchar = findfiletype (preftype, 1, deftflag < 0 ? &deftflag : (int *) NULL); if (prefstringchar < 0 && strcmp (preftype, "plain") != 0 && strcmp (preftype, "tex") != 0 && strcmp (preftype, "nroff") != 0 && strcmp (preftype, "sgml") != 0) { (void) fprintf (stderr, ISPELL_C_BAD_TYPE, preftype); exit (1); } } if (prefstringchar < 0) defstringgroup = 0; else defstringgroup = prefstringchar; if (compoundflag < 0) compoundflag = hashheader.compoundflag; if (tryhardflag < 0) tryhardflag = hashheader.defhardflag; /* * Set up the various tables of keywords to be treated specially. * * TeX/LaTeX mode: */ (void) init_keyword_table (NULL, TEXSKIP1VAR, TEXSKIP1, 0, &texskip1list); (void) init_keyword_table (NULL, TEXSKIP2VAR, TEXSKIP2, 0, &texskip2list); /* * HTML mode: */ (void) init_keyword_table (NULL, HTMLIGNOREVAR, HTMLIGNORE, 1, &htmlignorelist); (void) init_keyword_table (NULL, HTMLCHECKVAR, HTMLCHECK, 1, &htmlchecklist); initckch(wchars); if (LibDict == NULL) { (void) strcpy (libdictname, DEFHASH); LibDict = libdictname; p = rindex (libdictname, '.'); if (p != NULL && strcmp (p, HASHSUFFIX) == 0) *p = '\0'; /* Don't want ext. in LibDict */ } if (!nodictflag) treeinit (cpd, LibDict); if (aflag) { askmode (); treeoutput (); exit (0); } else if (eflag) { expandmode (eflag); exit (0); } else if (dumpflag) { dumpmode (); exit (0); } #ifndef __bsdi__ setbuf (stdout, outbuf); #endif /* __bsdi__ */ if (lflag) { infile = setupdefmt(NULL, NULL); outfile = stdout; checkfile (); exit (0); } /* * If there is a log directory, open a log file. If the open * fails, we just won't log. */ (void) sprintf (logfilename, "%s/%s/%s", getenv ("HOME") == NULL ? "" : getenv ("HOME"), DEFLOGDIR, LibDict); logfile = fopen (logfilename, "a"); terminit (); while (argc--) dofile (*argv++); done (0); /* NOTREACHED */ return 0; } static void dofile (filename) char * filename; { struct stat statbuf; char * cp; int outfd; /* Used in opening temp file */ /* ..might produce not-used warnings */ currentfile = filename; /* Guess a deformatter based on the file extension */ tflag = deftflag; if (tflag < 0) { tflag = DEFORMAT_NONE; /* Default to none */ cp = rindex (filename, '.'); if (cp != NULL) { if (strcmp (cp, ".ms") == 0 || strcmp (cp, ".mm") == 0 || strcmp (cp, ".me") == 0 || strcmp (cp, ".man") == 0 || isdigit(*cp)) tflag = DEFORMAT_NROFF; else if (strcmp (cp, ".tex") == 0) tflag = DEFORMAT_TEX; else if (strcmp (cp, ".html") == 0 || strcmp (cp, ".htm") == 0 || strcmp (cp, ".shtml") == 0) tflag = DEFORMAT_SGML; } } if (prefstringchar < 0) { defstringgroup = findfiletype (filename, 0, deftflag < 0 ? &tflag : (int *) NULL); if (defstringgroup < 0) defstringgroup = 0; } if ((infile = setupdefmt (filename, &statbuf)) == NULL) { (void) fprintf (stderr, CANT_OPEN, filename, MAYBE_CR (stderr)); (void) sleep ((unsigned) 2); return; } readonly = access (filename, W_OK) < 0; if (readonly) { (void) fprintf (stderr, ISPELL_C_CANT_WRITE, filename, MAYBE_CR (stderr)); (void) sleep ((unsigned) 2); } /* * Security notes: TEMPNAME must be less than MAXPATHLEN - 1. If * the system has O_EXCL but not mkstemp, the temporary file will * be opened securely as in the manner of mkstemp (which * unfortunately isn't available anywhere). In other words, don't * worry about the security of this hunk of code. */ if (last_slash (TEMPNAME) != NULL) (void) strcpy (tempfile, TEMPNAME); else { char *tmp = getenv ("TMPDIR"); int lastchar; if (tmp == NULL) tmp = getenv ("TEMP"); if (tmp == NULL) tmp = getenv ("TMP"); if (tmp == NULL) #ifdef P_tmpdir tmp = P_tmpdir; #else tmp = "/tmp"; #endif lastchar = tmp[strlen (tmp) - 1]; (void) sprintf (tempfile, "%s%s%s", tmp, IS_SLASH (lastchar) ? "" : "/", TEMPNAME); } #ifdef NO_MKSTEMP if (mktemp (tempfile) == NULL || tempfile[0] == '\0' #ifdef O_EXCL || (outfd = open (tempfile, O_WRONLY | O_CREAT | O_EXCL, 0600)) < 0 || (outfile = fdopen (outfd, "w")) == NULL) #else /* O_EXCL */ || (outfile = fopen (tempfile, "w")) == NULL) #endif /* O_EXCL */ #else /* NO_MKSTEMP */ if ((outfd = mkstemp (tempfile)) < 0 || (outfile = fdopen (outfd, "w")) == NULL) #endif /* NO_MKSTEMP */ { (void) fprintf (stderr, CANT_CREATE, (tempfile == NULL || tempfile[0] == '\0') ? "temporary file" : tempfile, MAYBE_CR (stderr)); (void) sleep ((unsigned) 2); return; } #ifndef MSDOS /* ** This is usually a no-op on MS-DOS, but with file-sharing ** installed, it was reported to produce empty spelled files! ** Apparently, the file-sharing module would close the file when ** `chmod' is called. */ (void) chmod (tempfile, statbuf.st_mode); #endif quit = 0; changes = 0; checkfile (); (void) fclose (infile); (void) fclose (outfile); if (!cflag) treeoutput (); if (changes && !readonly) update_file (filename, &statbuf); (void) unlink (tempfile); } /* * Set up to externally deformat a file. * * If no deformatter is provided, we return either standard input (if * filename is NULL) or the result of opening the specified file. * * If a deformatter is provided, but no filename is provided, we * assume that the input comes from stdin, and we set up the * deformatter to filter that descriptor, and return stdin as our * result. In such a case, there is no dual input: we will read the * filtered data via the deformatter and ignore the unfiltered * version. * * If there is a deformatter and we are given a filename, then we set * up the deformatter to read the file from its own standard input and * write to its standard output. In addition, we set up "sourcefile" * so that it can read the unfiltered data directly from the input * file. * * If "statbuf" is non-NULL, it will be filled in with the result of * stat-ing the file. If the stat fails, statbuf->st_mode will be set * to a reasonable default value. The contents of statbuf are * undefined if the input file or the filter cannot be opened. * * Note that external deformatters do not work with named pipes as input. */ static FILE * setupdefmt (filename, statbuf) char * filename; /* File to open, if non-NULL */ struct stat * statbuf; /* Buffer to hold file status */ { FILE* filteredfile; /* Access to the filtered file */ int inputfd; /* Fd for access to file to open */ int savedstdin; /* File descriptor saving stdin */ sourcefile = NULL; if (defmtpgm == NULL) { /* * There is no deformatter. Return either stdin or an open file. */ if (filename == NULL) filteredfile = stdin; else filteredfile = fopen (filename, "r"); if (statbuf != NULL && filteredfile != NULL && fstat (fileno (filteredfile), statbuf) == -1) statbuf->st_mode = DEFAULT_FILE_MODE; return filteredfile; } else if (filename == NULL) { /* * We are reading from standard input. Switch over to a * filtered version of stdin. */ if (statbuf != NULL && fstat (fileno (stdin), statbuf) == -1) statbuf->st_mode = DEFAULT_FILE_MODE; return popen (defmtpgm, "r"); } else { /* * This is the tricky case. We need to get the deformatter to * read from the input file and filter it to us. Doing so * requires several steps: * * 1. Preserve file descriptor 0 by duplicating it. * 2. Close file descriptor 0, and reopen it on the file to be * filtered. * 3. Open a pipe to the deformat program. * 4. Restore file descriptor 0. * * Because we do all of this without ever letting the stdio * library know that we've been mucking around with file * descriptors, we won't bother its access to stdin. */ sourcefile = fopen (filename, "r"); if (sourcefile == NULL) return NULL; if (statbuf != NULL && fstat (fileno (sourcefile), statbuf) == -1) statbuf->st_mode = DEFAULT_FILE_MODE; savedstdin = dup (0); inputfd = open (filename, 0); if (inputfd < 0) return NULL; /* Failed to open the file */ else if (dup2 (inputfd, 0) != 0) { (void) fprintf (stderr, ISPELL_C_UNEXPECTED_FD, filename, MAYBE_CR (stderr)); exit (1); } filteredfile = popen (defmtpgm, "r"); if (dup2 (savedstdin, 0) != 0) { (void) fprintf (stderr, ISPELL_C_UNEXPECTED_FD, filename, MAYBE_CR (stderr)); exit (1); } close (savedstdin); return filteredfile; } } static void update_file (filename, statbuf) char * filename; struct stat * statbuf; { char bakfile[MAXPATHLEN]; int c; char * pathtail; if ((infile = fopen (tempfile, "r")) == NULL) { (void) fprintf (stderr, ISPELL_C_TEMP_DISAPPEARED, tempfile, MAYBE_CR (stderr)); (void) sleep ((unsigned) 2); return; } #ifdef TRUNCATEBAK (void) strncpy (bakfile, filename, sizeof bakfile - 1); bakfile[sizeof bakfile - 1] = '\0'; #else /* TRUNCATEBAK */ (void) sprintf (bakfile, "%.*s%s", (int) (sizeof bakfile - sizeof BAKEXT), filename, BAKEXT); #endif /* TRUNCATEBAK */ pathtail = last_slash (bakfile); if (pathtail == NULL) pathtail = bakfile; else pathtail++; #ifdef TRUNCATEBAK if (strcmp(BAKEXT, filename + strlen(filename) - sizeof BAKEXT + 1) != 0) { if (strlen (pathtail) > MAXNAMLEN - sizeof BAKEXT + 1) pathtail[MAXNAMLEN - sizeof BAKEXT + 1] = '\0'; (void) strcat (pathtail, BAKEXT); } #endif /* TRUNCATEBAK */ #ifdef MSDOS if (pathconf (filename, _PC_NAME_MAX) <= MAXBASENAMELEN + MAXEXTLEN + 1) { /* ** Excessive characters beyond 8+3 will be truncated by the ** OS. Ensure the backup extension won't be truncated, and ** that we don't create an invalid filename (e.g., more than ** one dot). Allow use of BAKEXT without a leading dot (such ** as "~"). */ char *last_dot = rindex (pathtail, '.'); /* ** If no dot in backup filename, make BAKEXT be the extension. ** This ensures we don't truncate the name more than necessary. */ if (last_dot == NULL && strlen (pathtail) > MAXBASENAMELEN) { pathtail[MAXBASENAMELEN] = '.'; /* ** BAKEXT cannot include a dot here (or we would have ** found it above, and last_dot would not be NULL). */ strcpy (pathtail + MAXBASENAMELEN + 1, BAKEXT); } else if (last_dot != NULL) { char *p = pathtail; size_t ext_len = strlen (last_dot); /* Convert all dots but the last to underscores. */ while (p < last_dot && *p) { if (*p == '.') *p = '_'; p++; } /* Make sure we preserve as much of BAKEXT as we can. */ if (ext_len > MAXEXTLEN && ext_len > sizeof (BAKEXT) - 1) strcpy (MAXEXTLEN <= sizeof (BAKEXT) - 1 ? last_dot + 1 : last_dot + MAXEXTLEN - sizeof (BAKEXT) + 1, BAKEXT); } } #endif /* MSDOS */ if (strncmp (filename, bakfile, pathtail - bakfile + MAXNAMLEN) != 0) (void) unlink (bakfile); /* unlink so we can write a new one. */ #ifdef HAS_RENAME (void) rename (filename, bakfile); #else /* HAS_RENAME */ if (link (filename, bakfile) == 0) (void) unlink (filename); #endif /* HAS_RENAME */ /* if we can't write new, preserve .bak regardless of xflag */ if ((outfile = fopen (filename, "w")) == NULL) { (void) fprintf (stderr, CANT_CREATE, filename, MAYBE_CR (stderr)); (void) sleep ((unsigned) 2); return; } #ifndef MSDOS /* ** This is usually a no-op on MS-DOS, but with file-sharing ** installed, it was reported to produce empty spelled files! ** Apparently, the file-sharing module would close the file when ** `chmod' is called. */ (void) chmod (filename, statbuf->st_mode); #endif while ((c = getc (infile)) != EOF) (void) putc (c, outfile); (void) fclose (infile); (void) fclose (outfile); if (xflag && strncmp (filename, bakfile, pathtail - bakfile + MAXNAMLEN) != 0) (void) unlink (bakfile); } static void expandmode (option) int option; /* How to print: */ /* 1 = expansions only */ /* 2 = original line + expansions */ /* 3 = original paired w/ expansions */ /* 4 = add length ratio */ /* 5 = root + flags used, expansion */ { char buf[BUFSIZ]; int explength; /* Total length of all expansions */ register char * flagp; /* Pointer to next flag char */ ichar_t ibuf[BUFSIZ]; MASKTYPE mask[MASKSIZE]; char origbuf[BUFSIZ]; /* Original contents of buf */ char ratiobuf[20]; /* Expansion/root length ratio */ int rootlength; /* Length of root word */ register int temp; while (xgets (buf, sizeof buf, stdin) != NULL) { rootlength = strlen (buf); if (buf[rootlength - 1] == '\n') buf[--rootlength] = '\0'; (void) strcpy (origbuf, buf); if ((flagp = index (buf, hashheader.flagmarker)) != NULL) { rootlength = flagp - buf; *flagp++ = '\0'; } if (option == 2 || option == 3 || option == 4) (void) printf ("%s ", origbuf); if (flagp != NULL) { if (flagp - buf > INPUTWORDLEN) buf[INPUTWORDLEN] = '\0'; } else { if ((int) strlen (buf) > INPUTWORDLEN - 1) buf[INPUTWORDLEN] = '\0'; } (void) fputs (buf, stdout); if (flagp != NULL) { (void) BZERO ((char *) mask, sizeof (mask)); while (*flagp != '\0' && *flagp != '\n') { temp = CHARTOBIT ((unsigned char) *flagp); if (temp >= 0 && temp <= LARGESTFLAG) SETMASKBIT (mask, temp); else (void) fprintf (stderr, BAD_FLAG, MAYBE_CR (stderr), (unsigned char) *flagp, MAYBE_CR (stderr)); flagp++; /* Accept old-format dicts with extra slashes */ if (*flagp == hashheader.flagmarker) flagp++; } if (strtoichar (ibuf, (unsigned char *) buf, sizeof ibuf, 1)) (void) fprintf (stderr, WORD_TOO_LONG (buf)); explength = expand_pre ((unsigned char *) origbuf, ibuf, mask, option, (unsigned char *) ""); explength += expand_suf ((unsigned char *) origbuf, ibuf, mask, 0, option, (unsigned char *) ""); explength += rootlength; if (option == 4) { (void) sprintf (ratiobuf, " %f", (double) explength / (double) rootlength); (void) fputs (ratiobuf, stdout); (void) expand_pre ((unsigned char *) origbuf, ibuf, mask, 3, (unsigned char *) ratiobuf); (void) expand_suf ((unsigned char *) origbuf, ibuf, mask, 0, 3, (unsigned char *) ratiobuf); } } (void) putchar ('\n'); (void) fflush (stdout); } } /* ** A trivial wrapper for rindex (file '/') on Unix, but ** saves a lot of ifdef-ing on MS-DOS. */ char * last_slash (file) char * file; /* String to search for / or \ */ { #ifdef MSDOS char * backslash; /* Position of last backslash */ #endif /* MSDOS */ char * slash; /* Position of last slash */ slash = rindex (file, '/'); #ifdef MSDOS /* ** We can have both forward- and backslashes; find the rightmost ** one of either type. */ backslash = rindex (file, '\\'); if (slash == NULL || (backslash != NULL && backslash > slash)) slash = backslash; /* ** If there is no backslash, but the first two characters are a ** letter and a colon, the basename begins right after them. */ if (slash == NULL && file[0] != '\0' && file[1] == ':') slash = file + 1; #endif return slash; } ispell-3.4.02/PaxHeaders.22185/config.X0000644000000000000000000000013213776416103014234 xustar0030 mtime=1610226755.201053621 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/config.X0000444003214100001440000011646313776416103015320 0ustar00geofffaculty00000000000000#ifndef CONFIG_H_INCLUDED #define CONFIG_H_INCLUDED /* * Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * This is the configuration file for ispell. Thanks to Bob McQueer * for creating it and making the necessary changes elsewhere to * support it, and to George Sipe for figuring out how to make it easier * to use. * * WARNING: The Makefile edits this file (config.X) to produce config.h. * If you are looking at config.h, you're in the wrong file. * * Look through this file from top to bottom. If anything needs changing, * create the header file "local.h" and define the correct values there; * they will override this file. If you don't make any changes to this * file, future patching will be easier. */ /* * $Id: config.X,v 1.103 2021-01-09 13:12:35-08 geoff Exp $ * * $Log: config.X,v $ * Revision 1.103 2021-01-09 13:12:35-08 geoff * Double the default maximum number of stringchars (partly to force old * hash files to be detected). * * Revision 1.102 2020-12-30 22:33:41-08 geoff * Change MASKTYPE to be unsigned. * * Revision 1.101 2015-02-08 00:35:41-08 geoff * Add POSIX termios support (thanks to Christian Weisgerber for the patch). * * Revision 1.100 2007-01-23 17:20:35-08 geoff * Ignore HTML style and script tags * * Revision 1.99 2005/05/25 14:13:53 geoff * Correct the spelling of the default for EXEEXT. * * Revision 1.98 2005/05/01 23:07:59 geoff * Add #ifndef around the definition of LINK (how the heck did I blow * THAT one? Thanks to Eli Zaretskii for fixing it). Add EXTEXT (again * courtesy of Eli) to support MS-DOS and similar systems. * * Revision 1.97 2005/04/28 14:46:51 geoff * Add DEFLOGDIR. * * Revision 1.96 2005/04/28 01:03:11 geoff * Include defhash.h after local.h so local.h can override its * definitions. Put back the definitions of MASTERHASH, DEFHASH, and * DEFLANG so they'll be documented. * * Revision 1.95 2005/04/28 00:26:06 geoff * Get hash-file names from defhash.h (but let local.h override them). * Document the fact that the master hash file is the first language in * the language list. * * Revision 1.94 2005/04/26 22:40:07 geoff * Add double-inclusion protection. * * Revision 1.93 2005/04/21 14:08:58 geoff * Don't put an explicit path on egrep, and assume that it takes the -i * switch (since that's true on most modern systems). * * Revision 1.92 2005/04/14 21:25:52 geoff * Add a prominent warning against using symbolic links. Add * DICTIONARYVAR and CHARESETVAR. Fix a typo in determining word size * for masks. Try to get the masktype width from the system word size if * possible. * * Revision 1.91 2005/04/14 15:19:37 geoff * Add shortcite to both versions of TEXSKIP1. * * Revision 1.90 2005/04/14 14:38:23 geoff * Update license. Integrate Ed Avis's changes. Make "ln" configurable. * Use -lncurses by default, rather than -ltermcap. Make manual * extensions configures. Also make some of the manual contents * configurable. Make words default to /usr/share/dict. Add a warning * against /usr/share/dict/web2. Make the determination of MAXPATHLEN * and MAXNAMLEN smarter. Increase a bunch of parameters to reflect the * increased power of modern machines. Add support for 64-bit word size. * Expand the known TeX keywords. Add DEFAULT_FILE_MODE. * * Revision 1.89 2001/09/06 00:30:28 geoff * Many changes from Eli Zaretskii to support DJGPP compilation. * * Revision 1.88 2001/07/25 21:51:45 geoff * Minor license update. * * Revision 1.87 2001/07/23 20:24:02 geoff * Update the copyright and the license. * * Revision 1.86 2001/06/14 09:11:11 geoff * Use non-conflicting macros for bcopy and bzero to avoid compilation * problems on smarter compilers. * * Revision 1.85 2001/05/30 21:14:47 geoff * Invert the fcntl/mkstemp options so they will default to being used. * * Revision 1.84 2001/05/30 21:04:25 geoff * Add HAS_FCNTL_H and HAS_MKSTEMP. * * Revision 1.83 2001/01/24 01:18:27 geoff * Don't build the + dictionaries by default any more, because too many * distributions no longer supply /usr/dict/words. * * Revision 1.82 2000/08/22 10:52:25 geoff * Fix a spelling error in an ifdef, improve comments on TERMLIB, and * bump MAXSTRINGCHARS to 512 to reflect the increased number used in the * english.aff file (and presumably others). * * Revision 1.81 2000/06/30 08:32:47 geoff * Bump the default MAXSTRINGCHARS to handle more complex languages * * Revision 1.80 2000/01/21 06:57:38 geoff * Add a bunch of new TeX keywords * * Revision 1.79 1999/01/13 01:34:18 geoff * Get rid of EMACS, which is now obsolete. * * Revision 1.78 1999/01/08 04:34:11 geoff * Get rid of ELISPDIR and TEXINFODIR * * Revision 1.77 1999/01/07 01:22:34 geoff * Update the copyright. * * Revision 1.76 1998/07/12 20:42:12 geoff * Switch the sense of IGNOREBIB for TEXSKIP1. * * Revision 1.75 1998/07/06 06:55:11 geoff * Add TEXSKIP1/2 and associated variables. * * Revision 1.74 1997/12/02 06:24:35 geoff * Get rid of some compile options that really shouldn't be optional. * * Revision 1.73 1997/12/01 00:53:41 geoff * Add HTML support variables. * * Revision 1.72 1995/11/08 05:09:09 geoff * Use symbolic values for DEFTEXFLAG. * * Revision 1.71 1995/01/08 23:23:28 geoff * Add some more configuration variables: HAS_RENAME, MSDOS_BINARY_OPEN, * HOME, PDICTHOME, HASHSUFFIX, STATSUFFIX, and COUNTSUFFIX. These are * all to make it easier to port ispell to MS-DOS. Change DEFPAFF back * to "words" so that only .ispell_words will be independent of language. * * Revision 1.70 1994/10/25 05:45:57 geoff * Fix a tiny typo in a comment. Add a configurable install command. * * Revision 1.69 1994/09/01 06:06:30 geoff * Improve the the documentation of LANGUAGES to include working examples. * * Revision 1.68 1994/07/28 05:11:34 geoff * Log message for previous revision: force MASKBITS to greater than or * equal to MASKTYPE_WIDTH (simplifies configuration for 64-bit * machines). * * Revision 1.67 1994/07/28 04:53:34 geoff * * Revision 1.66 1994/04/27 02:50:46 geoff * Change the documentation and defaults for the languages variable to * reflect the new method of making American and British dictionary * variants. * * Revision 1.65 1994/04/27 01:50:28 geoff * Add MAX_CAPS. * * Revision 1.64 1994/02/07 08:10:42 geoff * Add GENERATE_LIBRARY_PROTOS as a special variable for use only by me. * * Revision 1.63 1994/01/26 07:44:45 geoff * Make yacc configurable through local.h. * * Revision 1.62 1994/01/25 07:11:20 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ /* You may wish to specify your local definitions in this file: */ #include "local.h" /* local definitions for options */ #include "defhash.h" /* Automatically generated options */ /* ** Major-differences selection. The default system is BSD; for USG ** or non-UNIX systems you should add the appropriate #define to local.h. */ #ifndef USG #undef USG /* Define this in local.h for System V machines */ #endif /* USG */ #include #include #ifndef USG #include #endif /* USG */ #ifndef TERMIOS #define TERMIOS 1 /* POSIX termios.h */ #endif /* TERMIOS */ /* ** Things that normally go in a Makefile. Define these just like you ** might in the Makefile, except you should use #define instead of ** make's assignment syntax. Everything must be double-quoted, and ** (unlike make) you can't use any sort of $-syntax to pick up the ** values of other definitions. */ #ifndef CC #define CC "cc" #endif /* CC */ #ifndef LINT #define LINT "lint" #endif /* LINT */ #ifndef CFLAGS #define CFLAGS "-O" #endif /* CFLAGS */ #ifndef LINTFLAGS #define LINTFLAGS "" #endif /* LINTFLAGS */ #ifndef YACC #define YACC "yacc" #endif /* YACC */ /* ** For some systems, it might be better to use symbolic links rather ** than traditional hard links. Usually hard links are better, ** because they are more efficient. However, hard links don't work ** across physical devices. In such cases, you may prefer to set LINK ** to "ln -s" to work around that deficiency. ** ** NOTE TO PERSONS WHO FIRST LEARNED UNIX AFTER 1980: many Unix ** novices seem to think that symbolic links are the only kind of ** links, and seem to use them reflexively. Remember that symbolic ** links are inferior to hard links in almost every way. The ** exception is when you're dealing either with (a) links to ** directories or (b) cross-device links. Ispell uses neither. Don't ** change LINK to "ln -s" unless you are working on a system that ** simply doesn't support hard links. */ #ifndef LINK #define LINK "ln" #endif /* ** Libraries that may need to be added to the cc line to get ispell to ** link. Normally, this should be null. */ #ifndef LIBES #define LIBES "" #endif /* ** TERMLIB - where to get the termcap library. Should be -ltermcap, ** -lcurses, or -lncurses on most systems. */ #ifndef TERMLIB #define TERMLIB "-lncurses" #endif /* ** REGLIB - where to get the regular-expression routines, if ** REGEX_LOOKUP is defined. Should be -lPW on USG systems, null on ** BSD systems. */ #ifndef REGLIB #define REGLIB "" #endif /* ** Where to install various components of ispell. BINDIR contains ** binaries. LIBDIR contains hash tables and affix files. ** ** If you intend to use multiple dictionary files, I would suggest ** LIBDIR be a directory which will contain nothing else, so sensible ** names can be constructed for the -d option without conflict. */ #ifndef BINDIR #define BINDIR "/usr/local/bin" #endif #ifndef LIBDIR #define LIBDIR "/usr/local/lib" #endif /* ** MAN1DIR and MAN1EXT control installing the section 1 (executable ** programs) manual pages. There are also manual pages for file ** formats, but there seems to be some controversy over whether these ** belong in section 4 or section 5 of the manual. To make the ** cross-references correct you also need to change MAN45SECT. (The ** built files are always called .5X and .5; the extension changes ** only when it's finally installed.) ** ** If your system likes to use ".1l" and such for local manual pages, ** you can change MAN1EXT and MAN45EXT appropriately. */ #ifndef MAN1DIR #define MAN1DIR "/usr/local/man/man1" #endif #ifndef MAN1EXT #define MAN1EXT ".1" #endif #ifndef MAN45DIR #define MAN45DIR "/usr/local/man/man5" #endif #ifndef MAN45EXT #define MAN45EXT ".5" #endif #ifndef MAN45SECT #define MAN45SECT "5" #endif /* ** Ispell's manual page refers to some programs, look, spell, and tib, that ** may be absent on some systems. Look used to be optional; spell ** used to be a part of standard Unix, but has been obsoleted by ** ispell; tib is part of a rarely used TeX package that is not ** available on most systems. To avoid having a cross reference to a ** manual page that doesn't exist, they are changeable here. ** ** If you have either on your system, define these as follows: ** ** #define SPELL_XREF ".IR spell (1)," ** #define TIB_XREF ".IR tib (1)," ** ** By default, SPELL_XREF is defined as a special string that ** evaluates to nothing in a manual page, because the program is not ** otherwise mentioned in the ispell manaul. Since tib is mentioned ** elsewhere, its default definition is more complex. ** ** Incidentally, there is no need to do the same for sort, join, and ** so on, since they are standard on any Unix-like system. */ #ifndef LOOK_XREF #define LOOK_XREF ".IR look (1)," #endif #ifndef SPELL_XREF #define SPELL_XREF ".\\\"" #endif #ifndef TIB_XREF #define TIB_XREF ".IR tib \" (if available on your system)\"," #endif /* ** List of all hash files (languages) which will be supported by ispell. ** ** This variable has a complex format so that many options can be ** specified. The format is as follows: ** ** [,...] [ [, ...] ...] ** ** where ** ** language is the name of a subdirectory of the ** "languages" directory ** make-options are options that are to be passed to "make" in ** the specified directory. The make-options ** should not, in general, specify a target, as ** this will be provided by the make process. ** ** For example, if LANGUAGES is: ** ** "{american,MASTERDICTS=american.med+,HASHFILES=americanmed+.hash,EXTRADICT=/usr/share/dict/words /usr/share/dict/web2} {deutsch,DICTALWAYS=deutsch.sml,DICTOPTIONS=}" ** ** then the American-English and Deutsch (German) languages will be supported, ** and the following variable settings will be passed to the two Makefiles: ** ** American: ** ** MASTERDICTS='american.med+' ** HASHFILES='americanmed+.hash' ** EXTRADICT='/usr/share/dict/words /usr/share/dict/web2' ** ** Deutsch: ** ** DICTALWAYS='deutsch.sml' ** DICTOPTIONS='' ** ** Incidentally, it is rarely a good idea to include /usr/share/dict/web2 ** in an ispell dictionary even if the file exists on your system, ** because it contains obscure words that may mask misspellings of ** more common words. ** ** Notes on the syntax: The makefile is not very robust. If you have ** make problems, or if make seems to fail in the language-subdirs ** dependency, check your syntax. The makefile adds single quotes to ** the individual variables in the LANGUAGES specification, so don't ** use quotes of any kind. ** ** The first language listed in this variable MUST contain a HASHFILES ** declaration. That language will become the default for ** spell-checking if no dictionary is explicitly specified. As a ** special (and kludgey) feature, if that language begins with ** "american" or "british", it will also be aliased to "english", and ** "english" will become the default dictionary. (All of these ** defaults can be overridden by defining MASTERHASH, DEFHASH, and ** DEFLANG, but that should rarely be necessary.) ** ** On MSDOS systems, you must use names that are consistent with the ** 8+3 filename restrictions, or you will risk filename collision. See ** the file pc/local.djgpp for details. */ #ifndef LANGUAGES #define LANGUAGES "{american,MASTERDICTS=american.med,HASHFILES=americanmed.hash,EXTRADICT=}" #endif /* LANGUAGES */ /* ** Master hash file for DEFHASH. This is the name of a hash file ** built by a language Makefile. It should be the most-popular hash ** file on your system, because it is the one that will be used by ** default. It must be listed in LANGUAGES, above. ** ** Normally, it is not necessary to define this variable in local.h, ** because it will automatically be extracted from LANGUAGES, above. */ #ifndef MASTERHASH #define MASTERHASH "americanmed.hash" #endif /* ** Default native-language hash file. This is the name given to the ** hash table that will be used if no language is specified to ** ispell. It is a link to MASTERHASH, above. ** ** Normally, it is not necessary to define this variable in local.h, ** because it will automatically be extracted from LANGUAGES, above. */ #ifndef DEFHASH #define DEFHASH "english.hash" #endif /* ** Language tables for the default language. This must be the name of ** the affix file that was used to generate the MASTERHASH/DEFHASH, ** above. ** ** Normally, it is not necessary to define this variable in local.h, ** because it will automatically be extracted from LANGUAGES, above. */ #ifndef DEFLANG #define DEFLANG "english.aff" #endif /* ** Language to use for error messages. If there are no messages in this ** language, English will be used instead. */ #ifndef MSGLANG #define MSGLANG "english" #endif /* MSGLANG */ /* ** If your sort command accepts the -T switch to set temp file ** locations (try it out; it exists but is undocumented on some ** systems), make the following variable the null string. Otherwise ** leave it as the sed script. */ #ifndef SORTTMP #define SORTTMP "-e '/!!SORTTMP!!/s/=.*$/=/'" #endif /* ** If your sort command accepts the -T switch (see above), make the ** following variable refer to a temporary directory with lots of ** space. Otherwise make it the null string. */ #ifndef MAKE_SORTTMP #define MAKE_SORTTMP "-T ${TMPDIR-/tmp}" #endif /* ** Sequence that indicates the beginning of a shell script. Most ** systems use "#!/bin/sh" here. Some very old machines, however, ** need ": Use /bin/sh". */ #ifndef POUNDBANG #define POUNDBANG "#!/bin/sh" #endif /* ** INSTALL program. Could be a copy program like cp or something fancier ** like /usr/ucb/install -c */ #ifndef INSTALL #define INSTALL "cp" #endif /* ** If your system has the rename(2) system call, define HAS_RENAME and ** ispell will use that call to rename backup files. Otherwise, it ** will use link/unlink. There is no harm in this except on MS-DOS, ** which doesn't support link/unlink. */ #ifndef HAS_RENAME #undef HAS_RENAME #endif /* HAS_RENAME */ /* ** If your system doesn't have the fcntl.h header file (most modern ** systems do), define this. */ #ifndef NO_FCNTL_H #undef NO_FCNTL_H #endif /* NO_FCNTL_H */ /* ** If your system doesn't have the mkstemp library call, define this. */ #ifndef NO_MKSTEMP #undef NO_MKSTEMP #endif /* NO_MKSTEMP */ /* Aliases for some routines */ #ifdef USG #define BCOPY(s, d, n) memcpy (d, s, n) #define BZERO(d, n) memset (d, 0, n) #define index strchr #define rindex strrchr #else #define BCOPY(s, d, n) bcopy (s, d, n) #define BZERO(d, n) bzero (d, n) #endif /* type given to signal() by signal.h */ #ifndef SIGNAL_TYPE #define SIGNAL_TYPE void #endif /* environment variable for user's word list */ #ifndef PDICTVAR #define PDICTVAR "WORDLIST" #endif /* prefix part of default word list */ #ifndef DEFPDICT #define DEFPDICT ".ispell_" #endif /* ** suffix part of default word list */ #ifndef DEFPAFF #define DEFPAFF "words" #endif /* old place to look for default word list */ #ifndef OLDPDICT #define OLDPDICT ".ispell_" #endif /* OLDPDICT */ #ifndef OLDPAFF #define OLDPAFF "words" #endif /* OLDPAFF */ /* where to put log files (inside home */ #define DEFLOGDIR ".ispell_logs" /* environment variable for include file string */ #ifndef INCSTRVAR #define INCSTRVAR "INCLUDE_STRING" #endif /* default include string */ #ifndef DEFINCSTR #define DEFINCSTR "&Include_File&" #endif /* Environment variable for getting extra ispell options */ #define OPTIONVAR "ISPELL_OPTIONS" /* Environment variable for controlling where to look for dictionaries */ #define LIBRARYVAR "ISPELL_DICTDIR" /* environment variable for preferred dictionary */ #ifndef DICTIONARYVAR #define DICTIONARYVAR "DICTIONARY" #endif /* environment variable for preferred character set */ #ifndef CHARSETVAR #define CHARSETVAR "ISPELL_CHARSET" #endif /* mktemp template for temporary file - MUST contain 6 consecutive X's */ #ifndef TEMPNAME #define TEMPNAME "/tmp/ispellXXXXXX" #endif /* ** If REGEX_LOOKUP is undefined, the lookup command (L) will use the look(1) ** command (if available) or the egrep command. If REGEX_LOOKUP is defined, ** the lookup command will use the internal dictionary and the ** regular-expression library (which you must supply separately. There is ** a public-domain library available; libraries are also distributed with ** both BSD and System V. ** ** The advantage of no REGEX_LOOKUP is that it is often much faster, especially ** if the look(1) command is available, that the words found are presented ** in alphabetical order, and that the list of words searched is larger. ** The advantage of REGEX_LOOKUP is that ispell doesn't need to spawn another ** program, and the list of words searched is exactly the list of (root) words ** that ispell will accept. (However, note that words formed with affixes will ** not be found; this can produce some artifacts. For example, since ** "brother" can be formed as "broth+er", a lookup command might fail to ** find "brother.") */ #ifndef REGEX_LOOKUP #undef REGEX_LOOKUP #endif /* REGEX_LOOKUP */ /* ** Choose the proper type of regular-expression routines here. BSD ** and public-domain systems have routines called re_comp and re_exec; ** System V uses regcmp and regex. ** ** REGCTYPE is the type of a variable to hold the compiled regexp ** REGCMP(re,str) is the function that compiles a regexp in `str' into ** a compiled regexp `re' declared as REGCTYPE and ** returns `re'. ** REGEX(re, str, dummy) is a function that matches `str' against a compiled ** regexp in `re' and returns a non-NULL pointer if it ** matches, NULL otherwise. ** REGFREE(re) is anything that should be done when the compiled ** regexp `re' is no longer needed. It can be also used ** to allocate any structures required to compile a ** regexp, since it is called *before* compiling a new ** regexp (that's where we know that the old one will no ** longer be used). ** ** Here is one way of defining these if you have POSIX regexp functions: ** ** #include ** #include ** #define REGCTYPE regex_t * ** #define REGCMP(re,str) (regcomp (re, str, 0), re) ** #define REGEX(re, str, dummy) \ ** (re != 0 && regexec (re, str, 0, 0, 0) == 0 ? (char *) 1 : NULL) ** #define REGFREE(re) \ ** do \ ** { \ ** if (re == 0) \ ** re = (regex_t *) calloc (1, sizeof (regex_t)); \ ** else \ ** regfree (re); \ ** } while (0) ** */ #ifdef REGEX_LOOKUP #ifndef REGCMP #ifdef USG #define REGCTYPE char * #define REGCMP(re, str) regcmp (str, (char *) 0) #define REGEX(re, str, dummy) regex (re, str, dummy, dummy, dummy, dummy, \ dummy, dummy, dummy, dummy, dummy, dummy) #define REGFREE(re) do \ { \ if (re != NULL) \ free (re); \ re = NULL; \ } \ while (0) #else /* USG */ #define REGCTYPE char * #define REGFREE(re) /* Do nothing */ #define REGCMP(re, str) re_comp (str) #define REGEX(re, str, dummy) re_exec (str) #endif /* USG */ #endif /* REGCMP */ #endif /* REGEX_LOOKUP */ /* look command (if look(1) MAY BE available - ignored if not) */ #ifndef REGEX_LOOKUP #ifndef LOOK #define LOOK "look -df" #endif #endif /* REGEX_LOOKUP */ /* path to egrep (use speeded up version if available) */ #ifndef EGREPCMD #define EGREPCMD "egrep -i" #endif /* ** Path to wordlist for Lookup command (typically /usr/dict/words, ** /usr/dict/web2, or /usr/share/dict/words or web2). ** ** Note that it is usually a bad idea to specify the web2 dictionary ** because it contains obscure words. */ /* note that /usr/share/dict/web2 is usually a bad idea due to obscure words */ #ifndef WORDS #define WORDS "/usr/share/dict/words" #endif /* buffer size to use for file names if not in sys/param.h */ #ifndef MAXPATHLEN #ifdef PATH_MAX #define MAXPATHLEN PATH_MAX #else #define MAXPATHLEN 240 #endif #endif /* max file name length (will truncate to fit BAKEXT) if not in sys/param.h */ #ifndef MAXNAMLEN #ifdef NAME_MAX #define MAXNAMLEN NAME_MAX #else #define MAXNAMLEN 14 #endif #endif /* define if you want .bak file names truncated to MAXNAMLEN characters */ #ifndef TRUNCATEBAK #undef TRUNCATEBAK #endif /* TRUNCATEBAK */ /* largest word accepted from a file by any input routine, plus one */ #ifndef INPUTWORDLEN #define INPUTWORDLEN 100 #endif /* largest amount that a word might be extended by adding affixes */ #ifndef MAXAFFIXLEN #define MAXAFFIXLEN 40 #endif /* ** Number of mask bits (affix flags) supported. Must be 32, 64, 128, or ** 256. If MASKBITS is 32 or 64, there are really only 26 or 58 flags ** available, respectively. If it is 32, the flags are named with the ** 26 English uppercase letters; lowercase will be converted to uppercase. ** If MASKBITS is 64, the 58 flags are named 'A' through 'z' in ASCII ** order, including the 6 special characters from 'Z' to 'a': "[\]^_`". ** If MASKBITS is 128 or 256, all the 7-bit or 8-bit characters, ** respectively, are theoretically available, though a few (newline, slash, ** null byte) are pretty hard to actually use successfully. ** ** Note that most non-English affix files depend on having MASKBITS ** equal to 64 or larger. It is for this reason that MASKBITS ** defaults to 64. If you are only going to be using ispell for ** English, and you are very tight on memory space, you might want to ** reduce MASKBITS to 32. */ #ifndef MASKBITS #define MASKBITS 64 #endif /* ** C type to use for masks. This should be a type that the processor ** accesses efficiently. ** ** MASKTYPE_WIDTH must correctly reflect the number of bits in a ** MASKTYPE. Unfortunately, it is also required to be a constant at ** preprocessor time, which means you can't use the sizeof operator to ** define it. ** ** Note that MASKTYPE *must* match MASKTYPE_WIDTH or you may get ** division-by-zero errors! */ #ifndef MASKTYPE #ifdef __WORDSIZE #if __WORDSIZE == 64 #define MASKTYPE unsigned long #define MASKTYPE_WIDTH 64 #else #define MASKTYPE unsigned int #define MASKTYPE_WIDTH __WORDSIZE #endif #else #define MASKTYPE unsigned long #endif #endif #ifndef MASKTYPE_WIDTH #ifdef __WORDSIZE #define MASKTYPE_WIDTH __WORDSIZE #else #define MASKTYPE_WIDTH 32 #endif /* __WORDSIZE */ #endif /* MASKTYPE_WIDTH */ #if MASKBITS < MASKTYPE_WIDTH #undef MASKBITS #define MASKBITS MASKTYPE_WIDTH #endif /* MASKBITS < MASKTYPE_WIDTH */ /* maximum number of include files supported by xgets; set to 0 to disable */ #ifndef MAXINCLUDEFILES #define MAXINCLUDEFILES 5 #endif /* ** Maximum hash table fullness percentage. Larger numbers trade space ** for time. **/ #ifndef MAXPCT #define MAXPCT 70 /* Expand table when 70% full */ #endif /* ** Maximum number of "string" characters that can be defined in a ** language (affix) file. Don't forget that an upper/lower string ** character counts as two! */ #ifndef MAXSTRINGCHARS #define MAXSTRINGCHARS 1024 #endif /* MAXSTRINGCHARS */ /* ** Maximum length of a "string" character. The default is appropriate for ** nroff-style characters starting with a backslash. */ #ifndef MAXSTRINGCHARLEN #define MAXSTRINGCHARLEN 10 #endif /* MAXSTRINGCHARLEN */ /* ** the terminal mode for ispell, set to CBREAK or RAW ** */ #ifndef TERM_MODE #define TERM_MODE CBREAK #endif /* ** Define this if you want your columns of words to be of equal length. ** This will spread short word lists across the screen instead of down it. */ #ifndef EQUAL_COLUMNS #undef EQUAL_COLUMNS #endif /* EQUAL_COLUMNS */ /* ** This is the extension that will be added to backup files */ #ifndef BAKEXT #define BAKEXT ".bak" #endif /* ** Define this if you want your personal dictionary sorted. This may take ** a long time for very large dictionaries. Dictionaries larger than ** SORTPERSONAL words will not be sorted. Define SORTPERSONAL as zero ** to disable this feature. */ #ifndef SORTPERSONAL #define SORTPERSONAL 4000 #endif /* ** Define this if you want to use the shell for interpretation of commands ** issued via the "L" command, "^Z" under System V, and "!". If this is ** not defined then a direct fork()/exec() will be used in place of the ** normal system(). This may speed up these operations greatly on some ** systems. */ #ifndef USESH #undef USESH #endif /* USESH */ /* ** Maximum language-table search size. Smaller numbers make ispell ** run faster, at the expense of more memory (the lowest reasonable value ** is 2). If a given character appears in a significant position in ** more than MAXSEARCH suffixes, it will be given its own index table. ** If you change this, define INDEXDUMP in lookup.c to be sure your ** index table looks reasonable. */ #ifndef MAXSEARCH #define MAXSEARCH 4 #endif /* ** Define this if you want to be able to type any command at a "type space ** to continue" prompt. */ #ifndef COMMANDFORSPACE #undef COMMANDFORSPACE #endif /* COMMANDFORSPACE */ /* ** Memory-allocation increment. Buildhash allocates memory in chunks ** of this size, and then subdivides it to get its storage. This saves ** much malloc execution time. A good number for this is the system ** page size less the malloc storage overhead. ** ** Define this to zero to revert to using malloc/realloc. This is normally ** useful only on systems with limited memory. */ #ifndef MALLOC_INCREMENT #define MALLOC_INCREMENT (4096 - 8) #endif /* ** Maximum number of "hits" expected on a word. This is basically the ** number of different ways different affixes can produce the same word. ** For example, with "english.aff", "brothers" can be produced 3 ways: ** "brothers," "brother+s", or "broth+ers". If this is too low, no major ** harm will be done, but ispell may occasionally forget a capitalization. */ #ifndef MAX_HITS #define MAX_HITS 10 #endif /* ** Maximum number of capitalization variations expected in any word. ** Besides the obvious all-lower, all-upper, and capitalized versions, ** this includes followcase variants. If this is too low, no real ** harm will be done, but ispell may occasionally fail to suggest a ** correct capitalization. */ #ifndef MAX_CAPS #define MAX_CAPS 10 #endif /* MAX_CAPS */ /* Define this to ignore spelling check of entire LaTeX bibliography listings */ #ifndef IGNOREBIB #undef IGNOREBIB #endif /* ** Default nroff and TeX special characters. Normally, you won't want to ** change this; instead you would override it in the language-definition ** file. */ #ifndef TEXSPECIAL #define TEXSPECIAL "()[]{}<>\\$*.%" #endif #ifndef NRSPECIAL #define NRSPECIAL "().\\*" #endif /* ** Default tags after which TeX mode ignores one (skip1) and two (skip2) ** arguments */ #ifndef TEXSKIP1 #ifdef IGNOREBIB #define TEXSKIP1 "end,vspace,hspace,cite,shortcite,ref,eqref,parbox,label,input,nocite,include,includeonly,documentstyle,documentclass,usepackage,selectlanguage,pagestyle,thispagestyle,pagenumbering,value,arabic,roman,Roman,alph,Alph,fnsymbol,stepcounter,refstepcounter,newcounter,addtocontents,newenvironment,renewenvironment,newtheorem,theoremstyle,color,colorbox,textcolor,pagecolor,enlargethispage,stretch,scalebox,rotatebox,includegraphics,symbol,settowidth,settoheight,settodepth,bibliography,bibitem,hyphenation,pageref,psfig" #else /* IGNOREBIB */ #define TEXSKIP1 "end,vspace,hspace,cite,shortcite,ref,eqref,parbox,label,input,nocite,include,includeonly,documentstyle,documentclass,usepackage,selectlanguage,pagestyle,thispagestyle,pagenumbering,value,arabic,roman,Roman,alph,Alph,fnsymbol,stepcounter,refstepcounter,newcounter,addtocontents,newenvironment,renewenvironment,newtheorem,theoremstyle,color,colorbox,textcolor,pagecolor,enlargethispage,stretch,scalebox,rotatebox,includegraphics,symbol,settowidth,settoheight,settodepth,hyphenation,pageref,psfig" #endif /* IGNOREBIB */ #endif /* TEXSKIP1 */ #ifndef TEXSKIP2 #define TEXSKIP2 "rule,setcounter,addtocounter,setlength,addtolength,settowidth" #endif /* TEXSKIP2 */ /* ** Environment variables used to override TEXSKIP1 and TEXSKIP2 */ #ifndef TEXSKIP1VAR #define TEXSKIP1VAR "TEXSKIP1" #endif /* TEXSKIP1VAR */ #ifndef TEXSKIP2VAR #define TEXSKIP2VAR "TEXSKIP2" #endif /* TEXSKIP2VAR */ /* ** Default tags between which HTML mode ignores text */ #ifndef HTMLIGNORE #define HTMLIGNORE "code,samp,kbd,pre,listing,address,style,script" #endif /* ** Variable used to override HTMLIGNORE */ #ifndef HTMLIGNOREVAR #define HTMLIGNOREVAR "HTMLIGNORE" #endif /* HTMLIGNOREVAR */ /* ** Default tag fields which HTML mode always checks */ #ifndef HTMLCHECK #define HTMLCHECK "alt" #endif /* HTMLCHECK */ /* ** Variable used to override HTMLCHECK */ #ifndef HTMLCHECKVAR #define HTMLCHECKVAR "HTMLCHECK" #endif /* HTMLCHECKVAR */ /* ** Defaults for certain command-line flags. */ #ifndef DEFNOBACKUPFLAG #define DEFNOBACKUPFLAG 0 /* Don't suppress backup file */ #endif /* ** DEFTEXFLAG should really be named DEFAULT_DEFORMATTER, but isn't for ** historical reasons. **/ #ifndef DEFTEXFLAG #define DEFTEXFLAG DEFORMAT_NROFF /* Default to nroff mode */ #endif /* ** Define this if you want ispell to place a limitation on the maximum ** size of the screen. On windowed workstations with very large windows, ** the size of the window can be too much of a good thing, forcing the ** user to look back and forth between the bottom and top of the screen. ** If MAX_SCREEN_SIZE is nonzero, screens larger than this will be treated ** as if they have only MAX_SCREEN_SIZE lines. A good value for this ** variable is 24 or 30. Define it as zero to suppress the feature. */ #ifndef MAX_SCREEN_SIZE #define MAX_SCREEN_SIZE 0 #endif /* ** The next three variables are used to provide a variable-size context ** display at the bottom of the screen. Normally, the user will see ** a number of lines equal to CONTEXTPCT of his screen, rounded down ** (thus, with CONTEXTPCT == 10, a 24-line screen will produce two lines ** of context). The context will never be greater than MAXCONTEXT or ** less than MINCONTEXT. To disable this feature entirely, set MAXCONTEXT ** and MINCONTEXT to the same value. To round context percentages up, ** define CONTEXTROUNDUP. ** ** Warning: don't set MAXCONTEXT ridiculously large. There is a ** static buffer of size MAXCONTEXT*BUFSIZ; since BUFSIZ is frequently ** 1K or larger, this can create a remarkably large executable. */ #ifndef CONTEXTPCT #define CONTEXTPCT 10 /* Use 10% of the screen for context */ #endif #ifndef MINCONTEXT #define MINCONTEXT 2 /* Always show at least 2 lines of context */ #endif #ifndef MAXCONTEXT #define MAXCONTEXT 10 /* Never show more than 10 lines of context */ #endif #ifndef CONTEXTROUNDUP #undef CONTEXTROUNDUP /* Don't round context up */ #endif /* ** Define this if you want the context lines to be displayed at the ** bottom of the screen, the way they used to be, rather than at the top. */ #ifndef BOTTOMCONTEXT #undef BOTTOMCONTEXT #endif /* BOTTOMCONTEXT */ /* ** Define this if you want the "mini-menu," which gives the most important ** options at the bottom of the screen, to be the default (in any case, it ** can be controlled with the "-M" switch). */ #ifndef MINIMENU #undef MINIMENU #endif /* ** You might want to change this to zero if your users want to check ** single-letter words against the dictionary. However, you should try ** some sample runs using the -W switch before you try it out; you'd ** be surprised how many single letters appear in documents. If you increase ** MINWORD beyond 1, don't say I didn't warn you that it was a bad idea. */ #ifndef MINWORD #define MINWORD 1 /* Words this short and shorter are always ok */ #endif /* ** ANSI C compilers are supposed to provide an include file, ** "stdlib.h", which gives function prototypes for all library ** routines. Define NO_STDLIB_H if you have a compiler that claims to ** be ANSI, but doesn't provide this include file. */ #ifndef NO_STDLIB_H #ifndef __STDC__ #define NO_STDLIB_H #endif /* __STDC__ */ #endif /* NO_STDLIB_H */ /* ** Not all systems have the same definitions for R_OK and W_OK ** flags for calling `access'. If the defaults below are not ** good for your system, define different values in "local.h". ** Usually, the system header defines these. */ #ifndef R_OK #define R_OK 4 #endif #ifndef W_OK #define W_OK 2 #endif /* ** Default mode to give to output files if the mode of the input file ** cannot be determined. There should be no need to change this. */ #ifndef DEFAULT_FILE_MODE #define DEFAULT_FILE_MODE 0644 #endif /* DEFAULT_FILE_MODE */ /* ** The following define is used by the ispell developer to help ** double-check the software. Leave it undefined on other systems ** unless you are especially fond of warning messages, or are pursuing ** an inexplicable bug that might be related to a type mismatch. */ #ifndef GENERATE_LIBRARY_PROTOS #undef GENERATE_LIBRARY_PROTOS #endif /* GENERATE_LIBRARY_PROTOS */ /* ** Symbols below this point are generally intended to cater to ** idiosyncracies of specific machines and operating systems. ** ** MS-DOS users should also define HAS_RENAME, above, if appropriate. ** ** Define PIECEMEAL_HASH_WRITES if your system can't handle huge write ** operations. This is known to be a problem on MS-DOS systems when ** a 16-bit compiler is used to compile Ispell (but not with DJGPP or ** EMX). */ #ifndef PIECEMEAL_HASH_WRITES #undef PIECEMEAL_HASH_WRITES #endif /* PIECEMEAL_HASH_WRITES */ /* ** Redefine GETKEYSTROKE() to getkey() on some MS-DOS systems where ** getchar() doesn't operate properly in raw mode. */ #ifndef GETKEYSTROKE #define GETKEYSTROKE() getchar () #endif /* GETKEYSTROKE */ /* ** Define MSDOS_BINARY_OPEN to 0x8000 on MS-DOS systems. This can be ** done by adding "#include fcntl.h" to your local.h file. */ #ifndef MSDOS_BINARY_OPEN #ifdef O_BINARY #define MSDOS_BINARY_OPEN O_BINARY #else /* O_BINARY */ #define MSDOS_BINARY_OPEN 0 #endif /* O_BINARY */ #endif /* MSDOS_BINARY_OPEN */ /* ** Environment variable to use to locate the home directory. On DOS ** systems you might want to set this to ISPELL_HOME to avoid ** conflicts with other programs that look for a HOME environment ** variable; on all other systems it should be just HOME. */ #ifndef HOME #define HOME "HOME" #endif /* HOME */ /* ** On MS-DOS systems, define PDICTHOME to be the name of a directory ** to be used to contain the personal dictionary (.ispell_english, ** etc.). On other systems, you can leave it undefined. */ #ifndef PDICTHOME #undef PDICTHOME #endif /* PDICTHOME */ /* ** On MS-DOS systems, you can rename the following variables so that ** ispell's files have 3-character suffixes. Note that, if you do ** this, you will have to redefine any variable above that incorporates ** one of the suffixes. (Most MS-DOS environments will silently truncate ** excess characters beyond the 8+3 limit, so you usually don't need to ** change the suffixes just because they are longer than 3 characters.) */ #ifndef HASHSUFFIX #define HASHSUFFIX ".hash" #endif /* HASHSUFFIX */ #ifndef STATSUFFIX #define STATSUFFIX ".stat" #endif /* STATSUFFIX */ /* ** MS-DOS and MS-Windows systems can use either '/' or '\\' for ** a directory separator in file names. */ #ifndef IS_SLASH #ifdef MSDOS #define IS_SLASH(c) ((c) == '/' || (c) == '\\') #else /* MSDOS */ #define IS_SLASH(c) ((c) == '/') #endif /* MSDOS */ #endif /* IS_SLASH */ #ifndef EXEEXT #define EXEEXT "" #endif #endif /* CONFIG_H_INCLUDED */ ispell-3.4.02/PaxHeaders.22185/tgood.c0000644000000000000000000000007410227500137014110 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/tgood.c0000444003214100001440000006563210227500137015170 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: tgood.c,v 1.43 2005/04/14 14:38:23 geoff Exp $"; #endif /* * Copyright 1987-1989, 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, * Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * Table-driven version of good.c. * * Geoff Kuenning, July 1987 */ /* * $Log: tgood.c,v $ * Revision 1.43 2005/04/14 14:38:23 geoff * Update license. Incorporate Ed Avis's changes, which primarily * involve making the expansion table a proper structure (almost a * C++-style object) and moving the code to handle it into a separate * file. * * Revision 1.42 2001/07/25 21:51:46 geoff * Minor license update. * * Revision 1.41 2001/07/23 22:09:15 geoff * Change the expansion code so that the scratch table is allocated * dynamically. This cures a bug that caused munchlist to fail for * languages that used affixes to encode parts of speech, rather than * string transformations, and generated huge numbers of affixes. While * fixing this bug, I also eliminated an obsolete unused parameter from * several functions. * * Revision 1.40 2001/07/23 20:24:04 geoff * Update the copyright and the license. * * Revision 1.39 2000/11/14 07:27:04 geoff * Use messages from msgs.h for the "too many expansions" errors. * * Revision 1.38 2000/08/22 10:52:25 geoff * Fix a whole bunch of signed/unsigned discrepancies. * * Revision 1.37 1999/01/18 03:28:43 geoff * Turn many char declarations into unsigned char, so that we won't have * sign-extension problems. * * Revision 1.36 1999/01/07 01:57:43 geoff * Update the copyright. * * Revision 1.35 1997/12/21 23:10:24 geoff * Fix the generation of expansions so that only one unique expansion is * produced for any given root/affix combination. For example, if both * the A and the N flags can add "n" to the end of a word (as in the * deutsch.aff file), expanding foo/AN will produce "foon" only once. * This has the side effect that the "-e4" option will generate a more * accurate ratio for flag productivity, which in turn means that * munchlist will do a better job of choosing an optimal set of roots and * flags. * * Revision 1.34 1997/12/03 05:28:13 geoff * Fix a bug that caused suffix expansions to be printed with the wrong * capitalization when all but one character of the root was stripped. * * Revision 1.33 1997/12/02 06:25:09 geoff * Get rid of some compile options that really shouldn't be optional. * * Revision 1.32 1994/11/02 06:56:16 geoff * Remove the anyword feature, which I've decided is a bad idea. * * Revision 1.31 1994/10/25 05:46:25 geoff * Add support for the FF_ANYWORD (affix applies to all words, even if * flag bit isn't set) flag option. * * Revision 1.30 1994/05/24 06:23:08 geoff * Don't create a hit if "allhits" is clear and capitalization * mismatches. This cures a bug where a word could be in the dictionary * and yet not found. * * Revision 1.29 1994/05/17 06:44:21 geoff * Add support for controlled compound formation and the COMPOUNDONLY * option to affix flags. * * Revision 1.28 1994/01/25 07:12:13 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include #include "config.h" #include "ispell.h" #include "msgs.h" #include "proto.h" #include "exp_table.h" void chk_aff P ((ichar_t * word, ichar_t * ucword, int len, int ignoreflagbits, int allhits, int pfxopts, int sfxopts)); static void pfx_list_chk P ((ichar_t * word, ichar_t * ucword, int len, int optflags, int sfxopts, struct flagptr * ind, int ignoreflagbits, int allhits)); static void chk_suf P ((ichar_t * word, ichar_t * ucword, int len, int optflags, struct flagent * pfxent, int ignoreflagbits, int allhits)); static void suf_list_chk P ((ichar_t * word, ichar_t * ucword, int len, struct flagptr * ind, int optflags, struct flagent * pfxent, int ignoreflagbits, int allhits)); int expand_pre P ((unsigned char * croot, ichar_t * rootword, MASKTYPE mask[], int option, unsigned char * extra)); static void gen_pre_expansion P ((ichar_t * rootword, struct flagent * flent, MASKTYPE mask[], struct exp_table * exptable)); int expand_suf P ((unsigned char * croot, ichar_t * rootword, MASKTYPE mask[], int optflags, int option, unsigned char * extra)); static void expand_suf_into_table P ((ichar_t * rootword, MASKTYPE mask[], int optflags, struct exp_table * exptable, MASKTYPE existing_flags[])); static void gen_suf_expansion P ((ichar_t * rootword, struct flagent * flent, struct exp_table * exptable, MASKTYPE existing_flags[])); static void forcelc P ((ichar_t * dst, int len)); static char * flags_str P ((MASKTYPE flags)); static int output_expansions P ((struct exp_table * exptable, int option, unsigned char * croot, unsigned char * extra)); /* Check possible affixes */ void chk_aff (word, ucword, len, ignoreflagbits, allhits, pfxopts, sfxopts) ichar_t * word; /* Word to be checked */ ichar_t * ucword; /* Upper-case-only copy of word */ int len; /* The length of word/ucword */ int ignoreflagbits; /* Ignore whether affix is legal */ int allhits; /* Keep going after first hit */ int pfxopts; /* Options to apply to prefixes */ int sfxopts; /* Options to apply to suffixes */ { register ichar_t * cp; /* Pointer to char to index on */ struct flagptr * ind; /* Flag index table to test */ pfx_list_chk (word, ucword, len, pfxopts, sfxopts, &pflagindex[0], ignoreflagbits, allhits); cp = ucword; ind = &pflagindex[*cp++]; while (ind->numents == 0 && ind->pu.fp != NULL) { if (*cp == 0) return; if (ind->pu.fp[0].numents) { pfx_list_chk (word, ucword, len, pfxopts, sfxopts, &ind->pu.fp[0], ignoreflagbits, allhits); if (numhits && !allhits && !cflag && !ignoreflagbits) return; } ind = &ind->pu.fp[*cp++]; } pfx_list_chk (word, ucword, len, pfxopts, sfxopts, ind, ignoreflagbits, allhits); if (numhits && !allhits && !cflag && !ignoreflagbits) return; chk_suf (word, ucword, len, sfxopts, (struct flagent *) NULL, ignoreflagbits, allhits); } /* Check some prefix flags */ static void pfx_list_chk (word, ucword, len, optflags, sfxopts, ind, ignoreflagbits, allhits) ichar_t * word; /* Word to be checked */ ichar_t * ucword; /* Upper-case-only word */ int len; /* The length of ucword */ int optflags; /* Options to apply */ int sfxopts; /* Options to apply to suffixes */ struct flagptr * ind; /* Flag index table */ int ignoreflagbits; /* Ignore whether affix is legal */ int allhits; /* Keep going after first hit */ { int cond; /* Condition number */ register ichar_t * cp; /* Pointer into end of ucword */ struct dent * dent; /* Dictionary entry we found */ int entcount; /* Number of entries to process */ register struct flagent * flent; /* Current table entry */ int preadd; /* Length added to tword2 as prefix */ register int tlen; /* Length of tword */ ichar_t tword[INPUTWORDLEN + 4 * MAXAFFIXLEN + 4]; /* Tmp cpy */ ichar_t tword2[sizeof tword]; /* 2nd copy for ins_root_cap */ for (flent = ind->pu.ent, entcount = ind->numents; entcount > 0; flent++, entcount--) { /* * If this is a compound-only affix, ignore it unless we're * looking for that specific thing. */ if ((flent->flagflags & FF_COMPOUNDONLY) != 0 && (optflags & FF_COMPOUNDONLY) == 0) continue; /* * In COMPOUND_CONTROLLED mode, the FF_COMPOUNDONLY bit must * match exactly. */ if (compoundflag == COMPOUND_CONTROLLED && ((flent->flagflags ^ optflags) & FF_COMPOUNDONLY) != 0) continue; /* * See if the prefix matches. */ tlen = len - flent->affl; if (tlen > 0 && (flent->affl == 0 || icharncmp (flent->affix, ucword, flent->affl) == 0) && tlen + flent->stripl >= flent->numconds) { /* * The prefix matches. Remove it, replace it by the "strip" * string (if any), and check the original conditions. */ if (flent->stripl) (void) icharcpy (tword, flent->strip); (void) icharcpy (tword + flent->stripl, ucword + flent->affl); cp = tword; for (cond = 0; cond < flent->numconds; cond++) { if ((flent->conds[*cp++] & (1 << cond)) == 0) break; } if (cond >= flent->numconds) { /* * The conditions match. See if the word is in the * dictionary. */ tlen += flent->stripl; if (cflag) flagpr (tword, BITTOCHAR (flent->flagbit), flent->stripl, flent->affl, -1, 0); else if (ignoreflagbits) { if ((dent = lookup (tword, 1)) != NULL) { cp = tword2; if (flent->affl) { (void) icharcpy (cp, flent->affix); cp += flent->affl; *cp++ = '+'; } preadd = cp - tword2; (void) icharcpy (cp, tword); cp += tlen; if (flent->stripl) { *cp++ = '-'; (void) icharcpy (cp, flent->strip); } (void) ins_root_cap (tword2, word, flent->stripl, preadd, 0, (cp - tword2) - tlen - preadd, dent, flent, (struct flagent *) NULL); } } else if ((dent = lookup (tword, 1)) != NULL && TSTMASKBIT (dent->mask, flent->flagbit)) { if (numhits < MAX_HITS) { hits[numhits].dictent = dent; hits[numhits].prefix = flent; hits[numhits].suffix = NULL; numhits++; } if (!allhits) { if (cap_ok (word, &hits[0], len)) return; numhits = 0; } } /* * Handle cross-products. */ if (flent->flagflags & FF_CROSSPRODUCT) chk_suf (word, tword, tlen, sfxopts | FF_CROSSPRODUCT, flent, ignoreflagbits, allhits); } } } } /* Check possible suffixes */ static void chk_suf (word, ucword, len, optflags, pfxent, ignoreflagbits, allhits) ichar_t * word; /* Word to be checked */ ichar_t * ucword; /* Upper-case-only word */ int len; /* The length of ucword */ int optflags; /* Affix option flags */ struct flagent * pfxent; /* Prefix flag entry if cross-prod */ int ignoreflagbits; /* Ignore whether affix is legal */ int allhits; /* Keep going after first hit */ { register ichar_t * cp; /* Pointer to char to index on */ struct flagptr * ind; /* Flag index table to test */ suf_list_chk (word, ucword, len, &sflagindex[0], optflags, pfxent, ignoreflagbits, allhits); cp = ucword + len - 1; ind = &sflagindex[*cp]; while (ind->numents == 0 && ind->pu.fp != NULL) { if (cp == ucword) return; if (ind->pu.fp[0].numents) { suf_list_chk (word, ucword, len, &ind->pu.fp[0], optflags, pfxent, ignoreflagbits, allhits); if (numhits != 0 && !allhits && !cflag && !ignoreflagbits) return; } ind = &ind->pu.fp[*--cp]; } suf_list_chk (word, ucword, len, ind, optflags, pfxent, ignoreflagbits, allhits); } static void suf_list_chk (word, ucword, len, ind, optflags, pfxent, ignoreflagbits, allhits) ichar_t * word; /* Word to be checked */ ichar_t * ucword; /* Upper-case-only word */ int len; /* The length of ucword */ struct flagptr * ind; /* Flag index table */ int optflags; /* Affix option flags */ struct flagent * pfxent; /* Prefix flag entry if crossonly */ int ignoreflagbits; /* Ignore whether affix is legal */ int allhits; /* Keep going after first hit */ { register ichar_t * cp; /* Pointer into end of ucword */ int cond; /* Condition number */ struct dent * dent; /* Dictionary entry we found */ int entcount; /* Number of entries to process */ register struct flagent * flent; /* Current table entry */ int preadd; /* Length added to tword2 as prefix */ register int tlen; /* Length of tword */ ichar_t tword[INPUTWORDLEN + 4 * MAXAFFIXLEN + 4]; /* Tmp cpy */ ichar_t tword2[sizeof tword]; /* 2nd copy for ins_root_cap */ (void) icharcpy (tword, ucword); for (flent = ind->pu.ent, entcount = ind->numents; entcount > 0; flent++, entcount--) { if ((optflags & FF_CROSSPRODUCT) != 0 && (flent->flagflags & FF_CROSSPRODUCT) == 0) continue; /* * If this is a compound-only affix, ignore it unless we're * looking for that specific thing. */ if ((flent->flagflags & FF_COMPOUNDONLY) != 0 && (optflags & FF_COMPOUNDONLY) == 0) continue; /* * In COMPOUND_CONTROLLED mode, the FF_COMPOUNDONLY bit must * match exactly. */ if (compoundflag == COMPOUND_CONTROLLED && ((flent->flagflags ^ optflags) & FF_COMPOUNDONLY) != 0) continue; /* * See if the suffix matches. */ tlen = len - flent->affl; if (tlen > 0 && (flent->affl == 0 || icharcmp (flent->affix, ucword + tlen) == 0) && tlen + flent->stripl >= flent->numconds) { /* * The suffix matches. Remove it, replace it by the "strip" * string (if any), and check the original conditions. */ (void) icharcpy (tword, ucword); cp = tword + tlen; if (flent->stripl) { (void) icharcpy (cp, flent->strip); tlen += flent->stripl; cp = tword + tlen; } else *cp = '\0'; for (cond = flent->numconds; --cond >= 0; ) { if ((flent->conds[*--cp] & (1 << cond)) == 0) break; } if (cond < 0) { /* * The conditions match. See if the word is in the * dictionary. */ if (cflag) { if (optflags & FF_CROSSPRODUCT) flagpr (tword, BITTOCHAR (pfxent->flagbit), pfxent->stripl, pfxent->affl, BITTOCHAR (flent->flagbit), flent->affl); else flagpr (tword, -1, 0, 0, BITTOCHAR (flent->flagbit), flent->affl); } else if (ignoreflagbits) { if ((dent = lookup (tword, 1)) != NULL) { cp = tword2; if ((optflags & FF_CROSSPRODUCT) && pfxent->affl != 0) { (void) icharcpy (cp, pfxent->affix); cp += pfxent->affl; *cp++ = '+'; } preadd = cp - tword2; (void) icharcpy (cp, tword); cp += tlen; if ((optflags & FF_CROSSPRODUCT) && pfxent->stripl != 0) { *cp++ = '-'; (void) icharcpy (cp, pfxent->strip); cp += pfxent->stripl; } if (flent->stripl) { *cp++ = '-'; (void) icharcpy (cp, flent->strip); cp += flent->stripl; } if (flent->affl) { *cp++ = '+'; (void) icharcpy (cp, flent->affix); cp += flent->affl; } (void) ins_root_cap (tword2, word, (optflags & FF_CROSSPRODUCT) ? pfxent->stripl : 0, preadd, flent->stripl, (cp - tword2) - tlen - preadd, dent, pfxent, flent); } } else if ((dent = lookup (tword, 1)) != NULL && TSTMASKBIT (dent->mask, flent->flagbit) && ((optflags & FF_CROSSPRODUCT) == 0 || TSTMASKBIT (dent->mask, pfxent->flagbit))) { if (numhits < MAX_HITS) { hits[numhits].dictent = dent; hits[numhits].prefix = pfxent; hits[numhits].suffix = flent; numhits++; } if (!allhits) { if (cap_ok (word, &hits[0], len)) return; numhits = 0; } } } } } } /* * Expand a dictionary prefix entry */ int expand_pre (croot, rootword, mask, option, extra) unsigned char * croot; /* Char version of rootword */ ichar_t * rootword; /* Root word to expand */ register MASKTYPE mask[]; /* Mask bits to expand on */ int option; /* Option, see expandmode */ unsigned char * extra; /* Extra info to add to line */ { int entcount; /* No. of entries to process */ int explength; /* Length of expansions */ static struct exp_table exptable; /* Table of expansions */ register struct flagent * flent; /* Current table entry */ exp_table_init(&exptable, rootword); for (flent = pflaglist, entcount = numpflags; entcount > 0; flent++, entcount--) { if (TSTMASKBIT (mask, flent->flagbit)) gen_pre_expansion (rootword, flent, mask, &exptable); } explength = output_expansions (&exptable, option, croot, extra); (void) exp_table_empty (&exptable); return explength; } /* Generate a prefix expansion, modifying the table passed in */ static void gen_pre_expansion (rootword, flent, mask, exptable) register ichar_t * rootword; /* Root word to expand */ register struct flagent * flent; /* Current table entry */ MASKTYPE mask[]; /* Mask bits to expand on */ struct exp_table * exptable; /* Ptr to tbl of expansions */ { MASKTYPE applied[MASKSIZE]; /* Flag being applied */ int cond; /* Current condition number */ register ichar_t * nextc; /* Next case choice */ register unsigned char * result; /* Result of expansion */ int tlen; /* Length of tword */ ichar_t tword[INPUTWORDLEN + MAXAFFIXLEN]; /* Temp */ tlen = icharlen (rootword); if (flent->numconds > tlen) return; tlen -= flent->stripl; if (tlen <= 0) return; tlen += flent->affl; for (cond = 0, nextc = rootword; cond < flent->numconds; cond++) { if ((flent->conds[mytoupper (*nextc++)] & (1 << cond)) == 0) return; } /* * The conditions are satisfied. Copy the word, add the prefix, * and make it the proper case. This code is carefully written * to match that ins_cap and cap_ok. Note that the affix, as * inserted, is uppercase. * * There is a tricky bit here: if the root is capitalized, we * want a capitalized result. If the root is followcase, however, * we want to duplicate the case of the first remaining letter * of the root. In other words, "Loved/U" should generate "Unloved", * but "LOved/U" should generate "UNLOved" and "lOved/U" should * produce "unlOved". */ if (flent->affl) { (void) icharcpy (tword, flent->affix); nextc = tword + flent->affl; } (void) icharcpy (nextc, rootword + flent->stripl); if (myupper (rootword[0])) { /* We must distinguish followcase from capitalized and all-upper */ for (nextc = rootword + 1; *nextc; nextc++) { if (!myupper (*nextc)) break; } if (*nextc) { /* It's a followcase or capitalized word. Figure out which. */ for ( ; *nextc; nextc++) { if (myupper (*nextc)) break; } if (*nextc) { /* It's followcase. */ if (!myupper (tword[flent->affl])) forcelc (tword, flent->affl); } else { /* It's capitalized */ forcelc (tword + 1, tlen - 1); } } } else { /* Followcase or all-lower, we don't care which */ if (!myupper (*nextc)) forcelc (tword, flent->affl); } /* * We've generated the result. If it's not already in the * expansion table, add it at the end. */ result = ichartosstr (tword, 1); BZERO (applied, sizeof applied); SETMASKBIT (applied, flent->flagbit); add_expansion_copy(exptable, (char *) result, applied); if (flent->flagflags & FF_CROSSPRODUCT) expand_suf_into_table (tword, mask, FF_CROSSPRODUCT, exptable, applied); } /* * Expand a dictionary suffix entry */ int expand_suf (croot, rootword, mask, optflags, option, extra) unsigned char * croot; /* Char version of rootword */ ichar_t * rootword; /* Root word to expand */ register MASKTYPE mask[]; /* Mask bits to expand on */ int optflags; /* Affix option flags */ int option; /* Option, see expandmode */ unsigned char * extra; /* Extra info to add to line */ { int explength; /* Length of expansions */ struct exp_table exptable; /* Table of expansions */ int i; /* For zeroing flags */ MASKTYPE nullflags[MASKSIZE]; /* Flag being applied */ for (i = 0; i < MASKSIZE; i++) nullflags[i] = 0; exp_table_init (&exptable, rootword); expand_suf_into_table(rootword, mask, optflags, &exptable, nullflags); explength = output_expansions (&exptable, option, croot, extra); (void) exp_table_empty (&exptable); return explength; } /* * Expand a dictionary suffix entry and insert it into an expansion table */ static void expand_suf_into_table (rootword, mask, optflags, exptable, existing_flags) ichar_t * rootword; /* Root word to expand */ register MASKTYPE mask[]; /* Mask bits to expand on */ int optflags; /* Affix option flags */ struct exp_table * exptable; /* Table of expansions */ MASKTYPE existing_flags[]; /* Flags already applied */ { int entcount; /* No. of entries to process */ register struct flagent * flent; /* Current table entry */ for (flent = sflaglist, entcount = numsflags; entcount > 0; flent++, entcount--) { if (TSTMASKBIT (mask, flent->flagbit)) { if ((optflags & FF_CROSSPRODUCT) == 0 || (flent->flagflags & FF_CROSSPRODUCT)) (void) gen_suf_expansion (rootword, flent, exptable, existing_flags); } } } /* Generate a suffix expansion */ static void gen_suf_expansion (rootword, flent, exptable, existing_flags) register ichar_t * rootword; /* Root word to expand */ register struct flagent * flent; /* Current table entry */ struct exp_table * exptable; /* Table of expansions */ MASKTYPE * existing_flags; /* Flags already applied */ { int cond; /* Current condition number */ register ichar_t * nextc; /* Next case choice */ register unsigned char * result; /* Result of expansion */ int tlen; /* Length of tword */ ichar_t tword[INPUTWORDLEN + MAXAFFIXLEN]; /* Temp */ int wascapitalized; /* NZ if capitalized root */ tlen = icharlen (rootword); cond = flent->numconds; if (cond > tlen) return; if (tlen - flent->stripl <= 0) return; wascapitalized = myupper (rootword[0]); for (nextc = rootword + tlen; --cond >= 0; ) { if ((flent->conds[mytoupper (*--nextc)] & (1 << cond)) == 0) return; if (nextc > rootword && myupper (*nextc)) wascapitalized = 0; } while (--nextc > rootword) { if (myupper (*nextc)) wascapitalized = 0; } /* * The conditions are satisfied. Copy the word, add the suffix, * and make it match the case of the last remaining character of the * root. Again, this code carefully matches ins_cap and cap_ok. * * There is one tricky case to watch out for here. If the root * was simply capitalized, and the stripping removed all but the * initial character of the root, the above algorithm will * generate an all-caps result. However, ins_cap and cap_ok would * generate a simple capitalization, because a captype of * CAPITALIZED would override FOLLOWCASE and ALLCAPS. So we have * to deal with this as a special case. */ (void) icharcpy (tword, rootword); nextc = tword + tlen - flent->stripl; if (flent->affl) { (void) icharcpy (nextc, flent->affix); if ((nextc == tword + 1 && wascapitalized) || !myupper (nextc[-1])) forcelc (nextc, flent->affl); } else *nextc = 0; /* * We've generated the result. If it's not already in the * expansion table, add it at the end. */ result = ichartosstr (tword, 1); SETMASKBIT (existing_flags, flent->flagbit); (void) add_expansion_copy(exptable, (char *) result, existing_flags); } static void forcelc (dst, len) /* Force to lowercase */ register ichar_t * dst; /* Destination to modify */ register int len; /* Length to copy */ { for ( ; --len >= 0; dst++) *dst = mytolower (*dst); } /* * Convert a mask of flags to a string of flag chars, using a static * buffer. * * Assume 26 letters in the alphabet :-). In practice you probably * won't get more than two flags at once. */ static char * flags_str (flags) MASKTYPE flags; { static char flags_str_buf[MASKSIZE + 1]; int i; int length = 0; for (i = 0; i < MASKSIZE; i++) { if (TSTMASKBIT (&flags, i)) flags_str_buf[length++] = BITTOCHAR (i); } flags_str_buf[length] = '\0'; return flags_str_buf; } /* * Print an expansion table in the manner required by ispell's various * -e options (or at least do some of the printing required). Returns * the total length of all expansions. * * P.S. Yes, I'm embarrassed by the magic numbers. */ static int output_expansions (exptable, option, croot, extra) struct exp_table * exptable; /* Expansions to print */ int option; /* Num. of -e option */ unsigned char * croot; /* Original "word/flags" */ unsigned char * extra; /* Extra info to add to line */ { int explength = 0; /* Expansion size (chars) */ int i; /* Loop index */ const ichar_t * rootword; /* Root of the expansion */ rootword = get_orig_word (exptable); /* Print in reverse order to match old behavior */ for (i = num_expansions (exptable); --i >= 0; ) { const char * expansion = get_expansion (exptable, i); if (option == 3) (void) printf ("\n%s", (char *) croot); else if (option == 5) { char * fs = flags_str (get_flags (exptable, i)); if (strlen (fs) != 0) (void) printf ("\n%s+%s", ichartosstr (rootword, 1), fs); else (void) printf ("\n%s", ichartosstr (rootword, 1)); } if (option != 4) (void) printf (" %s%s", expansion, (char *) extra); explength += strlen (expansion); } return explength; } ispell-3.4.02/PaxHeaders.22185/proto.h0000644000000000000000000000007410233541510014141 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/proto.h0000444003214100001440000003230510233541510015210 0ustar00geofffaculty00000000000000#ifndef PROTO_H_INCLUDED #define PROTO_H_INCLUDED /* * $Id: proto.h,v 1.28 2005/04/26 22:40:08 geoff Exp $ * * Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */ /* * $Log: proto.h,v $ * Revision 1.28 2005/04/26 22:40:08 geoff * Add double-inclusion protection. Include ispell.h for the definition of P. * * Revision 1.27 2005/04/20 23:16:32 geoff * Add inpossibilities. * * Revision 1.26 2005/04/14 23:11:36 geoff * Prototype initckch. * * Revision 1.25 2005/04/14 14:38:23 geoff * Update license. Rename some functions to avoid collisions with * libraries. Add a couple of "const" declarations. * * Revision 1.24 2001/07/25 21:51:47 geoff * Minor license update. * * Revision 1.23 2001/07/23 20:24:04 geoff * Update the copyright and the license. * * Revision 1.22 2001/04/04 06:50:00 geoff * Add unistd.h to work around a problem in Mac OSX * * Revision 1.21 1999/01/18 02:14:11 geoff * Change most char declarations to unsigned char, to avoid * sign-extension problems with 8-bit characters. * * Revision 1.20 1999/01/07 01:58:12 geoff * Update the copyright. * * Revision 1.19 1999/01/03 01:46:44 geoff * Add a declaration for "dup". * * Revision 1.18 1998/07/06 06:55:21 geoff * Rename sethtmltags to init_keyword_table, and simplify the argument * list. * * Revision 1.17 1997/12/02 06:25:07 geoff * Get rid of some compile options that really shouldn't be optional. * * Revision 1.16 1997/12/01 00:53:54 geoff * Add HTML declarations. * * Revision 1.15 1994/10/25 05:46:38 geoff * Protoize bzero the way 4.1.1 does it (which I hope is the standard). * * Revision 1.14 1994/05/24 06:23:10 geoff * Make cap_ok a global routine. * * Revision 1.13 1994/05/17 06:44:20 geoff * Add the new arguments to chk_aff, good, and compoundgood. * * Revision 1.12 1994/03/16 03:49:15 geoff * Add an ifdef so that there won't be a conflict with the definition of * free() on braindamaged Sun systems. * * Revision 1.11 1994/02/14 00:34:55 geoff * Add new arguments to the prototype for correct(). * * Revision 1.10 1994/02/08 05:45:34 geoff * Don't undef P unless we're going to redefine it * * Revision 1.9 1994/02/07 08:10:47 geoff * Add the GENERATE_LIBRARY_PROTOS option. Put the definitions of * index/rindex back the way they were, because that's what's needed on * my system (sigh). * * Revision 1.8 1994/02/07 05:45:25 geoff * Change the second parameter of index/rindex to be a char * * Revision 1.7 1994/01/25 07:12:05 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include "ispell.h" /* For definition of P */ extern int addvheader P ((struct dent * ent)); extern void askmode P ((void)); extern void backup P ((void)); extern int cap_ok P ((ichar_t * word, struct success * hit, int len)); extern int casecmp P ((unsigned char * a, unsigned char * b, int canonical)); extern void chupcase P ((unsigned char * s)); extern void checkfile P ((void)); extern void checkline P ((FILE * ofile)); extern void chk_aff P ((ichar_t * word, ichar_t * ucword, int len, int ignoreflagbits, int allhits, int pfxopts, int sfxopts)); extern int combinecaps P ((struct dent * hdr, struct dent * newent)); extern int compoundgood P ((ichar_t * word, int pfxopts)); extern void copyout P ((unsigned char ** cc, int cnt)); extern void correct P ((unsigned char * ctok, int ctokl, ichar_t * itok, int itokl, unsigned char ** curchar)); extern char * do_regex_lookup P ((char * expr, int whence)); extern SIGNAL_TYPE done P ((int)); extern void dumpmode P ((void)); extern void ierase P ((void)); extern int expand_pre P ((unsigned char * croot, ichar_t * rootword, MASKTYPE mask[], int option, unsigned char *extra)); extern int expand_suf P ((unsigned char * croot, ichar_t * rootword, MASKTYPE mask[], int crossonly, int option, unsigned char * extra)); extern int findfiletype P ((char * name, int searchnames, int * deformatter)); extern void flagpr P ((ichar_t * word, int preflag, int prestrip, int preadd, int sufflag, int sufadd)); extern void givehelp P ((int interactive)); extern int good P ((ichar_t * word, int ignoreflagbits, int allhits, int pfxopts, int sfxopts)); extern int hash P ((ichar_t * word, int hashtablesize)); #ifndef ICHAR_IS_CHAR extern int icharcmp P ((ichar_t * s1, ichar_t * s2)); extern ichar_t * icharcpy P ((ichar_t * out, ichar_t * in)); extern int icharlen P ((ichar_t * str)); extern int icharncmp P ((ichar_t * s1, ichar_t * s2, int n)); #endif /* ICHAR_IS_CHAR */ extern int ichartostr P ((unsigned char * out, const ichar_t * in, int outlen, int canonical)); extern unsigned char * ichartosstr P ((const ichar_t * in, int canonical)); extern void initckch P ((const char * wchars)); extern int ins_root_cap P ((ichar_t * word, ichar_t * pattern, int prestrip, int preadd, int sufstrip, int sufadd, struct dent * firstdent, struct flagent * pfxent, struct flagent * sufent)); extern void inverse P ((void)); extern int linit P ((void)); extern struct dent * lookup P ((ichar_t * word, int dotree)); extern void lowcase P ((ichar_t * string)); extern int makedent P ((unsigned char * lbuf, int lbuflen, struct dent * d)); extern void makepossibilities P ((ichar_t * word)); extern int inpossibilities P ((unsigned char * ctok)); extern void imove P ((int row, int col)); extern void normal P ((void)); extern char * printichar P ((int in)); extern int init_keyword_table P ((char * rawtags, char * envvar, char * deftags, int ignorecase, struct kwtable * keywords)); #ifdef USESH extern int shellescape P ((char * buf)); extern void shescape P ((char * buf)); #else /* USESH */ #ifndef REGEX_LOOKUP extern int shellescape P ((char * buf)); #endif /* REGEX_LOOKUP */ #endif /* USESH */ extern unsigned char * skipoverword P ((unsigned char * bufp)); extern void stop P ((void)); extern int stringcharlen P ((unsigned char * bufp, int canonical)); extern int strtoichar P ((ichar_t * out, unsigned char * in, int outlen, int canonical)); extern ichar_t * strtosichar P ((unsigned char * in, int canonical)); extern void terminit P ((void)); extern void toutent P ((FILE * outfile, struct dent * hent, int onlykeep)); extern void treeinit P ((char * persdict, char * LibDict)); extern void treeinsert P ((unsigned char * word, int wordlen, int keep)); extern struct dent * treelookup P ((ichar_t * word)); extern void treeoutput P ((void)); extern void upcase P ((ichar_t * string)); extern long whatcap P ((ichar_t * word)); extern char * xgets P ((char * string, int size, FILE * stream)); extern void yyinit P ((void)); extern int yyopen P ((char * file)); extern int yyparse P ((void)); extern void myfree P ((VOID * area)); extern VOID * mymalloc P ((unsigned int)); extern VOID * myrealloc P ((VOID * area, unsigned int size, unsigned int oldsize)); /* * C library functions. If possible, we get these from stdlib.h. * * Even if stdlib.h doesn't exist, we don't generate proper prototypes * on most systems. This protects us against minor differences in * declarations that break the compilation unnecessarily. * GENERATE_LIBRARY_PROTOS is mostly for the benefit of the ispell * developer. */ #ifndef GENERATE_LIBRARY_PROTOS #undef P #define P(x) () #endif /* GENERATE_LIBRARY_PROTOS */ #ifdef NO_STDLIB_H extern int access P ((const char * file, int mode)); extern int atoi P ((const char * string)); #ifndef USG extern VOID * bcopy P ((const VOID * src, VOID * dest, unsigned int size)); extern void bzero P ((VOID * dest, int size)); #endif /* USG */ extern VOID * calloc P ((unsigned int nelems, unsigned int elemsize)); #ifdef _POSIX_SOURCE extern int chmod P ((const char * file, unsigned int mode)); #else /* _POSIX_SOURCE */ extern int chmod P ((const char * file, unsigned long mode)); #endif /* POSIX_SOURCE */ extern int close P ((int fd)); extern int creat P ((const char * file, int mode)); extern int dup P ((int fd)); extern int execvp P ((const char * name, const char * argv[])); extern void _exit P ((int status)); extern void exit P ((int status)); extern char * fgets P ((char * string, int size, FILE * stream)); extern int fork P ((void)); #ifdef __STDC__ /* * Some flaming cretin at Sun decided that free() should be declared * as returning an int in /usr/include/malloc.h, so the following * declaration causes a conflict. Fortunately, it doesn't really do a * lot of harm to leave it undeclared, since (a) we always properly * ignore the return value and (b) any machine that really needs * special code to handle ignoring the return value is likely to also * provide a correct declaration. * * (Why is this ifdef'ed on __STDC__? Because I want it to be correct * on my development machine, so I can catch lint problems.) * * A pox on those who violate long-established standards! */ extern void free P ((VOID * area)); #endif /* __STDC__ */ extern char * getenv P ((const char * varname)); extern int ioctl P ((int fd, int func, char * arg)); extern int kill P ((int pid, int sig)); extern int link P ((const char * existing, const char * new)); extern long lseek P ((int fd, long offset, int whence)); extern VOID * malloc P ((unsigned int size)); #ifdef USG extern VOID * memcpy P ((VOID * dest, const VOID * src)); extern VOID * memset P ((VOID * dest, int val, unsigned int len)); #endif /* USG */ extern char * mktemp P ((char * prototype)); extern int open P ((const char * file, int mode)); extern void perror P ((const char * msg)); extern void qsort P ((VOID * array, unsigned int nelems, unsigned int elemsize, int (*cmp) (const VOID * a, const VOID * b))); extern int read P ((int fd, VOID * buf, unsigned int n)); extern VOID * realloc P ((VOID * area, unsigned int size)); extern unsigned int sleep P ((unsigned int)); extern char * strcat P ((char * dest, const char * src)); #ifdef USG extern char * strchr P ((const char * string, int ch)); #endif /* USG */ extern int strcmp P ((const char * s1, const char * s2)); extern char * strcpy P ((char * dest, const char * src)); extern unsigned int strlen P ((const char * str)); extern int strncmp P ((const char * s1, const char * s2, unsigned int len)); extern char * strncpy P ((char * dest, const char * src, unsigned int len)); #ifdef USG extern char * strrchr P ((const char * string, int ch)); #endif /* USG */ extern int system P ((const char * command)); extern int unlink P ((const char * file)); extern int wait P ((int * statusp)); #else /* NO_STDLIB_H */ #include #include #include #endif /* NO_STDLIB_H */ #ifndef USG extern char * index P ((const char * string, int ch)); extern char * rindex P ((const char * string, int ch)); #endif /* USG */ #ifdef REGEX_LOOKUP #ifdef USG extern char * regcmp P ((const char * expr, const char * terminator, ...)); extern char * regex P ((const char * pat, const char * subject, ...)); #else /* USG */ extern char * re_comp P ((const char * expr)); extern int * re_exec P ((const char * pat)); #endif /* USG */ #endif /* REGEX_LOOKUP */ extern int tgetent P ((char * buf, const char * termname)); extern int tgetnum P ((const char * id)); extern char * tgetstr P ((const char * id, char ** area)); extern char * tgoto P ((const char * cm, int col, int row)); extern char * tputs P ((const char * str, int pad, int (*func) (int ch))); #ifndef GENERATE_LIBRARY_PROTOS #ifdef __STDC__ #undef P #define P(x) x #endif /* __STDC__ */ #endif /* GENERATE_LIBRARY_PROTOS */ #endif /* PROTO_H_INCLUDED */ ispell-3.4.02/PaxHeaders.22185/local.h.linux0000644000000000000000000000007411553222236015235 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/local.h.linux0000444003214100001440000000715711553222236016313 0ustar00geofffaculty00000000000000#ifndef LOCAL_H_INCLUDED #define LOCAL_H_INCLUDED /* * $Id: local.h.linux,v 1.3 2011-04-19 17:58:54+12 geoff Exp $ */ /* * Copyright 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * This file is a sample local.h file. It shows what I believe nearly every * site will want to include in their local.h. You will probably want to * expand this file; see "config.X" to learn of #defines that you might * like to add to. */ /* * WARNING WARNING WARNING * * This file is *NOT* a normal C header file! Although it uses C * syntax and is included in C programs, it is also processed by shell * scripts that are very stupid about format. * * Do not try to use #if constructs to configure this file for more * than one configuration. Do not place whitespace after the "#" in * "#define". Do not attempt to disable lines by commenting them out. * Do not use backslashes to reduce the length of long lines. * None of these things will work the way you expect them to. * * WARNING WARNING WARNING */ #define MINIMENU /* Display a mini-menu at the bottom of the screen */ #define USG /* Define on System V or if term.c won't compile */ #define GENERATE_LIBRARY_PROTOS #define EGREPCMD "grep -Ei" #define HAS_RENAME #define YACC "bison -y" /* Not all linuxes have yacc, but all have bison */ /* * Important directory paths. If you change MAN45DIR from man5 to * something else, you probably also want to set MAN45SECT and * MAN45EXT (but not if you keep the man pages in section 5 and just * store them in a different place). */ #define BINDIR "/usr/local/bin" #define LIBDIR "/usr/local/lib" #define MAN1DIR "/usr/local/man/man1" #define MAN45DIR "/usr/local/man/man5" #define MAN45EXT ".5" /* * Place any locally-required #include statements here */ #endif /* LOCAL_H_INCLUDED */ ispell-3.4.02/PaxHeaders.22185/correct.c0000644000000000000000000000013213776416103014443 xustar0030 mtime=1610226755.225053644 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/correct.c0000444003214100001440000015614513776416103015530 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: correct.c,v 1.87 2021-01-09 13:12:35-08 geoff Exp $"; #endif /* * correct.c - Routines to manage the higher-level aspects of spell-checking * * This code originally resided in ispell.c, but was moved here to keep * file sizes smaller. * * Copyright (c), 1983, by Pace Willisson * * Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: correct.c,v $ * Revision 1.87 2021-01-09 13:12:35-08 geoff * Suppress warnings about empty printf format strings. * * Revision 1.86 2020-12-30 22:33:41-08 geoff * Support SQUEEZE_STRINGS and RAW_DISPLAY. Also fix a compiler warning * and a minor bug in counting possibilities. * * Revision 1.85 2020-10-26 11:39:55-07 geoff * Include header files needed for C99 function declarations. This probably * breaks backwards compatibility but I don't have time to research it and * add appropriate config.X options. Sigh. * * Revision 1.84 2020-04-28 17:55:52-07 geoff * Don't segfault if user input starts with a null byte * * Revision 1.83 2015-02-08 00:35:41-08 geoff * Fix a namespace collision with "getline". * * Revision 1.82 2005/04/28 14:46:51 geoff * Add code to log all corrections and replacements. * * Revision 1.81 2005/04/20 23:16:32 geoff * Add inpossibilities, and use it to deal with the case where uppercase * SS in German causes ambiguities. Rename some variables to make them * more meaningful. * * Revision 1.80 2005/04/14 14:38:23 geoff * Update license. Use i-prefixed names for terminal access functions to * prevent conflicts with libraries. Fix a bug that caused a hang when * using external deformatters. * * Revision 1.79 2001/09/06 00:40:44 geoff * In ask mode, when extending long lines to ensure that a word hasn't * been broken, remember to do the extension inside both the context and * the filtered buffer. * * Revision 1.78 2001/09/06 00:30:29 geoff * Many changes from Eli Zaretskii to support DJGPP compilation. * * Revision 1.77 2001/07/25 21:51:47 geoff * Minor license update. * * Revision 1.76 2001/07/23 20:24:03 geoff * Update the copyright and the license. * * Revision 1.75 2001/06/14 09:11:11 geoff * Use a non-conflicting macro for bcopy to avoid compilation problems on * smarter compilers. * * Revision 1.74 2001/06/10 23:54:56 geoff * Fix an ask-mode bug that could cause hangs. * * Revision 1.73 2001/06/07 08:02:18 geoff * When copying out, be sure to use the information from contextbufs[0] * (the original file) rather then filteredbuf (the deformatted * information). * * Revision 1.72 2000/08/24 06:47:16 geoff * Fix a dumb error in merging the correct_verbose_mode patch * * Revision 1.71 2000/08/22 10:52:25 geoff * Fix a whole bunch of signed/unsigned compiler warnings. * * Revision 1.70 2000/08/22 00:11:25 geoff * Add support for correct_verbose_mode. * * Revision 1.69 1999/11/04 07:51:05 geoff * In verbose ask mode, put out a newline after the EOF so the TTY looks * nice. * * Revision 1.68 1999/11/04 07:19:59 geoff * Add "oktochange" to inserttoken, and set it to false on the first of * each paired call. * * Revision 1.67 1999/10/05 05:49:56 geoff * When processing the ~ command, don't pass a newline by accident! * * Revision 1.66 1999/01/18 03:28:24 geoff * Turn many char declarations into unsigned char, so that we won't have * sign-extension problems. * * Revision 1.65 1999/01/07 01:57:51 geoff * Update the copyright. * * Revision 1.64 1999/01/03 01:46:25 geoff * Add support for external deformatters. Also display tab characters * correctly when showing context. * * Revision 1.63 1997/12/02 06:24:38 geoff * Get rid of some compile options that really shouldn't be optional. * * Revision 1.62 1997/12/01 00:53:43 geoff * Don't strip out the newline at the end of contextbufs on long lines. * * Revision 1.61 1995/11/08 05:09:26 geoff * Add the new interactive mode ("askverbose"). Modify the deformatting * support to allow html/sgml as a full equal of nroff and TeX. * * Revision 1.60 1995/10/25 04:05:28 geoff * Line added by Gerry Tierney to reset insidehtml flag for each new file * in case a tag was left open by a previous file. 10/14/95. * * Revision 1.59 1995/08/05 23:19:43 geoff * Fix a bug that caused offsets for long lines to be confused if the * line started with a quoting uparrow. * * Revision 1.58 1994/11/02 06:56:00 geoff * Remove the anyword feature, which I've decided is a bad idea. * * Revision 1.57 1994/10/26 05:12:39 geoff * Try boundary characters when inserting or substituting letters, except * (naturally) at word boundaries. * * Revision 1.56 1994/10/25 05:46:30 geoff * Fix an assignment inside a conditional that could generate spurious * warnings (as well as being bad style). Add support for the FF_ANYWORD * option. * * Revision 1.55 1994/09/16 04:48:24 geoff * Don't pass newlines from the input to various other routines, and * don't assume that those routines leave the input unchanged. * * Revision 1.54 1994/09/01 06:06:41 geoff * Change erasechar/killchar to uerasechar/ukillchar to avoid * shared-library problems on HP systems. * * Revision 1.53 1994/08/31 05:58:38 geoff * Add code to handle extremely long lines in -a mode without splitting * words or reporting incorrect offsets. * * Revision 1.52 1994/05/25 04:29:24 geoff * Fix a bug that caused line widths to be calculated incorrectly when * displaying lines containing tabs. Fix a couple of places where * characters were sign-extended incorrectly, which could cause 8-bit * characters to be displayed wrong. * * Revision 1.51 1994/05/17 06:44:05 geoff * Add support for controlled compound formation and the COMPOUNDONLY * option to affix flags. * * Revision 1.50 1994/04/27 05:20:14 geoff * Allow compound words to be formed from more than two components * * Revision 1.49 1994/04/27 01:50:31 geoff * Add support to correctly capitalize words generated as a result of a * missing-space suggestion. * * Revision 1.48 1994/04/03 23:23:02 geoff * Clean up the code in missingspace() to be a bit simpler and more * efficient. * * Revision 1.47 1994/03/15 06:24:23 geoff * Fix the +/-/~ commands to be independent. Allow the + command to * receive a suffix which is a deformatter type (currently hardwired to * be either tex or nroff/troff). * * Revision 1.46 1994/02/21 00:20:03 geoff * Fix some bugs that could cause bad displays in the interaction between * TeX parsing and string characters. Show_char now will not overrun * the inverse-video display area by accident. * * Revision 1.45 1994/02/14 00:34:51 geoff * Fix correct to accept length parameters for ctok and itok, so that it * can pass them to the to/from ichar routines. * * Revision 1.44 1994/01/25 07:11:22 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include #include #include "config.h" #include "ispell.h" #include "proto.h" #include "msgs.h" #include "version.h" void givehelp P ((int interactive)); void checkfile P ((void)); void correct P ((unsigned char * ctok, int ctokl, ichar_t * itok, int itokl, unsigned char ** curchar)); static void show_line P ((unsigned char * line, unsigned char * invstart, int invlen)); static int show_char P ((unsigned char ** cp, int linew, int output, int maxw)); static int line_size P ((unsigned char * buf, unsigned char * bufend)); static void inserttoken P ((unsigned char * buf, unsigned char * start, unsigned char * tok, unsigned char ** curchar, int oktochange)); static int posscmp P ((unsigned char * a, unsigned char * b)); int casecmp P ((unsigned char * a, unsigned char * b, int canonical)); void makepossibilities P ((ichar_t * word)); int inpossibilities P ((unsigned char * ctok)); static int insert P ((ichar_t * word)); static void wrongcapital P ((ichar_t * word)); static void wrongletter P ((ichar_t * word)); static void extraletter P ((ichar_t * word)); static void missingletter P ((ichar_t * word)); static void missingspace P ((ichar_t * word)); int compoundgood P ((ichar_t * word, int pfxopts)); static void transposedletter P ((ichar_t * word)); static void tryveryhard P ((ichar_t * word)); static int ins_cap P ((ichar_t * word, ichar_t * pattern)); static int save_cap P ((ichar_t * word, ichar_t * pattern, ichar_t savearea[MAX_CAPS][INPUTWORDLEN + MAXAFFIXLEN])); int ins_root_cap P ((ichar_t * word, ichar_t * pattern, int prestrip, int preadd, int sufstrip, int sufadd, struct dent * firstdent, struct flagent * pfxent, struct flagent * sufent)); static void save_root_cap P ((ichar_t * word, ichar_t * pattern, int prestrip, int preadd, int sufstrip, int sufadd, struct dent * firstdent, struct flagent * pfxent, struct flagent * sufent, ichar_t savearea[MAX_CAPS][INPUTWORDLEN + MAXAFFIXLEN], int * nsaved)); static char * get_line_from_user P ((char * buf, int bufsize)); void askmode P ((void)); void copyout P ((unsigned char ** cc, int cnt)); static void lookharder P ((unsigned char * string)); #ifdef REGEX_LOOKUP static void regex_dict_lookup P ((char * cmd, char * grepstr)); #endif /* REGEX_LOOKUP */ void givehelp (interactive) int interactive; /* NZ for interactive-mode help */ { #ifdef COMMANDFORSPACE char ch; #endif register FILE *helpout; /* File to write help to */ if (interactive) { ierase (); helpout = stdout; } else helpout = stderr; #ifdef CORR_C_HELP_1 (void) fprintf (helpout, CORR_C_HELP_1, MAYBE_CR (helpout)); #endif /* CORR_C_HELP_1 */ #ifdef CORR_C_HELP_2 (void) fprintf (helpout, CORR_C_HELP_2, MAYBE_CR (helpout)); #endif /* CORR_C_HELP_2 */ #ifdef CORR_C_HELP_3 (void) fprintf (helpout, CORR_C_HELP_3, MAYBE_CR (helpout)); #endif /* CORR_C_HELP_3 */ #ifdef CORR_C_HELP_4 (void) fprintf (helpout, CORR_C_HELP_4, MAYBE_CR (helpout)); #endif /* CORR_C_HELP_4 */ #ifdef CORR_C_HELP_5 (void) fprintf (helpout, CORR_C_HELP_5, MAYBE_CR (helpout)); #endif /* CORR_C_HELP_5 */ #ifdef CORR_C_HELP_6 (void) fprintf (helpout, CORR_C_HELP_6, MAYBE_CR (helpout)); #endif /* CORR_C_HELP_6 */ #ifdef CORR_C_HELP_7 (void) fprintf (helpout, CORR_C_HELP_7, MAYBE_CR (helpout)); #endif /* CORR_C_HELP_7 */ #ifdef CORR_C_HELP_8 (void) fprintf (helpout, CORR_C_HELP_8, MAYBE_CR (helpout)); #endif /* CORR_C_HELP_8 */ #ifdef CORR_C_HELP_9 (void) fprintf (helpout, CORR_C_HELP_9, MAYBE_CR (helpout)); #endif /* CORR_C_HELP_9 */ (void) fprintf (helpout, CORR_C_HELP_COMMANDS, MAYBE_CR (helpout), MAYBE_CR (helpout), MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_R_CMD, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_BLANK, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_A_CMD, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_I_CMD, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_U_CMD, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_0_CMD, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_L_CMD, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_X_CMD, MAYBE_CR (helpout), MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_Q_CMD, MAYBE_CR (helpout), MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_BANG, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_REDRAW, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_SUSPEND, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_HELP, MAYBE_CR (helpout)); if (interactive) { (void) fprintf (helpout, "\r\n"); imove (li - 1, 0); /* bottom line, no matter what screen size is */ (void) fprintf (helpout, CORR_C_HELP_TYPE_SPACE); (void) fflush (helpout); #ifdef COMMANDFORSPACE ch = GETKEYSTROKE (); if (ch != ' ' && ch != '\n' && ch != '\r') (void) ungetc (ch, stdin); #else while (GETKEYSTROKE () != ' ') ; #endif } } void checkfile () { int bufno; unsigned int bufsize; int ch; insidehtml = 0; math_mode = 0; LaTeX_Mode = 'P'; for (bufno = 0; bufno < contextsize; bufno++) contextbufs[bufno][0] = '\0'; for ( ; ; ) { for (bufno = contextsize; --bufno > 0; ) (void) strcpy ((char *) contextbufs[bufno], (char *) contextbufs[bufno - 1]); if (quit) /* quit can't be set in l mode */ { if (sourcefile == NULL) sourcefile = infile; while (fgets ((char *) contextbufs[0], sizeof contextbufs[0], sourcefile) != NULL) (void) fputs ((char *) contextbufs[0], outfile); break; } /* * Only read in enough characters to fill half this buffer so that any * corrections we make are not likely to cause an overflow. */ if (fgets ((char *) filteredbuf, sizeof filteredbuf / 2, infile) == NULL) { if (sourcefile != NULL) { while (fgets ((char *) contextbufs[0], sizeof contextbufs[0], sourcefile) != NULL) (void) fputs ((char *) contextbufs[0], outfile); } break; } /* * If we didn't read to end-of-line, we may have ended the * buffer in the middle of a word. So keep reading until we * see some sort of character that can't possibly be part of a * word. (or until the buffer is full, which fortunately isn't * all that likely). */ bufsize = strlen ((char *) filteredbuf); if (bufsize == sizeof filteredbuf / 2 - 1) { ch = (unsigned char) filteredbuf[bufsize - 1]; while (bufsize < sizeof filteredbuf - 1 && (iswordch ((ichar_t) ch) || isboundarych ((ichar_t) ch) || isstringstart (ch))) { ch = getc (infile); if (ch == EOF) break; filteredbuf[bufsize++] = (char) ch; filteredbuf[bufsize] = '\0'; } } /* * If we're not filtering, make a duplicate of filteredbuf in * contextbufs[0]. Otherwise, read the same number of * characters into contextbufs[0] from sourcefile. */ if (sourcefile == NULL) (void) strcpy ((char *) contextbufs[0], (char *) filteredbuf); else { if (fread (contextbufs[0], 1, bufsize, sourcefile) != bufsize) { (void) fprintf (stderr, CORR_C_SHORT_SOURCE, MAYBE_CR (stderr)); (void) sleep ((unsigned) 2); xflag = 0; /* Preserve file backup */ break; } contextbufs[0][bufsize] = '\0'; } checkline (outfile); } } void correct (ctok, ctokl, itok, itokl, curchar) unsigned char * ctok; int ctokl; ichar_t * itok; int itokl; unsigned char ** curchar; /* Pointer into filteredbuf */ { register int c; register int i; int col_ht; unsigned char * curcontextchar; /* Pointer into contextbufs[0] */ int ncols; unsigned char * start_l2; unsigned char * begintoken; curcontextchar = contextbufs[0] + (*curchar - filteredbuf); begintoken = curcontextchar - strlen ((char *) ctok); if (icharlen (itok) <= minword) return; /* Accept very short words */ checkagain: if (good (itok, 0, 0, 0, 0) || compoundgood (itok, 0)) return; makepossibilities (itok); if (inpossibilities (ctok)) /* Kludge for German and similar languages */ return; ierase (); (void) printf (" %s", (char *) ctok); if (currentfile) (void) printf (CORR_C_FILE_LABEL, currentfile); if (readonly) (void) printf (" %s", CORR_C_READONLY); (void) printf ("\r\n\r\n"); /* * Make sure we have enough room on the screen to hold the * possibilities. Reduce the list if necessary. co / (maxposslen + 8) * is the maximum number of columns that will fit. col_ht is the * height of the columns. The constant 4 allows 2 lines (1 blank) at * the top of the screen, plus another blank line between the * columns and the context, plus a final blank line at the bottom * of the screen for command entry (R, L, etc). */ col_ht = li - contextsize - 4 - minimenusize; ncols = co / (maxposslen + 8); if (pcount > ncols * col_ht) pcount = ncols * col_ht; #ifdef EQUAL_COLUMNS /* * Equalize the column sizes. The last column will be short. */ col_ht = (pcount + ncols - 1) / ncols; #endif for (i = 0; i < pcount; i++) { #ifdef BOTTOMCONTEXT imove (2 + (i % col_ht), (maxposslen + 8) * (i / col_ht)); #else /* BOTTOMCONTEXT */ imove (3 + contextsize + (i % col_ht), (maxposslen + 8) * (i / col_ht)); #endif /* BOTTOMCONTEXT */ if (i >= easypossibilities) (void) printf ("??: %s", possibilities[i]); else if (easypossibilities > 10 && i < 10) (void) printf ("0%d: %s", i, possibilities[i]); else (void) printf ("%2d: %s", i, possibilities[i]); } #ifdef BOTTOMCONTEXT imove (li - contextsize - 1 - minimenusize, 0); #else /* BOTTOMCONTEXT */ imove (2, 0); #endif /* BOTTOMCONTEXT */ for (i = contextsize; --i > 0; ) show_line (contextbufs[i], contextbufs[i], 0); start_l2 = contextbufs[0]; if (line_size (contextbufs[0], curcontextchar) > co - (sg << 1) - 1) { start_l2 = begintoken - (co / 2); while (start_l2 < begintoken) { i = line_size (start_l2, curcontextchar) + 1; if (i + (sg << 1) <= co) break; start_l2 += i - co; } if (start_l2 > begintoken) start_l2 = begintoken; if (start_l2 < contextbufs[0]) start_l2 = contextbufs[0]; } show_line (start_l2, begintoken, (int) strlen ((char *) ctok)); if (minimenusize != 0) { imove (li - 2, 0); (void) printf (CORR_C_MINI_MENU); } for ( ; ; ) { (void) fflush (stdout); switch (c = GETKEYSTROKE ()) { case 'Z' & 037: stop (); ierase (); goto checkagain; case ' ': ierase (); (void) fflush (stdout); return; case 'q': case 'Q': if (changes) { (void) printf (CORR_C_CONFIRM_QUIT); (void) fflush (stdout); c = GETKEYSTROKE (); } else c = 'y'; if (c == 'y' || c == 'Y') { ierase (); (void) fflush (stdout); fclose (outfile); /* So `done' may unlink it safely */ done (0); } goto checkagain; case 'i': case 'I': treeinsert (ichartosstr (strtosichar (ctok, 0), 1), ICHARTOSSTR_SIZE, 1); ierase (); (void) fflush (stdout); changes = 1; return; case 'u': case 'U': itok = strtosichar (ctok, 0); lowcase (itok); treeinsert (ichartosstr (itok, 1), ICHARTOSSTR_SIZE, 1); ierase (); (void) fflush (stdout); changes = 1; return; case 'a': case 'A': treeinsert (ichartosstr (strtosichar (ctok, 0), 1), ICHARTOSSTR_SIZE, 0); ierase (); (void) fflush (stdout); return; case 'L' & 037: goto checkagain; case '?': givehelp (1); goto checkagain; case '!': { unsigned char buf[200]; imove (li - 1, 0); (void) putchar ('!'); if (get_line_from_user ((char *) buf, sizeof buf) == NULL) { (void) putchar (7); ierase (); (void) fflush (stdout); goto checkagain; } (void) printf ("\r\n"); (void) fflush (stdout); #ifdef USESH shescape ((char *) buf); #else (void) shellescape ((char *) buf); #endif ierase (); goto checkagain; } case 'r': case 'R': imove (li - 1, 0); if (readonly) { (void) putchar (7); (void) printf ("%s ", CORR_C_READONLY); } (void) printf (CORR_C_REPLACE_WITH); if (get_line_from_user ((char *) ctok, ctokl) == NULL) { (void) putchar (7); /* Put it back */ (void) ichartostr (ctok, itok, ctokl, 0); } else { inserttoken (contextbufs[0], begintoken, ctok, &curcontextchar, 0); inserttoken (filteredbuf, filteredbuf + (begintoken - contextbufs[0]), ctok, curchar, 1); if (strtoichar (itok, ctok, itokl, 0)) { (void) putchar (7); (void) printf (WORD_TOO_LONG ((char *) ctok)); } changes = 1; } ierase (); if (icharlen (itok) <= minword) return; /* Accept very short replacements */ goto checkagain; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': i = c - '0'; if (easypossibilities > 10) { c = GETKEYSTROKE (); if (c >= '0' && c <= '9') i = i * 10 + c - '0'; else if (c != '\r' && c != '\n') { (void) putchar (7); break; } } if (i < easypossibilities) { (void) strcpy ((char *) ctok, possibilities[i]); changes = 1; inserttoken (contextbufs[0], begintoken, ctok, &curcontextchar, 0); inserttoken (filteredbuf, filteredbuf + (begintoken - contextbufs[0]), ctok, curchar, 1); ierase (); if (readonly) { imove (li - 1, 0); (void) putchar (7); (void) printf ("%s", CORR_C_READONLY); (void) fflush (stdout); (void) sleep ((unsigned) 2); } return; } (void) putchar (7); break; case '\r': /* This makes typing \n after single digits */ case '\n': /* ..less obnoxious */ break; case 'l': case 'L': { unsigned char buf[100]; imove (li - 1, 0); (void) printf (CORR_C_LOOKUP_PROMPT); if (get_line_from_user ((char *) buf, sizeof buf) == NULL) { (void) putchar (7); ierase (); goto checkagain; } (void) printf ("\r\n"); (void) fflush (stdout); lookharder (buf); ierase (); goto checkagain; } case 'x': case 'X': quit = 1; ierase (); (void) fflush (stdout); return; default: (void) putchar (7); break; } } } static void show_line (line, invstart, invlen) unsigned char * line; register unsigned char * invstart; register int invlen; { register int width = 0; int maxwidth = co - 1; if (invlen != 0) maxwidth -= sg << 1; while (line < invstart && width < maxwidth) width += show_char (&line, width, 1, invstart - line); if (invlen) { inverse (); invstart += invlen; while (line < invstart && width < maxwidth) width += show_char (&line, width, 1, invstart - line); normal (); } while (*line && width < maxwidth) width += show_char (&line, width, 1, 0); (void) printf ("\r\n"); } static int show_char (cp, linew, output, maxw) register unsigned char ** cp; int linew; int output; /* NZ to actually do output */ int maxw; /* NZ to limit width shown */ { register int ch; register int i; int len; ichar_t ichar; register int width; ch = **cp; if (l1_isstringch (*cp, len, 0)) ichar = SET_SIZE + laststringch; else ichar = chartoichar (ch); if (!vflag && iswordch (ichar) && len == 1) { if (output) (void) putchar (ch); (*cp)++; return 1; } if (ch == '\t') { if (output) { for (i = 8 - (linew & 0x07); --i >= 0; ) (void) putchar (' '); } (*cp)++; return 8 - (linew & 0x07); } if (!vflag && chartypes[defstringgroup].options & RAW_DISPLAY) { if (output) { for (i = 0; i < len; i++) putchar(*(*cp)++); } else *cp += len; if (chartypes[defstringgroup].options & SQUEEZE_STRINGS) return 1; else return len; } /* * Character is non-printing, or it's printing but vflag is set. Display * it in "cat -v" form. For string characters, display every element * separately in that form. */ width = 0; if (maxw != 0 && len > maxw) len = maxw; /* Don't show too much */ for (i = 0; i < len; i++) { ch = (unsigned char) *(*cp)++; if (ch > '\177') { if (output) { (void) putchar ('M'); (void) putchar ('-'); } width += 2; ch &= 0x7f; } if (ch < ' ' || ch == '\177') { if (output) { (void) putchar ('^'); if (ch == '\177') (void) putchar ('?'); else (void) putchar (ch + 'A' - '\001'); } width += 2; } else { if (output) (void) putchar (ch); width += 1; } } return width; } static int line_size (buf, bufend) unsigned char * buf; register unsigned char * bufend; { register int width; for (width = 0; buf < bufend && *buf != '\0'; ) width += show_char (&buf, width, 0, bufend - buf); return width; } static void inserttoken (buf, start, tok, curchar, oktochange) unsigned char * buf; unsigned char * start; register unsigned char * tok; unsigned char ** curchar; /* Where to do insertion (updated) */ int oktochange; /* NZ if OK to modify tok */ { unsigned char copy[BUFSIZ]; register unsigned char * p; register unsigned char * q; unsigned char * ew; if (!oktochange && logfile != NULL) { for (p = start; p != *curchar; p++) (void) putc (*p, logfile); (void) putc (' ', logfile); (void) fputs ((char *) tok, logfile); (void) putc ('\n', logfile); (void) fflush (logfile); } (void) strcpy ((char *) copy, (char *) buf); p = start; q = copy + (*curchar - buf); ew = skipoverword (tok); while (tok < ew) *p++ = *tok++; *curchar = p; if (*tok) { /* ** The token changed to two words. Split it up and save the ** second one for later. */ *p++ = *tok; if (oktochange) *tok = '\0'; tok++; while (*tok) *p++ = *tok++; } while ((*p++ = *q++) != '\0') ; } static int posscmp (a, b) unsigned char * a; unsigned char * b; { return casecmp (a, b, 0); } int casecmp (a, b, canonical) unsigned char * a; unsigned char * b; int canonical; /* NZ for canonical string chars */ { register ichar_t * ap; register ichar_t * bp; ichar_t inta[INPUTWORDLEN + 4 * MAXAFFIXLEN + 4]; ichar_t intb[INPUTWORDLEN + 4 * MAXAFFIXLEN + 4]; (void) strtoichar (inta, a, sizeof inta, canonical); (void) strtoichar (intb, b, sizeof intb, canonical); for (ap = inta, bp = intb; *ap != 0; ap++, bp++) { if (*ap != *bp) { if (*bp == '\0') return hashheader.sortorder[*ap]; else if (mylower (*ap)) { if (mylower (*bp) || mytoupper (*ap) != *bp) return (int) hashheader.sortorder[*ap] - (int) hashheader.sortorder[*bp]; } else { if (myupper (*bp) || mytolower (*ap) != *bp) return (int) hashheader.sortorder[*ap] - (int) hashheader.sortorder[*bp]; } } } if (*bp != '\0') return -(int) hashheader.sortorder[*bp]; for (ap = inta, bp = intb; *ap; ap++, bp++) { if (*ap != *bp) { return (int) hashheader.sortorder[*ap] - (int) hashheader.sortorder[*bp]; } } return 0; } void makepossibilities (word) register ichar_t * word; { register int i; for (i = 0; i < MAXPOSSIBLE; i++) possibilities[i][0] = 0; pcount = 0; maxposslen = 0; easypossibilities = 0; wrongcapital (word); /* * according to Pollock and Zamora, CACM April 1984 (V. 27, No. 4), * page 363, the correct order for this is: * OMISSION = TRANSPOSITION > INSERTION > SUBSTITUTION * thus, it was exactly backwards in the old version. -- PWP */ if (pcount < MAXPOSSIBLE) missingletter (word); /* omission */ if (pcount < MAXPOSSIBLE) transposedletter (word); /* transposition */ if (pcount < MAXPOSSIBLE) extraletter (word); /* insertion */ if (pcount < MAXPOSSIBLE) wrongletter (word); /* substitution */ if ((compoundflag != COMPOUND_ANYTIME) && pcount < MAXPOSSIBLE) missingspace (word); /* two words */ easypossibilities = pcount; if (easypossibilities == 0 || tryhardflag) tryveryhard (word); if ((sortit || (pcount > easypossibilities)) && pcount) { if (easypossibilities > 0 && sortit) qsort ((char *) possibilities, (unsigned) easypossibilities, sizeof (possibilities[0]), (int (*) P ((const void *, const void *))) posscmp); if (pcount > easypossibilities) qsort ((char *) &possibilities[easypossibilities][0], (unsigned) (pcount - easypossibilities), sizeof (possibilities[0]), (int (*) P ((const void *, const void *))) posscmp); } } int inpossibilities (ctok) register unsigned char * ctok; { register int i; /* * This function is a horrible kludge, necessitated by a problem * that shows up in German (and possibly other languages). The * problem in German is that the character "ess-zed" (which I'm * going to write as "|3" in these comments so I don't have to use * the ISO Latin-1 character set) doesn't have an uppercase * equivalent. Instead, words that contain |3 are uppercased by * converting the character to SS. * * For ispell, this presents a problem. Consider the two German * words "gro|3" (large) and "nass" (wet). In lowercase, they are * represented differently both externally and internally. * Internally, the "ss" gets converted to a single ichar_t (for a * couple of good reasons I won't go into right now). Internally, * there is also an uppercase representation for |3. So when we * do things like dictionary lookups (which are in uppercase for * historical reasons) we can distinguish the correct "gro|3" and * "nass" from the incorrect "gross" and "na|3", even when they're * converted to uppercase. * * The problem arises when the user writes the words in uppercase: * "GROSS" and "NASS". When parsing the character strings, ispell * would like to convert the "SS" sequence into the correct * ichar_t for the word. However, the ichar_t that is needed for * the two S's in "GROSS" (uppercase version of |3) is different * from the ichar_t needed for the two S's in "NASS" (SS). There * is no solution to the problem that can be based purely on * lexical information; the character representation simply * doesn't have the information needed. * * What ispell really needs is to base the chose of ichar_t * representation on the correct spelling of the word. For * "GROSS" it should pick uppercase |3 because "gro|3" is in the * dictionary, and for "NASS" it should pick SS for the same * reason. * * That brings us to this function. Lexically, ispell will always * choose one or the other of the internal representations. (The * choice is fairly unpredictable; it depends on which one the * binary search happens to hit upon first.) If good() says that * the spelling is OK, we must have chosen the right * representation (and we'll never get into this function. But if * good() fails, makepossibilities() will wind up substituting the * correct character for the incorrect one in wrongletter(). Then * the reconversion to external string format will wind up * generating exactly the word that was originally spell-checked. * * So this function searches the possibilities list to see if the * requested word is found in the list. If so, the caller will * accept the word just as if good() had succeeded. * * This is a pretty ugly solution. It's also only partial. If a * word contains TWO ambiguous characters, it won't find a * solution because wrongletter() can only correct a single error. * Fortunately, at least in German, that's not a huge problem. * The most popular German dictionary contains only three words * that have more than one ess-zed: Ku|3tengewa|3ser, * Vergro|3Serungsgla|3er, and gro|3Senordnungsma|3Sig/A. */ for (i = 0; i < pcount; i++) { if (strcmp ((char *) ctok, possibilities[i]) == 0) return 1; } return 0; } static int insert (word) register ichar_t * word; { register int i; register unsigned char * realword; realword = ichartosstr (word, 0); for (i = 0; i < pcount; i++) { if (strcmp (possibilities[i], (char *) realword) == 0) return (0); } (void) strcpy (possibilities[pcount++], (char *) realword); i = strlen ((char *) realword); if (i > maxposslen) maxposslen = i; if (pcount >= MAXPOSSIBLE) return (-1); else return (0); } static void wrongcapital (word) register ichar_t * word; { ichar_t newword[INPUTWORDLEN + MAXAFFIXLEN]; /* ** When the third parameter to "good" is nonzero, it ignores ** case. If the word matches this way, "ins_cap" will recapitalize ** it correctly. */ if (good (word, 0, 1, 0, 0)) { (void) icharcpy (newword, word); upcase (newword); (void) ins_cap (newword, word); } } static void wrongletter (word) register ichar_t * word; { register int i; register int j; register int n; ichar_t savechar; ichar_t newword[INPUTWORDLEN + MAXAFFIXLEN]; n = icharlen (word); (void) icharcpy (newword, word); upcase (newword); for (i = 0; i < n; i++) { savechar = newword[i]; for (j=0; j < Trynum; ++j) { if (Try[j] == savechar) continue; else if (isboundarych (Try[j]) && (i == 0 || i == n - 1)) continue; newword[i] = Try[j]; if (good (newword, 0, 1, 0, 0)) { if (ins_cap (newword, word) < 0) return; } } newword[i] = savechar; } } static void extraletter (word) register ichar_t * word; { ichar_t newword[INPUTWORDLEN + MAXAFFIXLEN]; register ichar_t * p; register ichar_t * r; if (icharlen (word) < 2) return; (void) icharcpy (newword, word + 1); for (p = word, r = newword; *p != 0; ) { if (good (newword, 0, 1, 0, 0)) { if (ins_cap (newword, word) < 0) return; } *r++ = *p++; } } static void missingletter (word) ichar_t * word; { ichar_t newword[INPUTWORDLEN + MAXAFFIXLEN + 1]; register ichar_t * p; register ichar_t * r; register int i; (void) icharcpy (newword + 1, word); for (p = word, r = newword; *p != 0; ) { for (i = 0; i < Trynum; i++) { if (isboundarych (Try[i]) && r == newword) continue; *r = Try[i]; if (good (newword, 0, 1, 0, 0)) { if (ins_cap (newword, word) < 0) return; } } *r++ = *p++; } for (i = 0; i < Trynum; i++) { if (isboundarych (Try[i])) continue; *r = Try[i]; if (good (newword, 0, 1, 0, 0)) { if (ins_cap (newword, word) < 0) return; } } } static void missingspace (word) ichar_t * word; { ichar_t firsthalf[MAX_CAPS][INPUTWORDLEN + MAXAFFIXLEN]; int firstno; /* Index into first */ ichar_t * firstp; /* Ptr into current firsthalf word */ ichar_t newword[INPUTWORDLEN + MAXAFFIXLEN + 1]; int nfirsthalf; /* No. words saved in 1st half */ int nsecondhalf; /* No. words saved in 2nd half */ register ichar_t * p; ichar_t secondhalf[MAX_CAPS][INPUTWORDLEN + MAXAFFIXLEN]; int secondno; /* Index into second */ /* ** We don't do words of length less than 3; this keeps us from ** splitting all two-letter words into two single letters. We ** also don't do maximum-length words, since adding the space ** would exceed the size of the "possibilities" array. */ nfirsthalf = icharlen (word); if (nfirsthalf < 3 || nfirsthalf >= INPUTWORDLEN + MAXAFFIXLEN - 1) return; (void) icharcpy (newword + 1, word); for (p = newword + 1; p[1] != '\0'; p++) { p[-1] = *p; *p = '\0'; if (good (newword, 0, 1, 0, 0)) { /* * Save_cap must be called before good() is called on the * second half, because it uses state left around by * good(). This is unfortunate because it wastes a bit of * time, but I don't think it's a significant performance * problem. */ nfirsthalf = save_cap (newword, word, firsthalf); if (good (p + 1, 0, 1, 0, 0)) { nsecondhalf = save_cap (p + 1, p + 1, secondhalf); for (firstno = 0; firstno < nfirsthalf; firstno++) { firstp = &firsthalf[firstno][p - newword]; for (secondno = 0; secondno < nsecondhalf; secondno++) { *firstp = ' '; (void) icharcpy (firstp + 1, secondhalf[secondno]); if (insert (firsthalf[firstno]) < 0) return; *firstp = '-'; if (insert (firsthalf[firstno]) < 0) return; } } } } } } int compoundgood (word, pfxopts) ichar_t * word; int pfxopts; /* Options to apply to prefixes */ { ichar_t newword[INPUTWORDLEN + MAXAFFIXLEN]; register ichar_t * p; register ichar_t savech; long secondcap; /* Capitalization of 2nd half */ /* ** If compoundflag is COMPOUND_NEVER, compound words are never ok. */ if (compoundflag == COMPOUND_NEVER) return 0; /* ** Test for a possible compound word (for languages like German that ** form lots of compounds). ** ** This is similar to missingspace, except we quit on the first hit, ** and we won't allow either member of the compound to be a single ** letter. ** ** We don't do words of length less than 2 * compoundmin, since ** both halves must at least compoundmin letters. */ if (icharlen (word) < 2 * hashheader.compoundmin) return 0; (void) icharcpy (newword, word); p = newword + hashheader.compoundmin; for ( ; p[hashheader.compoundmin - 1] != 0; p++) { savech = *p; *p = 0; if (good (newword, 0, 0, pfxopts, FF_COMPOUNDONLY)) { *p = savech; if (good (p, 0, 1, FF_COMPOUNDONLY, 0) || compoundgood (p, FF_COMPOUNDONLY)) { secondcap = whatcap (p); switch (whatcap (newword)) { case ANYCASE: case CAPITALIZED: case FOLLOWCASE: /* Followcase can have l.c. suffix */ return secondcap == ANYCASE; case ALLCAPS: return secondcap == ALLCAPS; } } } else *p = savech; } return 0; } static void transposedletter (word) register ichar_t * word; { ichar_t newword[INPUTWORDLEN + MAXAFFIXLEN]; register ichar_t * p; register ichar_t temp; (void) icharcpy (newword, word); for (p = newword; p[1] != 0; p++) { temp = *p; *p = p[1]; p[1] = temp; if (good (newword, 0, 1, 0, 0)) { if (ins_cap (newword, word) < 0) return; } temp = *p; *p = p[1]; p[1] = temp; } } static void tryveryhard (word) ichar_t * word; { (void) good (word, 1, 0, 0, 0); } /* Insert one or more correctly capitalized versions of word */ static int ins_cap (word, pattern) ichar_t * word; ichar_t * pattern; { int i; /* Index into savearea */ int nsaved; /* No. of words saved */ ichar_t savearea[MAX_CAPS][INPUTWORDLEN + MAXAFFIXLEN]; nsaved = save_cap (word, pattern, savearea); for (i = 0; i < nsaved; i++) { if (insert (savearea[i]) < 0) return -1; } return 0; } /* Save one or more correctly capitalized versions of word */ static int save_cap (word, pattern, savearea) ichar_t * word; /* Word to save */ ichar_t * pattern; /* Prototype capitalization pattern */ ichar_t savearea[MAX_CAPS][INPUTWORDLEN + MAXAFFIXLEN]; /* Room to save words */ { int hitno; /* Index into hits array */ int nsaved; /* Number of words saved */ int preadd; /* No. chars added to front of root */ int prestrip; /* No. chars stripped from front */ int sufadd; /* No. chars added to back of root */ int sufstrip; /* No. chars stripped from back */ if (*word == 0) return 0; for (hitno = numhits, nsaved = 0; --hitno >= 0 && nsaved < MAX_CAPS; ) { if (hits[hitno].prefix) { prestrip = hits[hitno].prefix->stripl; preadd = hits[hitno].prefix->affl; } else prestrip = preadd = 0; if (hits[hitno].suffix) { sufstrip = hits[hitno].suffix->stripl; sufadd = hits[hitno].suffix->affl; } else sufadd = sufstrip = 0; save_root_cap (word, pattern, prestrip, preadd, sufstrip, sufadd, hits[hitno].dictent, hits[hitno].prefix, hits[hitno].suffix, savearea, &nsaved); } return nsaved; } int ins_root_cap (word, pattern, prestrip, preadd, sufstrip, sufadd, firstdent, pfxent, sufent) register ichar_t * word; register ichar_t * pattern; int prestrip; int preadd; int sufstrip; int sufadd; struct dent * firstdent; struct flagent * pfxent; struct flagent * sufent; { int i; /* Index into savearea */ ichar_t savearea[MAX_CAPS][INPUTWORDLEN + MAXAFFIXLEN]; int nsaved; /* Number of words saved */ nsaved = 0; save_root_cap (word, pattern, prestrip, preadd, sufstrip, sufadd, firstdent, pfxent, sufent, savearea, &nsaved); for (i = 0; i < nsaved; i++) { if (insert (savearea[i]) < 0) return -1; } return 0; } /* ARGSUSED */ static void save_root_cap (word, pattern, prestrip, preadd, sufstrip, sufadd, firstdent, pfxent, sufent, savearea, nsaved) register ichar_t * word; /* Word to be saved */ register ichar_t * pattern; /* Capitalization pattern */ int prestrip; /* No. chars stripped from front */ int preadd; /* No. chars added to front of root */ int sufstrip; /* No. chars stripped from back */ int sufadd; /* No. chars added to back of root */ struct dent * firstdent; /* First dent for root */ struct flagent * pfxent; /* Pfx-flag entry for word */ struct flagent * sufent; /* Sfx-flag entry for word */ ichar_t savearea[MAX_CAPS][INPUTWORDLEN + MAXAFFIXLEN]; /* Room to save words */ int * nsaved; /* Number saved so far (updated) */ { register struct dent * dent; int firstisupper; ichar_t newword[INPUTWORDLEN + 4 * MAXAFFIXLEN + 4]; register ichar_t * p; int len; int i; int limit; if (*nsaved >= MAX_CAPS) return; (void) icharcpy (newword, word); firstisupper = myupper (pattern[0]); #define flagsareok(dent) \ ((pfxent == NULL \ || TSTMASKBIT (dent->mask, pfxent->flagbit)) \ && (sufent == NULL \ || TSTMASKBIT (dent->mask, sufent->flagbit))) dent = firstdent; if ((dent->flagfield & (CAPTYPEMASK | MOREVARIANTS)) == ALLCAPS) { upcase (newword); /* Uppercase required */ (void) icharcpy (savearea[*nsaved], newword); (*nsaved)++; return; } for (p = pattern; *p; p++) { if (mylower (*p)) break; } if (*p == 0) { upcase (newword); /* Pattern was all caps */ (void) icharcpy (savearea[*nsaved], newword); (*nsaved)++; return; } for (p = pattern + 1; *p; p++) { if (myupper (*p)) break; } if (*p == 0) { /* ** The pattern was all-lower or capitalized. If that's ** legal, insert only that version. */ if (firstisupper) { if (captype (dent->flagfield) == CAPITALIZED || captype (dent->flagfield) == ANYCASE) { lowcase (newword); newword[0] = mytoupper (newword[0]); (void) icharcpy (savearea[*nsaved], newword); (*nsaved)++; return; } } else { if (captype (dent->flagfield) == ANYCASE) { lowcase (newword); (void) icharcpy (savearea[*nsaved], newword); (*nsaved)++; return; } } while (dent->flagfield & MOREVARIANTS) { dent = dent->next; if (captype (dent->flagfield) == FOLLOWCASE || !flagsareok (dent)) continue; if (firstisupper) { if (captype (dent->flagfield) == CAPITALIZED) { lowcase (newword); newword[0] = mytoupper (newword[0]); (void) icharcpy (savearea[*nsaved], newword); (*nsaved)++; return; } } else { if (captype (dent->flagfield) == ANYCASE) { lowcase (newword); (void) icharcpy (savearea[*nsaved], newword); (*nsaved)++; return; } } } } /* ** Either the sample had complex capitalization, or the simple ** capitalizations (all-lower or capitalized) are illegal. ** Insert all legal capitalizations, including those that are ** all-lower or capitalized. If the prototype is capitalized, ** capitalized all-lower samples. Watch out for affixes. */ dent = firstdent; p = strtosichar (dent->word, 1); len = icharlen (p); if (dent->flagfield & MOREVARIANTS) dent = dent->next; /* Skip place-holder entry */ for ( ; ; ) { if (flagsareok (dent)) { if (captype (dent->flagfield) != FOLLOWCASE) { lowcase (newword); if (firstisupper || captype (dent->flagfield) == CAPITALIZED) newword[0] = mytoupper (newword[0]); (void) icharcpy (savearea[*nsaved], newword); (*nsaved)++; if (*nsaved >= MAX_CAPS) return; } else { /* Followcase is the tough one. */ p = strtosichar (dent->word, 1); (void) BCOPY ((char *) (p + prestrip), (char *) (newword + preadd), (len - prestrip - sufstrip) * sizeof (ichar_t)); if (myupper (p[prestrip])) { for (i = 0; i < preadd; i++) newword[i] = mytoupper (newword[i]); } else { for (i = 0; i < preadd; i++) newword[i] = mytolower (newword[i]); } limit = len + preadd + sufadd - prestrip - sufstrip; i = len + preadd - prestrip - sufstrip; p += len - sufstrip - 1; if (myupper (*p)) { for (p = newword + i; i < limit; i++, p++) *p = mytoupper (*p); } else { for (p = newword + i; i < limit; i++, p++) *p = mytolower (*p); } (void) icharcpy (savearea[*nsaved], newword); (*nsaved)++; if (*nsaved >= MAX_CAPS) return; } } if ((dent->flagfield & MOREVARIANTS) == 0) break; /* End of the line */ dent = dent->next; } return; } static char * get_line_from_user (s, len) register char * s; register int len; { register char * p; register int c; p = s; for ( ; ; ) { (void) fflush (stdout); c = GETKEYSTROKE (); /* ** Don't let them overflow the buffer. */ if (p >= s + len - 1) { *p = 0; return s; } if (c == '\\') { (void) putchar ('\\'); (void) fflush (stdout); c = GETKEYSTROKE (); backup (); (void) putchar (c); *p++ = (char) c; } else if (c == ('G' & 037)) return (NULL); else if (c == '\n' || c == '\r') { *p = 0; return (s); } else if (c == uerasechar) { if (p != s) { p--; backup (); (void) putchar (' '); backup (); } } else if (c == ukillchar) { while (p != s) { p--; backup (); (void) putchar (' '); backup (); } } else { *p++ = (char) c; (void) putchar (c); } } } void askmode () { unsigned int bufsize; /* Length of contextbufs[0] */ int ch; /* Next character read from input */ register unsigned char * cp1; register unsigned char * cp2; ichar_t * itok; /* Ichar version of current word */ int hadnl; /* NZ if \n was at end of line */ if (fflag) { if (freopen (askfilename, "w", stdout) == NULL) { (void) fprintf (stderr, CANT_CREATE, askfilename, MAYBE_CR (stderr)); exit (1); } } (void) printf ("%s\n", Version_ID[0]); contextoffset = 0; while (1) { if (askverbose) (void) printf ("word: "); (void) fflush (stdout); /* * Only read in enough characters to fill half this buffer so that any * corrections we make are not likely to cause an overflow. */ if (contextoffset == 0) { if (xgets ((char *) filteredbuf, (sizeof filteredbuf) / 2, stdin) == NULL) break; } else { if (fgets ((char *) filteredbuf, (sizeof filteredbuf) / 2, stdin) == NULL) break; } /* * Make a copy of the line in contextbufs[0] so copyout works. */ (void) strcpy ((char *) contextbufs[0], (char *) filteredbuf); /* * If we didn't read to end-of-line, we may have ended the * buffer in the middle of a word. So keep reading until we * see some sort of character that can't possibly be part of a * word. (or until the buffer is full, which fortunately isn't * all that likely). */ bufsize = strlen ((char *) filteredbuf); if (bufsize == 0) continue; hadnl = filteredbuf[bufsize - 1] == '\n'; if (bufsize == (sizeof filteredbuf) / 2 - 1) { ch = (unsigned char) filteredbuf[bufsize - 1]; while (bufsize < sizeof filteredbuf - 1 && (iswordch ((ichar_t) ch) || isboundarych ((ichar_t) ch) || isstringstart (ch))) { ch = getc (stdin); if (ch == EOF) break; contextbufs[0][bufsize] = (char) ch; filteredbuf[bufsize++] = (char) ch; contextbufs[0][bufsize] = '\0'; filteredbuf[bufsize] = '\0'; } } /* ** *line is like `i', @line is like `a', &line is like 'u' ** `#' is like `Q' (writes personal dictionary) ** `+' sets tflag, `-' clears tflag ** `!' sets terse mode, `%' clears terse ** `~' followed by a filename sets parameters according to file name ** `^' causes rest of line to be checked after stripping 1st char */ if (askverbose || contextoffset != 0) checkline (stdout); else { if (filteredbuf[0] == '*' || filteredbuf[0] == '@') treeinsert(ichartosstr (strtosichar (filteredbuf + 1, 0), 1), ICHARTOSSTR_SIZE, filteredbuf[0] == '*'); else if (filteredbuf[0] == '&') { itok = strtosichar (filteredbuf + 1, 0); lowcase (itok); treeinsert (ichartosstr (itok, 1), ICHARTOSSTR_SIZE, 1); } else if (filteredbuf[0] == '#') { treeoutput (); insidehtml = 0; math_mode = 0; LaTeX_Mode = 'P'; } else if (filteredbuf[0] == '!') terse = 1; else if (filteredbuf[0] == '%') { terse = 0; correct_verbose_mode = 0; } else if (filteredbuf[0] == '-') { insidehtml = 0; math_mode = 0; LaTeX_Mode = 'P'; tflag = DEFORMAT_NROFF; } else if (filteredbuf[0] == '+') { insidehtml = 0; math_mode = 0; LaTeX_Mode = 'P'; if (strcmp ((char *) &filteredbuf[1], "plain") == 0 || strcmp ((char *) &filteredbuf[1], "none") == 0) tflag = DEFORMAT_NONE; else if (strcmp ((char *) &filteredbuf[1], "nroff") == 0 || strcmp ((char *) &filteredbuf[1], "troff") == 0) tflag = DEFORMAT_NROFF; else if (strcmp ((char *) &filteredbuf[1], "tex") == 0 || strcmp ((char *) &filteredbuf[1], "latex") == 0 || filteredbuf[1] == '\0') /* Backwards compatibility */ tflag = DEFORMAT_TEX; else if (strcmp ((char *) &filteredbuf[1], "html") == 0 || strcmp ((char *) &filteredbuf[1], "sgml") == 0) tflag = DEFORMAT_SGML; else tflag = DEFORMAT_TEX; /* Backwards compatibility */ } else if (filteredbuf[0] == '~') { if (hadnl) filteredbuf[bufsize - 1] = '\0'; defstringgroup = findfiletype ((char *) &filteredbuf[1], 1, (int *) NULL); if (defstringgroup < 0) defstringgroup = 0; if (hadnl) filteredbuf[bufsize - 1] = '\n'; } else if (filteredbuf[0] == '`') correct_verbose_mode = 1; else { if (filteredbuf[0] == '^') { /* Strip off leading uparrow */ for (cp1 = filteredbuf, cp2 = filteredbuf + 1; (*cp1++ = *cp2++) != '\0'; ) ; contextoffset++; bufsize--; } checkline (stdout); } } if (hadnl) contextoffset = 0; else contextoffset += bufsize; #ifndef USG if (sflag) { stop (); if (fflag) { rewind (stdout); (void) creat (askfilename, 0666); } } #endif } if (askverbose) (void) printf ("\n"); } /* * Copy up to "cnt" characters to the output file. For historical * reasons, cc points to a characer in "filteredbuf", but the copying * must be done from "contextbufs[0]". As a side effect this function * advances cc by the number of characters actually copied. */ void copyout (cc, cnt) unsigned char ** cc; /* Char in filteredbuf to start at */ register int cnt; /* Number of chars to copy */ { register char * cp; /* Char in contextbufs[0] to copy */ cp = (char *) &contextbufs[0][*cc - filteredbuf]; *cc += cnt; while (--cnt >= 0) { if (*cp == '\0') { *cc -= cnt + 1; /* Compensate for short copy */ break; } if (!aflag && !lflag) (void) putc (*cp, outfile); cp++; } } static void lookharder (string) unsigned char * string; { char cmd[150]; char grepstr[100]; register char * g; register unsigned char * s; #ifndef REGEX_LOOKUP register int wild = 0; #ifdef LOOK static int look = -1; #endif /* LOOK */ #endif /* REGEX_LOOKUP */ g = grepstr; for (s = string; *s != '\0'; s++) { if (*s == '*') { #ifndef REGEX_LOOKUP wild++; #endif /* REGEX_LOOKUP */ *g++ = '.'; *g++ = '*'; } else *g++ = *s; } *g = '\0'; if (grepstr[0]) { #ifdef REGEX_LOOKUP regex_dict_lookup (cmd, grepstr); #else /* REGEX_LOOKUP */ #ifdef LOOK /* now supports automatic use of look - gms */ if (!wild && look) { /* no wild and look(1) is possibly available */ (void) sprintf (cmd, "%s %s %s", LOOK, grepstr, WORDS); if (shellescape (cmd)) return; else look = 0; } #endif /* LOOK */ /* string has wild card chars or look not avail */ if (!wild) (void) strcat (grepstr, ".*"); /* work like look */ (void) sprintf (cmd, "%s ^%s$ %s", EGREPCMD, grepstr, WORDS); (void) shellescape (cmd); #endif /* REGEX_LOOKUP */ } } #ifdef REGEX_LOOKUP static void regex_dict_lookup (cmd, grepstr) char * cmd; char * grepstr; { char * rval; int whence = 0; int quitlookup = 0; int count = 0; int ch; (void) sprintf (cmd, "^%s$", grepstr); while (!quitlookup && (rval = do_regex_lookup (cmd, whence)) != NULL) { whence = 1; (void) printf ("%s\r\n", rval);; if ((++count % (li - 1)) == 0) { inverse (); (void) printf (CORR_C_MORE_PROMPT); normal (); (void) fflush (stdout); if ((ch = GETKEYSTROKE ()) == 'q' || ch == 'Q' || ch == 'x' || ch == 'X' ) quitlookup = 1; /* * The following line should blank out the -- more -- even on * magic-cookie terminals. */ (void) printf (CORR_C_BLANK_MORE); (void) fflush (stdout); } } if ( rval == NULL ) { inverse (); (void) printf (CORR_C_END_LOOK); normal (); (void) fflush (stdout); (void) GETKEYSTROKE (); } } #endif /* REGEX_LOOKUP */ ispell-3.4.02/PaxHeaders.22185/Makekit0000644000000000000000000000013213431212312014126 xustar0030 mtime=1550128330.993215616 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/Makekit0000555003214100001440000001601613431212312015206 0ustar00geofffaculty00000000000000: Use /bin/sh # # $Id: Makekit,v 1.53 2015-02-08 01:32:53-08 geoff Exp $ # # Copyright 1992, 1993, 2001, 2005, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # Make an ispell distribution kit. This is not a clever script, # just a handy one. # # Usage: # USAGE="Usage: Makekit [-d destdir] [-e]" # # destdir is the directory in which the kits will be made; you will # want to pick someplace that has lots of space. # # If -e is specified, the list of files in the kit is echoed to # stdout and no kit is made. # # $Log: Makekit,v $ # Revision 1.53 2015-02-08 01:32:53-08 geoff # Remove english.5X from the kit. # # Revision 1.52 2005-05-25 09:17:57-07 geoff # Add local.h.cygwin to the kit. # # Revision 1.51 2005/04/27 01:18:34 geoff # Add the CHANGES file. # # Revision 1.50 2005/04/27 00:17:35 geoff # Add a sample local.h for BSD systems. # # Revision 1.49 2005/04/26 22:41:07 geoff # Remove fixispell-a, since it really doesn't do the job # # Revision 1.48 2005/04/14 14:38:23 geoff # Update license. Add several new files, notably Eli Zaretskii's # changes to support DOS/Windows systems. # # Revision 1.47 2002/06/21 00:19:30 geoff # Fix the names of the deformatters. Generate RCS version tags when # building a kit. # # Revision 1.46 2002/06/20 23:46:15 geoff # Put sq/unsq back, since some dictionaries are still distributed in sq # format. # # Revision 1.45 2001/07/25 21:51:46 geoff # Minor license update. # # Revision 1.44 2001/07/23 20:24:02 geoff # Update the copyright and the license. # # Revision 1.43 2001/06/07 08:02:18 geoff # Change the kit to use my deformatters. # # Revision 1.42 2001/06/06 23:08:23 geoff # Add some sample deformatters. # # Revision 1.41 1999/01/18 03:40:32 geoff # Build tar file from a version-numbered directory # # Revision 1.40 1999/01/07 01:23:03 geoff # Update the copyright. Make the kit into a gzipped tar file rather # than shars. Get rid of the -c switch. Remove the following files # from the kit: ishar, ispell.el, ispell.texinfo, makeshar, splitdict, # sq.1, sq.c, unsq.c, and all foreign-language affix files. # # Revision 1.39 1995/10/11 04:58:07 geoff # Add the Portuguese language files # # Revision 1.38 1995/01/15 00:54:45 geoff # Add iwhich and the new Spanish support # # Revision 1.37 1994/05/18 02:56:25 geoff # Remember to list dictionaries with the -e switch # # Revision 1.36 1994/04/27 02:58:42 geoff # Add the new English-dialect Makefiles # # Revision 1.35 1994/02/07 08:39:49 geoff # Don't delete everything when we're only echoing names # # Revision 1.34 1994/01/25 08:51:16 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # maxsize=60000 # This leaves room for some headers destdir=kits echolist=false PATH=`pwd`:$PATH; export PATH while [ $# -gt 0 ] do case "$1" in -d) destdir="$2" shift; shift ;; -e) echolist=true shift ;; *) echo "$USAGE" 1>&2 exit 1 ;; esac done case "$destdir" in /*) ;; *) destdir=`pwd`/$destdir ;; esac flist=' CHANGES Contributors README Magiclines Makefile Makekit Makepatch WISHES buildhash.c config.X correct.c defmt.c dump.c exp_table.c exp_table.h fields.3 fields.c fields.h findaffix.X good.c hash.c icombine.c ijoin.c ispell.1X ispell.5X ispell.c ispell.h iwhich local.h.bsd local.h.cygwin local.h.generic local.h.linux local.h.macos local.h.solaris lookup.c makedict.sh makedent.c munchlist.X parse.y proto.h sq.1 sq.c subset.X term.c tgood.c tree.c tryaffix.X unsq.c version.h xgets.c zapdups.X languages/Makefile languages/Where languages/fix8bit.c languages/altamer/Makefile languages/american/Makefile languages/british/Makefile languages/dansk/Makefile languages/deutsch/Makefile languages/english/Makefile languages/english/altamer.0 languages/english/altamer.1 languages/english/altamer.2 languages/english/american.0 languages/english/american.1 languages/english/american.2 languages/english/british.0 languages/english/british.1 languages/english/british.2 languages/english/english.0 languages/english/english.1 languages/english/english.2 languages/english/english.3 languages/english/english.aff languages/english/msgs.h languages/espanol/Makefile languages/francais/Makefile languages/nederlands/Makefile languages/norsk/Makefile languages/portugues/Makefile languages/svenska/Makefile addons/nextispell/Makefile addons/nextispell/README addons/nextispell/configure addons/nextispell/configure.h.template addons/nextispell/configureTeX addons/nextispell/nextispell.m addons/nextispell/services.template addons/xspell.shar deformatters/Makefile deformatters/README deformatters/defmt-c.c deformatters/defmt-sh.c pc/README pc/cfglang.sed pc/cfgmain.sed pc/configdj.bat pc/djterm.c pc/local.djgpp pc/local.emx pc/make-dj.bat pc/makeemx.bat ' if $echolist then echo $flist exit 0 fi [ -d "$destdir" ] || mkdir "$destdir" version=`egrep 'International Ispell' version.h | awk '{print $5;exit}'` rcsversion=`echo $version | tr . _` TMP=$destdir/ispell-$version rm -rf $TMP trap "rm -rf $TMP; exit 1" 1 2 15 trap "rm -rf $TMP; exit 0" 13 rcs -NV${rcsversion}: $flist mkdir $TMP tar cf - $flist | (cd $TMP; tar xf -) tarfile=$destdir/ispell-$version.tar.gz rm -f $tarfile (cd $destdir; tar cvf - ispell-$version) | gzip -v -9 > $tarfile rm -rf $TMP ispell-3.4.02/PaxHeaders.22185/exp_table.c0000644000000000000000000000007410252664501014743 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/exp_table.c0000444003214100001440000000621110252664501016007 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: exp_table.c,v 1.4 2005/06/11 22:43:53 geoff Exp $"; #endif /* * Note: this file was written by Edward Avis. Thus, it is not * distributed under the same license as the rest of ispell. */ /* * $Log: exp_table.c,v $ * Revision 1.4 2005/06/11 22:43:53 geoff * Don't try to malloc zero elements during initialization. * * Revision 1.3 2005/04/14 15:19:37 geoff * Get rid of a compiler warning. * * Revision 1.2 2005/04/14 14:38:23 geoff * Add RCS keywords. Reformat to be more consistent with ispell style. * This may also include some bug fixes; I unfortunately don't really * remember. * * Revision 1.1 2002/07/02 00:06:50 geoff * Initial revision */ #include "config.h" #include "ispell.h" #include "msgs.h" #include "proto.h" #include "exp_table.h" void exp_table_init (e, orig_word) struct exp_table * e; ichar_t * orig_word; { e->size = 0; e->max_size = 1; e->exps = malloc (e->max_size * sizeof (*e->exps)); e->flags = malloc (e->max_size * sizeof (*e->flags) * MASKSIZE); e->orig_word = orig_word; } const ichar_t * get_orig_word (e) const struct exp_table * e; { return e->orig_word; } const char * get_expansion (e, i) const struct exp_table * e; int i; { return e->exps[i]; } MASKTYPE get_flags (e, i) const struct exp_table * e; int i; { return e->flags[i * MASKSIZE]; } int num_expansions (e) const struct exp_table * e; { return e->size; } int add_expansion_copy (e, s, flags) struct exp_table * e; const char * s; MASKTYPE flags[]; { char * copy; int copy_size; int i; /* * Check not already there. */ for (i = 0; i < e->size; i++) { if (strcmp (e->exps[i], s) == 0) return 0; } /* * Grow the pointer table if necessary. */ if (e->size == e->max_size) { e->max_size *= 2; e->exps = realloc(e->exps, e->max_size * sizeof (*e->exps)); e->flags = realloc(e->flags, e->max_size * sizeof (*e->flags) * MASKSIZE); if (e->exps == NULL || e->flags == NULL) { (void) fprintf (stderr, TGOOD_C_NO_SPACE); exit (1); } } copy_size = strlen (s) + 1; copy = malloc (copy_size * sizeof copy[0]); if (copy == NULL) { (void) fprintf (stderr, TGOOD_C_NO_SPACE); exit (1); } strncpy (copy, s, copy_size); e->exps[e->size] = copy; BCOPY ((char *) &flags[0], &e->flags[e->size * MASKSIZE], MASKSIZE * sizeof flags[0]); ++e->size; return 1; } struct exp_table * exp_table_empty (e) struct exp_table * e; { int i; for (i = 0; i < e->size; i++) free (e->exps[i]); e->size = 0; return e; } void exp_table_dump (e) const struct exp_table * e; { int i; /* * BUGS: assumes 32-bit masks; assumes MASKSIZE = 1 */ fprintf(stderr, "original word: %s\n", ichartosstr(e->orig_word, 0)); fprintf(stderr, "%d expansions\n", e->size); for (i = 0; i < e->size; i++) fprintf(stderr, "flags %lx generate expansion %s\n", (long) e->flags[i * MASKSIZE], e->exps[i]); } ispell-3.4.02/PaxHeaders.22185/Magiclines0000644000000000000000000000007410227500137014626 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/Magiclines0000444003214100001440000000636410227500137015703 0ustar00geofffaculty00000000000000# # $Id: Magiclines,v 1.13 2005/04/14 14:38:23 geoff Exp $ # # Copyright 1993, 1999, 2001, 2002, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # The following lines can be inserted into /etc/magic or # /usr/lib/file/magic so that "file" will recognize ispell hash files. # On some systems, these lines will need modification. The most # common modifications involve turning the magic number into a 16-bit # integer (0x9602). Some systems (e.g., Ultrix) may require an extra # field to be added; see the documentation or comments for your magic # file for more information. # # $Log: Magiclines,v $ # Revision 1.13 2005/04/14 14:38:23 geoff # Update license. # # Revision 1.12 2001/12/26 05:55:04 geoff # Get rid of obsolete options # # Revision 1.11 2001/07/25 21:51:47 geoff # Minor license update. # # Revision 1.10 2001/07/23 20:24:02 geoff # Update the copyright and the license. # # Revision 1.9 1999/01/07 01:57:49 geoff # Update the copyright. # # Revision 1.8 1995/01/08 23:23:52 geoff # Add comments that document minor variations in /etc/magic formats. # # Revision 1.7 1994/01/25 07:11:10 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # 0 short 0xffff9602 ispell 3.x hash file >2 short 0x03 - 8-bit, capitalization, 26 flags >2 short 0x07 - 8-bit, capitalization, 52 flags >2 short 0x0B - 8-bit, capitalization, 128 flags >2 short 0x0F - 8-bit, capitalization, 256 flags >4 short >0 and %d string characters ispell-3.4.02/PaxHeaders.22185/ispell.5X0000644000000000000000000000013213773270305014343 xustar0030 mtime=1609396421.951281969 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/ispell.5X0000444003214100001440000007453213773270305015427 0ustar00geofffaculty00000000000000.\" .\" $Id: ispell.5X,v 1.36 2020-12-30 22:33:41-08 geoff Exp $ .\" .\" Copyright 1992, 1993, 1999, 2001, Geoff Kuenning, Claremont, CA .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All modifications to the source code must be clearly marked as .\" such. Binary redistributions based on modified source code .\" must be clearly marked as modified versions in the documentation .\" and/or other materials provided with the distribution. .\" 4. The code that causes the 'ispell -v' command to display a prominent .\" link to the official ispell Web site may not be removed. .\" 5. The name of Geoff Kuenning may not be used to endorse or promote .\" products derived from this software without specific prior .\" written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" $Log: ispell.5X,v $ .\" Revision 1.36 2020-12-30 22:33:41-08 geoff .\" Document the new character-set options. Also clean up some .\" formatting here and there. .\" .\" Revision 1.35 2005-04-21 07:08:58-07 geoff .\" Put the correct section ID in the title. .\" .\" Revision 1.34 2005/04/14 14:38:23 geoff .\" Update license. .\" .\" Revision 1.33 2001/07/25 21:51:46 geoff .\" Minor license update. .\" .\" Revision 1.32 2001/07/23 20:24:03 geoff .\" Update the copyright and the license. .\" .\" Revision 1.31 1999/01/07 01:22:56 geoff .\" Update the copyright. .\" .\" Revision 1.30 1995/08/05 23:19:39 geoff .\" Fix a place where a line was eaten because it was seen as an nroff .\" command. .\" .\" Revision 1.29 1995/01/08 23:23:45 geoff .\" Fix a tiny typo. .\" .\" Revision 1.28 1994/11/02 06:56:07 geoff .\" Remove the anyword feature, which I've decided is a bad idea. .\" .\" Revision 1.27 1994/10/26 05:12:31 geoff .\" Document the new compound-word options for German and Scandinavian .\" languages, and the always-OK flag for French. .\" .\" Revision 1.26 1994/05/25 04:29:19 geoff .\" Document the new restriction that boundary characters must appear .\" singly. .\" .\" Revision 1.25 1994/01/25 07:11:42 geoff .\" Get rid of all old RCS log lines in preparation for the 3.1 release. .\" .\" .TH ISPELL !!MAN45SECT!! local .SH NAME ispell \- format of ispell dictionaries and affix files .SH DESCRIPTION .PP .IR Ispell (1) requires two files to define the language that it is spell-checking. The first file is a dictionary containing words for the language, and the second is an "affix" file that defines the meaning of special flags in the dictionary. The two files are combined by .I buildhash (see .IR ispell "(1))" and written to a hash file which is not described here. .PP A raw .I ispell dictionary (either the main dictionary or your own personal dictionary) contains a list of words, one per line. Each word may optionally be followed by a slash ("/") and one or more flags, which modify the root word as explained below. Depending on the options with which .I ispell was built, case may or may not be significant in either the root word or the flags, independently. Specifically, if the compile-time option CAPITALIZATION is defined, case is significant in the root word; if not, case is ignored in the root word. If the compile-time option MASKBITS is set to a value of 32, case is ignored in the flags; otherwise case is significant in the flags. Contact your system administrator or .I ispell maintainer for more information (or use the .B \-vv flag to find out). The dictionary should be sorted with the .B \-f flag of .IR sort (1) before the hash file is built; this is done automatically by .IR munchlist (1), which is the normal way of building dictionaries. .PP If the dictionary contains words that have string characters (see the affix-file documentation below), they must be written in the format given by the .B defstringtype statement in the affix file. This will be the case for most non-English languages. Be careful to use this format, rather than that of your favorite formatter, when adding words to a dictionary. (If you add words to your personal dictionary during an .I ispell session, they will automatically be converted to the correct format. This feature can be used to convert an entire dictionary if necessary:) .PP .RS .nf echo qqqqq > dummy.dict buildhash dummy.dict \fIaffix-file\fP dummy.hash awk '{print "*"}END{print "#"}' \fIold-dict-file\fP \e | ispell -a -T \fIold-dict-string-type\fP \e -d ./dummy.hash -p ./\fInew-dict-file\fP \e > /dev/null rm dummy.* .fi .RE .PP The case of the root word controls the case of words accepted by .IR ispell , as follows: .IP (1) If the root word appears only in lower case (e.g., .IR bob ")," it will be accepted in lower case, capitalized, or all capitals. .IP (2) If the root word appears capitalized (e.g., .IR Robert ")," it will not be accepted in all-lower case, but will be accepted capitalized or all in capitals. .IP (3) If the root word appears all in capitals (e.g., .IR UNIX ")," it will only be accepted all in capitals. .IP (4) If the root word appears with a "funny" capitalization (e.g., .IR ITCorp ")," a word will be accepted only if it follows that capitalization, or if it appears all in capitals. .IP (5) More than one capitalization of a root word may appear in the dictionary. Flags from different capitalizations are combined by OR-ing them together. .PP Redundant capitalizations (e.g., .I bob and .IR Bob ")" will be combined by .I buildhash and by .I ispell (for personal dictionaries), and can be removed from a raw dictionary by .IR munchlist . .PP For example, the dictionary: .PP .RS .nf bob Robert UNIX ITcorp ITCorp .fi .RE .PP will accept .IR bob , .IR Bob , .IR BOB , .IR Robert , .IR ROBERT , .IR UNIX , .IR ITcorp , .IR ITCorp , and .IR ITCORP , and will reject all others. Some of the unacceptable forms are .IR bOb , .IR robert , .IR Unix , and .IR ItCorp . .PP As mentioned above, root words in any dictionary may be extended by flags. Each flag is a single alphabetic character, which represents a prefix or suffix that may be added to the root to form a new word. For example, in an English dictionary the .B D flag can be added to .I bathe to make .IR bathed . Since flags are represented as a single bit in the hashed dictionary, this results in significant space savings. The .I munchlist script will reduce an existing raw dictionary by adding flags when possible. .PP When a word is extended with an affix, the affix will be accepted only if it appears in the same case as the initial (prefix) or final (suffix) letter of the word. Thus, for example, the entry .I UNIX/M in the main dictionary .RB "(" M means add an apostrophe and an "s" to make a possessive) would accept .I "UNIX'S" but would reject .IR "UNIX's" . If .I "UNIX's" is legal, it must appear as a separate dictionary entry, and it will not be combined by .IR munchlist . (In general, you don't need to worry about these things; .I munchlist guarantees that its output dictionary will accept the same set of words as its input, so all you have to do is add words to the dictionary and occasionally run munchlist to reduce its size). .PP As mentioned, the affix definition file describes the affixes associated with particular flags. It also describes the character set used by the language. .PP Although the affix-definition grammar is designed for a line-oriented layout, it is actually a free-format yacc grammar and can be laid out weirdly if you want. Comments are started by a pound (sharp) sign (#), and continue to the end of the line. Backslashes are supported in the usual fashion (\fB\e\fInnn\fR, plus specials .BR \en , .BR \er , .BR \et , .BR \ev , .BR \ef , .BR \eb , and the new hex format \fB\ex\fInn\fR). Any character with special meaning to the parser can be changed to an uninterpreted token by backslashing it; for example, you can declare a flag named 'asterisk' or 'colon' with .I "flag \e*:" or .IR "flag \e::" . .PP The grammar will be presented in a top-down fashion, with discussion of each element. An affix-definition file must contain exactly one table: .PP .RS .nf \fItable\fR : [\fIheaders\fR] [\fIprefixes\fR] [\fIsuffixes\fR] .fi .RE .PP At least one of .I prefixes and .I suffixes is required. They can appear in either order. .PP .RS .nf \fIheaders\fR : [ \fIoptions\fR ] \fIchar-sets\fR .fi .RE .PP The headers describe options global to this dictionary and language. These include the character sets to be used and the formatter, and the defaults for certain .I ispell flags. .PP .RS .nf \fIoptions\fR : { \fIfmtr-stmt\fR | \fIopt-stmt\fR | \fIflag-stmt\fR | \fInum-stmt\fR } .fi .RE .PP The options statements define the defaults for certain ispell flags and for the character sets used by the formatters. .PP .RS .nf \fIfmtr-stmt\fR : { \fInroff-stmt\fR | \fItex-stmt\fR } .fi .RE .PP A .I fmtr-stmt describes characters that have special meaning to a formatter. Normally, this statement is not necessary, but some languages may have preempted the usual defaults for use as language-specific characters. In this case, these statements may be used to redefine the special characters expected by the formatter. .PP .RS .nf \fInroff-stmt\fR : { \fBnroffchars\fR | \fBtroffchars\fR } \fIstring\fR .fi .RE .PP The .B nroffchars statement allows redefinition of certain .I nroff control characters. The string given must be exactly five characters long, and must list substitutions for the left and right parentheses ("()") , the period ("."), the backslash ("\e"), and the asterisk ("*"). (The right parenthesis is not currently used, but is included for completeness.) For example, the statement: .PP .RS .nf \fBnroffchars\fR {}.\e\e* .fi .RE .PP would replace the left and right parentheses with left and right curly braces for purposes of parsing .IR nroff / troff strings, with no effect on the others (admittedly a contrived example). Note that the backslash is escaped with a backslash. .PP .RS .nf \fItex-stmt\fR : { \fBTeXchars\fR | \fBtexchars\fR } \fIstring\fR .fi .RE .PP The .B TeXchars statement allows redefinition of certain TeX/LaTeX control characters. The string given must be exactly thirteen characters long, and must list substitutions for the left and right parentheses ("()") , the left and right square brackets ("[]"), the left and right curly braces ("{}"), the left and right angle brackets ("<>"), the backslash ("\e"), the dollar sign ("$"), the asterisk ("*"), the period or dot ("."), and the percent sign ("%"). For example, the statement: .PP .RS .nf \fBtexchars\fR ()\e[\|]<\e><\e>\e\e$*.% .fi .RE .PP would replace the functions of the left and right curly braces with the left and right angle brackets for purposes of parsing TeX/LaTeX constructs, while retaining their functions for the .I tib bibliographic preprocessor. Note that the backslash, the left square bracket, and the right angle bracket must be escaped with a backslash. .PP .RS .nf \fIopt-stmt\fR : { \fIcmpnd-stmt\fR | \fIaff-stmt\fR } .sp \fIcmpnd-stmt\fR : \fBcompoundwords\fR \fIcompound-opt\fR .sp \fIaff-stmt\fR : \fBallaffixes\fR \fIon-or-off\fR .sp \fIon-or-off\fR : { \fBon\fR | \fBoff\fR } .sp \fIcompound-opt\fR : { \fIon-or-off\fR | \fBcontrolled\fR \fIcharacter\fR } .fi .RE .PP An .I opt-stmt controls certain ispell defaults that are best made language-specific. The .B allaffixes statement controls the default for the .B \-P and .B \-m options to .I ispell. If .B allaffixes is turned .B off (the default), .I ispell will default to the behavior of the .I \-P flag: root/affix suggestions will only be made if there are no "near misses". If .B allaffixes is turned .BR on , .I ispell will default to the behavior of the .I \-m flag: root/affix suggestions will always be made. The .B compoundwords statement controls the default for the .B \-B and .B \-C options to .I ispell. If .B compoundwords is turned .B off (the default), .I ispell will default to the behavior of the .I \-B flag: run-together words will be reported as errors. If .B compoundwords is turned .BR on , .I ispell will default to the behavior of the .I \-C flag: run-together words will be considered as compounds if both are in the dictionary. This is useful for languages such as German and Norwegian, which form large numbers of compound words. Finally, if .B compoundwords is set to .IR controlled , only words marked with the flag indicated by .I character (which should not be otherwise used) will be allowed to participate in compound formation. Because this option requires the flags to be specified in the dictionary, it is not available from the command line. .PP .RS .nf \fIflag-stmt\fR : \fBflagmarker\fR \fIcharacter\fR .fi .RE .PP The .B flagmarker statement describes the character which is used to separate affix flags from the root word in a raw dictionary file. This must be a character which is not found in any word (including in string characters; see below). The default is "/" because this character is not normally used to represent special characters in any language. .PP .RS .nf \fInum-stmt\fR : \fBcompoundmin\fR \fIdigit\fR .fi .RE .PP The .B compoundmin statement controls the length of the two components of a compound word. This only has an effect if .B compoundwords is turned .B on or if the .B \-C flag is given to .IR ispell . In that case, only words at least as long as the given minimum will be accepted as components of a compound. The default is 3 characters. .PP .RS .nf \fIchar-sets\fR : \fInorm-sets\fR [ \fIalt-sets\fR ] .fi .RE .PP The character-set section describes the characters that can be part of a word, and defines their collating order. There must always be a definition of "normal" character sets; in addition, there may be one or more partial definitions of "alternate" sets which are used with various text formatters. .PP .RS .nf \fInorm-sets\fR : [ \fIdeftype\fR ] [ \fIset-options\fR ] \fIcharset-group\fR .fi .RE .PP A "normal" character set may optionally begin with a definition of the file suffixes that make use of this set. Following this are one or more character-set declarations. .PP .RS .nf \fIdeftype\fR : \fBdefstringtype\fR \fIname\fR \fIdeformatter\fR \fIsuffix\fR* .fi .RE .PP The .B defstringtype declaration gives a list of file suffixes which should make use of the default string characters defined as part of the base character set; it is only necessary if string characters are being defined. The .I name parameter is a string giving the unique name associated with these suffixes; often it is a formatter name. If the formatter is a member of the troff family, "nroff" should be used for the name associated with the most popular macro package; members of the TeX family should use "tex". Other names may be chosen freely, but they should be kept simple, as they are used in .I ispell 's .B \-T switch to specify a formatter type. The .I deformatter parameter specifies the deformatting style to use when processing files with the given suffixes. Currently, this must be .BR plain , .BR tex , .BR nroff , or .BR html . The .I suffix parameters are a whitespace-separated list of strings which, if present at the end of a filename, indicate that the associated set of string characters should be used by default for this file. For example, the suffix list for the troff family typically includes suffixes such as ".ms", ".me", ".mm", etc. .PP .RS .nf \fIset-options\fR : \fBoptions\fR \fIcharset-options\fR* .fi .RE .PP The .B options declaration activates one or more white-separated options for the given character set (default or alternate). Currently, two options are supported: The .B raw_display option indicates that string characters should be displayed as-is even if some of their components appear to be non-printing; this option is useful for character sets such as UTF-8 or (if the terminal is configured appropriately) ISO Latin-1. The .B squeeze_string option indicates that when .I ispell is interacting with an external client such as .I emacs (via the .B \-a flag), string characters should be considered to be of length 1 rather than their true length in bytes. This option is needed to allow .I ispell to synchronize with .I emacs when processing files containing UTF-8 characters; it should only be given for UTF-8 character sets. .PP .RS .nf \fIcharset-group\fR : { \fIchar-stmt\fR | \fIstring-stmt\fR | \fIdup-stmt\fR}* .fi .RE .PP A .I char-stmt describes single characters; a .I string-stmt describes characters that must appear together as a string, and which usually represent a single character in the target language. Either may also describe conversion between upper and lower case. A .I dup-stmt is used to describe alternate forms of string characters, so that a single dictionary may be used with several formatting programs that use different conventions for representing non-ASCII characters. .PP .RS .nf \fIchar-stmt\fR : \fBwordchars\fR \fIcharacter-range\fR | \fBwordchars\fR \fIlowercase-range\fR \fIuppercase-range\fR | \fBboundarychars\fR \fIcharacter-range\fR | \fBboundarychars\fR \fIlowercase-range\fR \fIuppercase-range\fR \fIstring-stmt\fR : \fBstringchar\fR \fIstring\fR | \fBstringchar\fR \fIlowercase-string\fR \fIuppercase-string\fR .fi .RE .PP Characters described with the .B boundarychars statement are considered part of a word only if they appear singly, embedded between characters declared with the .B wordchars or .B stringchar statements. For example, if the hyphen is a boundary character (useful in French), the string "foo-bar" would be a single word, but "-foo" would be the same as "foo", and "foo--bar" would be two words separated by non-word characters. .PP If two ranges or strings are given in a .I char-stmt or .IR string-stmt , the first describes characters that are interpreted as lowercase and the second describes uppercase. In the case of a .B stringchar statement, the two strings must be of the same length. Also, in a .B stringchar statement, the actual strings may contain both uppercase and characters themselves without difficulty; for instance, the statement .PP .RS .nf stringchar "\e\e*(sS" "\e\e*(Ss" .fi .RE .PP is legal and will not interfere with (or be interfered with by) other declarations of of "s" and "S" as lower and upper case, respectively. .PP A final note on string characters: some languages collate certain special characters as if they were strings. For example, the German "a-umlaut" is traditionally sorted as if it were "ae". Ispell is not capable of this; each character must be treated as an individual entity. So in certain cases, ispell will sort a list of words into a different order than the standard "dictionary" order for the target language. .PP .RS .nf \fIalt-sets\fR : \fIalttype\fR [ \fIset-options\fR ] [ \fIalt-stmt\fR* ] .fi .RE .PP Because different formatters use different notations to represent non-ASCII characters, .I ispell must be aware of the representations used by these formatters. These are declared as alternate sets of string characters. .PP .RS .nf \fIalttype\fR : \fBaltstringtype\fR \fIname\fR \fIsuffix\fR* .fi .RE .PP The .B altstringtype statement introduces each set by declaring the associated formatter name and filename suffix list. This name and list are interpreted exactly as in the .B defstringtype statement above. Following this header are one or more \fIalt-stmt\fRs which declare the alternate string characters used by this formatter. .PP .RS .nf \fIalt-stmt\fR : \fBaltstringchar\fR \fIalt-string\fR \fIstd-string\fR .fi .RE .PP The .I altstringchar statement describes alternate representations for string characters. For example, the \-mm macro package of .I troff represents the German "a-umlaut" as .IR a\e*: , while .I TeX uses the sequence \fI\e"a\fR. If the .I troff versions are declared as the standard versions using .BR stringchar , the .I TeX versions may be declared as alternates by using the statement .PP .RS .nf \fBaltstringchar\fR \e\e\e"a a\e\e*\: .fi .RE .PP When the .B altstringchar statement is used to specify alternate forms, all forms for a particular formatter must be declared together as a group. Also, each formatter or macro package must provide a complete set of characters, both upper- and lower-case, and the character sequences used for each formatter must be completely distinct. Character sequences which describe upper- and lower-case versions of the same printable character must also be the same length. It may be necessary to define some new macros for a given formatter to satisfy these restrictions. (The current version of .I buildhash does not enforce these restrictions, but failure to obey them may result in errors being introduced into files that are processed with .IR ispell .) .PP An important minor point is that .I ispell assumes that all characters declared as .B wordchars or .B boundarychars will occupy exactly one position on the terminal screen. .PP A single character-set statement can declare either a single character or a contiguous range of characters. A range is given as in egrep and the shell: [a-z] means lowercase alphabetics; [^a-z] means all but lowercase, etc. All character-set statements are combined (unioned) to produce the final list of characters that may be part of a word. The collating order of the characters is defined by the order of their declaration; if a range is used, the characters are considered to have been declared in ASCII order. Characters that have case are collated next to each other, with the uppercase character first. .PP The character-declaration statements have a rather strange behavior caused by its need to match each lowercase character with its uppercase equivalent. In any given .B wordchars or .B boundarychars statement, the characters in each range are first sorted into a collating sequence by their byte values, then matched one-for-one with the other range. (The two ranges must have the same number of characters). Thus, for example, the two statements: .PP .RS .nf \fBwordchars\fP [aeiou] [AEIOU] \fBwordchars\fP [aeiou] [UOIEA] .fi .RE .PP would produce exactly the same effect. To get the vowels to match up "wrong", you would have to use separate statements: .PP .RS .nf \fBwordchars\fP a U \fBwordchars\fP e O \fBwordchars\fP i I \fBwordchars\fP o E \fBwordchars\fP u A .fi .RE .PP which would cause uppercase 'e' to be 'O', and lowercase 'O' to be 'e'. This should normally be a problem only with languages that have been forced to use a strange collating sequence. If your uppercase and lowercase letters both collate in the same order, you shouldn't have to worry about this "feature". .PP The prefixes and suffixes sections have exactly the same syntax, except for the introductory keyword. .PP .RS .nf \fIprefixes\fR : \fBprefixes\fI flagdef\fR* \fIsuffixes\fR : \fBsuffixes\fI flagdef\fR* \fIflagdef\fR : \fBflag\fR [\fB*\fR|\fB~\fR] \fIchar\fB : \fIrepl\fR* .fi .RE .PP A prefix or suffix table consists of an introductory keyword and a list of flag definitions. Flags can be defined more than once, in which case the definitions are combined. Each flag controls one or more .IR repl s (replacements) which are conditionally applied to the beginnings or endings of various words. .PP Flags are named by a single character .IR char . Depending on a configuration option, this character can be either any uppercase letter (the default configuration) or any 7-bit ASCII character. Most languages should be able to get along with just 26 flags. .PP A flag character may be prefixed with one or more option characters. (If you wish to use one of the option characters as a flag character, simply enclose it in double quotes.) .PP The asterisk (\fB*\fP) option means that this flag participates in .I cross-product formation. This only matters if the file contains both prefix and suffix tables. If so, all prefixes and suffixes marked with an asterisk will be applied in all cross-combinations to the root word. For example, consider the root .I fix with prefixes .I pre and .IR in , and suffixes .I es and .IR ed . If all flags controlling these prefixes and suffixes are marked with an asterisk, then the single root .I fix would also generate .IR prefix , .IR prefixes , .IR prefixed , .IR infix , .IR infixes , .IR infixed , .IR fix , .IR fixes , and .IR fixed . Cross-product formation can produce a large number of words quickly, some of which may be illegal, so watch out. If cross-products produce illegal words, .I munchlist will not produce those flag combinations, and the flag will not be useful. .PP .RS .nf \fIrepl\fR : \fIcondition\fR* \fB>\fR [ \fB- \fIstrip-string \fB,\fR ] \fIappend-string\fR .fi .RE .PP The \fB~\fR option specifies that the associated flag is only active when a compound word is being formed. This is useful in a language like German, where the form of a word sometimes changes inside a compound. .PP A .I repl is a conditional rule for modifying a root word. Up to 8 .I conditions may be specified. If the .I conditions are satisfied, the rules on the right-hand side of the .I repl are applied, as follows: .IP (1) If a strip-string is given, it is first stripped from the beginning or ending (as appropriate) of the root word. .IP (2) Then the append-string is added at that point. .PP For example, the .I condition .B . means "any word", and the .I condition .B Y means "any word ending in Y". The following (suffix) replacements: .PP .RS .nf \&. > MENT Y > -Y,IES .fi .RE .PP would change .I induce to .I inducement and .I fly to .IR flies . (If they were controlled by the same flag, they would also change .I fly to .IR flyment , which might not be what was wanted. .I Munchlist can be used to protect against this sort of problem; see the command sequence given below.) .PP No matter how much you might wish it, the strings on the right must be strings of specific characters, not ranges. The reasons are rooted deeply in the way .I ispell works, and it would be difficult or impossible to provide for more flexibility. For example, you might wish to write: .PP .RS .nf [EY] > -[EY],IES .fi .RE .PP This will not work. Instead, you must use two separate rules: .PP .RS .nf E > -E,IES Y > -Y,IES .fi .RE .PP The application of .IR repl s can be restricted to certain words with .IR conditions : .PP .RS .nf \fIcondition\fR : { \fB.\fR | \fIcharacter\fR | \fIrange\fR } .fi .RE .PP A .I condition is a restriction on the characters that adjoin, and/or are replaced by, the right-hand side of the .IR repl . Up to 8 .I conditions may be given, which should be enough context for anyone. The right-hand side will be applied only if the .I conditions in the .I repl are satisfied. The .I conditions also implicitly define a length; roots shorter than the number of .I conditions will not pass the test. (As a special case, a .I condition of a single dot "." defines a length of zero, so that the rule applies to all words indiscriminately). This length is independent of the separate test that insists that all flags produce an output word length of at least four. .PP .I Conditions that are single characters should be separated by white space. For example, to specify words ending in "ED", write: .PP .RS .nf E D > -ED,ING # As in covered > covering .fi .RE .PP If you write: .PP .RS .nf ED > -ED,ING .fi .RE .PP the effect will be the same as: .PP .RS .nf [ED] > -ED,ING .fi .RE .PP As a final minor, but important point, it is sometimes useful to rebuild a dictionary file using an incompatible suffix file. For example, suppose you expanded the "R" flag to generate "er" and "ers" (thus making the Z flag somewhat obsolete). To build a new dictionary .I newdict that, using .IR newaffixes , will accept exactly the same list of words as the old list .I olddict did using .IR oldaffixes , the .B \-c switch of .I munchlist is useful, as in the following example: .PP .RS .nf $ munchlist -c oldaffixes -l newaffixes olddict > newdict .fi .RE .PP If you use this procedure, your new dictionary will always accept the same list the original did, even if you badly screwed up the affix file. This is because .I munchlist compares the words generated by a flag with the original word list, and refuses to use any flags that generate illegal words. .SH EXAMPLES .PP As an example of conditional suffixes, here is the specification of the .B S flag from the English affix file: .PP .RS .nf flag *S: [^AEIOU]Y > -Y,IES # As in imply > implies [AEIOU]Y > S # As in convey > conveys [SXZH] > ES # As in fix > fixes [^SXZHY] > S # As in bat > bats .fi .RE .PP The first line applies to words ending in Y, but not in vowel-Y. The second takes care of the vowel-Y words. The third then handles those words that end in a sibilant or near-sibilant, and the last picks up everything else. .PP Note that the .I conditions are written very carefully so that they apply to disjoint sets of words. In particular, note that the fourth line excludes words ending in Y as well as the obvious SXZH. Otherwise, it would convert "imply" into "implys". .PP Although the English affix file does not do so, you can also have a flag generate more than one variation on a root word. For example, we could extend the English "R" flag as follows: .PP .RS .nf flag *R: E > R # As in skate > skater E > RS # As in skate > skaters [^AEIOU]Y > -Y,IER # As in multiply > multiplier [^AEIOU]Y > -Y,IERS # As in multiply > multipliers [AEIOU]Y > ER # As in convey > conveyer [AEIOU]Y > ERS # As in convey > conveyers [^EY] > ER # As in build > builder [^EY] > ERS # As in build > builders .fi .RE .PP This flag would generate both "skater" and "skaters" from "skate". This capability can be very useful in languages that make use of noun, verb, and adjective endings. For instance, one could define a single flag that generated all of the German "weak" verb endings. .SH "SEE ALSO" ispell(1) ispell-3.4.02/PaxHeaders.22185/findaffix.X0000644000000000000000000000013212465617735014735 xustar0030 mtime=1423384541.128510655 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/findaffix.X0000555003214100001440000002765312465617735016026 0ustar00geofffaculty00000000000000!!POUNDBANG!! # # $Id: findaffix.X,v 1.23 2015-02-08 00:35:41-08 geoff Exp $ # # Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # Find possible affixes for use with ispell # # Usage: # # findaffix [-p | -s] [-f] [-c] [-m min] [-M max] [-e elim] [-l low] \ # [-t tabchar] [files] # # Each common prefix (-p) or suffix (-s, default) is presented, along # with statistics to indicate how useful such an affix might be in # reducing the size of the input file. Only those affixes which # produce a legal root (one found in the original input) are reported. # # If the "-c" option is not given, the output lines are in the # following format: # # strip/add/count/bytes # # where "strip" is the string that should be stripped from a root # word before adding the affix, "add" is the affix to be added, "count" # is a count of the number of times that this "strip/add" combination # appears, and "bytes" is an estimate of the number of bytes that # will be saved in the raw dictionary file if this combination is # added to the affix file. The field separator in the output will # normally be the tab character specified by the "-t" switch; the # default is a slash ("/"). # # If the "-c" ("clean output") option is given, the appearance of # the output is made cleaner by changing it to: # # -strip+addcountbytes # # where "strip," "add," "count," and "bytes" are as before, and "" # represents the ASCII tab character. # # The method used to generate possible affixes will also generate # longer affixes which have common headers or trailers. For example, # the two words "moth" and "mother" will generate not only the obvious # substition "+er" but also "-h+her" and "-th+ther" (and possibly # even longer ones, depending on the value of "min"). To prevent # cluttering the output with such affixes, any affix pair that shares # a common header (or, for prefixes, trailer) string longer than # "elim" characters (default 1) will be suppressed. You may want to # set "elim" to a value greater than 1 if your language has string # characters; usually the need for this parameter will become obvious # when you examine the output of your findaffix run. # # Normally, the output is sorted on the "bytes" field. If the "-f" # flag is given, the output is sorted according to the "count" field. # # No affix longer than "max" characters (default 8) will be reported. # Smaller values of "max" will make the script run faster. # # Affixes which appear fewer than "low" times (default 10) are # suppressed. This significantly reduces the size of the output file. # # Affixes which generate stems shorter than "min" characters (default 3) # are suppressed. (A stem is the word after the "strip" string has # been removed, and before the "add" string has been added.) This # reduces both the running time and the size of the output file. "Min" # should only be set to 1 if you have a *lot* of free time and disk # space. # # The script requires a non-blank field-separator character for internal # use. Normally, this character is a slash ("/"), but if the slash # appears as a character in the input word list, a different character # can be specified with the "-t" switch. # # If the input files are ispell dictionaries, they should be expanded # before being fed to this script. # # If the input files contains characters other than [A-Za-z], they # should be translated to lowercase before being fed to this script. # # $Log: findaffix.X,v $ # Revision 1.23 2015-02-08 00:35:41-08 geoff # Be a bit more paranoid about creating temporary files. # # Revision 1.22 2005/04/27 01:18:34 geoff # Work around idiotic POSIX incompatibilities in sort. Add secure # temp-file handling. # # Revision 1.21 2005/04/14 14:39:33 geoff # Use /tmp as the default temp directory # # Revision 1.20 2005/04/14 14:38:23 geoff # Update license. Protect against modernized (i.e., incompatible) and # internationalized sort commands. # # Revision 1.19 2001/09/06 00:30:28 geoff # Many changes from Eli Zaretskii to support DJGPP compilation. # # Revision 1.18 2001/07/25 21:51:46 geoff # Minor license update. # # Revision 1.17 2001/07/23 20:24:03 geoff # Update the copyright and the license. # # Revision 1.16 1999/01/07 01:22:55 geoff # Update the copyright. # # Revision 1.15 1994/01/25 07:11:29 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # # In one of the most incredibly stupid decisions of all time, some # genius decided to break backwards compatibility by "deprecating" the # old-style sort switches even though it was trivial to recognize both # styles. The result is that that thousands of people (like me) will # have to rewrite shell scripts to tolerate that stupidity. (It's not # that the new syntax is bad--it's definitely easier to understand. # But that doesn't excuse breaking compatibility.) # # Detect whether sort accepts old-style switches. if sort +0 -1 /dev/null >/dev/null 2>&1 then CRETIN_SORT=false else CRETIN_SORT=true fi # # The following is necessary so that some internationalized versions of # sort(1) don't confuse things by sorting into a nonstandard order. # LANG=C LOCALE=C LC_ALL=C LC_COLLATE=C LC_CTYPE=C export LANG LOCALE LC_COLLATE LC_CTYPE # # The following aren't strictly necessary, but I've been made paranoid # by problems with the stuff above. It can't hurt to set them to a # sensible value. LC_MESSAGES=C LC_MONETARY=C LC_NUMERIC=C LC_TIME=C export LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME TDIR=${TMPDIR-/tmp} TEMPDIR=`mktemp -d ${TDIR}/faffXXXXXXXXXX 2>/dev/null` || (umask 077; mkdir "$TDIR/faff$$" || (echo "Can't create temp directory: ${TDIR}/faff$$" 1>&2; exit 1); TEMPDIR="$TDIR/faff$$") TMP=${TEMPDIR}/faff. SORTTMP="-T ${TDIR}" # !!SORTTMP!! USAGE='Usage: findaffix [-p | -s] [-f] [-c] [-e elim] [-m min] [-M max] [-l low] [-t tabch] [files]' LOOP=' i = len - maxlim + 1 if (i < minstem + 1) i = minstem + 1 for ( ; i <= len; i++) print substr ($0, 1, i - 1) tabch substr ($0, i) tabch len print $0 tabch tabch len' ELIM='$1!=$2 \ { if (substr ($1, 1, elimlen) != substr ($2, 1, elimlen)) print }' maxlim=8 minstem=3 elimlen=1 lowcount=10 cleanout=no if $CRETIN_SORT then finalsortopts='-k 4rn,4 -k 3rn,3 -k 2,2 -k 1,1' else finalsortopts='+3rn -4 +2rn -3 +1 -2 +0 -1' fi tabch=/ while : do case "$1" in -p) LOOP=' lim = len - minstem if (lim > maxlim) lim = maxlim for (i = 1; i <= lim; i++) print substr ($0, i + 1) tabch substr ($0, 1, i) tabch len print $0 tabch tabch len' ELIM='$1!=$2 \ { if (substr ($1, length ($1), elimlen) \ != substr ($2, length ($2), elimlen)) print }' shift ;; -s) shift ;; -f) if $CRETIN_SORT then finalsortopts='-k 3rn,3 -k 4rn,4 -k 2,2 -k 1,1' else finalsortopts='+2rn -3 +3rn -4 +1 -2 +0 -1' fi shift ;; -c) cleanout=yes shift ;; -e) elimlen=$2 shift; shift ;; -m) minstem=$2 shift; shift ;; -M) maxlim=$2 shift; shift ;; -l) lowcount=$2 shift; shift ;; -t) tabch="$2" shift; shift ;; -*) echo "$USAGE" 1>&2 exit 1 ;; *) break ;; esac done trap "rm -rf $TEMPDIR; exit 1" 1 2 15 trap "rm -rf $TEMPDIR; exit 0" 13 # # We are ready to do the work. First, we collect all input, translate it # to lowercase, sort it (dropping duplications), and save it for later. # if [ $# -ne 0 ] then cat "$@" | tr '[A-Z]' '[a-z]' else tr '[A-Z]' '[a-z]' fi \ | sort -u $SORTTMP > ${TMP}a # # Now the monstrous pipeline. The awk command produces several lines for # each input word. Each line contains a possible stem (first field), # a possible affix, and the length of the original word. The loop which # does this was placed into the LOOP variable by the code above (q.v.). # # The first sort puts this output into an order appropriate for feeding # to 'join'. The join command then combines stems and affixes, and for # each puts out an affix to strip, an affix to add, and the length of # the word before and after modification. # # From here on out the job is relatively easy. The second 'awk' gets rid # of lines that have the same strip and add affixes, and also eliminates # lines where the strip and add affix have a common leading (for suffixes) # or trailing (for prefixes) substring, or where the strip affix is longer # than the add affix (this is all done by the $ELIM variable, which is also # set up by the code above. The second sort collects identical affixes; # the third 'awk' functions like 'uniq -c', replacing duplicate affixes # with a count and summing the estimate of bytes saved. It also eliminates # any affixes which appear less frequently than the minimum ("lowcount"). # Finally, the third sort ($finalsortopts) rearranges the list in the chosen # sort order. # if $CRETIN_SORT then sortopts1='-k 1,1 -k 2' sortopts2='-k 2,2 -k 1,1' else sortopts1='+0 -1 +1' sortopts2='+1 -2 +0 -1' fi awk "BEGIN{minstem=$minstem; maxlim=$maxlim; tabch="'"'"$tabch"'"} { len = length ($0) if (len < 2) next '"$LOOP"' }' < ${TMP}a \ | sort "-t$tabch" $sortopts1 $SORTTMP -o ${TMP}a join "-t$tabch" -o 1.2 2.2 2.3 ${TMP}a ${TMP}a \ | awk "-F$tabch" "BEGIN{elimlen=$elimlen}$ELIM" \ | sort "-t$tabch" $sortopts2 $SORTTMP \ | awk "-F$tabch" 'BEGIN{tabch="'"$tabch"'"; lowcount='"$lowcount"'} { if ($1 == last1 && $2 == last2) { count++ totchars += $3 } else { if ((last1 != "" || last2 != "") && count >= lowcount) print last1 tabch last2 tabch count tabch totchars count = 1 last1 = $1 last2 = $2 totchars = $3 } } END { if ((last1 != "" || last2 != "") && count >= lowcount) print last1 tabch last2 tabch count tabch totchars }' \ | sort "-t$tabch" $finalsortopts $SORTTMP \ | if [ "$cleanout" = "yes" ] then case "$tabch" in /) sedsub=/ sedsep=';' ;; .|\*|\[|\^|\$|\\) sedsub="\\$tabch" sedsep=/ ;; *) sedsub="$tabch" sedsep=/ ;; esac exec sed -e "s$sedsep$sedsub$sedsep ${sedsep}g" \ -e 's/ /+/' -e 's/^/-/' \ -e 's/^-+/+/' -e 's/+ / /' else exec cat fi rm -rf $TEMPDIR ispell-3.4.02/PaxHeaders.22185/Contributors0000644000000000000000000000013213202371717015251 xustar0030 mtime=1510601679.559672404 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/Contributors0000444003214100001440000002733413202371717016333 0ustar00geofffaculty00000000000000Ispell has a long and convoluted history. I have tried to track down as much as possible about it and condense it below. THE DEVELOPMENT OF SPELL-CHECKING AND THE FIRST ISPELL The following background information on spelling checkers in general, and ispell in particular, was provided to me by Les Earnest (les@dec-lite.stanford.edu): > The earliest spelling checker (of sorts) of which I am aware was in a > program that attempted to automatically receive human-keyed Morse > code, which can be ambiguous because of the variable timing between > dots, dashes, intercharacter pauses, and interword pauses. This > program didn't use a full dictionary; instead, used a table of > digraphs (two-letter sequences) that occur in English and barred > improper letter sequences. This program was written by someone at MIT > Lincoln Lab around 1959 and, I think, ran on the TX-2 computer there. > Unfortunately, I don't remember his name. I might still have the > paper he wrote in my files but it would take a major search to find it > and I might not succeed. > > A program that I wrote in 1961 to read cursive writing contained a > real spelling checker, using the 10,000 most common English words. > It is reported in: > L. Earnest, "Machine Recognition of Cursive Writing," Information > Processing 62, (Proc. IFIP Congress 1962, Munich), North-Holland, > Amsterdam, 1963. > and > N. Lindgren, ``Machine Recognition of Human Language, Part III - > Cursive Script Recognition'', IEEE Spectrum, May 1965. > > I brought that dictionary to Stanford and got a PhD student to write > a spelling checker for text in Lisp running on our PDP-6 computer at > the Stanford Artificial Intelligence Lab around 1967. > Unfortunately, I do not remember which student it was; it could have > been Gil Falk. It was a rather simple program (certainly much > simpler than the earlier cursive writing program) and I didn't think > of it as a significant development at the time. > > [Later], I got another PhD student, Ralph Gorin, to do a better and > faster spelling checker sometime in the early '70s, still using my > old dictionary. Ralph later wrote an article about it in CACM. I > believe that he later augmented the dictionary. [note: Ralph has since informed me that he wrote no such article. The program was called SPELL and was written in 1971. Ralph provided me with a reference to "Computer Programs for Spelling Correction", by James L. Peterson, Springer-Verlag, Berlin, 1980, No. 96 in the series "Lecture Notes in Computer Science." This book states that Ralph's SPELL program, which was the direct ancestor of ispell, was the first computer program written for checking the spelling of text documents. The book is also a good source of references on spelling programs.] > ... > > [Ispell] was originally written in PDP-10 assembly language and ran > under the WAITS operating system, which is similar to TOPS-10 but existed > only on SAIL (a dual processor KA10/PDP-6 system). It was and is called > SPELL on that machine. It later was modified to run under Tenex and > TOPS-20. [Ralph mentions that SPELL was also ported to MIT's ITS and TOPS-10.] The Tenex version of ispell was later revised by W. E. Matson (1974), and Bill Ackerman (1978). Bill has provided the following information: > I came across the SPELL program in 1978 on ITS. It was a port from > Stanford, and had the names Ralph Gorin (approximately 1971) and > Wayne Matson (1974) associated with it. I did 3 things to it: > > Rewrote it as a native program for ITS, and, shortly thereafter, > TOPS-20. (I never did anything for TOPS-10, and am not aware > that it ever ran on TOPS-10, though it may have.) > > Replaced the heuristics for suffix removal, which I found unreliable > and unsatisfactory, with an algorithm that was driven by specific > suffix flags in the dictionary. This way, the dictionary would have > complete control over what words were legal, and there would be no > spurious hits. > > Apparently most importantly, though I had no idea at time, gave it > the name "ISPELL", for "ITS version of spell", since I didn't > consider myself authorized to throw away an existing program > and overwrite it with a new one under the same name. > > I have not followed the history of the program since then, and do not know > if it still uses the "suffix flags" in its dictionary. But if it does, > I introduced them. The Ispell algorithm that uses those flags to make > accurate decisions about the legality of words was documented in great > detail in James Peterson's Springer-Verlag book. (He spent a semester > at MIT while working on the book, and I provided him with a lot of > information and documentation at that time.) > > Bill Ackerman > wba@apollo.hp.com Michael Adler adds: > I did work on ispell in 1982. Actually, I stole the ispell > dictionary and suffix compression algorithm and wrote a spelling > checker for CP/M in 8080 assembler that I very creatively called "SPELL." > By sorting the dictionary alphabetically and using a difference encoding > I managed to pack the entire dictionary that Bill was using in about > 56Kb. The CP/M program read a document, sorted all the words alphabetically > and then checked them. It then reread the document and compared words as > it found them against the in memory, sorted and checked words. SPELL was > around in the public domain on CP/M. > > I was in high school at the time and talked to Bill only over email. > We wound up in the same compiler group at Apollo in the late 80's by > coincidence. DEVELOPMENT OF THE C/UNIX VERSION OF ISPELL In 1983, Pace Willisson (pace@prep.ai.mit.edu) wrote a C/Unix version from scratch, based on the ispell documentation. In 1987, Walt Buehring revised and enhanced ispell, and posted it to the Usenet along with a dictionary. In addition, Walt wrote the first version of "ispell.el", the emacs interface. Geoff Kuenning (geoff@ITcorp.com, that's me, and by the way I pronounce it "Kenning"; the "u" is silent) picked up this version, fixed some bugs, and added further enhancements, all of which made me the de-facto ispell maintainer for the net. I also put quite a bit of work into improving the quality of the dictionaries. In 1987 I began work on the "munchlist" script, which I originally intended to be used to add flags to personal dictionary entries. At the same time I was studying German, and wanted to use ispell to check the papers I was writing for that class. After thinking about it for some time, I realized that the suffix flags could be table-driven, which would both add flexibility and would get rid of certain difficult-to-find bugs. In 1988 I rewrote major portions of the code to do this, resulting in the first multi-lingual version. Ole Bjoern Hessen (obh@ifi.uio.no) in Norway alpha-tested this version and provided several important enhancements. Bob Devine (vianet!devine) provided two larger dictionaries (which became the basis for english.1 and english.2) to me for inclusion with subsequent releases. Ashwin Ram (ram@cs.yale.edu) made substantial enhancements to Walt Buehring's emacs interface, and provided them to me for inclusion with an earlier release. The emacs interface was then completely overhauled by Ken Stevens (stevens@hplabs.hp.com), who also beta-tested the software and without whom this posting would not have been possible. If there's a feature in the emacs interface that you like, you probably have Ken to thank for it. His efforts have been tireless for many years. Martin Boyer made major contributions to the munchlist script, including producing a version that runs under perl (see languages/Where for instructions on how to get that version). Philippe-Andre Prindeville provided xspell (a Motif-based X interface), and Moritz Willers provided a NeXTStep interface. DEVELOPMENT AND DEATH OF ISPELL 4.0 Meanwhile, and unbeknownst to me, Pace Willisson was working on his own improvements to ispell. He focused primarily on dictionary size and startup time. His solution was a dictionary compression algorithm that detected and encoded frequent letter pairs. This also reduced the time needed to read it in. Pace also changed some internal data structures to improve startup time. Pace and I eventually discovered each other's efforts, and discussed re-merging our changes, but we decided that there would be too much work involved. This was partly because I was close to a release and didn't want to delay it with an extensive and error-prone merge. In late 1992 (if my memory serves correctly), Richard Stallman contacted me, asking for permission to distribute ispell as part of the GNU suite. I responded that he was welcome to distribute it, but that I was not willing to place my software under the Gnu Public License. Through a misunderstanding, neither of us considered the possibility of finding a compromise license that both could live with. So Richard started a search for an alternate version, and found Pace working right in his back yard. I have been told that when FSF first learned of Pace's version, they again considered using International Ispell instead because it was both more popular and more capable, but this idea was rejected due to the license misunderstanding. Instead, FSF enhanced Pace's version somewhat and called it ispell 4.0, apparently in the hopes that by numbering the version higher, it would become the standard. When ispell 4.0 was released, much confusion ensued. Many ispell users innocently "upgraded" to 4.0 and then screamed when they could not find features to which they had grown accustomed. Europeans in general were angered by the apparent provincialism shown by the "dropping" of international support. I found myself inundated with questions about a version I had never heard of or seen. One of the earliest and most common suggestions was that FSF should rename their version "gispell". This had a lot of precedent, both in the naming of other FSF utilities and in the then-recent change of the suffix used by gzip from ".z" to ".gz". Unfortunately, the FSF refused to do this. I may have inadvertently contributed to this refusal with a Usenet posting in which I tried to clarify what had happened, pointing out that the FSF version was more recently related to Pace's than my own. This may have been seen as an acknowledgment that FSF should have the rights to the name "ispell," and that I should rename my version. A flame war arose, and I decided that the only way to solve the problem was to rename my version to eliminate the confusion. However, at about the same time Richard Stallman and I began negotiating via e-mail. We itemized and clarified his objections to my license, and I learned from a third party that FSF is willing to distribute software that falls under the University of California license (also known as the Berkeley license). Richard and I agreed that if I changed my license to be a paraphrase of the UC license, FSF would be willing to distribute my version with no changes. Since then, ispell 4.0 has been dropped by FSF and has pretty well disappeared from the net, leaving International Ispell as the version of choice for nearly everyone. OTHER CONTRIBUTORS Numerous other people have contributed enhancements, suggestions, and bug fixes. I used to attempt to keep track of all of them, and list their names here. However, I found that keeping the list of names correct was as time-consuming as fixing bugs, so I finally decided that the list had grown too long, and stopped keeping it current. This is unfortunate, because many people have made significant contributions to ispell and I would like to have a way to acknowledge them. So please remember that hundreds of people have helped in this effort, and that I appreciate each and every one of them. ispell-3.4.02/PaxHeaders.22185/local.h.generic0000644000000000000000000000007410233541510015503 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/local.h.generic0000444003214100001440000000724310233541510016555 0ustar00geofffaculty00000000000000#ifndef LOCAL_H_INCLUDED #define LOCAL_H_INCLUDED /* * $Id: local.h.generic,v 1.24 2005/04/26 22:40:08 geoff Exp $ */ /* * Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * This file is a sample local.h file. It shows what I believe nearly every * site will want to include in their local.h. You will probably want to * expand this file; see "config.X" to learn of #defines that you might * like to add to. */ /* * WARNING WARNING WARNING * * This file is *NOT* a normal C header file! Although it uses C * syntax and is included in C programs, it is also processed by shell * scripts that are very stupid about format. * * Do not try to use #if constructs to configure this file for more * than one configuration. Do not place whitespace after the "#" in * "#define". Do not attempt to disable lines by commenting them out. * Do not use backslashes to reduce the length of long lines. * None of these things will work the way you expect them to. * * WARNING WARNING WARNING */ #define MINIMENU /* Display a mini-menu at the bottom of the screen */ #undef USG /* Define on System V or if term.c won't compile */ #undef NO_FCNTL_H /* Define if you get compile errors on fcntl.h */ #undef NO_MKSTEMP /* Define if you get compile or link errors */ /* * Important directory paths. If you change MAN45DIR from man5 to * something else, you probably also want to set MAN45SECT and * MAN45EXT (but not if you keep the man pages in section 5 and just * store them in a different place). */ #define BINDIR "/usr/local/bin" #define LIBDIR "/usr/local/lib" #define MAN1DIR "/usr/local/man/man1" #define MAN45DIR "/usr/local/man/man5" /* Also define MAN45EXT if you don't like section 5 for file formats. */ /* * Place any locally-required #include statements here */ #endif /* LOCAL_H_INCLUDED */ ispell-3.4.02/PaxHeaders.22185/WISHES0000644000000000000000000000007410227505244013561 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/WISHES0000444003214100001440000000705610227505244014635 0ustar00geofffaculty00000000000000Things remaining to be done to ispell: - It might be nice to support multiple personal dictionaries. On the other hand, it's pretty easy to combine them with "cat". - A small amount of string space could be saved if buildhash would combine strings with common suffixes (e.g., "and" could be stored as a pointer to the tail of "bland"). - (Pace Willisson) Pace's latest version of ispell compresses common digrams to reduce the size of the hash file, and stores shorter words in the dictionary entry itself. (Since the digram compression also reduces word size, this is a big win). He also improved startup time, at a slight running-time penalty, by eliminating the mass conversion of string indexes to pointers and just using the indexes as such whenever a string is accessed. - The findaffix script takes ridiculous amounts of time and disk space. It desperately needs to be rewritten in C, which would also allow it to correctly support string characters and to suppress reporting of choices that are already in the affix file. - Some of the following ideas require more flag bits in the dictionary. Since there is only one bit remaining for most cases, I plan to use that bit as some sort of an indicator that more flag bits reside somewhere else. This will be a kludge, but it will save some space. Beware! Don't plan on using that last flag bit for something else. - (Ian Dall) For some applications, it can be handy to allow multiple dictionary hash files. This shouldn't be too hard, since there's already similar code to support the personal dictionary. - (Not mine, but I've lost the name of the originator.) Some misspellings are common, but corrections will not ever be found by ispell's algorithm. It would be nice to be able to explicitly specify misspelling/correction pairs for such words (e.g., "lite->light"). - Several people, notably Peter Mutsaers, have asked if the affix file format could be extended to allow limited variables, so that you could specify things like "[AEIOU][DNL] > \2ING" to handle words like "pad->padding". - Ispell should be smart enough to ignore hyphenation signs, such as the TeX \- hyphenation indicator. - Since there can be two personal dictionaries, there should be a way to specify which dictionary a new word ("I" command) should be inserted into. - For languages that form lots of compound words, such as German, munchlist should be smart enough to split compound words into their components when appropriate. - (Jeff Edmonds) The personal dictionary should be able to remove certain words from the master dictionary, so that obscure words like "wether" wouldn't mask favorite typos. - (Jeff Edmonds) It would be wonderful if ispell could correct inserted spaces such as "th e" for "the" or even "can not" for "cannot". - Since ispell has dictionaries available to it, it is conceivable that it could automatically determine the language of a particular file by choosing the dictionary that produced the fewest spelling errors on the first few lines. - It is long past the time when the ispell.1 manual page should have been broken up into components describing the various programs in the suite. - If the -C flag is disabled, ispell should (at least optionally) use the "??" form to suggestion possible compound formations. - The elisp interface should provide a way for ispell to return error messages to emacs, so that users don't get inexplicable failures when things like dictionary open failures happen. ispell-3.4.02/PaxHeaders.22185/Makefile0000644000000000000000000000013213230312443014261 xustar0030 mtime=1516344611.287688653 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/Makefile0000444003214100001440000006043713230312443015344 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.128 2018-01-18 22:50:11-08 geoff Exp $ # # Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # You will have to create a local.h file before building; look over # config.X to learn what things you may need to define, or use one of # the sample local.h files shipped. # # the argument syntax for buildhash to make alternate dictionary files # is simply: # # buildhash # $Log: Makefile,v $ # Revision 1.128 2018-01-18 22:50:11-08 geoff # When symlinking DEFHASH, don't use DESTDIR (DESTDIR is specified to be # a temporary before files are moved to a final location, so the symlink # should reference the eventual installation location). # # Revision 1.127 2015-02-08 01:10:54-08 geoff # Support DESTDIR. # # Revision 1.126 2015-02-08 00:44:20-08 geoff # During installation, make sure we don't accidentally get stuck in BINDIR. # # Revision 1.125 2005/09/06 06:31:32 geoff # In the "doedit" dependency, pick out the ispell version and make it # available to edited files. # # Revision 1.124 2005/05/25 13:56:32 geoff # Make language subdirectories in reverse order so that the English # makefiles can install a default dictionary linked to the first-mentioned # language. # # Revision 1.123 2005/05/25 13:22:33 geoff # Bug fix: make sure HASHSUFFIX set before using it during installation. # # Revision 1.122 2005/05/01 23:19:12 geoff # Make constructed files depend on the Makefile # # Revision 1.121 2005/05/01 23:07:59 geoff # Add EXTEXT usage (courtesy of Eli Zaretskii). # # Revision 1.120 2005/05/01 22:35:00 geoff # Get rid of references to fixispell-a in the installation process (but # blow away any previously installed copies). Add BAKEXT to the stuff # that's in config.sh and that's substituted when editing .X files. # Sort the list of edit substitutions. When generating DEFHASH, use the # configurable has suffix. # # Revision 1.119 2005/04/28 01:03:11 geoff # Improve the generation of defhash.h to set up DEFLANG and to allow all # definitions to be overridden by local.h. Clean up defhash.h in "make # clean". # # Revision 1.118 2005/04/28 00:26:06 geoff # Dynamically generate MASTERHASH and DEFHASH from the first dictionary # name specified in LANGUAGES. # # Revision 1.117 2005/04/27 01:18:34 geoff # Work around idiotic POSIX incompatibilies in tail. Proactively use # the -e switch to sed against the day when they decide to make sed # incompatible as well. # # Revision 1.116 2005/04/21 14:08:58 geoff # Insert a missing "silencing at". Change the name of the sample # local.h file. # # Revision 1.115 2005/04/14 15:19:37 geoff # Fix typos in the special term.o rule. # # Revision 1.114 2005/04/14 14:38:23 geoff # Update license. Integrate Ed Avis's changes. Add fixispell-a (broken # though it is). Generate ispell.5 dynamically. Put term.o first to # improve detection of misconfigurations, and generate a special message # if it won't compile. Play funny games with y.tab.c to deal with # MS-DOS stupidity. # # Revision 1.113 2002/06/20 23:46:15 geoff # Put sq/unsq back, since some dictionaries are still distributed in sq # format. Add code to make directory paths when necessary. # # Revision 1.112 2001/09/06 00:30:28 geoff # Many changes from Eli Zaretskii to support DJGPP compilation. # # Revision 1.111 2001/07/25 21:51:45 geoff # Minor license update. # # Revision 1.110 2001/07/23 20:24:02 geoff # Update the copyright and the license. # # Revision 1.109 2001/06/07 19:06:33 geoff # When creating local.h, make it user-writable. # # Revision 1.108 2001/06/07 08:02:18 geoff # Add the deformatters to the default dependencies. # # Revision 1.107 1999/01/13 01:34:15 geoff # Get rid of some leftover references to emacs stuff. # # Revision 1.106 1999/01/08 04:32:31 geoff # Don't try to build or install ispell.el and ispell.info. # # Revision 1.105 1999/01/07 01:22:29 geoff # Update the copyright. Get rid of old shar-based dictionary building. # # Revision 1.104 1995/11/08 05:09:06 geoff # When invoking "showversion", ignore any errors that happen. Fix a # place where I forgot to double a dollar sign in install-languages. # # Revision 1.103 1995/10/25 03:35:38 geoff # Don't assume the presence of "head" in the showversion dependency; use # old reliable sed instead. Also make showversion depend on ispell # itself, since it uses it. # # Revision 1.102 1995/10/11 04:30:25 geoff # Allow DEFHASH and MASTERHASH to be the same. # # Revision 1.101 1995/08/05 23:19:33 geoff # Add the showversion target to ease the job of debugging people's make # output. Make sure SHELLDEBUG is set for the entire process of making # config.sh. # # Revision 1.100 1995/03/06 02:42:39 geoff # Run iwhich explicitly from the shell, so that we don't have to worry # about PATH problems and whether it's executable or not. Also fix a # place where -nw was not removed from the batch emacs switch list. # # Revision 1.99 1995/01/08 23:23:23 geoff # Get rid of an obsolete etags flag. Add some new variables to config.sh. # # Revision 1.98 1994/12/27 23:08:43 geoff # Use the new "iwhich" script to decide whether to install emacs-related # stuff. Make correct.o depend on version.h so that "ispell -a" always # reports the correct version. # # Revision 1.97 1994/11/21 07:02:51 geoff # Specify default values for the BUILD macros, so that some systems # don't accidentally override them and make ispell think that the # dictionaries are missing. # # Revision 1.96 1994/10/25 05:45:54 geoff # Make the installation command configurable. # # Revision 1.95 1994/10/18 04:03:17 geoff # Get rid of DICTVARIANTS, which is obsolete. Compile term.o first, so # that errors in it (which are common) will show up first. Improve the # rules for generation of msgs.h. # # Revision 1.94 1994/09/16 05:06:55 geoff # Split installation up into basic and dictionary-building tools, so # that we can have a partial-install target. # # Revision 1.93 1994/09/16 04:51:28 geoff # Handle installations that have ELISPDIR but not TEXINFODIR # # Revision 1.92 1994/09/16 02:45:52 geoff # Don't strip non-binaries. Fix an accidentally-doubled backslash. # # Revision 1.91 1994/08/31 05:58:27 geoff # Strip binaries before installing them. Create directories before # installing into them. Make sure manual pages are installed with the # correct protection modes. # # Revision 1.90 1994/05/25 04:29:16 geoff # Don't remove english.4 after the English makefile has carefully # installed it. # # Revision 1.89 1994/05/24 05:31:22 geoff # Return to the old sed-based method of parsing LANGUAGES, so that things # will work on broken systems like BSDI. # # Revision 1.88 1994/05/24 04:54:30 geoff # Fix the emacs installation to use emacs batch mode properly, so that a # terminal isn't required. # # Revision 1.87 1994/03/21 01:55:17 geoff # If a hard link can't be made to msgs.h, copy it instead # # Revision 1.86 1994/02/22 06:09:03 geoff # Add SHELLDEBUG. Change the language-subdirs target to use the shell # IFS variable to parse things, simplifying things and improving # efficiency (thanks to Hagen Ross for the idea and implemenation). # # Revision 1.85 1994/02/13 23:25:31 geoff # Fix multiple-language processing to not pass subsequent specifications to # the first Makefile. Also fix the language shell loop to be more flexible. # # Revision 1.84 1994/02/07 08:10:40 geoff # When processing the LANGUAGES configuration variable (from local.h), # use sed instead of expr to process it. This gets around versions of # expr that have 127-character limitations (though it probably still # limits us to 512 characters with some versions of sed, so further work # may be needed here). # # Revision 1.83 1994/02/07 06:31:20 geoff # Clarify how to change variables in local.h # # Revision 1.82 1994/02/07 06:29:31 geoff # Add a dummy else clause to shell if-test for Ultrix # # Revision 1.81 1994/02/07 05:35:34 geoff # Make realclean run dictclean # # Revision 1.80 1994/01/26 07:44:43 geoff # Make yacc configurable through local.h. # # Revision 1.79 1994/01/25 07:11:11 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # # # !!!DO NOT EDIT HERE!!! # # Unlike previous versions of ispell, there should be no need to edit # your Makefile. Instead, #define the corresponding variables in your # local.h file; the Makefile will automatically pick them up. The # only reason you should need to edit the Makefile might to be to add # non-English dictionary support. # # For example, if you want to set CFLAGS to "-g -Wall", don't put it # here. Put: # # #define CFLAGS "-g -Wall" # # in local.h. Otherwise, it won't have any effect. # EXTRADICT = Use_config.sh SHELL = /bin/sh MAKE = make # # Prefix to apply to installation directories. This is not controlled # by config.X; if you want to make a global change of that sort you # should just set BINDIR, LIBDIR, etc. appropriately. The DESTDIR # prefix is useful if you want to specify a prefix at the time you # invoke make; this approach is useful in some large installations. # # Note that DESTDIR should be specified with a trailing slash. # DESTDIR = # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: config.sh all: programs defmt-programs showversion ispell.1 ispell.5 all: all-languages programs: buildhash findaffix tryaffix ispell programs: icombine ijoin munchlist programs: subset zapdups defmt-programs: cd deformatters; $(MAKE) all showversion: ispell -./ispell -v | sed -e 1q .c.o: @. ./config.sh; \ set -x; \ $$CC $$CFLAGS -c $< # # The funny business with y_tab.c is necessary for MS-DOS systems, # where filenames can't have multiple periods. # .y.o: @. ./config.sh; \ set -x; \ $$YACC $<; \ [ -f y_tab.c ] || mv y.tab.c y_tab.c; \ $$CC $$CFLAGS -c y_tab.c; \ mv y_tab.o $@; \ rm -f y_tab.c all-languages: munchable $(MAKE) LANGUAGE_TARGET=all SHELLDEBUG=$(SHELLDEBUG) language-subdirs install: config.sh all install-basic install-deformatters install: install-dictbuild install-languages partial-install: config.sh all install-basic install-languages install-basic: @. ./config.sh; \ set -x; \ [ -d $(DESTDIR)$$BINDIR ] || $(MAKE) NEWDIR=$(DESTDIR)$$BINDIR mkdirpath; \ cd $(DESTDIR)$$BINDIR; \ rm -f ispell$$EXEEXT @. ./config.sh; \ set -x; \ $$INSTALL ispell$$EXEEXT $(DESTDIR)$$BINDIR @. ./config.sh; \ set -x; \ cd $(DESTDIR)$$BINDIR; \ strip ispell$$EXEEXT; \ chmod 755 ispell$$EXEEXT @. ./config.sh; \ set -x; \ [ -d $(DESTDIR)$$MAN1DIR ] || $(MAKE) NEWDIR=$(DESTDIR)$$MAN1DIR mkdirpath; \ [ -d $(DESTDIR)$$MAN45DIR ] || $(MAKE) NEWDIR=$(DESTDIR)$$MAN45DIR mkdirpath; \ cd $(DESTDIR)$$MAN1DIR; \ rm -f ispell$$MAN1EXT; \ cd $(DESTDIR)$$MAN45DIR; \ rm -f ispell$$MAN45EXT @. ./config.sh; \ set -x; \ $$INSTALL ispell.1 $(DESTDIR)$$MAN1DIR/ispell$$MAN1EXT; \ $$INSTALL ispell.5 $(DESTDIR)$$MAN45DIR/ispell$$MAN45EXT @. ./config.sh; \ set -x; \ cd $(DESTDIR)$$MAN1DIR; \ chmod 644 ispell$$MAN1EXT; \ cd $(DESTDIR)$$MAN45DIR; \ chmod 644 ispell$$MAN45EXT mkdirpath: @[ "X$(NEWDIR)" = X ] && (echo NEWDIR unset 1>&2; exit 1); exit 0 @path=; \ umask 22; \ for i in `echo $(NEWDIR) | tr / ' '`; do \ path="$$path/$$i"; \ if [ ! -d $$path ]; then \ echo mkdir $$path; \ mkdir $$path; \ fi; \ done install-deformatters: @. ./config.sh; \ set -x; \ cd deformatters; \ $(MAKE) EXEEXT=$$EXEEXT install install-dictbuild: @. ./config.sh; \ set -x; \ [ -d $(DESTDIR)$$BINDIR ] \ || $(MAKE) NEWDIR=$(DESTDIR)$$BINDIR mkdirpath; \ (cd $(DESTDIR)$$BINDIR; \ rm -f buildhash icombine ijoin \ munchlist findaffix fixispell-a tryaffix sq unsq); \ rm -f $(DESTDIR)$$LIBDIR/icombine @. ./config.sh; \ set -x; \ $$INSTALL buildhash icombine ijoin munchlist findaffix \ tryaffix \ $(DESTDIR)$$BINDIR @. ./config.sh; \ set -x; \ cd $(DESTDIR)$$BINDIR; \ strip buildhash$$EXEEXT icombine$$EXEEXT ijoin$$EXEEXT; \ chmod 755 buildhash$$EXEEXT icombine$$EXEEXT ijoin$$EXEEXT \ munchlist findaffix tryaffix @. ./config.sh; \ set -x; \ [ -d $(DESTDIR)$$MAN1DIR ] \ || $(MAKE) NEWDIR=$(DESTDIR)$$MAN1DIR mkdirpath; \ [ -d $(DESTDIR)$$MAN45DIR ] \ || $(MAKE) NEWDIR=$(DESTDIR)$$MAN45DIR mkdirpath; \ cd $(DESTDIR)$$MAN1DIR; \ rm -f fixispell-a$$MAN1EXT @. ./config.sh; \ set -x; \ $$INSTALL sq.1 $(DESTDIR)$$MAN1DIR/sq$$MAN1EXT; \ for m in buildhash munchlist findaffix tryaffix; do \ echo ".so `basename $$MAN1DIR`/ispell$$MAN1EXT" \ > $(DESTDIR)$$MAN1DIR/$$m$$MAN1EXT; \ done; \ echo ".so `basename $$MAN1DIR`/sq$$MAN1EXT" \ > $(DESTDIR)$$MAN1DIR/unsq$$MAN1EXT @. ./config.sh; \ set -x; \ cd $(DESTDIR)$$MAN1DIR; \ chmod 644 buildhash$$MAN1EXT \ munchlist$$MAN1EXT findaffix$$MAN1EXT tryaffix$$MAN1EXT install-languages: $(MAKE) DESTDIR=$(DESTDIR) LANGUAGE_TARGET=install \ SHELLDEBUG=$(SHELLDEBUG) \ language-subdirs . ./config.sh; \ [ -d $(DESTDIR)$$LIBDIR ] \ || $(MAKE) NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ set -x; \ cd $(DESTDIR)$$LIBDIR; \ if [ $$MASTERHASH != $$DEFHASH ]; then \ rm -f $$DEFHASH; \ $$LINK -s $$LIBDIR/$$MASTERHASH $$DEFHASH; \ fi munchable: findaffix tryaffix munchlist buildhash ispell icombine munchable: ijoin # # The following auxiliary dependency is used to make targets in # the language directories. Do you find it intimidating? No # surprise; remember that this is by the guy who wrote munchlist. # LANGUAGE_TARGET = Do_not_try_to_make_this_target_yourself BUILD = build CBUILD = build DBUILD = build language-subdirs: config.sh @. ./config.sh; \ set $(SHELLDEBUG); \ set +e; \ while [ "X$$LANGUAGES" != X ]; do \ ( \ descriptor=`echo "$$LANGUAGES" \ | sed -e 's/.*{\([^}]*\)}[^{]*$$/\1/'`; \ dir=`echo "$$descriptor" | sed -e 's/\([^,]*\).*/\1/'`; \ descriptor=`echo "$$descriptor" \ | sed -e 's/[^,]*,*\(.*\).*/\1/'`; \ makeargs=''; \ while [ "X$$descriptor" != X ]; \ do \ nextvar=`echo "$$descriptor" \ | sed -e 's/\([^,]*\).*/\1/'`; \ makeargs="$$makeargs '$$nextvar'"; \ descriptor=`echo "$$descriptor" \ | sed -e 's/[^,]*,*\(.*\).*/\1/'`; \ done; \ set -x; \ cd languages/$$dir; \ eval $(MAKE) BUILD=$(BUILD) DBUILD=$(DBUILD) CBUILD=$(CBUILD) \ SHELLDEBUG=$(SHELLDEBUG) "$$makeargs" $(LANGUAGE_TARGET) \ || exit 1; \ ) || exit 1; \ LANGUAGES=`echo "$$LANGUAGES" \ | sed -e 's/\(.*\){[^{]*$$/\1/'`; \ case "$$LANGUAGES" in \ ''|*{*}*) \ ;; \ *) \ echo "Bad language specification: '$$LANGUAGES'" \ 1>&2; \ exit 2 \ ;; \ esac; \ done; \ exit 0 buildhash: config.sh buildhash.o hash.o makedent.o parse.o @. ./config.sh; \ set -x; \ $$CC $$CFLAGS -o buildhash buildhash.o hash.o makedent.o parse.o \ $$LIBES icombine: config.sh icombine.o makedent.o parse.o @. ./config.sh; \ set -x; \ $$CC $$CFLAGS -o icombine icombine.o makedent.o parse.o \ $$LIBES ijoin: config.sh ijoin.o fields.o @. ./config.sh; \ set -x; \ $$CC $$CFLAGS -o ijoin ijoin.o fields.o $$LIBES EDITFILE = notthere OUTFILE = /dev/null # # Note: we use "sed -n -e $$p" to achieve "tail -1" here because some # idiot decided to break backwards compatibility in some versions of # tail. I have nothing but contempt for such fools. # defhash.h: config.X local.h Makefile set $(SHELLDEBUG); \ MASTERHASH=`cat config.X local.h \ | sed -n -e \ 's/^#define[ ]*LANGUAGES[ ][^}]*HASHFILES=\([^,}]*\).*$$/\1/p' \ | sed -n -e '$$p'`; \ HASHSUFFIX=`cat config.X local.h \ | sed -n -e \ 's/^#define[ ]*HASHSUFFIX[ ]*"\(.*\)"/\1/p' \ | sed -n -e '$$p'`; \ case "$$MASTERHASH" in \ american*|british*) DEFHASH="english$$HASHSUFFIX";; \ *) DEFHASH="$$MASTERHASH";; \ esac; \ DEFLANG=`expr "$$DEFHASH" : '\(.*\)\..*$$'`.aff; \ echo "/* This file is generated by the Makefile. Don't edit it! */" \ > defhash.h; \ echo '' >> defhash.h; \ echo '#ifndef MASTERHASH' >> defhash.h; \ echo '#define MASTERHASH "'"$$MASTERHASH"'"' >> defhash.h; \ echo '#endif' >> defhash.h; \ echo '#ifndef DEFHASH' >> defhash.h; \ echo '#define DEFHASH "'"$$DEFHASH"'"' >> defhash.h; \ echo '#endif' >> defhash.h; \ echo '#ifndef DEFLANG' >> defhash.h; \ echo '#define DEFLANG "'"$$DEFLANG"'"' >> defhash.h; \ echo '#endif' >> defhash.h config.sh: config.X defhash.h local.h Makefile set $(SHELLDEBUG); \ for var in BAKEXT BINDIR CC CFLAGS COUNTSUFFIX DEFDICT DEFHASH \ DEFLANG EXEEXT HASHSUFFIX INSTALL \ LANGUAGES LIBDIR LIBES LINK LINT LINTFLAGS LOOK_XREF \ MAKE_SORTTMP MAN1DIR MAN1EXT MAN45DIR MAN45EXT MAN45SECT MASTERHASH \ MSGLANG POUNDBANG REGLIB STATSUFFIX \ SPELL_XREF TERMLIB TIB_XREF WORDS YACC \ ; do \ cat config.X defhash.h local.h \ | sed -n -e "s/^#define[ ]*$$var[ ]*"'"'"/$$var=/p" \ | sed -e 's/"[^"]*$$/'"'/" -e "s/=/='/" -e 's/\\"/"/g' \ | sed -n -e '$$p'; \ done > config.sh; \ echo 'case "$$MAKE_SORTTMP" in "") \ SORTTMP="-e /!!SORTTMP!!/s/=.*$$/=/";; *) SORTTMP=;; esac' \ >> config.sh doedit: . ./config.sh; \ set $(SHELLDEBUG); \ VERSION=`sed -n \ '/International Ispell/s/^.*\(International .*\)".*$$/\1/p' \ version.h`; \ sed \ -e "s@!!BAKEXT!!@$$BAKEXT@g" \ -e "s@!!COUNTSUFFIX!!@$$COUNTSUFFIX@g" \ -e "s@!!DEFHASH!!@$$DEFHASH@" -e "s@!!DEFLANG!!@$$DEFLANG@" \ -e "s@!!HASHSUFFIX!!@$$HASHSUFFIX@g" \ -e "s@!!LIBDIR!!@$$LIBDIR@" -e "s@!!DEFDICT!!@$$DEFDICT@" \ -e "s@!!LOOK_XREF!!@$$LOOK_XREF@g" \ -e "s@!!MAN45SECT!!@$$MAN45SECT@g" \ -e "s@!!POUNDBANG!!@$$POUNDBANG@g" \ -e "s@!!SPELL_XREF!!@$$SPELL_XREF@g" \ -e "s@!!STATSUFFIX!!@$$STATSUFFIX@g" \ -e "s@!!TIB_XREF!!@$$TIB_XREF@g" \ -e "s@!!WORDS!!@$$WORDS@g" \ -e "s@!!VERSION!!@$$VERSION@g" \ $$SORTTMP < $(EDITFILE) > $(OUTFILE) findaffix: findaffix.X config.sh @$(MAKE) EDITFILE=findaffix.X OUTFILE=findaffix doedit chmod +x findaffix ispell.1: ispell.1X config.sh @$(MAKE) EDITFILE=ispell.1X OUTFILE=ispell.1 SHELLDEBUG=$(SHELLDEBUG) \ doedit ispell.5: ispell.5X config.sh @$(MAKE) EDITFILE=ispell.5X OUTFILE=ispell.5 SHELLDEBUG=$(SHELLDEBUG) \ doedit munchlist: munchlist.X config.sh @$(MAKE) EDITFILE=munchlist.X OUTFILE=munchlist \ SHELLDEBUG=$(SHELLDEBUG) doedit chmod +x munchlist subset: subset.X config.sh @$(MAKE) EDITFILE=subset.X OUTFILE=subset SHELLDEBUG=$(SHELLDEBUG) \ doedit chmod +x subset tryaffix: tryaffix.X config.sh @$(MAKE) EDITFILE=tryaffix.X OUTFILE=tryaffix \ SHELLDEBUG=$(SHELLDEBUG) doedit chmod +x tryaffix zapdups: zapdups.X config.sh @$(MAKE) EDITFILE=zapdups.X OUTFILE=zapdups SHELLDEBUG=$(SHELLDEBUG) \ doedit chmod +x zapdups # # We put term.o first because it is the most common cause of # compilation errors. Ispell.o is listed second because it's the main # program. The remainder of the object files are listed # alphabetically. # OBJS = term.o ispell.o correct.o defmt.o dump.o exp_table.o fields.o \ good.o lookup.o hash.o makedent.o tgood.o tree.o xgets.o # # A special rule for term.o to suggest configuration changes # term.o: term.c @. ./config.sh; \ echo $$CC $$CFLAGS -c term.c 1>&2; \ $$CC $$CFLAGS -c term.c \ || (echo \ "term.c wouldn't compile. Try inverting USG in local.h" \ 1>&2; \ exit 1) ispell: config.sh $(OBJS) @. ./config.sh; \ set -x; \ $$CC $$CFLAGS -o ispell $(OBJS) $$TERMLIB $$REGLIB $$LIBES sq: config.sh msgs.h sq.c @@. ./config.sh; \ set -x; \ $$CC $$CFLAGS -o sq sq.c unsq: config.sh msgs.h unsq.c @@. ./config.sh; \ set -x; \ $$CC $$CFLAGS -o unsq unsq.c $(OBJS) buildhash.o icombine.o hash.o parse.o: config.h ispell.h local.h $(OBJS) buildhash.o icombine.o hash.o parse.o: proto.h msgs.h config.sh $(OBJS) buildhash.o icombine.o hash.o parse.o: defhash.h exp_table.o tgood.o: exp_table.h fields.o: fields.h ijoin.o: config.sh config.h ispell.h local.h ijoin.o: proto.h fields.h buildhash.o correct.o ispell.o: version.h config.h: config.X local.h cp config.X config.h chmod u+w config.h echo '' >> config.h echo '/* AUTOMATICALLY-GENERATED SYMBOLS */' >> config.h cat local.h config.X \ | egrep '^#define[ ]*SIGNAL_TYPE' \ | sed -e 's/TYPE[ ]*/TYPE_STRING "/' -e 's/$$/"/' -e 1q \ >> config.h cat local.h config.X \ | egrep '^#define[ ]*MASKTYPE' \ | sed -e 's/TYPE[ ]*/TYPE_STRING "/' -e 's/$$/"/' -e 1q \ >> config.h # Create a sample local.h if no such file currently exists local.h: set +e; \ [ -r local.h ] || (cp local.h.generic local.h; chmod u+w local.h) msgs.h: config.sh FRC @. ./config.sh; \ set $(SHELLDEBUG); \ set +e; \ if [ -r languages/$$MSGLANG/msgs.h ]; then \ msgs=languages/$$MSGLANG/msgs.h; \ else \ msgs=languages/english/msgs.h; \ fi; \ if cmp -s msgs.h $$msgs; then \ :; \ else \ set -x; \ rm -f msgs.h; $$LINK -s $$msgs msgs.h || cp $$msgs msgs.h; \ fi FRC: tags: config.h *.[chy] ctags -w -t *.[chy] sed -e s/config.h/config.X/ tags > ntags mv ntags tags TAGS: config.h *.[chy] etags *.[chy] sed -e s/config.h/config.X/ TAGS > NTAGS mv NTAGS TAGS # # The funny business with y_tab.c is necessary for MS-DOS systems, # where filenames can't have multiple periods. # lint: languages/*/msgs.h lint: config.sh config.h ispell.h proto.h *.[cy] @. ./config.sh; \ $$LINT $$LINTFLAGS ispell.c correct.c defmt.c dump.c exp_table.c \ good.c hash.c lookup.c makedent.c tgood.c term.c tree.c xgets.c; \ $$YACC parse.y; \ [ -f y_tab.c ] || mv y.tab.c y_tab.c; \ $$LINT $$LINTFLAGS buildhash.c hash.c makedent.c y_tab.c; \ $$LINT $$LINTFLAGS icombine.c makedent.c y_tab.c; \ $$LINT $$LINTFLAGS ijoin.c fields.c @rm -f y_tab.c clean: config.sh clean-deformatters clean-languages @. ./config.sh; \ set -x; \ rm -f $$DEFHASH $$FOREIGNHASHES rm -f *.o core a.out mon.out hash.out y.tab.c y_tab.c *.stat *.cnt \ config.h defhash.h msgs.h unpacked rm -f buildhash findaffix tryaffix ispell icombine ijoin \ munchlist subset sq unsq zapdups ispell.1 ispell.5 ispell.info clean-deformatters: cd deformatters; $(MAKE) clean clean-languages: $(MAKE) LANGUAGE_TARGET=clean SHELLDEBUG=$(SHELLDEBUG) language-subdirs realclean veryclean: clean dictclean rm -f config.sh # # The following target allows you to clean out the combined # dictionary files. For safety, so you don't lose your files, # it makes sure that there is something to work from, but it can # only be so smart, so be careful! # dictclean: $(MAKE) LANGUAGE_TARGET=dictclean SHELLDEBUG=$(SHELLDEBUG) \ language-subdirs ispell-3.4.02/PaxHeaders.22185/tree.c0000644000000000000000000000007410332503153013731 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/tree.c0000444003214100001440000005336310332503153015007 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: tree.c,v 1.66 2005/04/14 14:43:46 geoff Exp $"; #endif /* * tree.c - a hash style dictionary for user's personal words * * Pace Willisson, 1983 * Hash support added by Geoff Kuenning, 1987 * * Copyright 1987-1989, 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, * Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: tree.c,v $ * Revision 1.66 2005/04/14 14:43:46 geoff * Update copyright * * Revision 1.65 2005/04/14 14:38:23 geoff * Update license. Don't segfault if HOME is unset in the environment * and PDICTHOME isn't set in config.X * * Revision 1.64 2001/09/06 00:30:29 geoff * Many changes from Eli Zaretskii to support DJGPP compilation. * * Revision 1.63 2001/07/25 21:51:46 geoff * Minor license update. * * Revision 1.62 2001/07/23 20:24:04 geoff * Update the copyright and the license. * * Revision 1.61 2000/08/22 10:52:25 geoff * Fix some compiler warnings. * * Revision 1.60 2000/06/26 20:43:50 geoff * Fix a minor lint bug. If HOME is unset, still attempt to find the * personal dictionary using all ways that don't depend on HOME (in * particular, the -p switch). * * Revision 1.59 1999/01/18 03:28:45 geoff * Turn many char declarations into unsigned char, so that we won't have * sign-extension problems. * * Revision 1.58 1999/01/07 01:57:46 geoff * Update the copyright. * * Revision 1.57 1997/12/02 06:25:11 geoff * Get rid of some compile options that really shouldn't be optional. * * Revision 1.56 1995/01/08 23:23:49 geoff * Support PDICTHOME for DOS purposes. * * Revision 1.55 1994/10/25 05:46:27 geoff * Fix a comment that looked to some compilers like it might be nested. * * Revision 1.54 1994/01/25 07:12:15 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include #include #include "config.h" #include "ispell.h" #include "proto.h" #include "msgs.h" void treeinit P ((char * p, char * LibDict)); static FILE * trydict P ((char * dictname, char * home, char * prefix, char * suffix)); static void treeload P ((FILE * dictf)); void treeinsert P ((unsigned char * word, int wordlen, int keep)); static struct dent * tinsert P ((struct dent * proto)); struct dent * treelookup P ((ichar_t * word)); #if SORTPERSONAL != 0 static int pdictcmp P ((struct dent ** enta, struct dent **entb)); #endif /* SORTPERSONAL != 0 */ void treeoutput P ((void)); VOID * mymalloc P ((unsigned int size)); void myfree P ((VOID * ptr)); #ifdef REGEX_LOOKUP char * do_regex_lookup P ((char * expr, int whence)); #endif /* REGEX_LOOKUP */ static int cantexpand = 0; /* NZ if an expansion fails */ static struct dent * pershtab; /* Aux hash table for personal dict */ static int pershsize = 0; /* Space available in aux hash table */ static int hcount = 0; /* Number of items in hash table */ /* * Hash table sizes. Prime is probably a good idea, though in truth I * whipped the algorithm up on the spot rather than looking it up, so * who knows what's really best? If we overflow the table, we just * use a double-and-add-1 algorithm. */ static int goodsizes[] = { 53, 223, 907, 3631 }; static char personaldict[MAXPATHLEN]; static FILE * dictf; static int newwords = 0; void treeinit (p, LibDict) char * p; /* Value specified in -p switch */ char * LibDict; /* Root of default dict name */ { int abspath; /* NZ if p is abs path name */ char * h; /* Home directory name */ char seconddict[MAXPATHLEN]; /* Name of secondary dict */ FILE * secondf; /* Access to second dict file */ /* ** If -p was not specified, try to get a default name from the ** environment. After this point, if p is null, the the value in ** personaldict is the only possible name for the personal dictionary. ** If p is non-null, then there is a possibility that we should ** prepend HOME to get the correct dictionary name. */ if (p == NULL) p = getenv (PDICTVAR); /* ** Figure out the user's home. If HOME is unset (which can happen ** if ispell is invoked unusually, such as from a daemon), we ** won't look for any HOME personal dictionaries. Exception: If ** PDICTHOME is set, we use it as a default for HOME. */ if ((h = getenv (HOME)) == NULL) { #ifdef PDICTHOME h = PDICTHOME; #endif /* PDICTHOME */ } if (p == NULL) { /* * No -p and no PDICTVAR. We will use LibDict and DEFPAFF to * figure out the name of the personal dictionary and where it * is. The rules are as follows: * * (1) If there is a local dictionary and a HOME dictionary, * both are loaded, but changes are saved in the local one. * The dictionary to save changes in is named "personaldict". * (2) Dictionaries named after the affix file take precedence * over dictionaries with the default suffix (DEFPAFF). * (3) Dictionaries named with the new default names * (DEFPDICT/DEFPAFF) take precedence over the old ones * (OLDPDICT/OLDPAFF). * (4) Dictionaries aren't combined unless they follow the same * naming scheme. * (5) If no dictionary can be found, a new one is created in * the home directory, named after DEFPDICT and the affix * file. */ dictf = trydict (personaldict, (char *) NULL, DEFPDICT, LibDict); if (h == NULL) secondf = NULL; else secondf = trydict (seconddict, h, DEFPDICT, LibDict); if (dictf == NULL && secondf == NULL) { dictf = trydict (personaldict, (char *) NULL, DEFPDICT, DEFPAFF); if (h != NULL) secondf = trydict (seconddict, h, DEFPDICT, DEFPAFF); } if (dictf == NULL && secondf == NULL) { dictf = trydict (personaldict, (char *) NULL, OLDPDICT, LibDict); if (h != NULL) secondf = trydict (seconddict, h, OLDPDICT, LibDict); } if (dictf == NULL && secondf == NULL) { dictf = trydict (personaldict, (char *) NULL, OLDPDICT, OLDPAFF); if (h != NULL) secondf = trydict (seconddict, h, OLDPDICT, OLDPAFF); } if (personaldict[0] == '\0') { if (seconddict[0] != '\0') (void) strcpy (personaldict, seconddict); else (void) sprintf (personaldict, "%s/%s%s", h == NULL ? "" : h, DEFPDICT, LibDict); } if (dictf != NULL) { treeload (dictf); (void) fclose (dictf); } if (secondf != NULL) { treeload (secondf); (void) fclose (secondf); } } else { /* ** Figure out if p is an absolute path name. Note that beginning ** with "./" and "../" is considered an absolute path, since this ** still means we can't prepend HOME. */ abspath = IS_SLASH (*p) || strncmp (p, "./", 2) == 0 || strncmp (p, "../", 3) == 0; #ifdef MSDOS /* ** DTRT with drive-letter braindamage and with backslashes. */ abspath |= strncmp (p, ".\\", 2) == 0 || strncmp (p, "..\\", 3) == 0 || (p[0] != '\0' && p[1] == ':'); #endif if (abspath) { (void) strcpy (personaldict, p); if ((dictf = fopen (personaldict, "r")) != NULL) { treeload (dictf); (void) fclose (dictf); } } else { /* ** The user gave us a relative pathname. We will try it ** locally, and if that doesn't work, we'll try the home ** directory. If neither exists, it will be created in ** the home directory if words are added, unless HOME was ** unset, in which case the relative pathname will be used ** as a creation point. */ (void) strcpy (personaldict, p); if ((dictf = fopen (personaldict, "r")) != NULL) { treeload (dictf); (void) fclose (dictf); } else if (!abspath && h != NULL) { /* Try the home */ (void) sprintf (personaldict, "%s/%s", h, p); if ((dictf = fopen (personaldict, "r")) != NULL) { treeload (dictf); (void) fclose (dictf); } } /* * If dictf is null, we couldn't open the dictionary * specified in the -p switch. Complain. */ if (dictf == NULL) { (void) fprintf (stderr, CANT_OPEN, p, MAYBE_CR (stderr)); perror (""); return; } } } if (!lflag && !aflag && access (personaldict, W_OK) < 0 && errno != ENOENT) { (void) fprintf (stderr, TREE_C_CANT_UPDATE, personaldict, MAYBE_CR (stderr)); (void) sleep ((unsigned) 2); } } /* * Try to open a dictionary. As a side effect, leaves the dictionary * name in "filename" if one is found, and leaves a null string there * otherwise. */ static FILE * trydict (filename, home, prefix, suffix) char * filename; /* Where to store the file name */ char * home; /* Home directory */ char * prefix; /* Prefix for dictionary */ char * suffix; /* Suffix for dictionary */ { FILE * dictf; /* Access to dictionary file */ if (home == NULL) (void) sprintf (filename, "%s%s", prefix, suffix); else (void) sprintf (filename, "%s/%s%s", home, prefix, suffix); dictf = fopen (filename, "r"); if (dictf == NULL) filename[0] = '\0'; return dictf; } static void treeload (loadfile) register FILE * loadfile; /* File to load words from */ { char buf[BUFSIZ]; /* Buffer for reading pers dict */ while (fgets (buf, sizeof buf, loadfile) != NULL) treeinsert ((unsigned char *) buf, sizeof buf, 1); newwords = 0; } void treeinsert (word, wordlen, keep) unsigned char * word; /* Word to insert - must be canonical */ int wordlen; /* Length of the word buffer */ int keep; { register unsigned int i; struct dent wordent; register struct dent * dp; struct dent * olddp; struct dent * newdp; struct dent * oldhtab; unsigned int oldhsize; ichar_t nword[INPUTWORDLEN + MAXAFFIXLEN]; int isvariant; /* * Expand hash table when it is MAXPCT % full. */ if (!cantexpand && (hcount * 100) / MAXPCT >= pershsize) { oldhsize = pershsize; oldhtab = pershtab; for (i = 0; i < sizeof goodsizes / sizeof (goodsizes[0]); i++) { if (goodsizes[i] > pershsize) break; } if (i >= sizeof goodsizes / sizeof goodsizes[0]) pershsize += pershsize + 1; else pershsize = goodsizes[i]; pershtab = (struct dent *) calloc ((unsigned) pershsize, sizeof (struct dent)); if (pershtab == NULL) { (void) fprintf (stderr, TREE_C_NO_SPACE, MAYBE_CR (stderr)); /* * Try to continue anyway, since our overflow * algorithm can handle an overfull (100%+) table, * and the malloc very likely failed because we * already have such a huge table, so small mallocs * for overflow entries will still work. */ if (oldhtab == NULL) exit (1); /* No old table, can't go on */ (void) fprintf (stderr, TREE_C_TRY_ANYWAY, MAYBE_CR (stderr)); cantexpand = 1; /* Suppress further messages */ pershsize = oldhsize; /* Put things back */ pershtab = oldhtab; /* ... */ newwords = 1; /* And pretend it worked */ } else { /* * Re-insert old entries into new table */ for (i = 0; i < oldhsize; i++) { dp = &oldhtab[i]; if (dp->flagfield & USED) { newdp = tinsert (dp); isvariant = (dp->flagfield & MOREVARIANTS); dp = dp->next; while (dp != NULL) { if (isvariant) { isvariant = dp->flagfield & MOREVARIANTS; olddp = newdp->next; newdp->next = dp; newdp = dp; dp = dp->next; newdp->next = olddp; } else { isvariant = dp->flagfield & MOREVARIANTS; newdp = tinsert (dp); olddp = dp; dp = dp->next; free ((char *) olddp); } } } } if (oldhtab != NULL) free ((char *) oldhtab); } } /* ** We're ready to do the insertion. Start by creating a sample ** entry for the word. */ if (makedent (word, wordlen, &wordent) < 0) return; /* Word must be too big or something */ if (keep) wordent.flagfield |= KEEP; /* ** Now see if word or a variant is already in the table. We use the ** capitalized version so we'll find the header, if any. **/ (void) strtoichar (nword, word, sizeof nword, 1); upcase (nword); if ((dp = lookup (nword, 1)) != NULL) { /* It exists. Combine caps and set the keep flag. */ if (combinecaps (dp, &wordent) < 0) { free (wordent.word); return; } } else { /* It's new. Insert the word. */ dp = tinsert (&wordent); if (captype (dp->flagfield) == FOLLOWCASE) (void) addvheader (dp); } newwords |= keep; } static struct dent * tinsert (proto) struct dent * proto; /* Prototype entry to copy */ { ichar_t iword[INPUTWORDLEN + MAXAFFIXLEN]; register int hcode; register struct dent * hp; /* Next trial entry in hash table */ register struct dent * php; /* Prev. value of hp, for chaining */ if (strtoichar (iword, proto->word, sizeof iword, 1)) (void) fprintf (stderr, WORD_TOO_LONG ((char *) proto->word)); hcode = hash (iword, pershsize); php = NULL; hp = &pershtab[hcode]; if (hp->flagfield & USED) { while (hp != NULL) { php = hp; hp = hp->next; } hp = (struct dent *) calloc (1, sizeof (struct dent)); if (hp == NULL) { (void) fprintf (stderr, TREE_C_NO_SPACE, MAYBE_CR (stderr)); exit (1); } } *hp = *proto; if (php != NULL) php->next = hp; hp->next = NULL; return hp; } struct dent * treelookup (word) register ichar_t * word; { register int hcode; register struct dent * hp; char chword[INPUTWORDLEN + MAXAFFIXLEN]; if (pershsize <= 0) return NULL; (void) ichartostr ((unsigned char *) chword, word, sizeof chword, 1); hcode = hash (word, pershsize); hp = &pershtab[hcode]; while (hp != NULL && (hp->flagfield & USED)) { if (strcmp (chword, (char *) hp->word) == 0) break; while (hp->flagfield & MOREVARIANTS) hp = hp->next; hp = hp->next; } if (hp != NULL && (hp->flagfield & USED)) return hp; else return NULL; } #if SORTPERSONAL != 0 /* Comparison routine for sorting the personal dictionary with qsort */ static int pdictcmp (enta, entb) struct dent ** enta; struct dent ** entb; { /* The parentheses around *enta and *entb below are NECESSARY! ** Otherwise the compiler reads it as *(enta->word), or ** enta->word[0], which is illegal (but pcc takes it and ** produces wrong code). **/ return casecmp ((*enta)->word, (*entb)->word, 1); } #endif void treeoutput () { register struct dent * cent; /* Current entry */ register struct dent * lent; /* Linked entry */ #if SORTPERSONAL != 0 int pdictsize; /* Number of entries to write */ struct dent ** sortlist; /* List of entries to be sorted */ register struct dent ** sortptr; /* Handy pointer into sortlist */ #endif register struct dent * ehtab; /* End of pershtab, for fast looping */ if (newwords == 0) return; if ((dictf = fopen (personaldict, "w")) == NULL) { (void) fprintf (stderr, CANT_CREATE, personaldict, MAYBE_CR (stderr)); return; } #if SORTPERSONAL != 0 /* ** If we are going to sort the personal dictionary, we must know ** how many items are going to be sorted. */ pdictsize = 0; if (hcount >= SORTPERSONAL) sortlist = NULL; else { for (cent = pershtab, ehtab = pershtab + pershsize; cent < ehtab; cent++) { for (lent = cent; lent != NULL; lent = lent->next) { if ((lent->flagfield & (USED | KEEP)) == (USED | KEEP)) pdictsize++; while (lent->flagfield & MOREVARIANTS) lent = lent->next; } } for (cent = hashtbl, ehtab = hashtbl + hashsize; cent < ehtab; cent++) { if ((cent->flagfield & (USED | KEEP)) == (USED | KEEP)) { /* ** We only want to count variant headers ** and standalone entries. These happen ** to share the characteristics in the ** test below. This test will appear ** several more times in this routine. */ if (captype (cent->flagfield) != FOLLOWCASE && cent->word != NULL) pdictsize++; } } sortlist = (struct dent **) malloc (pdictsize * sizeof (struct dent)); } if (sortlist == NULL) { #endif for (cent = pershtab, ehtab = pershtab + pershsize; cent < ehtab; cent++) { for (lent = cent; lent != NULL; lent = lent->next) { if ((lent->flagfield & (USED | KEEP)) == (USED | KEEP)) { toutent (dictf, lent, 1); while (lent->flagfield & MOREVARIANTS) lent = lent->next; } } } for (cent = hashtbl, ehtab = hashtbl + hashsize; cent < ehtab; cent++) { if ((cent->flagfield & (USED | KEEP)) == (USED | KEEP)) { if (captype (cent->flagfield) != FOLLOWCASE && cent->word != NULL) toutent (dictf, cent, 1); } } #if SORTPERSONAL != 0 return; } /* ** Produce dictionary in sorted order. We used to do this ** destructively, but that turns out to fail because in some modes ** the dictionary is written more than once. So we build an ** auxiliary pointer table (in sortlist) and sort that. This ** is faster anyway, though it uses more memory. */ sortptr = sortlist; for (cent = pershtab, ehtab = pershtab + pershsize; cent < ehtab; cent++) { for (lent = cent; lent != NULL; lent = lent->next) { if ((lent->flagfield & (USED | KEEP)) == (USED | KEEP)) { *sortptr++ = lent; while (lent->flagfield & MOREVARIANTS) lent = lent->next; } } } for (cent = hashtbl, ehtab = hashtbl + hashsize; cent < ehtab; cent++) { if ((cent->flagfield & (USED | KEEP)) == (USED | KEEP)) { if (captype (cent->flagfield) != FOLLOWCASE && cent->word != NULL) *sortptr++ = cent; } } /* Sort the list */ qsort ((char *) sortlist, (unsigned) pdictsize, sizeof (sortlist[0]), (int (*) P ((const void *, const void *))) pdictcmp); /* Write it out */ for (sortptr = sortlist; --pdictsize >= 0; ) toutent (dictf, *sortptr++, 1); free ((char *) sortlist); #endif newwords = 0; (void) fclose (dictf); } VOID * mymalloc (size) unsigned int size; { return malloc ((unsigned) size); } void myfree (ptr) VOID * ptr; { if (hashstrings != NULL && (unsigned char *) ptr >= hashstrings && (unsigned char *) ptr <= hashstrings + hashheader.stringsize) return; /* Can't free stuff in hashstrings */ free (ptr); } #ifdef REGEX_LOOKUP /* check the hashed dictionary for words matching the regex. return the */ /* a matching string if found else return NULL */ char * do_regex_lookup (expr, whence) char * expr; /* regular expression to use in the match */ int whence; /* 0 = start at the beg with new regx, else */ /* continue from cur point w/ old regex */ { static struct dent * curent; static int curindex; static struct dent * curpersent; static int curpersindex; static REGCTYPE cmp_expr = (REGCTYPE) NULL; char dummy[INPUTWORDLEN + MAXAFFIXLEN]; ichar_t * is; if (whence == 0) { is = strtosichar (expr, 0); upcase (is); expr = ichartosstr (is, 1); REGFREE (cmp_expr); /* free previous compiled pattern, if any */ cmp_expr = REGCMP (cmp_expr, expr); curent = hashtbl; curindex = 0; curpersent = pershtab; curpersindex = 0; } /* search the dictionary until the word is found or the words run out */ for ( ; curindex < hashsize; curent++, curindex++) { if (curent->word != NULL && REGEX (cmp_expr, (char *) curent->word, dummy) != NULL) { curindex++; /* Everybody's gotta write a wierd expression once in a while! */ return (char *) curent++->word; } } /* Try the personal dictionary too */ for ( ; curpersindex < pershsize; curpersent++, curpersindex++) { if ((curpersent->flagfield & USED) != 0 && curpersent->word != NULL && REGEX (cmp_expr, (char *) curpersent->word, dummy) != NULL) { curpersindex++; /* Everybody's gotta write a wierd expression once in a while! */ return curpersent++->word; } } return NULL; } #endif /* REGEX_LOOKUP */ ispell-3.4.02/PaxHeaders.22185/addons0000644000000000000000000000013213776416114014033 xustar0030 mtime=1610226764.421065341 30 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/addons/0000755003214100001440000000000013776416114015163 5ustar00geofffaculty00000000000000ispell-3.4.02/addons/PaxHeaders.22185/nextispell0000644000000000000000000000013213776416114016222 xustar0030 mtime=1610226764.421065341 30 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/addons/nextispell/0000755003214100001440000000000013776416114017352 5ustar00geofffaculty00000000000000ispell-3.4.02/addons/nextispell/PaxHeaders.22185/services.template0000644000000000000000000000007410227330437021653 xustar0030 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/addons/nextispell/services.template0000444003214100001440000000007710227330437022723 0ustar00geofffaculty00000000000000Spell Checker: ispell Language: English Executable: nextispell ispell-3.4.02/addons/nextispell/PaxHeaders.22185/README0000644000000000000000000000007410227330435017151 xustar0030 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/addons/nextispell/README0000444003214100001440000000435310227330435020222 0ustar00geofffaculty00000000000000 **** nextispell ******* Release 0.5, 3rd of January 1995 This is a new improved release of the former internationalspell, a spell service for the NeXT spell panel (like the one in Edit). The new release is quicker and more reliable. by Moritz Willers (willers@butp.unibe.ch (NeXTMail)) University of Berne Institute for Theoretical Physics Switzerland To install just type: configure. To make TeX-style parsing be the default, use "configure -t". (You will have to make two configure runs to get both TeX-style and nroff-style parsing.) To install in the system-wide /LocalLibrary rather than in your personal ~/Library, you must be root, and use "configure -r" or "configure -r -t". You need to have ispell installed with the corresponding hash files to make use of this spell server (The spell server invokes ispell and communicates with it via a pipe). Major advantage: based on ispell -> you can spellcheck any language!! Major disadvantage: I can't think of any (no more) except that it still isn't as fast as I would like it to be to be more specific: - you can spellcheck in TeX mode - you can spell any language you've got or produced a wordlist and a *.aff file for - ispell can be a bit of a pain to install to be found at cs.orst.edu in /pub/next/binaries/util/nextispell.tar.gz Thanks to Detlev Droege and Geoff Kuenning for new ideas and thanks to Christoph Hauert for his ever patient help. **************** Internal: The spellserver gives ispell the text to correct bout 80 characters at a time now, this makes it faster now. However with a huge hash file, like the german one, ispell is still rather slow. From time to time the program still hangs because the reading on a pipe would block. You will find this error in the Console. Modify the code as you like and if you come up with anything better let me know it. The configuration scripts haven't been improved yet. *** Some words about ispell: *** You can get ispell from (thanks to Geoff Kuenning) ftp.cs.ucla.edu /pub/ispell Current version: International Ispell Version 3.1.00, 12/21/93 Be sure to get ispell 3.1 and not 4.0 which is something completely different and doesn't work with my program. ispell-3.4.02/addons/nextispell/PaxHeaders.22185/configure.h.template0000644000000000000000000000007410227330436022236 xustar0030 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/addons/nextispell/configure.h.template0000444003214100001440000000015010227330436023276 0ustar00geofffaculty00000000000000#define VENDOR "ispell" #define LANGUAGE "English" #define ISPELL "ispell", "ispell", "-a", "-denglish" ispell-3.4.02/addons/nextispell/PaxHeaders.22185/nextispell.m0000644000000000000000000000007410227330436020637 xustar0030 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/addons/nextispell/nextispell.m0000444003214100001440000002433310227330436021710 0ustar00geofffaculty00000000000000/* nextispell.m */ /* * * Modify the code anyway you like and report changes * as well as any good ideas to me, willers@butp.unibe.ch * * written by Moritz Willers * */ #define DATE "4. Januar 1994\n" #define VERSION "Version 0.4\n" #import #import "configure.h" #define MAXBUFLEN 1024 struct pipe_with_buf { int fd; char *buf; }; mutex_t lock; char misspelled[MAXBUFLEN]; @interface Dictionaire:Object { int fromIspell, toIspell, fromDictionaire, toDictionaire; } - init; - free; - (BOOL)spellServer:(NXSpellServer *)sender findMisspelledWord:(int *)start length:(int *)length inLanguage:(const char *)language inTextStream:(id )textStream startingAt:(int)startPosition wordCount:(int *)number countOnly:(BOOL)flag; - (void)spellServer:(NXSpellServer *)sender suggestGuessesForWord:(const char *)word inLanguage:(const char *)language; @end @implementation Dictionaire /* ******************** private functions ************************ */ int makepipe(int *rd, int *wrt) { int piperesult, fildes[2]; piperesult = pipe(fildes); *rd = fildes[0]; *wrt = fildes[1]; return piperesult; } int secure_read(int d, char *buf, int nbytes) { /* someday I'm going to rewrite this using the select() call instead of a nonblocking fd */ int ret, reads = 0; do { ret = read(d, buf, nbytes-1); reads++; } while ((ret == -1) && (reads < 100000)); if (reads < 100000) { return ret; } else fprintf(stderr, "%s: Couldn't read from pipe: %s\n", *NXArgv, strerror(errno)); exit(1); } void empty_pipe(struct pipe_with_buf *pointerTopwb) { int len; int fd = pointerTopwb->fd; char buf[MAXBUFLEN]; char *bufptr; mutex_lock(lock); strcpy(buf, pointerTopwb->buf); bufptr = strrchr(buf, '\n'); if (bufptr) bufptr--; else bufptr = buf; while (*bufptr != '\n') { len = secure_read(fd, buf, MAXBUFLEN); buf[len] = '\0'; bufptr = strrchr(buf, '\n'); if (bufptr) bufptr--; else bufptr = buf; } mutex_unlock(lock); } /* ******************************************************************** */ - init { int fdstate; [super init]; lock = mutex_alloc(); *misspelled = '\0'; if (makepipe(&fromIspell,&toDictionaire)) { fprintf(stderr, "%s: Couldn't create pipe: %s\n", *NXArgv, strerror(errno)); [self free]; return nil; // init wasn't successful } if (makepipe(&fromDictionaire,&toIspell)) { fprintf(stderr, "%s: Couldn't create pipe: %s\n", *NXArgv, strerror(errno)); [self free]; return nil; // init wasn't successful } switch (fork()) { case -1: fprintf(stderr, "%s: Couldn't fork: %s\n", *NXArgv, strerror(errno)); [self free]; return nil; case 0: close(toIspell); close(fromIspell); if ( dup2(fromDictionaire, 0) == -1 ) fprintf(stderr, "%s: Error establishing read pipe: %s\n", *NXArgv, strerror(errno)); if ( dup2(toDictionaire, 1) == -1 ) fprintf(stderr, "%s: Error establishing write pipe: %s\n", *NXArgv, strerror(errno)); /* change child into ispell */ execlp(ISPELL, NULL); fprintf(stderr, "%s: Failed to exec ispellpipe: %s\n", *NXArgv, strerror(errno)); exit(1); default: close(fromDictionaire); close(toDictionaire); /* set fromIspell fd non blocking: */ fdstate = fcntl(fromIspell, F_GETFL, 0); fcntl(fromIspell, F_SETFL, fdstate|O_NDELAY); #ifdef TEX write(toIspell, "+\n", 2); #endif break; } return self; } - free { char eof = EOF; if (toIspell) { write(toIspell, &eof, 1); close(toIspell); } if (fromIspell) close(fromIspell); return [super free]; } /* *********************** delegate methods ************************* */ - (BOOL)spellServer:(NXSpellServer *)sender findMisspelledWord:(int *)start length:(int *)length inLanguage:(const char *)language inTextStream:(id )textStream startingAt:(int)startPosition wordCount:(int *)number countOnly:(BOOL)flag { char readbuf[MAXBUFLEN], writebuf[MAXBUFLEN]; char *readbufptr, *writebufptr; int otherlen, len; int offset, linelength = 0; char misspelledWord[MAXBUFLEN]; BOOL repeatLoop; struct pipe_with_buf pwb; if (flag) { *number = -1; /* is not able to do pure wordcounting */ return NO; } if ([textStream isAtEOTS]) return NO; mutex_lock(lock); /* to make sure the thread has emptied the pipe */ mutex_unlock(lock); readbufptr = readbuf; *start = startPosition; /* set stream outside a word */ [textStream readCharacters:readbufptr count:1]; while (!NXIsSpace(*readbufptr) && startPosition && ![textStream isAtEOTS]) { [textStream readCharacters:readbufptr count:1]; (*start)++; } if (*readbufptr == '\n') *readbufptr = ' '; readbufptr++; len = 1; /* main loop */ do { /* read the 80 characters form the text stream and complete the last word */ len += [textStream readCharacters:readbufptr count:80]; readbufptr = readbuf; readbufptr[len] = '\0'; while (*readbufptr) { if (*readbufptr == '\n') *readbufptr = ' '; readbufptr++; } if (len>=80) while (!(NXIsSpace(*(readbufptr-1)) || [textStream isAtEOTS])) { [textStream readCharacters:readbufptr count:1]; len++; if (*readbufptr == '\n') *readbufptr = ' '; readbufptr++; } *readbufptr++ = '\n'; *readbufptr = '\0'; linelength = len; len = 0; readbufptr = readbuf; /* send ispell the next ca. 80 chars */ write(toIspell, "^", 1); while (*readbufptr) write(toIspell, readbufptr++, 1); readbufptr = readbuf; repeatLoop = YES; do { otherlen = secure_read(fromIspell, writebuf, MAXBUFLEN); writebuf[otherlen] = '\0'; writebufptr = writebuf; while (writebufptr && *writebufptr) { /* make sure a whole line is ready to be processed */ while (!strchr(writebufptr, '\n')) { /* add more to the buffer */ strcpy(writebuf, writebufptr); writebufptr = strchr(writebuf, '\0'); otherlen = secure_read(fromIspell, writebufptr, MAXBUFLEN - strlen(writebuf)); writebufptr[otherlen] = '\0'; writebufptr = writebuf; } /* then process the line: */ switch(*writebufptr) { case '*': case '+': case '-': (*number)++; break; case '&': case '?': strcpy(misspelled, writebufptr); writebufptr += 2; sscanf(writebufptr, "%s %*d %d", misspelledWord, &offset); if ([sender isInUserDictionary:(const char *)misspelledWord caseSensitive:NO]) { (*number)++; break; } *length = strlen(misspelledWord); *start += offset - 1; pwb.fd = fromIspell; pwb.buf = writebuf; cthread_detach(cthread_fork( (cthread_fn_t)empty_pipe, (any_t)&pwb)); return YES; case '#': strcpy(misspelled, writebufptr); writebufptr += 2; sscanf(writebufptr, "%s %d", misspelledWord, &offset); if ([sender isInUserDictionary:(const char *)misspelledWord caseSensitive:NO]) { (*number)++; break; } *length = strlen(misspelledWord); *start += offset - 1; pwb.fd = fromIspell; pwb.buf = writebuf; cthread_detach(cthread_fork( (cthread_fn_t)empty_pipe, (any_t)&pwb)); return YES; case '\n': *start += linelength; linelength = 0; repeatLoop = NO; default: break; } writebufptr = strchr(writebufptr, '\n'); if (writebufptr) writebufptr++; } } while (repeatLoop); } while (![textStream isAtEOTS]); return NO; /* no misspelled words found */ } - (void)spellServer:(NXSpellServer *)sender suggestGuessesForWord:(const char *)word inLanguage:(const char *)language { int len, misscount; char buf[MAXBUFLEN]; char *bufptr, *guess; if (*misspelled) { bufptr = strchr(misspelled, '\n'); bufptr++; *bufptr = '\0'; switch (*misspelled) { case '&': case '?': bufptr = strchr(misspelled + 2, ' ') + 1; misscount = atoi(bufptr); bufptr = strchr(misspelled, ':'); while (bufptr != NULL && misscount > 0) { misscount--; guess = bufptr + 2; if (bufptr = strchr(guess, ',')) *bufptr = '\0'; else { bufptr = strchr(guess, '\n'); *bufptr = '\0'; bufptr = NULL; } [sender addGuess:guess]; } case '#': ; /* no guesses */ } *misspelled = '\0'; return; } /* else */ mutex_lock(lock); /* make sure that the pipe has been emptied */ mutex_unlock(lock); write(toIspell, "^", 1); write(toIspell, word, strlen(word)); write(toIspell, "\n", 1); bufptr = buf; *buf = '\0'; do { len = secure_read(fromIspell, bufptr, MAXBUFLEN - strlen(buf)); bufptr[len] = '\0'; if (strchr(buf, '\n') == strrchr(buf, '\n')) bufptr = strchr(buf, '\0'); else bufptr = buf; } while (!(*bufptr)); switch (*bufptr) { case '*': case '+': case '-': [sender addGuess:word]; break; case '&': case '?': bufptr = strchr(bufptr + 2, ' ') + 1; misscount = atoi(bufptr); bufptr = strchr(bufptr, ':'); while (bufptr != NULL && misscount > 0) { misscount--; guess = bufptr + 2; if (bufptr = strchr(guess, ',')) *bufptr = '\0'; else { bufptr = strchr(guess, '\n'); *bufptr = '\0'; bufptr = NULL; } [sender addGuess:guess]; } case '#': ; /* no guesses */ } return; } @end /* ************************** main ******************************* */ void main(int argc, char **argv) { NXSpellServer *aServer; if (argc > 1) { if (!strcmp((argv[1]), "-v")) { printf("nextispell by Moritz Willers\n"); printf("email: willers@butp.unibe.ch (NeXTMail)\n"); printf(VERSION); printf(DATE); exit(0); } else { fprintf(stderr, "Usage: %s [-v]\n", *argv); exit(0); } } aServer = [[NXSpellServer alloc] init]; if ([aServer registerLanguage:LANGUAGE byVendor:VENDOR]) { [aServer setDelegate:[[Dictionaire alloc] init]]; [aServer run]; fprintf(stderr, "Unexpected death of %s!\n", *argv); } else { fprintf(stderr, "Unable to check in %s.\n", *argv); } } ispell-3.4.02/addons/nextispell/PaxHeaders.22185/Makefile0000644000000000000000000000007410227330434017730 xustar0030 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/addons/nextispell/Makefile0000444003214100001440000000152210227330434020774 0ustar00geofffaculty00000000000000# # Makefile for nextispell. # # Created by Moritz Willers. # # 4. Januar 1994 # Version 0.2 # NAME = nextispell INSTALLDIR = ${HOME}/Library CFLAGS = -O -Wall all: ${NAME} rm -rf ${NAME}.service mkdir ${NAME}.service mv ${NAME} ${NAME}.service/ if [ -f services ]; then touch services; else cp services.template services; fi mv services ${NAME}.service/ strip ${NAME}.service/${NAME} ${NAME}: nextispell.m if [ -f configure.h ]; then touch configure.h; else cp configure.h.template configure.h; fi cc ${CFLAGS} -o ${NAME} nextispell.m -lNeXT_s rm -f configure.h install: all if [ -d $(INSTALLDIR)/Services/${NAME}.service ]; then rm -Rf $(INSTALLDIR)/Services/${NAME}.service/; fi cp -r ${NAME}.service $(INSTALLDIR)/Services/ rm -Rf ${NAME}.service echo "Don't forget to execute: make_services" clean: rm -Rf ${NAME}.service ispell-3.4.02/addons/nextispell/PaxHeaders.22185/configureTeX0000644000000000000000000000007410227330436020617 xustar0030 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/addons/nextispell/configureTeX0000555003214100001440000000044710227330436021673 0ustar00geofffaculty00000000000000#!/bin/sh # Moritz Willers # 21. September 1993 # Version 0.2 # # Usage: # USAGE='Usage: configureTeX [-r]' # # configureTeX is the same as running configure with the -t switch. # It is provided solely for backwards compatibility with previous # distributions of nextispell. # ./configure -t $* ispell-3.4.02/addons/nextispell/PaxHeaders.22185/configure0000644000000000000000000000007410227330435020175 xustar0030 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/addons/nextispell/configure0000555003214100001440000001363310227330435021252 0ustar00geofffaculty00000000000000#!/bin/csh # Moritz Willers # 21. September 1993 # Version 0.2 # # Usage: # set USAGE = 'Usage: configure [-r] [-t]' # # If run with the -r switch, you must be root, and nextispell will be # installed in /LocalLibrary rather than your personal Library. If # run with the -t switch, TeX support will be installed. Installing # both TeX and non-TeX support requires two runs, one with and one # without the -t switch. # set INSTALLDIR = ~/Library set spellname = spell set texsuff set stringchartype = 'NeXT' unset definetex while ( $#argv > 0 ) switch ($argv[1]) case '-r': set INSTALLDIR = /LocalLibrary breaksw case '-t': set spellname = texspell set texsuff = '-TeX' set stringchartype = 'tex' set definetex breaksw default: sh -c "echo '$USAGE' 1>&2" exit 1 breaksw endsw shift argv end echo "" echo "Let's see whether you've got ispell" ispell -vv > /dev/null if ($status) then echo "You must first install ispell before you can run this skript" exit 0 endif echo "Ok" echo "" echo "Looking for your hash files" set LIBDIR = `ispell -vv | grep LIBDIR | awk '{print $3}' | sed 'y/"/ /'` set files = `ls ${LIBDIR}` echo "There are:" foreach file ($files) if ($file:e == "hash") then echo " $file" endif end if ( ! -d ${INSTALLDIR}/Services) mkdir ${INSTALLDIR}/Services foreach file ($files) if ($file:e == "hash") then set name = ${file:r}${spellname} echo "" # # English variants are listed first because there are so many; # all other languages are listed alphabetically by the native # name, with the English name given second # # I don't know enough about the NeXT's international-language # support to know whether non-English dictionaries can be # insalled under the native language name, instead of the # English one, so the "deutsch" dictionary is installed as # "German" and so forth. European NeXT owners are welcome to # change this if they wish. # switch ("$file:r") case 'altamer': set longname = "Default Alternate American" breaksw case 'altamersml': set longname = "Alternate American, Small" breaksw case 'altamersml+': set longname = "Alternate American, Small-Plus" breaksw case 'altamermed': set longname = "Alternate American, Medium" breaksw case 'altamermed+': set longname = "Alternate American, Medium-Plus" breaksw case 'altamerlrg': set longname = "Alternate American, Large" breaksw case 'altamerlrg+': set longname = "Alternate American, Large-Plus" breaksw case 'altamerxlg': set longname = "Alternate American, Extra-Large" breaksw case 'altamerxlg+': set longname = "Alternate American, Extra-Large-Plus" breaksw case 'american': set longname = "Default American" breaksw case 'americansml': set longname = "American, Small" breaksw case 'americansml+': set longname = "American, Small-Plus" breaksw case 'americanmed': set longname = "American, Medium" breaksw case 'americanmed+': set longname = "American, Medium-Plus" breaksw case 'americanlrg': set longname = "American, Large" breaksw case 'americanlrg+': set longname = "American, Large-Plus" breaksw case 'americanxlg': set longname = "American, Extra-Large" breaksw case 'americanxlg+': set longname = "American, Extra-Large-Plus" breaksw case 'british': set longname = "Default British" breaksw case 'britishsml': set longname = "British, Small" breaksw case 'britishsml+': set longname = "British, Small-Plus" breaksw case 'britishmed': set longname = "British, Medium" breaksw case 'britishmed+': set longname = "British, Medium-Plus" breaksw case 'britishlrg': set longname = "British, Large" breaksw case 'britishlrg+': set longname = "British, Large-Plus" breaksw case 'britishxlg': set longname = "British, Extra-Large" breaksw case 'britishxlg+': set longname = "British, Extra-Large-Plus" breaksw case 'english': set longname = "Default English" breaksw case dansk: set longname = "Danish" breaksw case danish: set longname = "Danish" breaksw case deutsch: set longname = "German" breaksw case german: set longname = "German" breaksw case castellano: set longname = "Spanish" breaksw case espanol: set longname = "Spanish" breaksw case spanish: set longname = "Spanish" breaksw case francais: set longname = "French" breaksw case french: set longname = "French" breaksw case italiano: set longname = "Italian" breaksw case italian: set longname = "Italian" breaksw case nederlands: set longname = "Dutch" breaksw case dutch: set longname = "Dutch" breaksw case norsk: set longname = "Norwegian" breaksw case norwegian: set longname = "Norwegian" breaksw case portuguese: set longname = "Portuguese" breaksw case russkij: set longname = "Russian" breaksw case russian: set longname = "Russian" breaksw case svenska: set longname = "Swedish" breaksw case swedish: set longname = "Swedish" breaksw default: set longname = "$file:r" echo "$file:r is not a NeXT supported Language" echo "I will do my best to include it into the spell checker anyway" breaksw endsw echo "Making $longname${texsuff} ..." echo "Spell Checker: Ispell${texsuff}" > services echo "Language: $longname" >> services echo "Executable: $name" >> services echo '#define VENDOR "ispell'"${texsuff}"'"' > configure.h echo '#define LANGUAGE "'"$longname"'"' >> configure.h echo '#define ISPELL "ispell", "ispell", "-a", "-t", "-T.'"$stringchartype"'", "-d'"$file:r"'"' >> configure.h if ( $?definetex ) echo '#define TEX' >> configure.h make install INSTALLDIR=$INSTALLDIR NAME=$name > /dev/null endif end echo "" echo "Making services ..." make_services echo "" echo "I'm done." echo "" ispell-3.4.02/addons/PaxHeaders.22185/xspell.shar0000644000000000000000000000007410227330416016267 xustar0030 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/addons/xspell.shar0000444003214100001440000013303410227330416017337 0ustar00geofffaculty00000000000000# This is a shell archive. Remove anything before this line, # then unpack it by saving it in a file and typing "sh file". # # Wrapped by Philippe-Andre Prindeville on Fri Mar 4 17:17:24 1994 # # This archive contains: # README Makefile # Xspell.c buffer.h # app-defaults app-defaults.eng # app-defaults.fr look.c # LANG=""; export LANG PATH=/bin:/usr/bin:$PATH; export PATH echo x - README cat >README <<'@EOF' This is a very hastily done Motif front-end to ispell. It was done as an exercise to teach myself Motif. Judge for yourselves if I learned anything. Anyway, please send me bug fixes, etc. I will try to keep it up-to-date, but I make no promises. If someone wants to write German labels, I will include them, for instance. Note: you must have *proper* 8bit fonts for most of it to work, and not the trashy X11R4 fonts nor the broken hp_roman8 fonts. -Philip @EOF chmod 640 README echo x - Makefile cat >Makefile <<'@EOF' # CC = cc LINT = lint # Sun #DEFINES = -DSELECT_BROKEN #INCS = -I/sig/quartz/Motif-1.1.2/lib #LIBES = -L/sig/quartz/Motif-1.1.2/lib/Xm -lXm -L/sig/quartz/Motif-1.1.2/lib/Xt -lXt -L/sig/quartz/Motif-1.1.2/lib/X -lX11 # HP #DEFINES = -DSELECT_BROKEN -D_NO_PROTO -DDEBUG=1 DEFINES = -DSELECT_BROKEN -D_NO_PROTO #INCS = -I/usr/include/Motif1.1 -I/usr/include/X11R4 #LIBES = -L/usr/lib/Motif1.1 -lXm -L/usr/lib/X11R4 -lXt -lX11 INCS = -I/usr/include/Motif1.2 -I/usr/include/X11R5 LIBES = -L/usr/lib/Motif1.2 -lXm -L/usr/lib/X11R5 -lXt -lX11 CFLAGS = -g $(DEFINES) -I.. $(INCS) LINTFLAGS = $(DEFINES) -I.. $(INCS) X11LIB= /usr/local/lib/X11 X11BIN= /usr/local/bin/Xspell #install= install # # HP brain-death... install= /usr/local/bin/install Xspell: Xspell.o $(CC) $(CFLAGS) -o Xspell Xspell.o $(LIBES) Xspell.o: buffer.h install: install-app-defaults install-binaries install-app-defaults: cat app-defaults app-defaults.eng > foobar $(install) -o root -g sys -m 644 foobar $(X11LIB)/app-defaults/Xspell cat app-defaults app-defaults.fr > foobar $(install) -o root -g sys -m 644 foobar $(X11LIB)/french/app-defaults/Xspell rm foobar install-binaries: Xspell $(install) -o bin -g bin -m 755 Xspell $(X11BIN) release: tar cf - README Makefile Xspell.c buffer.h app* look.c | \ compress > Xspell.tar.Z shar README Makefile Xspell.c buffer.h app* look.c > Xspell.shar @EOF chmod 660 Makefile echo x - Xspell.c cat >Xspell.c <<'@EOF' static char *progid = "Xspell 1.0b, 1 May 92 philipp@res.enst.fr"; /* * Xspell: Philippe-Andre Prindeville, Telecom Paris 1 May 1992 * * This program tries to follow the interface offered by * conventional ispell, but with a window interface (Motif * in this case). The code is fairly simply and straight- * forward. I'm interested in ports to other toolkits, * bug fixes, suggestions, etc. * * The code for saving and backing up the files is perhaps * not entirely thought-out. I don't like the way vi does * its backups, but perhaps I should have found another way. * * Related to this is adding a mode to run as a filter. If * you have my patches to xmeditor, then you know that you * can pipe the selection through a filter. Thus, you could * use Xspell with xmeditor if Xspell had a stdin filter-mode. * Something to add on a rainy day. * * I will probably be accused of being fascist for hard-wiring * the window layout. Tant pis. * * Note: the MOTION code doesn't work. I was too lazy to get * it running... */ #include "config.h" #include "ispell.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define min(a,b) (((a)<=(b))?(a):(b)) #define MAXRESP BUFSIZ*8 #define NCOLS 5 /* max... */ #define NENTRIES 8 #undef DOMOTION #define LINELEN 100 #ifndef CUNCAP #define CUNCAP '&' #endif #ifndef SELECT_BROKEN #define HighlightText(text, from, to) XmTextSetSelection(text, from, to, 0L) #define UnhighlightText(text, from, to) XmTextClearSelection(text) #else #define HighlightText(text, from, to) XmTextSetHighlight(text, from, to, XmHIGHLIGHT_SELECTED) #define UnhighlightText(text, from, to) XmTextSetHighlight(text, from, to, XmHIGHLIGHT_NORMAL) #endif #include #include extern XtAppContext app_context; extern Widget toplevel; extern Widget actions; extern Widget fileName; extern Widget lineNumber; extern Widget offsetNumber; extern Widget text; extern Widget textedit; extern Widget list[]; extern Widget noBackupDialog; extern Widget isReadonlyDialog; extern Widget couldntSaveDialog; extern Widget tempIsDialog; extern Widget isModifiedDialog; typedef struct { int columns; String dictionary; String type; Boolean backup; Boolean haveCompounds; Boolean sortPossibilities; } AppData; static AppData app_data; #ifdef DEBUG #define dprintf printf #define dputc putchar #else #define dprintf _dprintf #define dputc(x) #endif #include "buffer.h" static FILE *srvout, *srvin = NULL; static char possibilities[MAXPOSSIBLE][INPUTWORDLEN + MAXAFFIXLEN]; static int quit, nslots, pcount; static short nlines; static buf_t buf; static char **filePtr = NULL; static int inputPending = 0; static int isBlocked = 0; #define Block() (isBlocked = 1) #define UnBlock() { isBlocked = 0; Parse(); } #ifdef DOMOTION static int ignoreMotion = 1; #endif extern void CheckLine(); extern void Correct(); extern void PostWarning(); static void getbuf(bp, offset) buf_t * bp; long offset; { char *nl; int ret; long size; if (bp->base) { XtFree(bp->base); bp->base = NULL; } if (offset >= bp->size) { bp->ptr = bp->base = NULL; return; } size = min(bp->size - offset, BUFSIZ); bp->base = (char *) XtMalloc(size + 1); /* count the \0 */ ret = XmTextGetSubstring(text, offset, size, size + 1, bp->base); assert(ret != XmCOPY_FAILED); bp->ptr = bp->base; bp->size += bp->delta; bp->offset = offset; bp->cnt = size; bp->delta = 0; bp->lineno++; bp->wordlen = -1; /* * perhaps if we don't find a \n, we should look for a space... */ nl = strchr(bp->base, '\n'); if (nl) bp->cnt = (++nl - bp->base); else bp->base[size] = '\n'; } static void PipeInputCb(dummy, fd, xtid) int dummy; int *fd; XtInputId *xtid; { inputPending = 1; while (! isBlocked) CheckLine(&buf); } static void Connect(w) Widget w; { int srv[2], clnt[2]; int pid, argc; char buf[BUFSIZ]; char *argv[10]; XtInputId *xtid; pipe(srv); pipe(clnt); switch (pid = fork()) { case -1: perror("fork"); exit(1); case 0: dup2(srv[0], 0); close(srv[0]); close(srv[1]); dup2(clnt[1], 1); close(clnt[0]); close(clnt[1]); argc = 0; argv[argc++] = "ispell"; argv[argc++] = "-d"; argv[argc++] = app_data.dictionary; argv[argc++] = "-T"; argv[argc++] = app_data.type; if (app_data.haveCompounds) argv[argc++] = "-C"; if (app_data.sortPossibilities) argv[argc++] = "-S"; argv[argc++] = "-a"; argv[argc++] = NULL; execvp("ispell", argv); perror("execl: ispell"); exit(1); default: close(clnt[1]); close(srv[0]); if (! (srvout = fdopen(srv[1], "w"))) { fprintf(stderr, "fdopen: cannot open stream\n"); exit(1); } if (! (srvin = fdopen(clnt[0], "r"))) { fprintf(stderr, "fdopen: cannot open stream\n"); exit(1); } xtid = XtAppAddInput(XtWidgetToApplicationContext(w), clnt[0], XtInputReadMask, (XtCallbackProc) PipeInputCb, NULL); break; } } static void SessionEnd() { WriteCmd(srvout, "#\n"); fclose(srvout); #if 0 fclose(srvin); #endif } static void ReadFile(path, bp) char *path; buf_t *bp; { struct stat st; char *str; XmString xstr; long size, n; FILE *infile; if (access(path, W_OK)) { bp->readonly = 1; PostWarning(&isReadonlyDialog, "isReadonlyDialog", NULL, False); } if (! (infile = fopen(path, "r"))) { perror(path); exit(1); } if (fstat(fileno(infile), &st)) { perror(path); exit(1); } size = st.st_size; if ((str = XtMalloc(size + 1)) == NULL) { fprintf(stderr, "%s: out of memory\n", path); exit(1); } if((n = fread(str, sizeof(char), size, infile)) != st.st_size) { fprintf(stderr, "%s: read is short\n", path); exit(1); } fclose(infile); str[size] = '\0'; XmTextSetString(text, str); XtFree(str); bp->base = bp->ptr = NULL; bp->offset = bp->cnt = bp->delta = 0; bp->lineno = -1; bp->size = size; bp->changed = 0; bp->filename = strdup(path); xstr = XmStringCreateSimple(path); XtVaSetValues(fileName, XmNlabelString, xstr, NULL); } static WriteFile (path, bp) char *path; buf_t *bp; { FILE *outfile; int n, size, offset; char *str; if (! (outfile = fopen(path, "w"))) { perror(path); return 1; } str = malloc(BUFSIZ + 1); for (offset = 0; offset < bp->size; offset += size) { size = BUFSIZ; if (offset + size > bp->size) size = bp->size - offset; XmTextGetSubstring(text, offset, size, size + 1, str); n = fwrite(str, sizeof(char), size, outfile); if(n != size) { perror("write"); fclose(outfile); free(str); return 1; } } free(str); if (fclose(outfile)) { perror("close"); return 1; } return 0; } Parse() { while (! isBlocked) CheckLine(&buf); } Loop() { for (; ; ) { XtAppMainLoop(app_context); dprintf("Exited from XtAppMainLoop!\n"); } } static void StartFile () { int lineno; char *slash; char *path = *filePtr; #ifdef DOMOTION void MotionCB(); #endif dprintf("StartFile(%s)\n", path); ReadFile(path, &buf); buf.tempname = strdup("/tmp/XspellXXXXXX"); mktemp(buf.tempname); if (! buf.readonly && WriteFile(buf.tempname, &buf)) PostWarning(&noBackupDialog, "noBackupDialog", NULL, True); XtVaGetValues(text, XmNrows, &nlines, NULL); XtVaGetValues(list[0], XmNvisibleItemCount, &nslots, NULL); XmTextSetTopCharacter(text, 0); buf.topline = 0; #if 0 if (slash = strrchr(buf.filename, '/')) ++slash; else slash = buf.filename; WriteCmd(srvout, "~%s\n", slash); #endif /* * To get us started, we prime the motor... */ (void)WriteLine(&buf); } static void EndFile() { /* * * If the file was read-only, put the buffer into the tempfile. * * Otherwise, if there buffer wasn't modified, OR it was but we * wrote it successfully, then we can remove the backup file. * Otherwise, we bombed writing the file out... */ if (buf.changed && buf.readonly) { if (! WriteFile(buf.tempname, &buf)) PostWarning(&tempIsDialog, "tempIsDialog", buf.tempname, True); else PostWarning(&couldntSaveDialog, "couldntSaveDialog", NULL, True); } else if (! buf.changed || ! WriteFile(buf.filename, &buf)) unlink(buf.tempname); else PostWarning(&tempIsDialog, "tempIsDialog", buf.tempname, True); free(buf.tempname); } int WriteLine(bp) buf_t *bp; { getbuf(bp, bp->offset + (bp->cnt + bp->delta)); if (! bp->base) return 0; WriteCmd(srvout, "^%.*s", bp->cnt, bp->base); return bp->cnt; } static void CheckLine (bp) buf_t *bp; { int c, t, n, reliable; long pos; char word[INPUTWORDLEN], *s; char buf[BUFSIZ]; if (quit) { EndFile(); SessionEnd(); exit(0); } if (fgets(buf, sizeof(buf), srvin) == NULL) c = EOF; else c = buf[0]; dprintf("<<<%s", buf); switch (c) { case EOF: /* very unexpected */ fprintf(stderr, "End of file!\n"); exit(1); case '\n': /* time to do the next line... */ if (WriteLine(bp)) break; EndFile(); /* no more text remained, so close the file. */ ++filePtr; if (*filePtr) { /* if there is another file, start it... */ StartFile(); break; } SessionEnd(); exit(0); case '@': /* this is the version string... */ s = &buf[1]; /* banner... */ break; case '*': /* word is OK */ break; case '+': /* derivative */ s = &buf[2]; dprintf("deriv.:%s", s); break; case '&': /* word is dubious */ s = &buf[1]; n = sscanf(s, " %s %d %d", word, &reliable, &pos); pos--; /* correct for uparrow we added */ dprintf("\"%s\" at %d(@%d), %d choices:", word, pos + bp->delta, bp->offset + pos + bp->delta, reliable); s = index(s, ':'); /* find colon... */ assert(s); for (n = 0; ; ++n) { c = *s++; /* skip comma or colon */ if (c == '\n') break; sscanf(s, " %[^,\n]", possibilities[n]); dprintf(" \"%s\"", possibilities[n]); s += 1 + strlen(possibilities[n]); /* count the space... */ } /* newline already eaten */ dputc('\n'); pcount = n; bp->wordlen = strlen(word); bp->ptr = bp->base + pos; Correct (bp); Block(); break; case '?': s = &buf[1]; n = sscanf(s, " %s %d %d", word, &reliable, &pos); pos--; /* correct for uparrow we added */ dprintf("\"%s\" at %d(@%d), %d choices:", word, pos + bp->delta, bp->offset + pos + bp->delta, reliable); s = index(s, ':'); /* find colon... */ assert(s); for (n = 0; ; ++n) { c = *s++; /* slip colon or comma */ if (c == '\n') break; sscanf(s, " %[^,\n]", possibilities[n]); dprintf(" \"%s\"", possibilities[n]); fflush(stdout); s += 1 + strlen(possibilities[n]); /* count space... */ } /* newline already eaten */ dputc('\n'); pcount = n; bp->wordlen = strlen(word); bp->ptr = bp->base + pos; Correct (bp); Block(); break; case '#': s = &buf[1]; n = sscanf(s, " %s %d", word, &pos); pos--; /* correct for uparrow we added */ dprintf("\"%s\" at %d(@%d)\n", word, pos + bp->delta, bp->offset + pos + bp->delta); pcount = 0; bp->wordlen = strlen(word); bp->ptr = bp->base + pos; Correct (bp); Block(); break; case '-': /* gak! */ default: fprintf(stderr, "Error: read '%c' (\\%03o) on connection\n", c, c); exit(1); break; } inputPending = 0; } static void ListPossibilities() { int col, start, limit, nelems, i, resized = 0; int ncols = app_data.columns; /* * What to do? Throw away the extras?? */ #if 0 if (pcount > (ncols * nslots)) { resized = 1; nslots = (pcount + (ncols - 1)) / ncols; dprintf("resizing to %d!\n", nslots); } #endif for (col = 0; col < ncols; ++col) { XtVaGetValues(list[col], XmNitemCount, &nelems, NULL); if (resized) XtVaSetValues(list[col], XmNvisibleItemCount, nslots, NULL); start = col * nslots; limit = MIN(pcount, (col + 1) * nslots); for (i = start; i < limit; i++) { XmString xstr = XmStringCreateSimple(possibilities[i]); XmListAddItemUnselected(list[col], xstr, 0); XmStringFree(xstr); } if (nelems) XmListDeleteItemsPos(list[col], nelems, 1); #if 1 if (start >= pcount) XtUnmapWidget(list[col]); else #endif XtMapWidget(list[col]); } } /* * Shared with callback functions... along with buf */ static void Correct(bp) buf_t * bp; { long pos; char tmp[INPUTWORDLEN]; static int lastline = -1; XmString xstr; pos = bp->offset + (bp->ptr - bp->base) + bp->delta; if (lastline != bp->lineno) { int nscroll; lastline = bp->lineno; sprintf(tmp, "%u", bp->lineno + 1); xstr = XmStringCreateSimple(tmp); XtVaSetValues(lineNumber, XmNlabelString, xstr, NULL); nscroll = (bp->lineno - (nlines - 1) / 2) - bp->topline; if (nscroll > 0) { XmTextScroll(text, nscroll); bp->topline += nscroll; } } XmTextSetInsertionPosition(text, pos + bp->wordlen); sprintf(tmp, "%.*s", bp->wordlen, bp->ptr); XmTextFieldSetString(textedit, tmp); sprintf(tmp, "+%u @%u", pos - bp->offset, pos); xstr = XmStringCreateSimple(tmp); XtVaSetValues(offsetNumber, XmNlabelString, xstr, NULL); ListPossibilities (); /* * We don't use the XmTextSetSelection() because of a display bug... */ HighlightText(text, pos, pos + bp->wordlen); #ifdef DOMOTION ignoreMotion = 0; #endif #ifdef DOMOTION ignoreMotion = 1; #endif } #ifndef DEBUG _dprintf() { } #endif static void ListSelectCB(list, bp, lcb) Widget list; buf_t *bp; XmListCallbackStruct *lcb; { char *word; long pos = bp->offset + (bp->ptr - bp->base) + bp->delta; XmStringGetLtoR(lcb->item, XmSTRING_DEFAULT_CHARSET, &word); UnhighlightText(text, pos, pos + bp->wordlen); XmTextReplace(text, pos, pos + bp->wordlen, word); bp->changed = 1; bp->ptr += strlen(word); bp->delta += (strlen(word) - bp->wordlen); UnBlock(); } static void ReplaceCB(button, textedit, call_data) Widget button; Widget textedit; caddr_t call_data; { char *word; buf_t *bp = &buf; /* cheat! */ long pos = bp->offset + (bp->ptr - bp->base) + bp->delta; word = XmTextFieldGetString(textedit); UnhighlightText(text, pos, pos + bp->wordlen); XmTextReplace(text, pos, pos + bp->wordlen, word); bp->changed = 1; bp->ptr += strlen(word); bp->delta += (strlen(word) - bp->wordlen); UnBlock(); } static void AcceptCB(button, bp, call_data) Widget button; buf_t *bp; caddr_t call_data; { long pos = bp->offset + (bp->ptr - bp->base) + bp->delta; UnhighlightText(text, pos, pos + bp->wordlen); WriteCmd(srvout, "@%.*s\n", bp->wordlen, bp->ptr); bp->ptr += bp->wordlen; UnBlock(); } static void InsertCB(button, bp, call_data) Widget button; buf_t *bp; caddr_t call_data; { long pos = bp->offset + (bp->ptr - bp->base) + bp->delta; UnhighlightText(text, pos, pos + bp->wordlen); WriteCmd(srvout, "*%.*s\n", bp->wordlen, bp->ptr); bp->ptr += bp->wordlen; UnBlock(); } static void SkipCB(button, bp, call_data) Widget button; buf_t *bp; caddr_t call_data; { long pos = bp->offset + (bp->ptr - bp->base) + bp->delta; UnhighlightText(text, pos, pos + bp->wordlen); bp->ptr += bp->wordlen; UnBlock(); } static void UncapCB(button, bp, call_data) Widget button; buf_t *bp; caddr_t call_data; { long pos = bp->offset + (bp->ptr - bp->base) + bp->delta; UnhighlightText(text, pos, pos + bp->wordlen); WriteCmd(srvout, "%c%.*s\n", CUNCAP, bp->wordlen, bp->ptr); bp->ptr += bp->wordlen; UnBlock(); } static void QuitCB(button, client_data, call_data) Widget button; caddr_t client_data; caddr_t call_data; { quit = 1; UnBlock(); } static void AckCB(button, client_data, call_data) Widget button; caddr_t client_data; caddr_t call_data; { Widget widget = XtParent(button); XtUnmanageChild(widget); /* Unblocking... */ /* UnBlock(); */ } static void CancelAbortCB(button, client_data, call_data) Widget button; caddr_t client_data; caddr_t call_data; { Widget isModifiedDialog = XtParent(button); XtUnmanageChild(isModifiedDialog); #if 0 UnBlock(); #endif } static void AbortOKCB(button, client_data, call_data) Widget button; caddr_t client_data; caddr_t call_data; { Widget isModifiedDialog = XtParent(button); buf_t *bp = &buf; XtUnmanageChild(isModifiedDialog); bp->changed = 0; /* we don't want to write the file */ quit = 1; UnBlock(); } static void AbortCB(button, client_data, call_data) Widget button; caddr_t client_data; caddr_t call_data; { buf_t *bp = &buf; int exists = (isModifiedDialog != NULL); if (! bp->changed) { quit = 1; UnBlock(); return; } PostWarning(&isModifiedDialog, "isModifiedDialog", NULL, False); if (exists) return; XtManageChild(XmMessageBoxGetChild(isModifiedDialog, XmDIALOG_CANCEL_BUTTON)); XtRemoveCallback(XmMessageBoxGetChild(isModifiedDialog, XmDIALOG_OK_BUTTON), XmNactivateCallback, AckCB, NULL); XtAddCallback(XmMessageBoxGetChild(isModifiedDialog, XmDIALOG_OK_BUTTON), XmNactivateCallback, AbortOKCB, NULL); XtAddCallback(XmMessageBoxGetChild(isModifiedDialog, XmDIALOG_CANCEL_BUTTON), XmNactivateCallback, CancelAbortCB, NULL); } static void PostWarning(widget, name, arg, block) Widget *widget; char *name; char *arg; int block; { Widget shell; char *newline; XmString tmp; XmString xstr; void _XmDestroyParentCallback(); char buf[80]; dprintf("PostWarning(0x%x, \"%s\", %s)\n", widget, name, arg); if (! *widget) { shell = XtVaCreatePopupShell("Dialog_popup", xmDialogShellWidgetClass, toplevel, XmNallowShellResize, True, XmNmwmDecorations, MWM_DECOR_BORDER, XmNtransient, True, NULL); *widget = XtVaCreateWidget(name, xmMessageBoxWidgetClass, shell, XmNnoResize, True, XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL, XmNmessageAlignment, XmALIGNMENT_CENTER, NULL); XtAddCallback(*widget, XmNdestroyCallback, _XmDestroyParentCallback, NULL); XtUnmanageChild(XmMessageBoxGetChild(*widget, XmDIALOG_HELP_BUTTON)); XtUnmanageChild(XmMessageBoxGetChild(*widget, XmDIALOG_CANCEL_BUTTON)); XtAddCallback(XmMessageBoxGetChild(*widget, XmDIALOG_OK_BUTTON), XmNactivateCallback, AckCB, NULL); /* * We use the 'userData' value for storing away the string, * since it gets clobbered by a sprintf()... */ XtVaGetValues(*widget, XmNmessageString, &tmp, NULL); XtVaSetValues(*widget, XmNuserData, tmp, NULL); } XtVaGetValues(*widget, XmNuserData, &xstr, NULL); XmStringGetLtoR(xstr, XmSTRING_DEFAULT_CHARSET, &tmp); /* * This is a bit of a kludge -- we replace any occurences of * backslash with newlines. I can't figure out how to protect * these characters from Motif... I suppose if using compound * strings were slightly more obvious, I would use those. */ while (newline = strchr(tmp, '\\')) *newline = '\n'; sprintf(buf, tmp, arg); #if 0 XtFree(tmp); dprintf("did free\n"); #endif xstr = XmStringCreateLtoR(buf, XmSTRING_DEFAULT_CHARSET); XtVaSetValues(*widget, XmNnoResize, False, XmNmessageString, xstr, NULL); XtManageChild(*widget); } #ifdef DOMOTION static void MotionCB(text, client_data, mcb) Widget text; caddr_t client_data; XmTextVerifyCallbackStruct *mcb; { long pos = bp->offset + (bp->ptr - bp->base) + bp->delta; long newpos = mcb->newInsert; int n; if (ignoreMotion) return; ignoreMotion = 1; dprintf("MotionCB(%d)\n", newpos); /* * LINELEN is an arbitrary number here... */ getbuf(bp, newpos - LINELEN); bp->ptr += LINELEN; bp->ptr -= (n = skipbackword(bp->ptr, bp->base)); dprintf("new word is: %.20s\n", bp->ptr); /* we should eat up to an empty line before continuing! */ UnBlock(); } #endif void WriteCmd(fp, fmt, va_alist) FILE *fp; char *fmt; va_dcl { va_list args; va_start(args); #ifdef DEBUG printf(">>>"); (void)vprintf(fmt, args); #endif (void)vfprintf(fp, fmt, args); fflush(fp); va_end(args); } #if 0 static String fallback_resources[] = { "*isReadonlyDialog*messageString: Notice: File is read-only.", "*tempIsDialog*messageString: \ Warning: File is read-only; modified\\\\\ file is '%s'.", "*couldntSaveDialog*messageString: Error: Couldn't save modified file.", "*noBackupDialog*messageString: Warning: Couldn't write backup file.", "*isModifiedDialog*messageString: Warning: File has been modified;\\\\\ Do you really want to quit?", "*fileLabel.labelString: File:", "*lineLabel.labelString: Line:", "*offsetLabel.labelString: Offset:", "*wordLabel.labelString: Word:", "*psblLabel.labelString: Possibilities:", "*actions.skipButton.labelString: Skip", "*actions.replButton.labelString: Replace", "*actions.acptButton.labelString: Accept", "*actions.insrButton.labelString: Insert", "*actions.lookButton.labelString: Lookup", "*actions.uncpButton.labelString: Uncap.", "*actions.quitButton.labelString: Quit", "*actions.abrtButton.labelString: Abort", "*actions.helpButton.labelString: Help", "*isReadonlyDialog*dialogType: DIALOG_INFORMATION", "*couldntSaveDialog*dialogType: DIALOG_ERROR", "*tempIsDialog*dialogType: DIALOG_WARNING", "*noBackupDialog*dialogType: DIALOG_WARNING", "*isModifiedDialog*dialogType: DIALOG_WARNING", "*fileView.rows: 10", "*fileView.columns: 80", "*fileView.scrollVertical: True", "*fileView.scrollHorizontal: False", "*separator.separatorType: SINGLE_LINE", NULL}; #endif static XrmOptionDescRec options[] = { {"-c", "*columns", XrmoptionStickyArg, NULL}, {"-d", "*dictionary", XrmoptionStickyArg, NULL}, {"-T", "*type", XrmoptionStickyArg, NULL}, {"-t", "*type", XrmoptionNoArg, "tex"}, {"-n", "*type", XrmoptionNoArg, "nroff"}, {"-b", "*backup", XrmoptionNoArg, "True"}, {"-x", "*backup", XrmoptionNoArg, "False"}, {"-C", "*haveCompounds", XrmoptionNoArg, "True"}, {"-S", "*sortPossibilities", XrmoptionNoArg, "True"}, }; #define XtNcolumns "columns" #define XtCColumns "Columns" #define XtNdictionary "dictionary" #define XtCDictionary "Dictionary" #define XtNtype "type" #define XtCType "Type" #define XtNbackup "backup" #define XtCBackup "Backup" #define XtNhaveCompounds "haveCompounds" #define XtCHaveCompounds "HaveCompounds" #define XtNsortPossibilities "sortPossibilities" #define XtCSortPossibilities "SortPossibilities" static XtResource resources[] = { { XtNcolumns, XtCColumns, XtRInt, sizeof(int), XtOffsetOf(AppData,columns), XtRImmediate, (XtPointer) NCOLS, }, { XtNdictionary, XtCDictionary, XtRString, sizeof(String), XtOffsetOf(AppData,dictionary), XtRImmediate, (XtPointer) "english", }, { XtNtype, XtCType, XtRString, sizeof(String), XtOffsetOf(AppData,type), XtRImmediate, (XtPointer) "nroff", }, { XtNbackup, XtCBackup, XtRBoolean, sizeof(Boolean), XtOffsetOf(AppData,backup), XtRImmediate, (XtPointer) True, }, { XtNhaveCompounds, XtCHaveCompounds, XtRBoolean, sizeof(Boolean), XtOffsetOf(AppData,haveCompounds), XtRImmediate, (XtPointer) False, }, { XtNsortPossibilities, XtCSortPossibilities, XtRBoolean, sizeof(Boolean), XtOffsetOf(AppData,sortPossibilities), XtRImmediate, (XtPointer) False, }, }; static XtAppContext app_context; static Widget toplevel; static Widget actions; static Widget fileName; static Widget lineNumber; static Widget offsetNumber; static Widget text; static Widget textedit; static Widget list[NCOLS]; static Widget noBackupDialog; static Widget isReadonlyDialog; static Widget couldntSaveDialog; static Widget tempIsDialog; static Widget isModifiedDialog; void CreateWidgets(toplevel) Widget toplevel; { Widget shell; Widget mainwin; Widget psblRC; Widget button; Widget subform, subform2; Widget frame; Widget fileLabel, lineLabel, offsetLabel; Widget psblLabel, wordLabel; Widget form; Widget scrolledWindow; void _XmDestroyParentCallback(); int i; if (app_data.columns > NCOLS) app_data.columns = NCOLS; mainwin = XmCreateMainWindow (toplevel, "main", NULL, 0); XtManageChild (mainwin); #if 0 /* * Create all our pop-up shells and message boxes here... */ shell = XtVaCreatePopupShell("abortDialog_popup", xmDialogShellWidgetClass, toplevel, XmNallowShellResize, True, XmNmwmDecorations, MWM_DECOR_BORDER, XmNtransient, True, NULL); abortMsg = XtVaCreateWidget("abortDialog", xmMessageBoxWidgetClass, shell, XmNnoResize, True, XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL, XmNmessageAlignment, XmALIGNMENT_CENTER, NULL); XtAddCallback(abortMsg, XmNdestroyCallback, _XmDestroyParentCallback, NULL); XtUnmanageChild(XmMessageBoxGetChild(abortMsg, XmDIALOG_HELP_BUTTON)); XtAddCallback(XmMessageBoxGetChild(abortMsg, XmDIALOG_OK_BUTTON), XmNactivateCallback, AbortOKCB, NULL); XtAddCallback(XmMessageBoxGetChild(abortMsg, XmDIALOG_CANCEL_BUTTON), XmNactivateCallback, CancelAbortCB, NULL); #endif form = XtCreateManagedWidget("form", xmFormWidgetClass, mainwin, NULL, 0); /* * Do subform containing file name, line, and character offset... */ subform = XtVaCreateManagedWidget("subform1", xmFormWidgetClass, form, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); fileLabel = XtVaCreateManagedWidget("fileLabel", xmLabelWidgetClass, subform, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, #if 0 XmNleftOffset, 2, #endif NULL); fileName = XtVaCreateManagedWidget("fileName", xmLabelWidgetClass, subform, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, fileLabel, XmNshadowThickness, 2, NULL); lineLabel = XtVaCreateManagedWidget("lineLabel", xmLabelWidgetClass, subform, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, fileName, NULL); lineNumber = XtVaCreateManagedWidget("lineNumber", xmLabelWidgetClass, subform, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, lineLabel, XmNshadowThickness, 2, NULL); offsetLabel = XtVaCreateManagedWidget("offsetLabel", xmLabelWidgetClass, subform, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, lineNumber, NULL); offsetNumber = XtVaCreateManagedWidget("offsetNumber", xmLabelWidgetClass, subform, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, offsetLabel, XmNshadowThickness, 2, NULL); /* * file viewport done as multi-line text widget... */ scrolledWindow = XtVaCreateManagedWidget("fileViewSW", xmScrolledWindowWidgetClass, form, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, subform, XmNtopOffset, 2, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 2, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 2, XmNscrollingPolicy, XmAPPLICATION_DEFINED, XmNvisualPolicy, XmVARIABLE, XmNscrollBarDisplayPolicy, XmSTATIC, XmNshadowThickness, 0, NULL); text = XtVaCreateManagedWidget("fileView", xmTextWidgetClass, scrolledWindow, XmNeditMode, XmMULTI_LINE_EDIT, XmNeditable, False, XmNautoShowCursorPosition, False, NULL); XtAddCallback(text, XmNdestroyCallback, _XmDestroyParentCallback, NULL); #ifdef DOMOTION XtAddCallback(text, XmNmotionVerifyCallback, MotionCB, NULL); #endif /* * word editing box... */ subform = XtVaCreateManagedWidget("subform", xmFormWidgetClass, form, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, text, XmNtopOffset, 2, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); wordLabel = XtVaCreateManagedWidget("wordLabel", xmLabelWidgetClass, subform, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 2, NULL); textedit = XtVaCreateManagedWidget("wordBuffer", xmTextFieldWidgetClass, subform, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, wordLabel, XmNrightAttachment, XmATTACH_FORM, NULL); XtAddCallback(textedit, XmNactivateCallback, ReplaceCB, textedit); subform2 = XtVaCreateManagedWidget("subform", xmFormWidgetClass, form, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, subform, XmNtopOffset, 2, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); frame = XtVaCreateManagedWidget("buttonBoxFrame", xmFrameWidgetClass, subform2, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNbottomOffset, 2, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 2, NULL); /* * Create list of action buttons as row/column widget... */ actions = XtVaCreateManagedWidget("actions", xmRowColumnWidgetClass, frame, XmNorientation, XmVERTICAL, XmNpacking, XmPACK_COLUMN, XmNnumColumns, 2, XmNadjustLast, False, NULL); /* can we put this into a structure? */ button = XmCreatePushButtonGadget(actions, "skipButton", NULL, 0); XtManageChild(button); XtAddCallback(button, XmNactivateCallback, SkipCB, &buf); button = XmCreatePushButtonGadget(actions, "replButton", NULL, 0); XtManageChild(button); XtAddCallback(button, XmNactivateCallback, ReplaceCB, textedit); button = XmCreatePushButtonGadget(actions, "acptButton", NULL, 0); XtManageChild(button); XtAddCallback(button, XmNactivateCallback, AcceptCB, &buf); button = XmCreatePushButtonGadget(actions, "insrButton", NULL, 0); XtManageChild(button); XtAddCallback(button, XmNactivateCallback, InsertCB, &buf); button = XmCreatePushButtonGadget(actions, "lookButton", NULL, 0); XtManageChild(button); button = XmCreatePushButtonGadget(actions, "uncpButton", NULL, 0); XtManageChild(button); XtAddCallback(button, XmNactivateCallback, UncapCB, &buf); button = XmCreatePushButtonGadget(actions, "quitButton", NULL, 0); XtManageChild(button); XtAddCallback(button, XmNactivateCallback, QuitCB, NULL); button = XmCreatePushButtonGadget(actions, "abrtButton", NULL, 0); XtManageChild(button); XtAddCallback(button, XmNactivateCallback, AbortCB, NULL); button = XmCreatePushButtonGadget(actions, "helpButton", NULL, 0); XtManageChild(button); psblLabel = XtVaCreateManagedWidget("psblLabel", xmLabelWidgetClass, subform2, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_WIDGET, XmNrightWidget, frame, NULL); /* * Create R/C widget with word possibilities in list widgets */ psblRC = XtVaCreateManagedWidget("psblRC", xmRowColumnWidgetClass, subform2, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, psblLabel, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 2, XmNrightAttachment, XmATTACH_WIDGET, XmNrightWidget, frame, XmNbottomAttachment, XmATTACH_FORM, #if 1 XmNpacking, XmPACK_COLUMN, XmNnumColumns, app_data.columns, XmNorientation, XmVERTICAL, #else XmNpacking, XmPACK_TIGHT, XmNnumColumns, 1, XmNorientation, XmHORIZONTAL, #endif XmNadjustLast, False, NULL); for (i = 0; i < app_data.columns; ++i) { list[i] = XtVaCreateManagedWidget("psbList", xmListWidgetClass, psblRC, XmNselectionPolicy, XmSINGLE_SELECT, #if 1 XmNscrollBarDisplayPolicy, XmAS_NEEDED, XmNvisibleItemCount, NENTRIES, XmNlistSizePolicy, XmVARIABLE, #endif NULL); XtAddCallback(list[i], XmNsingleSelectionCallback, ListSelectCB, &buf); } /* what, nothing else? */ } main(argc, argv) char *argv[]; { char *myname, *slash; int i; char **files; myname = argv[0]; if (slash = strrchr(myname, '/')) myname = ++slash; toplevel = XtAppInitialize (&app_context, "Xspell", #if 0 options, XtNumber(options), &argc, argv, fallback_resources, #else options, XtNumber(options), &argc, argv, NULL, #endif NULL, 0); XtVaGetApplicationResources(toplevel, &app_data, resources, XtNumber(resources), NULL); if (argc == 1) { fprintf(stderr, "usage: %s file1 [ file2 ] ...\n", myname); exit(1); } CreateWidgets (toplevel); XtRealizeWidget (toplevel); Connect(toplevel); files = calloc(argc, sizeof(char *)); for (i = 1; i < argc; ++i) files[i - 1] = argv[i]; files[argc - 1] = NULL; filePtr = &files[0]; StartFile(); Loop(); } @EOF chmod 664 Xspell.c echo x - buffer.h cat >buffer.h <<'@EOF' /* * This is the structure of a file that is being spell-checked. * * Basically, all associated state is found here. */ typedef struct { char * base; char * ptr; long offset; int cnt; int delta; int lineno; int topline; int wordlen; long size; char *filename; char *tempname; /* booleans */ char changed; char readonly } buf_t; @EOF chmod 660 buffer.h echo x - app-defaults cat >app-defaults <<'@EOF' ! ! Applications defaults for Xspell ! ! Probably not wise to fool with the screen layout... ! !*type: nroff *sortPossibilities: false *backup true ! *isReadonlyDialog*dialogType: DIALOG_INFORMATION *tempIsDialog*dialogType: DIALOG_WARNING *noBackupDialog*dialogType: DIALOG_WARNING *isModifiedDialog*dialogType: DIALOG_WARNING *couldntSaveDialog*dialogType: DIALOG_ERROR ! *frame.shadowType: SHADOW_OUT *separator.separatorType: SINGLE_LINE *fileView.rows: 10 *fileView.columns: 80 *fileView.scrollVertical: True *fileView.scrollHorizontal: False @EOF chmod 666 app-defaults echo x - app-defaults.eng cat >app-defaults.eng <<'@EOF' ! ! Language dependencies for Xspell in english ! ! default strings are in english... *dictionary: english *haveCompounds: false ! *isReadonlyDialog*messageString: Notice: File is read-only. *tempIsDialog*messageString: \ Warning: File is read-only; modified\\\ file is '%s'. *couldntSaveDialog*messageString: Error: Couldn't save modified file. *noBackupDialog*messageString: Warning: Couldn't write backup file. *isModifiedDialog*messageString: Warning: File has been modified;\\\ Do you really want to quit? *fileLabel.labelString: File: *lineLabel.labelString: Line: *offsetLabel.labelString: Offset: *wordLabel.labelString: Word: *psblLabel.labelString: Possibilities: *actions.skipButton.labelString: Skip *actions.replButton.labelString: Replace *actions.acptButton.labelString: Accept *actions.insrButton.labelString: Insert *actions.lookButton.labelString: Lookup *actions.uncpButton.labelString: Uncap. *actions.quitButton.labelString: Quit *actions.abrtButton.labelString: Abort *actions.helpButton.labelString: Help @EOF chmod 640 app-defaults.eng rm -f /tmp/uud$$ (echo "begin 666 /tmp/uud$$\n#;VL*n#6%@x\n \nend" | uudecode) >/dev/null 2>&1 if [ X"`cat /tmp/uud$$ 2>&1`" = Xok ] then unpacker=uudecode else echo Compiling unpacker for non-ascii files pwd=`pwd`; cd /tmp cat >unpack$$.c <<'EOF' #include #define C (*p++ - ' ' & 077) main() { int n; char buf[128], *p, a,b; scanf("begin %o ", &n); gets(buf); if (freopen(buf, "w", stdout) == NULL) { perror(buf); exit(1); } while (gets(p=buf) && (n=C)) { while (n>0) { a = C; if (n-- > 0) putchar(a << 2 | (b=C) >> 4); if (n-- > 0) putchar(b << 4 | (a=C) >> 2); if (n-- > 0) putchar(a << 6 | C); } } exit(0); } EOF cc -o unpack$$ unpack$$.c rm unpack$$.c cd $pwd unpacker=/tmp/unpack$$ fi rm -f /tmp/uud$$ echo x - app-defaults.fr '[non-ascii]' $unpacker <<'@eof' begin 640 app-defaults.fr M(0HA"4QA;F=U86=E(&1E<&5N9&5N8VEE3H)"0D)9G)E;F-H"BIT>7!EX M.@D)"0D);&%T:6XQ"BIIDN"BIF:6QE3&%B96PN;&%B96Q3X M=')I;Flook.c <<'@EOF' static char *progid = "look 1.0a, 4 December 92 philipp@res.enst.fr"; /* * Xspell: Philippe-Andre Prindeville, Telecom Paris 4 December 1992 * * After cursing ispell numerous times for not having a * simple command line interface like "look" for searching * for words, I wrote one. Most of the code was recycled * from Xspell anyway (I should plug it here but...). * * You type: * * look [-d dictionary] word1 [word2 ... wordn ] * * and, in the best of UNIX tradition, it will *not* print * out the word if it likes it, will print out a list of * alternatives for dubious words, and will print a stupid * message (well after 10 minutes hacking I wasn't going * to spend 3 hours worrying about "user-friendly" error * messages) saying it didn't like the word... * * Debugging is simple. If you have patches, by all means * send them to me. * * Enjoy, * -Philip */ #include "config.h" #include "ispell.h" #include #include #include #include #ifdef DEBUG #define dprintf printf #define dputc putchar #else #define dprintf _dprintf #define dputc(x) #endif extern char *optarg; extern int optind, opterr, optopt; char *lang = "english"; char *fmt = NULL; int verbose = 0; static FILE *srvin, *srvout; static char possibilities[MAXPOSSIBLE][INPUTWORDLEN + MAXAFFIXLEN]; static int pcount; static void Connect() { int srv[2], clnt[2]; int pid, n, argc; char buf[BUFSIZ]; char *argv[10]; pipe(srv); pipe(clnt); if ((pid = fork()) == -1) { perror("fork"); exit(1); } else if (! pid) { dup2(srv[0], 0); close(srv[0]); close(srv[1]); dup2(clnt[1], 1); close(clnt[0]); close(clnt[1]); argc = 0; argv[argc++] = "ispell"; argv[argc++] = "-d"; argv[argc++] = lang; if (! strcmp(lang, "french")) argv[argc++] = "-Tlatin1"; #if 0 argv[argc++] = "-P"; #endif argv[argc++] = "-S"; argv[argc++] = "-a"; argv[argc++] = NULL; execvp("ispell", argv); perror("execl: ispell"); exit(1); } else { close(clnt[1]); close(srv[0]); if (! (srvin = fdopen(clnt[0], "r")) || ! (srvout = fdopen(srv[1], "w"))) { fprintf(stderr, "fdopen: cannot open stream\n"); exit(1); } /* * get hello banner */ n = fgets(buf, sizeof(buf) - 1, srvin); dprintf(buf); if (verbose) fputs(buf, stdout); } } static void SessionEnd() { dprintf(">>> #\n"); fprintf(srvout, "#\n"); fclose(srvout); fclose(srvin); } static void Choices (word, count, poss) char *word; int count; char poss[MAXPOSSIBLE][INPUTWORDLEN + MAXAFFIXLEN]; { int i; printf("%s:", word); for (i = 0; i < count; ++i) if (! strpbrk(poss[i], " -")) printf(" %s", poss[i]); putchar('\n'); } static void Clueless (word) char *word; { printf("%s ??? Totally bogus, bro'\n", word); } static void ReadBack () { int c, m, n, reliable; long pos; char word[INPUTWORDLEN]; for (; ; ) { dprintf("<<< "); c = fgetc(srvin); switch (c) { case EOF: /* very unexpected */ dprintf("EOF\n"); return; case '\n': /* done! */ dprintf("\\n\n"); break; case '*': /* word is OK */ dputc('*'); c = fgetc(srvin); dputc(c); break; case '+': /* found derivative */ dputc('+'); (void)fgets(word, sizeof(word), srvin); dprintf("%s", word); break; case '&': /* word is dubious */ dputc('&'); n = fscanf(srvin, " %s %d %d", word, &reliable, &pos); pos--; /* correct for uparrow we added */ dprintf("\"%s\" at %d, %d choices:", word, pos, reliable); for (n = 0; ; ++n) { c = fgetc(srvin); /* eat colon or comma */ if (c == '\n') break; fscanf(srvin, " %[^,\n]", possibilities[n]); dprintf(" \"%s\"", possibilities[n]); fflush(stdout); } /* newline already eaten */ dputc(c); pcount = n; Choices(word, pcount, possibilities); break; case '?': dputc('?'); n = fscanf(srvin, " %s %d %d", word, &reliable, &pos); pos--; /* correct for uparrow we added */ dprintf(" \"%s\" at %d, %d choices:", word, pos, reliable); for (n = 0; ; ++n) { c = fgetc(srvin); /* eat colon or comma */ if (c == '\n') break; fscanf(srvin, " %[^,\n]", possibilities[n]); dprintf(" \"%s\"", possibilities[n]); fflush(stdout); } /* newline already eaten */ dputc('\n'); pcount = n; Choices(word, pcount, possibilities); break; case '#': dputc('#'); n = fscanf(srvin, " %s %d", word, &pos); pos--; /* correct for uparrow we added */ dprintf(" \"%s\" at %d\n", word, pos); fgetc(srvin); pcount = 0; Clueless(word); break; case '-': /* gak! */ default: dputc(c); fgets(word, sizeof(word), srvin); dprintf(" %s", word); fprintf(stderr, "Error: read '%c' on connection\n", c); exit(1); break; } } } main(argc, argv) char *argv[]; { int i, c; char *myname, *slash; char *tmp; myname = argv[0]; if (slash = strrchr(myname, '/')) myname = ++slash; while ((c = getopt(argc, argv, "vd:")) != EOF) switch (c) { case 'd': /* dictionary */ lang = optarg; break; case 'v': ++verbose; break; case '?': usage: fprintf(stderr, "usage: %s [-v] [-d dictionary] word1 [word2 ... wordn]\n", myname); exit(1); } if (!verbose && optind == argc) goto usage; Connect(); dprintf(">>> ^"); fputc('^', srvout); for (i = optind; i < argc; ++i) { dprintf(" %s", argv[i]); fprintf(srvout, " %s", argv[i]); } dputc('\n'); fputc('\n', srvout); fclose(srvout); ReadBack(); SessionEnd(); exit(0); } #ifndef DEBUG dprintf() { } #endif @EOF chmod 660 look.c rm -f /tmp/unpack$$ exit 0 ispell-3.4.02/PaxHeaders.22185/CHANGES0000644000000000000000000000013213776415522013635 xustar0030 mtime=1610226514.492031708 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/CHANGES0000444003214100001440000002337013776415522014713 0ustar00geofffaculty00000000000000Version 3.4.02 ============== - A major bug in 3.4.01 that caused incorrect behavior with many languages has been corrected. - The default maximum number of stringchars has been doubled. - Some spurious compiler warnings have been suppressed. Version 3.4.01 ============== - The english.aff file has been revised so that UTF-8 is now the default encoding for English dictionaries. - Some subtle bugs with the handling of stringchars, which were revealed by the changes to english.aff, have been corrected. - A new affix command, "options", has been added to allow selection of options related to a particular string character type. There are currently two options, raw_display and squeeze_strings. Both should be activated for UTF-8 encodings but few others. This change causes hash files built with earlier ispell versions to be incompatible; old hash files will need to be rebuilt. - Over 6000 words have been added to the English dictionaries. Most of them are in the english.xlg variant, but some are included in smaller dictionaries as well. The English dictionaries also take advantage of the new UTF-8 encoding to support correct spellings of words adopted from other languages, such as crêpe. Version 3.4.00 ============== - The english.5 manual page has been dropped from the distribution; the english.aff file provides superior documentation (and in any case, most people will use munchlist to apply affixes). - Ispell now supports systems (BSD) that foolish discarded backwards compatibility and insist on using termios. - A function (getline) has been renamed in correct.c to solve compilation problems on some systems. - The manual page now correctly identifies the ispell version that it describes. - It is now possible to insert the ispell version information into shell scripts via the Makefile. - An error has been corrected in the English affix files that caused certain words ending in "th" to be pluralized incorrectly. The dictionaries have been updated to ensure that no incorrect plurals have crept in. - The personal dictionary is now written in a stable order when there are multiple variant capitalizations of a word. - The security of temporary files has been improved on systems that don't have the "mktemp" command. - The deformatters makefile has been changed to be compatible with older versions of make. - A bug in TeX deformatting has been corrected. Previously, two adjacent math-mode environments introduced with dollar signs, such as $a=b$$c=d$, would cause ispell to lose track of whether it was in math mode. - The Makefile now supports a DESTDIR installation prefix (patch from Petter Reinholdtsen) - The American and British Makefiles have been simplified to ensure that dictionaries are always built with the lastest information. Version 3.3.02 ============== - A Makefile bug has been corrected which caused the default hash file to be created under the wrong name. If you installed 3.3.01, you should remove the file /usr/local/lib/ispell/english (or whatever your default language is, and in the appropriate directory) to clean up from the effects of this bug. - A bug has been corrected that caused ispell to allocate space for zero elements when initializing the expansion tables. - Hash files are now installed in reverse order of how they are listed in LANGUAGES. As a result, the default american or british hash file is now that first listed in LANGUAGES, rather than the last. - A misspelling in config.X has been corrected. This would only have affected Windows systems that didn't use the supplied local.h files. - EXEEXT is now printed by "ispell -vv". - The local.h.macos file now correctly leaves USG undefined. - There is now a local.h.cygwin file. Version 3.3.01 ============== - The default dictionary is now the first dictionary defined in LANGUAGES. It is no longer necessary to define MASTERHASH, DEFHASH, and DEFLANG. However, if you define those variables there, your definitions will be respected. - Count files are no longer used for dictionaries; this corrects problems with hash table overflows for some users who build multiple dictionaries. - If there is a directory named ~/.ispell_logs, ispell in command-line mode will create logs of your spelling corrections there. These logs may be useful in identifying your common errors. Someday, they may also be used for research into better methods of spelling correction. - A bug has been fixed that caused installation to fail because it referred to the nonexistent file "fixispell-a". - The pc/local.* files have been updated to choose consistent hash-file names. - A tiny portability problem in ispell.1X has been corrected. - DJGPP updates from Eli Zaretskii : * deformatters/Makefile (PROGRAMS): Use $EXEEXT. * config.X (LINK): Define only if undefined. (EXEXT): New variable. * Makefile (install-basic, install-dictbuild): Use $$EXEEXT for systems where executable files have special extensions. (install-deformatters): Run config.sh and pass EXEEXT to sub-Make. (config.sh): Add EXEEXT to the list of variables put into config.sh. * pc/make-dj.bat: Sync with the new files and build commands. * pc/makeemx.bat: Ditto. * pc/djterm.c (tputs, tgetent): Fix return value according to prototypes on proto.h. * pc/cfglang.sed (PATH_SEPARATOR): Set to ":", since english/Makefile prepends to PATH using the ":" separator. * pc/README: Update DJGPP repository URL, versions of utilities, and other relevant information. * pc/local.djgpp: Update Eli Zaretskii's email address. (LINK): Set to "cp -p". (MAN4DIR): Delete. (MAN45DIR): New; define to point to DJGPP's man5. (INSTALL): Define to invoke `ginstall'. (OPTIONVAR, LIBRARYVAR): Remove, they are handled by config.X. (EXEEXT): New; define to ".exe". - Constructed files (config.sh and defhash.h) now depend on the Makefile, since changes in the latter often affect the contents of the former. This is primarily of importance to the developer. Version 3.3.00 ============== - Item 4 in the license, which some people found objectionable, has been modified. - Ispell and the scripts now handle temporary files securely. - Sample local.h files are now distributed for several popular systems. - Support has been added for compiling under DOS/Windows. See pc/README for information. Note that Windows is still an unsupported operating system because I don't have a Windows development environment. I will happily accept patches to correct problems under Windows, but cannot solve bugs myself. - External deformatters now work. - The two supplied deformatters have been renamed to defmt-c and defmt-sh. This change is necessary to allow them to be built on stupid MS-DOS systems with limits on filename lengths. - A bug that could cause infinite loops when long lines were fed to ispell in "-a" mode has been corrected. - A number of misspellings have been removed from the English dictionaries, and new words have been added. - Command-line options can now be passed in the ISPELL_OPTIONS environment variable. - A CHANGES file is now being distributed. - A number of configuration options have been added. See config.X if something isn't to your liking. - Workarounds have been added for POSIX stupidity that broke backwards compatibility. - Obsolete notes about special systems have been removed from the README. - A number of configuration options have been changed to have defaults that are more appropriate to modern systems. - TeX deformatting has been slightly improved. - A kludge has been added to deal with the fact that the German "ess-zed" character has no uppercase equivalent. Previously, when ispell was presented with an all-uppercase word such as GROSS, it would suggest that same word as a correction. It now accepts such constructs without complaint. - A number of portability improvements have been added. - Most ispell support programs and scripts now support the -w switch where appropriate. - A new expand option, -e5, has been added. - A new deformatting flag, -o ("ordinary" file) has been added. - The shell scripts now use /tmp for temporary files by default, since some systems (Mac OS X) don't have /usr/tmp and modern machines have plenty of space in /tmp. - An ancient syntax error in parse.y, long undetected by older versions of both yacc and bison, has been corrected. - When MASKBITS is set to 64, the characters "[\]^_`" are now allowed as flag characters. - On 64-bit machines, MASKBITS will always be at least 64. - The defaults for various constants (in particular, the maximum size and number of string characters) have been expanded so that ispell can support most European languages at the default settings. - The English dictionary now supports all the ISO Latin-1 characters, so that words borrowed from other languages can be spell-checked. - The English affix file contains sample declarations for accented characters encoded in HTML and UTF-8. - A bug has been corrected that caused ispell to hang when control-Z was typed. Ispell also now correctly resets the terminal when suspended. However, it still doesn't refresh the screen when resumed; fixing the latter problem is not easy. - Thanks to Ed Avis, the code in tgood.c has been improved a lot. (Many of the other changes, such as the -e5 switch, are also due to Ed.) - Ispell will no longer segfault under certain conditions if HOME is not in the environment. - Trailing whitespace is now trimmed from the names of files included by the &Include_File& feature. Version 3.2.06 ============== Changes prior to version 3.2.06 are not itemized. ispell-3.4.02/PaxHeaders.22185/languages0000644000000000000000000000013213776416114014531 xustar0030 mtime=1610226764.421065341 30 atime=1610226764.417065334 30 ctime=1610226764.421065341 ispell-3.4.02/languages/0000755003214100001440000000000013776416114015661 5ustar00geofffaculty00000000000000ispell-3.4.02/languages/PaxHeaders.22185/british0000644000000000000000000000013213776416114016175 xustar0030 mtime=1610226764.417065334 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/british/0000755003214100001440000000000013776416114017325 5ustar00geofffaculty00000000000000ispell-3.4.02/languages/british/PaxHeaders.22185/Makefile0000644000000000000000000000013112466001174017700 xustar0029 mtime=1423442556.99783139 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/british/Makefile0000444003214100001440000003053412466001174020757 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.11 2015-02-08 16:42:36-08 geoff Exp $ # # Copyright 1994, 2001, 2015, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This Makefile allows a single installation to build an British # variant of ispell's English dictionary. It depends on the # languages/english directory for most of its input files. # # $Log: Makefile,v $ # Revision 1.11 2015-02-08 16:42:36-08 geoff # Support DESTDIR. Get rid of the old munchlist-suppressing code and # references to english.5. Use symbolic links instead of hard links; # symbolic links are safer. # # Revision 1.10 2015-02-08 01:11:55-08 geoff # Support DESTDIR. # # Revision 1.9 2005-04-14 14:27:35-07 geoff # Build english.5 as part of installation. # # Revision 1.8 2005/04/14 13:25:20 geoff # Update license. Drop unsq. Changes from Ed Avis: Allow LIBDIR to be # a relative path. Allow symbolic links as a configuration option. # # Revision 1.7 2001/07/25 21:51:48 geoff # *** empty log message *** # # Revision 1.6 2001/07/23 20:43:38 geoff # *** empty log message *** # # Revision 1.5 1999/01/07 01:23:20 geoff # Update the copyright. Get rid of the old shar-based dictioary building. # # Revision 1.4 1995/01/08 23:24:18 geoff # Remember to set SHELLDEBUG when making dictcomponents. # # Revision 1.3 1994/08/31 05:58:54 geoff # Create directories before installing into them, and be sure to set the # proper modes on manual pages. # # Revision 1.2 1994/05/17 06:37:42 geoff # Explicitly specify the affix files with a path so that initial # installation will work correctly. # # Revision 1.1 1994/04/27 02:45:55 geoff # Initial revision # # SHELL = /bin/sh MAKE = make CONFIG = ../../config.sh PATHADDER = ../.. BUILDHASH = ../../buildhash # The following variables should be set by the superior Makefile, # based on the LANGUAGES variable in config.X. # # There are four progressively-larger English dictionaries distributed # with ispell. These are named english.sml, english.med, english.lrg, # and english.xlg. For each of these, you can also build a "plus" # version (english.sml+, etc.) which is created by combining the # distributed version with an "extra" dictionary defined by EXTRADICT, # usually /usr/share/dict/words. The "plus" versions of dictionaries # require lots of time and temporary file space; make sure you have # set TMPDIR appropriately. # # The dictionaries to be built are listed in the MASTERDICTS variable, # separated by spaces. The hash files to be built (and installed) are # listed in the HASHFILES variable. Hash files are named as # "british.hash", where is the suffix of dictionary (e.g., # "med+"). The first-listed hash file will also be installed under # the name "british.hash". As a general rule, the dictionaries # needed to build the HASHFILES must be listed in the MASTERDICTS # variable. # # If you change AFFIXES for english, you should consider also changing # DEFLANG (in config.X) to match. # MASTERDICTS = Use_LANGUAGES_from_config.X HASHFILES = Use_LANGUAGES_from_config.X EXTRADICT = Use_LANGUAGES_from_config.X # # The following variables may be overridden by the superior Makefile, # based on the LANGUAGES variable in config.X. # AFFIXES = english.aff LANGUAGE = british # # DICTSRC specifies where the dictionary sources are found. You # should not have to change this. # DICTSRC = ../english # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: $(CONFIG) @set $(SHELLDEBUG); \ if [ ! -r english.0 ]; \ then \ $(MAKE) SHELLDEBUG=$(SHELLDEBUG) dictcomponents; \ else \ : ; \ fi @set $(SHELLDEBUG); \ for dict in $(MASTERDICTS); do \ if [ ! -r $$dict ]; \ then \ $(MAKE) \ 'EXTRADICT=$(EXTRADICT)' 'DICTSRC=$(DICTSRC)' \ SHELLDEBUG=$(SHELLDEBUG) $$dict; \ else \ : ; \ fi; \ done $(MAKE) SHELLDEBUG=$(SHELLDEBUG) $(HASHFILES) # Note the fooling around with LIBDIR. It might be a relative path, # relative to the top of the ispell source tree. So we have to cd to # ../.. before referring to $LIBDIR. There must be a better way... # install: all $(CONFIG) @. $(CONFIG); \ set -x; \ cd ../..; \ [ -d $(DESTDIR)$$LIBDIR ] || \ $(MAKE) -f Makefile NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ cd $(DESTDIR)$$LIBDIR; rm -f english.aff $(HASHFILES) $(LANGUAGE).hash @. $(CONFIG); \ set -x; \ cp $(DICTSRC)/english.aff $(HASHFILES) \ `cd ../..; cd $(DESTDIR)$$LIBDIR; pwd` @. $(CONFIG); \ set -x; \ cd ../..; cd $(DESTDIR)$$LIBDIR; \ chmod 644 english.aff $(HASHFILES); \ for i in $(HASHFILES); do \ $$LINK -s $$i $(LANGUAGE).hash; \ break; \ done # # Dependencies to build extra hash files # allhashes: normhashes plushashes normhashes: britishsml.hash britishmed.hash normhashes: britishlrg.hash britishxlg.hash plushashes: britishsml+.hash britishmed+.hash plushashes: britishlrg+.hash britishxlg+.hash britishsml.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) british.sml rm -f britishsml.hash $(BUILDHASH) british.sml $(DICTSRC)/$(AFFIXES) britishsml.hash britishsml+.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) british.sml+ rm -f britishsml+.hash $(BUILDHASH) british.sml+ $(DICTSRC)/$(AFFIXES) britishsml+.hash britishmed.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) british.med rm -f britishmed.hash $(BUILDHASH) british.med $(DICTSRC)/$(AFFIXES) britishmed.hash britishmed+.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) british.med+ rm -f britishmed+.hash $(BUILDHASH) british.med+ $(DICTSRC)/$(AFFIXES) britishmed+.hash britishlrg.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) british.lrg rm -f britishlrg.hash $(BUILDHASH) british.lrg $(DICTSRC)/$(AFFIXES) britishlrg.hash britishlrg+.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) british.lrg+ rm -f britishlrg+.hash $(BUILDHASH) british.lrg+ $(DICTSRC)/$(AFFIXES) britishlrg+.hash britishxlg.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) british.xlg rm -f britishxlg.hash $(BUILDHASH) british.xlg $(DICTSRC)/$(AFFIXES) britishxlg.hash britishxlg+.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) british.xlg+ rm -f britishxlg+.hash $(BUILDHASH) british.xlg+ $(DICTSRC)/$(AFFIXES) britishxlg+.hash # # The eight dictionaries, british.sml through british.xlg+, are # built by the following dependencies. We used to use some # Makefile tricks to avoid running munchlist unnecessarily, but # that leads to mistakes, and modern machines run munchlist fast # enough that it's no longer worth suppressing. # alldicts: normdicts plusdicts normdicts: british.sml normdicts: british.med normdicts: british.lrg normdicts: british.xlg plusdicts: british.sml+ plusdicts: british.med+ plusdicts: british.lrg+ plusdicts: british.xlg+ british.sml: english.sml rm -f british.sml @. $(CONFIG); \ set -x; \ $$LINK -s english.sml british.sml english.sml: $(CONFIG) english.sml: english.0 english.sml: british.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=british \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.sml british.sml+: english.sml+ rm -f british.sml+ @. $(CONFIG); \ set -x; \ $$LINK -s english.sml+ british.sml+ english.sml+: $(CONFIG) english.sml+: english.0 english.sml+: british.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=british \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.sml+ british.med: english.med rm -f british.med @. $(CONFIG); \ set -x; \ $$LINK -s english.med british.med english.med: $(CONFIG) english.med: english.0 english.med: british.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=british \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.med british.med+: english.med+ rm -f british.med+ @. $(CONFIG); \ set -x; \ $$LINK -s english.med+ british.med+ english.med+: $(CONFIG) english.med+: english.0 english.med+: british.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=british \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.med+ british.lrg: english.lrg rm -f british.lrg @. $(CONFIG); \ set -x; \ $$LINK -s english.lrg british.lrg english.lrg: $(CONFIG) english.lrg: english.0 english.lrg: british.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=british \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.lrg british.lrg+: english.lrg+ rm -f british.lrg+ @. $(CONFIG); \ set -x; \ $$LINK -s english.lrg+ british.lrg+ english.lrg+: $(CONFIG) english.lrg+: english.0 english.lrg+: british.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=british \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.lrg+ british.xlg: english.xlg rm -f british.xlg @. $(CONFIG); \ set -x; \ $$LINK -s english.xlg british.xlg english.xlg: $(CONFIG) english.xlg: english.0 english.xlg: british.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=british \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.xlg british.xlg+: english.xlg+ rm -f british.xlg+ @. $(CONFIG); \ set -x; \ $$LINK -s english.xlg+ british.xlg+ english.xlg+: $(CONFIG) english.xlg+: english.0 english.xlg+: british.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=british \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.xlg+ # # Dependencies to create the components of the dictionaries, # preferably by linking. We create some components that we'll # never use because the master English Makefile requires them. # dictcomponents: english.0 dictcomponents: english.1 dictcomponents: english.2 dictcomponents: english.3 dictcomponents: american.0 dictcomponents: american.1 dictcomponents: american.2 dictcomponents: altamer.0 dictcomponents: altamer.1 dictcomponents: altamer.2 dictcomponents: british.0 dictcomponents: british.1 dictcomponents: british.2 english.0 english.1 english.2 english.3 \ american.0 american.1 american.2 \ altamer.0 altamer.1 altamer.2 \ british.0 british.1 british.2: rm -f english.[0-3] american.[0-2] altamer.[012] british.[012] @set $(SHELLDEBUG); \ . $(CONFIG); \ for i in english.0 english.1 english.2 english.3 \ american.0 american.1 american.2 altamer.0 altamer.1 altamer.2 \ british.0 british.1 british.2; do \ $$LINK -s $(DICTSRC)/$$i . || $$LINK $(DICTSRC)/$$i . \ || cp $(DICTSRC)/$$i .; \ done clean: rm -f core *.hash *.stat *.cnt # # The following target allows you to clean out the combined # dictionary files. # dictclean: rm -f english.[0-3] american.[0-3] altamer.[0-3] british.[0-3] rm -f *.sml *.sml+ *.med *.med+ *.lrg *.lrg+ *.xlg *.xlg+ ispell-3.4.02/languages/PaxHeaders.22185/fix8bit.c0000644000000000000000000000007410227330312016313 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/fix8bit.c0000444003214100001440000003021610227330312017361 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: fix8bit.c,v 1.8 2005/04/13 23:52:42 geoff Exp $"; #endif /* * Copyright 1993, 1999, 2001, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * This is a stupid little program that can be used to convert 8-bit * characters to and from backslashed escape sequences. It is usually * more efficient to do this to affix files than to uuencode them for * transport. Ispell will read affix files in either format, so it is * merely personal preference as to which form to use. * * Usage: * * fix8bit {-7 | -8} < infile > outfile * * One of -7 and -8 must be specified. If -7 is given, any character * sequence that is not standard printable ASCII will be converted * into a backslashed octal sequence. If -8 is given, any backslashed * octal or hex sequence will be converted into the equivalent 8-bit * character. * * This program is not very smart. In particular, it makes no attempt * to understand comments, quoted strings, or similar constructs in * which you might not want conversion to take place. I suggest that * you "diff" the input against the output, and if you don't like the * result, correct it by hand. */ /* * $Log: fix8bit.c,v $ * Revision 1.8 2005/04/13 23:52:42 geoff * Clean up a bit of style, fix push_back to be tolerant of pushes while * there is still stuff on the queue, and make the octal coding conform * to C standards (i.e., don't require 3 digits), ill-advised though that * may be. * * Revision 1.7 2005/04/13 23:08:18 geoff * Ed Avis's improvements * * Revision 1.3 2001/11/07 18:59:26 epa98 * Rewrite of fix8bit.c prompted by SuSE's ispell-3.2.06-languages.patch. * I wanted to make sure the patch wouldn't break anything, so I wrote a * test suite, but doing that I found lots of other things that were * wrong, so I started trying to fix those... * * Makefile: fixed dependencies for fix8bit, added 'test' target. The * test suite checks fix8bit's pushback routines, runs test_fix8bit (see * below) and checks a couple of additional properties: fix8bit -8 | * fix8bit -7 == cat; fix8bit -7 | fix8bit -7 == fix8bit -7. * * fix8bit.c: rewrote to8bit() to better handle cases when the * backslashed sequence turns out to be illegal. The initial backslash * is printed and the remaining characters are pushed back to be read * again. This means that for example \\x41 will print as \A, in the * same way that !\x41 produces !A. It also handles escape sequences * cut off by EOF properly (again they are printed unchanged). This uses * a mini pushback library which has a test suite if you give main() the * argument --test-pushback. Also fixed the original problem with hex * sequences being miscomputed, which SuSE wrote the patch for. Added a * warning if the input already contains 8-bit chars (that would stop * -8 | -7 being identity). * * test_fix8bit: new file. This is a Perl script to run fix8bit -7 and * fix8bit -8 on every input file in test_data/ and check the results * against the expected results also in that directory. * * test_data/: new directory. Contains test cases, some written by hand * and some randomly generated by rand_gen. rand_gen tries to make 'well * behaved' input that doesn't muck up fix8bit -8 | fix8bit -7 or other * commands - but there are three flags you can use to tell it not to. * The random test cases have not been checked by hand, so they should be * used in addition to human-written ones. * * Revision 1.2 2001/10/05 14:22:30 epa98 * Imported 3.2.06.epa1 release. This was previously developed using * sporadic RCS for certain files, but I'm not really bothered about * rolling back beyond this release. * * Revision 1.6 2001/07/25 21:51:47 geoff * *** empty log message *** * * Revision 1.5 2001/07/23 20:43:38 geoff * *** empty log message *** * * Revision 1.4 1999/01/07 06:07:52 geoff * Update the copyright. * * Revision 1.3 1994/01/25 07:12:26 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include #include #include int main (); /* Convert to/from 8-bit sequences */ static void usage (); /* Issue a usage message */ static void to7bit (); /* Convert from 8-bit sequences */ static void to8bit (); /* Convert to 8-bit sequences */ static int get_char (); /* Get char with pushback */ static void push_back (); /* Push back character */ static void warn_not_8bit (); /* Warn if input isn't 8-bit */ extern void exit (); /* Terminate program */ /* * Maximum number of characters that get_char can push back */ #define MAX_PUSHED_BACK 3 static int num_pushed_back = 0; /* Amount of data in pushed_back */ static int pushed_back[MAX_PUSHED_BACK]; /* Characters that get_char has pushed back */ int main (argc, argv) /* Convert to/from 8-bit sequences */ int argc; /* Argument count */ char * argv[]; /* Argument vector */ { if (argc != 2) usage (); if (strcmp (argv[1], "-7") == 0) to7bit (); else if (strcmp (argv[1], "-8") == 0) to8bit (); else usage (); return 0; } static void usage () /* Issue a usage message */ { (void) fprintf (stderr, "Usage: fix8bit {-7 | -8} < infile > outfile\n"); exit (1); } static void to7bit () /* Convert from 8-bit sequences */ { int ch; /* Next character read from input */ while ((ch = getchar ()) != EOF) { ch &= 0xFF; if (ch >= 0x80) (void) printf ("\\%3.3o", (unsigned) ch); else (void) putchar (ch); } } static void to8bit () /* Convert to 8-bit sequences */ { int backch; /* Backslashed character being built */ int ch; /* Next character read from input */ int ch_1; /* First character after backslash */ int ch_2; /* Second character after backslash */ int ch_3; /* Third character after backslash */ while ((ch = get_char ()) != EOF) { ch &= 0xFF; if (ch != '\\') { /* Not a backslashed sequence */ if (ch >= 0x80) { fprintf(stderr, "warning: passing through 8-bit character unchanged: 0x%x\n", ch); } (void) putchar (ch); } else { /* * Collect a backslashed character. If we have to abandon * our reading because we got a bad character or EOF, * then we output the backslash (since it doesn't start a * legal escape sequence) and push back the remaining * characters for use next time. This is so that * \\x60 will become \` , for example. */ ch_1 = get_char (); switch (ch_1) { case 'x': case 'X': /* \x.. hex sequence. Check following character... */ ch_2 = get_char (); if (ch_2 >= '0' && ch_2 <= '9') backch = ch_2 - '0'; else if (ch_2 >= 'a' && ch_2 <= 'f') backch = ch_2 - 'a' + 0xA; else if (ch_2 >= 'A' && ch_2 <= 'F') backch = ch_2 - 'A' + 0xA; else { /* * \x not followed by valid hex digit. Put * out the backslash, and push the rest back. * (We could output the x right now, but it's * safer for future refinements to push it * back, and the computational cost is * negligible.) */ (void) putchar ('\\'); if (ch_2 != EOF) (void) push_back (ch_2); (void) push_back (ch_1); break; } /* Third character after the backslash. */ ch_3 = get_char (); if (ch_3 >= '0' && ch_3 <= '9') backch = (backch << 4) | (ch_3 - '0'); else if (ch_3 >= 'a' && ch_3 <= 'f') backch = (backch << 4) | (ch_3 - 'a' + 0xA); else if (ch_3 >= 'A' && ch_3 <= 'F') backch = (backch << 4) | (ch_3 - 'A' + 0xA); else { /* * Not a hex digit. The rules require \x to * be followed by exactly two hex digits, so * we'll reject the entire sequence. Again, * we push back everything after the backslash * so that future modifications will be safer. */ (void) putchar ('\\'); if (ch_3 != EOF) (void) push_back (ch_3); (void) push_back (ch_2); (void) push_back (ch_1); break; } /* * All OK. Warn if necessary, and the output the * converted character. */ warn_not_8bit (backch); (void) putchar (backch); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': /* * We're starting a backslashed octal sequence. * We just got the first character, so do the second. * Octal is a bit more fun because the rules allow * variable-length sequences: \7a is the same as * \007a: a 7 (BEL) character followed by "a" (but * note that \10a is NOT the same as \0010a: the * first is a hex 8 (BS) followed by "A" while the * second is hex 1 (SOH) followed by "0a"). */ backch = ch_1 - '0'; ch_2 = get_char (); if (ch_2 >= '0' && ch_2 <= '7') backch = (backch << 3) | (ch_2 - '0'); else { (void) putchar (backch); if (ch_2 != EOF) (void) push_back (ch_2); break; } /* Third character. */ ch_3 = get_char (); if (ch_3 >= '0' && ch_3 <= '7') backch = (backch << 3) | (ch_3 - '0'); else { (void) putchar (backch); if (ch_3 != EOF) (void) push_back (ch_3); break; } /* All OK. */ warn_not_8bit (backch); (void) putchar (backch); break; default: /* * A backslash was followed by something that's * not a valid hex or octal code. Put out the * backslash, and push back the following * character. */ (void) putchar ('\\'); if (ch_1 != EOF) (void) push_back (ch_1); } } } } /* * Simple character input with limited-length pushback. * Unfortunately, ungetc() handles only a single character of * pushback, and we may need several. */ static int get_char () { if (num_pushed_back > 0) return pushed_back[--num_pushed_back]; else return getchar(); } /* * Push a character onto the push-back queue. */ static void push_back (ch) int ch; /* Character to push back */ { assert (num_pushed_back < MAX_PUSHED_BACK); pushed_back[num_pushed_back++] = ch; } /* * If a character isn't 8-bit, put out a warning. */ static void warn_not_8bit (ch) int ch; /* Character to test */ { if (ch < 0x80) fprintf(stderr, "warning: converted an escape sequence to " "a 7-bit character: 0x%x\n", ch); } ispell-3.4.02/languages/PaxHeaders.22185/portugues0000644000000000000000000000013213776416114016566 xustar0030 mtime=1610226764.421065341 30 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/languages/portugues/0000755003214100001440000000000013776416114017716 5ustar00geofffaculty00000000000000ispell-3.4.02/languages/portugues/PaxHeaders.22185/Makefile0000644000000000000000000000013212465624133020277 xustar0030 mtime=1423386715.389463091 30 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/languages/portugues/Makefile0000444003214100001440000001176612465624133021363 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.5 2015-02-08 01:11:55-08 geoff Exp $ # # Copyright 1995, 2001, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This makefile is an example of how you might write a makefile for a # simple language which has only a single dictionary available. For # an example of a complex makefile, look at the makefile for English. # # $Log: Makefile,v $ # Revision 1.5 2015-02-08 01:11:55-08 geoff # Support DESTDIR. # # Revision 1.4 2005-04-14 06:27:40-07 geoff # Update license. Allow LIBDIR to be relative. Be sure to get copies # of buildhash and fix8bit from the source tree. Drop unsq. # # Revision 1.3.1.1 2002/06/21 00:36:07 geoff # Edward Avis's changes # # Revision 1.3 2001/10/08 12:09:46 epa98 # Purge all traces of 'sq' and 'unsq'. (Apart from the log entries :-)) # # Revision 1.2 2001/10/05 14:22:30 epa98 # Imported 3.2.06.epa1 release. This was previously developed using # sporadic RCS for certain files, but I'm not really bothered about # rolling back beyond this release. # # Revision 1.3 2001/07/25 21:51:48 geoff # *** empty log message *** # # Revision 1.2 2001/07/23 20:43:38 geoff # *** empty log message *** # # Revision 1.1 1995/04/21 04:40:06 geoff # Initial revision # # SHELL = /bin/sh MAKE = make CONFIG = ../../config.sh PATHADDER = ../.. BUILDHASH = ../../buildhash FIX8BIT = ../fix8bit # # The following variables make it easy to adapt this Makefile to # numerous languages. # LANGUAGE = portugues DICTIONARY = $(LANGUAGE).words HASHFILE = $(LANGUAGE).hash # # The following variables may be overridden by the superior Makefile, # based on the LANGUAGES variable in config.X. # AFFIXES = $(LANGUAGE).aff # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: $(HASHFILE) install: all $(CONFIG) @. $(CONFIG); \ set -x; \ cd ../..; \ [ -d $(DESTDIR)$$LIBDIR ] || \ $(MAKE) -f Makefile NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ cd $(DESTDIR)$$LIBDIR; rm -f $(LANGUAGE).aff $(HASHFILE) @. $(CONFIG); \ set -x; \ cp $(LANGUAGE).aff $(HASHFILE) \ `cd ../..; cd $(DESTDIR)$$LIBDIR; pwd` @. $(CONFIG); \ set -x; \ cd ../..; cd $(DESTDIR)$$LIBDIR; \ chmod 644 $(LANGUAGE).aff $(HASHFILE) $(HASHFILE): $(BUILDHASH) $(AFFIXES) $(DICTIONARY) rm -f $(HASHFILE) munchlist -v -l $(AFFIXES) $(DICTIONARY) > $(LANGUAGE).words+ $(BUILDHASH) $(LANGUAGE).words+ $(AFFIXES) $(HASHFILE) build: $(BUILDHASH) -s $(LANGUAGE).words+ $(AFFIXES) $(HASHFILE) $(LANGUAGE)-alt.aff: $(LANGUAGE)-alt.7bit $(FIX8BIT) $(FIX8BIT) -8 < $(LANGUAGE)-alt.7bit > $(LANGUAGE)-alt.aff $(FIX8BIT): ../fix8bit.c cd ..; $(MAKE) fix8bit # # The following dependency can be executed when ispell is unpacked, # to unpack the dictionaries. # unpack: $(AFFIXES) clean: rm -f core *.hash *.stat *.cnt # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # kitclean: # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # dictclean: ispell-3.4.02/languages/PaxHeaders.22185/norsk0000644000000000000000000000013213776416114015665 xustar0030 mtime=1610226764.421065341 30 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/languages/norsk/0000755003214100001440000000000013776416114017015 5ustar00geofffaculty00000000000000ispell-3.4.02/languages/norsk/PaxHeaders.22185/Makefile0000644000000000000000000000013212465624133017376 xustar0030 mtime=1423386715.386463071 30 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/languages/norsk/Makefile0000444003214100001440000001126012465624133020447 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.11 2015-02-08 01:11:55-08 geoff Exp $ # # Copyright 1993, 2001, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This makefile is an example of how you might write a makefile for a # simple language which has only a single dictionary available. For # an example of a complex makefile, look at the makefile for English. # # $Log: Makefile,v $ # Revision 1.11 2015-02-08 01:11:55-08 geoff # Support DESTDIR. # # Revision 1.10 2005-04-13 17:07:14-07 geoff # Update license. Drop unsq. Allow LIBDIR to be a relative path. # # Revision 1.9 2001/07/25 21:51:47 geoff # *** empty log message *** # # Revision 1.8 2001/07/23 20:43:37 geoff # *** empty log message *** # # Revision 1.7 1994/08/31 05:58:48 geoff # Create directories before installing into them. # # Revision 1.6 1994/02/22 06:09:09 geoff # Add SHELLDEBUG. # # Revision 1.5 1994/02/07 06:07:57 geoff # Add a dummy else clause to shell if-test for Ultrix # # Revision 1.4 1994/01/25 07:12:48 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # SHELL = /bin/sh MAKE = make CONFIG = ../../config.sh PATHADDER = ../.. BUILDHASH = ../../buildhash FIX8BIT = ../fix8bit # # The following variables make it easy to adapt this Makefile to # numerous languages. # LANGUAGE = norsk DICTIONARY = $(LANGUAGE).sml HASHFILE = $(LANGUAGE).hash # # The following variables may be overridden by the superior Makefile, # based on the LANGUAGES variable in config.X. # AFFIXES = $(LANGUAGE).aff # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: $(HASHFILE) install: all $(CONFIG) @. $(CONFIG); \ set -x; \ cd ../..; \ [ -d $(DESTDIR)$$LIBDIR ] || \ $(MAKE) -f Makefile NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ cd $(DESTDIR)$$LIBDIR; rm -f $(LANGUAGE).aff $(HASHFILE) @. $(CONFIG); \ set -x; \ cp $(LANGUAGE).aff $(HASHFILE) \ `cd ../..; cd $(DESTDIR)$$LIBDIR; pwd` @. $(CONFIG); \ set -x; \ cd ../..; cd $(DESTDIR)$$LIBDIR; \ chmod 644 $(LANGUAGE).aff $(HASHFILE) $(HASHFILE): $(BUILDHASH) $(AFFIXES) $(DICTIONARY) rm -f $(HASHFILE) $(BUILDHASH) $(DICTIONARY) $(AFFIXES) $(HASHFILE) $(AFFIXES): $(LANGUAGE).7bit $(FIX8BIT) $(FIX8BIT) -8 < $(LANGUAGE).7bit > $(AFFIXES) $(FIX8BIT): ../fix8bit.c cd ..; $(MAKE) fix8bit # # The following dependency can be executed when ispell is unpacked, # to unpack the dictionaries. # unpack: $(AFFIXES) clean: rm -f core *.hash *.stat *.cnt # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # kitclean: # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # dictclean: ispell-3.4.02/languages/PaxHeaders.22185/svenska0000644000000000000000000000013213776416114016203 xustar0030 mtime=1610226764.421065341 30 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/languages/svenska/0000755003214100001440000000000013776416114017333 5ustar00geofffaculty00000000000000ispell-3.4.02/languages/svenska/PaxHeaders.22185/Makefile0000644000000000000000000000013212465624133017714 xustar0030 mtime=1423386715.396463138 30 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/languages/svenska/Makefile0000444003214100001440000001105312465624133020765 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.11 2015-02-08 01:11:55-08 geoff Exp $ # # Copyright 1993, 2001, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This makefile is an example of how you might write a makefile for a # simple language which has only a single dictionary available. For # an example of a complex makefile, look at the makefile for English. # # $Log: Makefile,v $ # Revision 1.11 2015-02-08 01:11:55-08 geoff # Support DESTDIR. # # Revision 1.10 2005-04-13 17:08:11-07 geoff # Update license. Drop unsq. Allow LIBDIR to be a relative path. # # Revision 1.9 2001/07/25 21:51:48 geoff # *** empty log message *** # # Revision 1.8 2001/07/23 20:43:38 geoff # *** empty log message *** # # Revision 1.7 1994/08/31 05:59:02 geoff # Create directories before installing into them. # # Revision 1.6 1994/02/22 06:09:16 geoff # Add SHELLDEBUG. # # Revision 1.5 1994/02/07 06:07:57 geoff # Add a dummy else clause to shell if-test for Ultrix # # Revision 1.4 1994/01/25 07:12:50 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # SHELL = /bin/sh MAKE = make CONFIG = ../../config.sh PATHADDER = ../.. BUILDHASH = ../../buildhash FIX8BIT = ../fix8bit # # The following variables make it easy to adapt this Makefile to # numerous languages. # LANGUAGE = svenska DICTIONARY = $(LANGUAGE).sml HASHFILE = $(LANGUAGE).hash # # The following variables may be overridden by the superior Makefile, # based on the LANGUAGES variable in config.X. # AFFIXES = $(LANGUAGE).aff # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: $(HASHFILE) install: all $(CONFIG) @. $(CONFIG); \ set -x; \ cd ../..; \ [ -d $(DESTDIR)$$LIBDIR ] || \ $(MAKE) -f Makefile NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ cd $(DESTDIR)$$LIBDIR; rm -f $(LANGUAGE).aff $(HASHFILE) @. $(CONFIG); \ set -x; \ cp $(LANGUAGE).aff $(HASHFILE) \ `cd ../..; cd $(DESTDIR)$$LIBDIR; pwd` @. $(CONFIG); \ set -x; \ cd ../..; cd $(DESTDIR)$$LIBDIR; \ chmod 644 $(LANGUAGE).aff $(HASHFILE) $(HASHFILE): $(BUILDHASH) $(AFFIXES) $(DICTIONARY) rm -f $(HASHFILE) $(BUILDHASH) $(DICTIONARY) $(AFFIXES) $(HASHFILE) $(AFFIXES): $(LANGUAGE).7bit $(FIX8BIT) $(FIX8BIT) -8 < $(LANGUAGE).7bit > $(AFFIXES) $(FIX8BIT): ../fix8bit.c cd ..; $(MAKE) fix8bit # # The following dependency can be executed when ispell is unpacked, # to unpack the dictionaries. # unpack: $(AFFIXES) clean: rm -f core *.hash *.stat *.cnt # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # kitclean: # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # dictclean: ispell-3.4.02/languages/PaxHeaders.22185/american0000644000000000000000000000013213776416114016310 xustar0030 mtime=1610226764.417065334 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/american/0000755003214100001440000000000013776416114017440 5ustar00geofffaculty00000000000000ispell-3.4.02/languages/american/PaxHeaders.22185/Makefile0000644000000000000000000000013212466001146020013 xustar0030 mtime=1423442534.775630497 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/american/Makefile0000444003214100001440000003070212466001146021066 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.11 2015-02-08 16:42:14-08 geoff Exp $ # # Copyright 1994, 2001, 2015, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This Makefile allows a single installation to build an American # variant of ispell's English dictionary. It depends on the # languages/english directory for most of its input files. # # $Log: Makefile,v $ # Revision 1.11 2015-02-08 16:42:14-08 geoff # Support DESTDIR. Get rid of the old munchlist-suppressing code and # references to english.5. Use symbolic links instead of hard links; # symbolic links are safer. # # Revision 1.10 2015-02-08 01:11:55-08 geoff # Support DESTDIR. # # Revision 1.9 2005-04-14 14:27:25-07 geoff # Build english.5 as part of installation. # # Revision 1.8 2005/04/14 13:25:20 geoff # Update license. Drop unsq. Changes from Ed Avis: Allow LIBDIR to be # a relative path. Allow symbolic links as a configuration option. # # Revision 1.7 2001/07/25 21:51:47 geoff # *** empty log message *** # # Revision 1.6 2001/07/23 20:43:38 geoff # *** empty log message *** # # Revision 1.5 1999/01/07 01:23:18 geoff # Update the copyright. Get rid of the old shar-based dictioary building. # # Revision 1.4 1995/01/08 23:24:15 geoff # Remember to set SHELLDEBUG when making dictcomponents. # # Revision 1.3 1994/08/31 05:58:53 geoff # Create directories before installing into them, and be sure to set the # proper modes on manual pages. # # Revision 1.2 1994/05/17 06:37:40 geoff # Explicitly specify the affix files with a path so that initial # installation will work correctly. # # Revision 1.1 1994/04/27 02:46:10 geoff # Initial revision # # SHELL = /bin/sh MAKE = make CONFIG = ../../config.sh PATHADDER = ../.. BUILDHASH = ../../buildhash # The following variables should be set by the superior Makefile, # based on the LANGUAGES variable in config.X. # # There are four progressively-larger English dictionaries distributed # with ispell. These are named english.sml, english.med, english.lrg, # and english.xlg. For each of these, you can also build a "plus" # version (english.sml+, etc.) which is created by combining the # distributed version with an "extra" dictionary defined by EXTRADICT, # usually /usr/share/dict/words. The "plus" versions of dictionaries # require lots of time and temporary file space; make sure you have # set TMPDIR appropriately. # # The dictionaries to be built are listed in the MASTERDICTS variable, # separated by spaces. The hash files to be built (and installed) are # listed in the HASHFILES variable. Hash files are named as # "american.hash", where is the suffix of dictionary (e.g., # "med+"). The first-listed hash file will also be installed under # the name "american.hash". As a general rule, the dictionaries # needed to build the HASHFILES must be listed in the MASTERDICTS # variable. # # If you change AFFIXES for english, you should consider also changing # DEFLANG (in config.X) to match. # MASTERDICTS = Use_LANGUAGES_from_config.X HASHFILES = Use_LANGUAGES_from_config.X EXTRADICT = Use_LANGUAGES_from_config.X # # The following variables may be overridden by the superior Makefile, # based on the LANGUAGES variable in config.X. # AFFIXES = english.aff LANGUAGE = american # # DICTSRC specifies where the dictionary sources are found. You # should not have to change this. # DICTSRC = ../english # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: $(CONFIG) @set $(SHELLDEBUG); \ if [ ! -r english.0 ]; \ then \ $(MAKE) SHELLDEBUG=$(SHELLDEBUG) dictcomponents; \ else \ : ; \ fi @set $(SHELLDEBUG); \ for dict in $(MASTERDICTS); do \ if [ ! -r $$dict ]; \ then \ $(MAKE) \ 'EXTRADICT=$(EXTRADICT)' 'DICTSRC=$(DICTSRC)' \ SHELLDEBUG=$(SHELLDEBUG) $$dict; \ else \ : ; \ fi; \ done $(MAKE) SHELLDEBUG=$(SHELLDEBUG) $(HASHFILES) # Note the fooling around with LIBDIR. It might be a relative path, # relative to the top of the ispell source tree. So we have to cd to # ../.. before referring to $LIBDIR. There must be a better way... # install: all $(CONFIG) @. $(CONFIG); \ set -x; \ cd ../..; \ [ -d $(DESTDIR)$$LIBDIR ] || \ $(MAKE) -f Makefile NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ cd $(DESTDIR)$$LIBDIR; rm -f english.aff $(HASHFILES) $(LANGUAGE).hash @. $(CONFIG); \ set -x; \ cp $(DICTSRC)/english.aff $(HASHFILES) \ `cd ../..; cd $(DESTDIR)$$LIBDIR; pwd` @. $(CONFIG); \ set -x; \ cd ../..; cd $(DESTDIR)$$LIBDIR; \ chmod 644 english.aff $(HASHFILES); \ for i in $(HASHFILES); do \ $$LINK -s $$i $(LANGUAGE).hash; \ break; \ done # # Dependencies to build extra hash files # allhashes: normhashes plushashes normhashes: americansml.hash americanmed.hash normhashes: americanlrg.hash americanxlg.hash plushashes: americansml+.hash americanmed+.hash plushashes: americanlrg+.hash americanxlg+.hash americansml.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) american.sml rm -f americansml.hash $(BUILDHASH) american.sml $(DICTSRC)/$(AFFIXES) americansml.hash americansml+.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) american.sml+ rm -f americansml+.hash $(BUILDHASH) american.sml+ $(DICTSRC)/$(AFFIXES) americansml+.hash americanmed.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) american.med rm -f americanmed.hash $(BUILDHASH) american.med $(DICTSRC)/$(AFFIXES) americanmed.hash americanmed+.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) american.med+ rm -f americanmed+.hash $(BUILDHASH) american.med+ $(DICTSRC)/$(AFFIXES) americanmed+.hash americanlrg.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) american.lrg rm -f americanlrg.hash $(BUILDHASH) american.lrg $(DICTSRC)/$(AFFIXES) americanlrg.hash americanlrg+.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) american.lrg+ rm -f americanlrg+.hash $(BUILDHASH) american.lrg+ $(DICTSRC)/$(AFFIXES) americanlrg+.hash americanxlg.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) american.xlg rm -f americanxlg.hash $(BUILDHASH) american.xlg $(DICTSRC)/$(AFFIXES) americanxlg.hash americanxlg+.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) american.xlg+ rm -f americanxlg+.hash $(BUILDHASH) american.xlg+ $(DICTSRC)/$(AFFIXES) americanxlg+.hash # # The eight dictionaries, american.sml through american.xlg+, are # built by the following dependencies. We used to use some # Makefile tricks to avoid running munchlist unnecessarily, but # that leads to mistakes, and modern machines run munchlist fast # enough that it's no longer worth suppressing. # alldicts: normdicts plusdicts normdicts: american.sml normdicts: american.med normdicts: american.lrg normdicts: american.xlg plusdicts: american.sml+ plusdicts: american.med+ plusdicts: american.lrg+ plusdicts: american.xlg+ american.sml: english.sml rm -f american.sml @. $(CONFIG); \ set -x; \ $$LINK -s english.sml american.sml english.sml: $(CONFIG) english.sml: english.0 english.sml: american.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=american \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.sml american.sml+: english.sml+ rm -f american.sml+ @. $(CONFIG); \ set -x; \ $$LINK -s english.sml+ american.sml+ english.sml+: $(CONFIG) english.sml+: english.0 english.sml+: american.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=american \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.sml+ american.med: english.med rm -f american.med @. $(CONFIG); \ set -x; \ $$LINK -s english.med american.med english.med: $(CONFIG) english.med: english.0 english.med: american.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=american \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.med american.med+: english.med+ rm -f american.med+ @. $(CONFIG); \ set -x; \ $$LINK -s english.med+ american.med+ english.med+: $(CONFIG) english.med+: english.0 english.med+: american.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=american \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.med+ american.lrg: english.lrg rm -f american.lrg @. $(CONFIG); \ set -x; \ $$LINK -s english.lrg american.lrg english.lrg: $(CONFIG) english.lrg: english.0 english.lrg: american.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=american \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.lrg american.lrg+: english.lrg+ rm -f american.lrg+ @. $(CONFIG); \ set -x; \ $$LINK -s english.lrg+ american.lrg+ english.lrg+: $(CONFIG) english.lrg+: english.0 english.lrg+: american.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=american \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.lrg+ american.xlg: english.xlg rm -f american.xlg @. $(CONFIG); \ set -x; \ $$LINK -s english.xlg american.xlg english.xlg: $(CONFIG) english.xlg: english.0 english.xlg: american.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=american \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.xlg american.xlg+: english.xlg+ rm -f american.xlg+ @. $(CONFIG); \ set -x; \ $$LINK -s english.xlg+ american.xlg+ english.xlg+: $(CONFIG) english.xlg+: english.0 english.xlg+: american.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=american \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.xlg+ # # Dependencies to create the components of the dictionaries, # preferably by linking. We create some components that we'll # never use because the master English Makefile requires them. # dictcomponents: english.0 dictcomponents: english.1 dictcomponents: english.2 dictcomponents: english.3 dictcomponents: american.0 dictcomponents: american.1 dictcomponents: american.2 dictcomponents: altamer.0 dictcomponents: altamer.1 dictcomponents: altamer.2 dictcomponents: british.0 dictcomponents: british.1 dictcomponents: british.2 english.0 english.1 english.2 english.3 \ american.0 american.1 american.2 \ altamer.0 altamer.1 altamer.2 \ british.0 british.1 british.2: rm -f english.[0-3] american.[0-2] altamer.[012] british.[012] @set $(SHELLDEBUG); \ . $(CONFIG); \ for i in english.0 english.1 english.2 english.3 \ american.0 american.1 american.2 altamer.0 altamer.1 altamer.2 \ british.0 british.1 british.2; do \ $$LINK -s $(DICTSRC)/$$i . || $$LINK $(DICTSRC)/$$i . \ || cp $(DICTSRC)/$$i .; \ done clean: rm -f core *.hash *.stat *.cnt # # The following target allows you to clean out the combined # dictionary files. # dictclean: rm -f english.[0-3] american.[0-3] altamer.[0-3] british.[0-3] rm -f *.sml *.sml+ *.med *.med+ *.lrg *.lrg+ *.xlg *.xlg+ ispell-3.4.02/languages/PaxHeaders.22185/francais0000644000000000000000000000013213776416114016317 xustar0030 mtime=1610226764.421065341 30 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/languages/francais/0000755003214100001440000000000013776416114017447 5ustar00geofffaculty00000000000000ispell-3.4.02/languages/francais/PaxHeaders.22185/Makefile0000644000000000000000000000013212465624133020030 xustar0030 mtime=1423386715.379463024 30 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/languages/francais/Makefile0000444003214100001440000001144612465624133021107 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.12 2015-02-08 01:11:55-08 geoff Exp $ # # Copyright 1993, 2001, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This makefile is an example of how you might write a makefile for a # simple language which has only a single dictionary available. For # an example of a complex makefile, look at the makefile for English. # # $Log: Makefile,v $ # Revision 1.12 2015-02-08 01:11:55-08 geoff # Support DESTDIR. # # Revision 1.11 2005-04-13 17:06:51-07 geoff # Update license. Drop unsq. Allow LIBDIR to be a relative path. # # Revision 1.10 2001/07/25 21:51:48 geoff # *** empty log message *** # # Revision 1.9 2001/07/23 20:43:38 geoff # *** empty log message *** # # Revision 1.8 1994/08/31 05:58:58 geoff # Create directories before installing into them. # # Revision 1.7 1994/02/22 06:09:14 geoff # Add SHELLDEBUG. # # Revision 1.6 1994/02/07 06:07:57 geoff # Add a dummy else clause to shell if-test for Ultrix # # Revision 1.5 1994/01/25 07:12:44 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # SHELL = /bin/sh MAKE = make CONFIG = ../../config.sh PATHADDER = ../.. BUILDHASH = ../../buildhash FIX8BIT = ../fix8bit # # The following variables make it easy to adapt this Makefile to # numerous languages. # LANGUAGE = francais DICTIONARY = $(LANGUAGE).sml HASHFILE = $(LANGUAGE).hash # # The following variables may be overridden by the superior Makefile, # based on the LANGUAGES variable in config.X. # AFFIXES = $(LANGUAGE).aff # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: $(HASHFILE) install: all $(CONFIG) @. $(CONFIG); \ set -x; \ cd ../..; \ [ -d $(DESTDIR)$$LIBDIR ] || \ $(MAKE) -f Makefile NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ cd $(DESTDIR)$$LIBDIR; rm -f $(LANGUAGE).aff $(HASHFILE) @. $(CONFIG); \ set -x; \ cp $(LANGUAGE).aff $(HASHFILE) \ `cd ../..; cd $(DESTDIR)$$LIBDIR; pwd` @. $(CONFIG); \ set -x; \ cd ../..; cd $(DESTDIR)$$LIBDIR; \ chmod 644 $(LANGUAGE).aff $(HASHFILE) $(HASHFILE): $(BUILDHASH) $(AFFIXES) $(DICTIONARY) rm -f $(HASHFILE) $(BUILDHASH) $(DICTIONARY) $(AFFIXES) $(HASHFILE) $(AFFIXES): $(LANGUAGE).7bit $(FIX8BIT) $(FIX8BIT) -8 < $(LANGUAGE).7bit > $(AFFIXES) $(LANGUAGE)-alt.aff: $(LANGUAGE)-alt.7bit $(FIX8BIT) $(FIX8BIT) -8 < $(LANGUAGE)-alt.7bit > $(LANGUAGE)-alt.aff $(FIX8BIT): ../fix8bit.c cd ..; $(MAKE) fix8bit # # The following dependency can be executed when ispell is unpacked, # to unpack the dictionaries. # unpack: $(AFFIXES) clean: rm -f core *.hash *.stat *.cnt # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # kitclean: # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # dictclean: ispell-3.4.02/languages/PaxHeaders.22185/nederlands0000644000000000000000000000013213776416114016650 xustar0030 mtime=1610226764.421065341 30 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/languages/nederlands/0000755003214100001440000000000013776416114020000 5ustar00geofffaculty00000000000000ispell-3.4.02/languages/nederlands/PaxHeaders.22185/Makefile0000644000000000000000000000013112465624133020360 xustar0029 mtime=1423386715.38346305 30 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/languages/nederlands/Makefile0000444003214100001440000001126212465624133021434 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.9 2015-02-08 01:11:55-08 geoff Exp $ # # Copyright 1993, 2001, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This makefile is an example of how you might write a makefile for a # simple language which has only a single dictionary available. For # an example of a complex makefile, look at the makefile for English. # # $Log: Makefile,v $ # Revision 1.9 2015-02-08 01:11:55-08 geoff # Support DESTDIR. # # Revision 1.8 2005-04-13 17:07:23-07 geoff # Update license. Drop unsq. Allow LIBDIR to be a relative path. # # Revision 1.7 2001/07/25 21:51:47 geoff # *** empty log message *** # # Revision 1.6 2001/07/23 20:43:38 geoff # *** empty log message *** # # Revision 1.5 1994/08/31 05:58:50 geoff # Create directories before installing into them. # # Revision 1.4 1994/02/22 06:09:11 geoff # Add SHELLDEBUG. # # Revision 1.3 1994/02/07 06:07:57 geoff # Add a dummy else clause to shell if-test for Ultrix # # Revision 1.2 1994/01/25 07:12:45 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # SHELL = /bin/sh MAKE = make CONFIG = ../../config.sh PATHADDER = ../.. BUILDHASH = ../../buildhash FIX8BIT = ../fix8bit # # The following variables make it easy to adapt this Makefile to # numerous languages. # LANGUAGE = nederlands DICTIONARY = $(LANGUAGE).sml HASHFILE = $(LANGUAGE).hash # # The following variables may be overridden by the superior Makefile, # based on the LANGUAGES variable in config.X. # AFFIXES = $(LANGUAGE).aff # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: $(HASHFILE) install: all $(CONFIG) @. $(CONFIG); \ set -x; \ cd ../..; \ [ -d $(DESTDIR)$$LIBDIR ] || \ $(MAKE) -f Makefile NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ cd $(DESTDIR)$$LIBDIR; rm -f $(LANGUAGE).aff $(HASHFILE) @. $(CONFIG); \ set -x; \ cp $(LANGUAGE).aff $(HASHFILE) \ `cd ../..; cd $(DESTDIR)$$LIBDIR; pwd` @. $(CONFIG); \ set -x; \ cd ../..; cd $(DESTDIR)$$LIBDIR; \ chmod 644 $(LANGUAGE).aff $(HASHFILE) $(HASHFILE): $(BUILDHASH) $(AFFIXES) $(DICTIONARY) rm -f $(HASHFILE) $(BUILDHASH) $(DICTIONARY) $(AFFIXES) $(HASHFILE) $(AFFIXES): $(LANGUAGE).7bit $(FIX8BIT) $(FIX8BIT) -8 < $(LANGUAGE).7bit > $(AFFIXES) $(FIX8BIT): ../fix8bit.c cd ..; $(MAKE) fix8bit # # The following dependency can be executed when ispell is unpacked, # to unpack the dictionaries. # unpack: $(AFFIXES) clean: rm -f core *.hash *.stat *.cnt # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # kitclean: # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # dictclean: ispell-3.4.02/languages/PaxHeaders.22185/english0000644000000000000000000000013213776416114016162 xustar0030 mtime=1610226764.421065341 30 atime=1610226764.417065334 30 ctime=1610226764.421065341 ispell-3.4.02/languages/english/0000755003214100001440000000000013776416114017312 5ustar00geofffaculty00000000000000ispell-3.4.02/languages/english/PaxHeaders.22185/british.00000644000000000000000000000013213770761353017766 xustar0030 mtime=1608770283.948200586 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/english/british.00000444003214100001440000002256313770761353021047 0ustar00geofffaculty00000000000000abridgement acclimatisation/AMS acclimatised/U accoutrement/MS acknowledgement/AMS actualisation/AMS aerosolise/DGS aesthetic/MS aesthetically/U agonise/DGRSZ agonised/Y agonising/Y alphabetise/DGRSZ aluminium/MS amenorrhoea amortise/DGS amortised/U amphitheatre/MS anaemia/MS anaemic/S anaesthesia/MS anaesthetic/MS anaesthetically anaesthetise/DGRSZ analogue/MS analysable/U analyse/ADGRZ analysed/AU anodise/DGS anonymise/DGS antagonise/DGRSZ antagonised/U antagonising/U apologise/DGRSZ apologises/A apologising/U appal/S apparelled appetiser appetising/UY arbour/DMS archaise/DGRSZ ardour/MS arithmetise/DS armour/DGMRSZ armoured/U armourer/MS armoury/DMS atomisation/MS atomise/DGRSZ authorisation/AMS authorise/DGRSZ authorises/AU autodialler axiomatisation/MS axiomatise/DGS Balkanise/DGS baptise/DGRSZ baptised/U baptises/U barrelled barrelling bastardise/DGS bastardised/U bedevilled bedevilling behaviour/DMS behavioural/Y behaviourism/MS behaviouristic/S behove/DGJS behoving/MSY belabour/DGMS bevelled bevelling/S bowdlerise/DGRS brutalise/DGS brutalised/U brutalises/AU burglarise/DGS bushelled bushelling/S calibre/S canalled canalling cancelled/U canceller cancelling candour/MS cannibalise/DGS canonicalisation canonicalise/DGS capitalisation/AMS capitalise/DGRSZ capitalised/AU capitalises/A carbonisation/AMS carbonise/DGRSZ carboniser/AS carbonises/A catalogue/DGMRS categorisation/MS categorise/DGRSZ categorised/AU centimetre/MS centralisation/AMS centralise/DGRSZ centralises/A centre/DGJMRSZ centrepiece/MS channelled channeller/MS channelling characterisable/MS characterisation/MS characterise/DGRSZ characterised/U cheque/MRSZ chequebook/MS chequer/DS chiselled chiseller/S civilisation/AMS civilise/DGRSZ civilised/PU civilises/AU clamour/DGRSZ clamourer/MS cognisance/AI cognisant/I colonisation/AMS colonise/DGRSZ colonised/U colonises/AU colour/DGJMRSZ coloured/AU coloureds/U colourer/MS colourful/PY colourless/PY colours/A columnise/DGS compartmentalise/DGS computerise/DGS conceptualisation/MS conceptualise/DGRS conceptualising/A counselled counselling counsellor/MS criticise/DGRSZ criticised/U criticises/A criticising/UY criticisingly/S crystallise/DGRSZ crystallised/AU crystallises/A customisable customisation/MS customise/DGRSZ decentralisation/MS decentralised defence/DGMSV defenceless/PY defences/U demeanour/MS demoralise/DGRSZ demoralising/Y dialled/A dialler/AMS dialling/AS dichotomise/DGS digitise/DGRSZ digitiser/MS dishonour/DGRSZ dishonoured/U dishonourer/MS disorganised/U draught/MS draughtsman duelled dueller/S duelling/S economise/DGRSZ economising/U editorialise/DGRS enamelled enameller/S enamelling/S encyclopaedia/MS endeavour/DGMRSZ endeavoured/U endeavourer/MS enrol/S enrolment/MS epitomise/DGRSZ epitomised/U equalisation/MS equalise/DGJRSZ equalised/U equaliser/MS equalises/U equalled/U equalling eviller evillest factorisation/MS familiarisation/MS familiarise/DGRSZ familiarised/U familiarising/Y fantasise/DGRS favour/DGJRSZ favourable/PSU favourably/U favoured/MPSY favoured's/U favourer/MS favouring/MSY favourings/U favourite/MSU favours/A fertilisation/AMS fertilise/DGRSZ fertilised/U fertilises/A fervour/MS fibre/DMS fibreglass finalisation/S finalise/DGS flavour/DGJMRSZ flavoured/U flavourer/MS formalisation/MS formalise/DGRSZ formalised/U formalises/I fuelled/A fueller/S fuelling/A fulfil/S fulfilment/MS funnelled funnelling gaol generalisation/MS generalise/DGRSZ generalised/U glamorise/DGRSZ glamorised/U gospeller/S gramme/MS gravelled gravelling grovelled groveller/S grovelling/Y harbour/DGMRSZ harbourer/MS harmonise/DGRSZ harmonised/U harmonises/AU honour/DGRSZ honourable/MPS honourables/U honourably/SU honoured/U honourer/MS honours/A hospitalise/DGS humour/DGMRSZ humoured/U hypothesise/DGRSZ idealisation/MS idealise/DGRSZ idealised/U imperilled individualise/DGRSZ individualised/U individualises/U individualising/Y industrialisation/MS industrialisation's/A initialisation/MS initialise/DGRSZ initialised/AU initialiser/MS initialled initialler initialling institutionalise/DGS internalisation/MS internalise/DGS italicise/DGS italicised/U itemisation/MS itemise/DGRSZ itemised/U itemises/A jeopardise/DGS jewelled jeweller/S jewelling journalise/DGRSZ journalised/U judgement/MS kidnapped kidnapper/MS kidnapping/MS kilogramme/MS kilometre/MS labelled/AU labeller/MS labellers/A labelling/A labour/DGJRSZ laboured/MPY laboured's/U labourer/MS labouring/MSY labourings/U laurelled legalisation/MS legalise/DGS legalised/U levelled/U leveller/S levellest levelling/U liberalise/DGRSZ liberalised/U licence/MS linearisable linearise/DGNS litre/S localisation/MS localise/DGRSZ localised/U localises/U lustre/DGS magnetisation/AMS manoeuvre/DGRS marshalled marshaller marshalling marvelled marvelling marvellous/PY materialise/DGRSZ materialises/A maximise/DGRSZ mechanisation/MS mechanise/DGRSZ mechanised/U mechanises/U medalled medalling mediaeval/MSY memorisation/MS memorise/DGRSZ memorised/U memorises/A metalled metalling metallisation/MS metre/MS millimetre/MS miniaturisation/S miniaturise/DGS minimisation/MS minimise/DGRSZ minimised/U misjudgement/MS mitre/DGR modelled/A modeller/S modelling/S modernise/DGRSZ modernised/U modernises/U modularisation/M modularise/DGS motorise/DGS motorised/U moustache/DS multilevelled nationalisation/MS nationalise/ADGRSZ nationalised/AU naturalisation/MS neighbour/DGJMRSYZ neighboured/U neighbourer/MS neighbourhood/MS neighbourly/PU neutralise/DGRSZ neutralised/U nickelled nickelling normalisation/MS normalise/DGRSZ normalised/AU normalises/AU notarise/DGS nought/S odour/DMS offence/MS optimisation/MS optimise/DGRSZ optimised/U optimiser/MS optimises/U organisable/MSU organisation/AMS organisational/MSY organise/ADGRSZ organised/AU oxidise/DGJRSZ oxidised/U oxidises/A panelled panelling/S panellist/MS parallelisation/MS parallelise/DGRSZ parallelled/U parallelling paralyse/DGRSZ paralysed/Y paralysedly/S paralyser/MS paralysing/Y paralysingly/S parameterisable parameterisation/MS parameterise/DGS parameterised/U parametrisable parametrisation/MS parametrise/DGS parametrised/U parcelled/U parcelling parenthesised parlour/MS patronise/DGJRSZ patronised/U patronises/A patronising/MSY penalise/DGS penalised/U pencilled pencilling/S personalisation/MS personalise/DGS petalled philosophise/DGRSZ philosophised/U philosophises/U plough/DGRS ploughed/U ploughman pluralisation/MS pluralise/DGRSZ polarisation/MS polarisation's/A popularisation/MS popularise/DGRSZ popularises/U practise/DGRS practised/U preinitialise/DGS pressurise/DGRSZ pretence/NSVX prioritise/DGJRSZ productise/DGRSZ programme/MS programmes/A proselytise/DGRSZ publicise/DGS pulverise/DGRSZ pulverised/U pulverises/AU pyjama/S quantisation/MS quantise/DGRSZ quantiser/MS quarrelled quarreller/S quarrelling queueing randomise/DGRS rationalise/DGRSZ realisable/MPS realisables/U realisably/S realisation/MS realise/DGJRSZ realised/U realising/MSY recognisability recognisable/U recognisably recognise/DGRSZ recognised/Y recognisedly/S recognising/UY recognisingly/S reinitialise/DGS relabeller/S remodelling reorganised/U reprogramme/S revelled reveller/S revelling/S revolutionise/DGRSZ rigour/MS rivalled/U rivalling rouble/MS routeing rumour/DGMRSZ rumoured/U rumourer/MS sabre/DGMS sabred/U sanitise/DGRS saviour/MS savour/DGRSZ savourer/MS savourily/SU savouring/Y savouringly/S savoury/MPRSTY sceptre/DGMS sceptred/U sceptres/U scrutinise/DGRSZ scrutinised/U scrutinising/UY scrutinisingly/S sepulchre/DMS sepulchred/U sepulchres/AU sequentialise/DGS serialisation/MS serialise/DGRSZ serialiser/MS shovelled shoveller/S shovelling shrivelled shrivelling signalled signaller/S signalling socialise/DGRS socialised/U specialisation/MS specialise/DGRSZ specialised/U specialising/U speciality/MS spectre/DMS spiralled spiralling splendour/MS squirrelled squirrelling stabilise/DGRSZ standardisation/AMS standardise/DGRSZ standardised/U standardises/A stencilled stenciller/S stencilling sterilisation/MS sterilise/DGRSZ sterilised/U sterilises/A stylised subsidise/DGRSZ subsidised/U succour/DGRSZ succoured/U succourer/MS sulphate/DGS sulphured sulphuric sulphuring summarisation/MS summarise/DGRSZ summarised/U symbolisation/AMS symbolise/DGRSZ symbolised/U symbolises/A symbolled symbolling sympathise/DGJRSZ sympathised/U sympathising/MSUY synchronisation/MS synchronisations/A synchronise/DGRSZ synchronised/AU synchronises/A synthesise/DGRSZ synthesised/U synthesises/A syphon/DGMS syphons/U systematise/DGRSZ systematised/U systematising/U tantalise/DGRSZ tantalised/U tantalising/PY tantalisingly/S tantalisingness/S terrorise/DGRSZ terrorised/U theatre/MS theorisation/MS theorise/DGRSZ titre/S totalled totaller/MS totalling towelled towelling/S tranquillise/ADGJRSZ tranquillised/AU tranquilliser/AMS tranquillising/AMSY tranquillity transistorise/DGS travelled traveller/MS travelling/S trivialise/DGS troweller/S tumour/DMS tunnelled tunneller/S tunnelling/S tyre/MS unauthorised/PY uncivilised/PY uncoloured/PSY unfavoured/M unionisation unionise/DGRSZ unlaboured/M unpatronising/MY unravelled unravelling unrecognised unsavoured/PY unsystematised/Y utilisation/A utilise/DGRSZ utilises/A valour/MS vandalise/DGS vapour/DGJMRSZ vapouring/SY vectorisation vectorising verbalise/DGRSZ verbalised/U victimise/DGRSZ victimised/U victualler/S vigour/MS visualise/DGRSZ visualised/U visualises/A waggon/MRSZ waggoner/MS weaselled weaselling whisky/MS womanise/DGRSZ womanised/U womanises/U woollen/S woolly/PRS worshipped worshipper/MS worshipping ispell-3.4.02/languages/english/PaxHeaders.22185/english.10000644000000000000000000000013213776175723017762 xustar0030 mtime=1610152915.058090453 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/english/english.10000444003214100001440000045041313776175723021042 0ustar00geofffaculty00000000000000AAC aardvark/MS Aaron/M abalone/MS abandonware Abbevillian ABD abdicate/DGNS abducens Abe/M abeyant Abigail/M Abilene/M ableism Abner/M abominate/DGNSX aborning aboveboard Abraham Abrams Abramson abrasive/PSY abscissae abstemiously abstinent/Y abusable academician academicianship Acapulco acceptant accessors accordant/Y accrual/S acetic achromatic acidhead Ackerman acknowledgeable ACM's acquiescent/Y acquisitive/Y acrylate Acta actinic actinide actuaries Adam/MS Adamson adaptivity addend Addison addle/DGS Addressograph adios Adirondack/S adjectival/Y adjoint administrable administrate/DGS administratrix Adonis Adriatic adsorbate adsorptive/Y advert/DGS adware/MS Aegean Aeneid aeolian Aesop/M affordability afforest/A afforestation Afghani/MS Afrikaans afro AFS afterbirth afterburn/GRZ afterglow afterlife aftershave Agatha Aggie/S Agnes agribusiness agriculturalists aha ahem ahoy AI ain't Aires airfare airmass airpark airplay airtight/P Ajax Akron Al/MR ala Alabamans Alameda Alamo/S Alan/M Alaskan/M Albany albatross/S Albert Alberta Alberto Albuquerque Alcoa aldehyde Aldrin/M Alec Aleck aleph Aleut alewife Alexander/S Alexandra/M Alexandre Alexandria Alfa Algiers Alhambra Alicia Alistair/M alit Alito/M Allan Allegheny/S allegiant Allen/M Allendale Allentown Allison alliterate/DGS allocable/U allotropic allspice Allstate alluvial alluvium Almaden/M almagest almshouses alp Alsatian/S altercate altho altimeter/MS ALU Alvarez Alvin/M AMA Amadeus Amarillo/M ambrose ambrosia ambulant Americanism amethyst amethystine Amgen/M Amherst/M amici amicus aminobenzoic ammeter/MS Amoco/M amoebae Amos amperage/S Ampex/M AMS Amy/M anachronistic anaglyph Anaheim/M analgesic anamorphic anastigmatic Andean/M Andersen/M Anderson/M Andes Andover/M Andre/M Andreas Andrew/MS androgynous Android/M Andromeda Andy/M Angeles angelfish Angelina Angeline Angelo Angie angiogram/MS angiosperm Anglia Anglo angora Angus Anheuser anhydride anhydrite animadversion animadvert Anita Ankara Ann Anna Annapolis Anne/M anneal/DGRSZ annotator/MS annuity/S annular/Y annulus anodic anonymizer/MS ANSI's Anson antacid Antares antebellum Anthony anthropogenic anthropometric/S anthropometry anticlimactic Antietam antifreeze antigone antilogs antimatter/M Antioch antipasto antiperspirant antiquary antisemitic antisemitism/M antithetic antivirus Antoine Antoinette/M Antony antonym/MS anytime apache/S Apache's API API's APIs apolar Apollinaire Appaloosas apparency appealable/U Appian applesauce Appleton/M applicate Appomattox apposite/NPVY appositive/Y appropriable Aquinas Araby arbitrage/R arboretum Arcadia arcana archetypical/Y Archibald Archimedes archway/S ARCO arcsine arctangent Arcturus ardency areawide arenaceous areola/M areolae/M areolar areolate/N Argonne Argus aria/MS Ariadne Aristotelean Arkansan Arlene Arlington armada armature/S Armonk Arnold/M ARPA ARPA's Arpanet arrangeable arrear arrestee/MS arrowroot arsenate arsenide arsonist artesian Arthur articulable artisanal/Y arty/PRY Aruba ascriptive asexual/MSY ashame Asheville Ashland Ashley/M ashy/R Asimov/M asperity asphyxiate/N aspirational asplenium ASPLOS Assad assertional asshole/MS assignation/S assimilationist Assn associable assumability Assyria Astaire/S asteria astigmatic astigmatism Astor Astoria astraddle astrobiologist/MS astronautic astronomic astrophysicist/MS Atari athwart Atkins Atkinson Atlanta Atlantis ATMs atomicity Atreus attestation Attica attosecond/MS attributional audibility/I audiotape audiovisual/S auditable Augean Augustan Augustine Augustus auntie Aurelius auric Auschwitz Australis australites autograde/DGRS autoloader/MS automount/DRS autostart Aventine Aventino aviate/X aviatrix Avis Aviv Avogadro/M Avon awardee axiology azimuthal/Y Aztec Aztecan babbitt/DGS Babcock baboon/MS Babylon Babylonian/S babysitting baccarat Bacchus bachelorhood backarrow backboard backchaining backend/MS backfill/DGS backfire/DGMS backhand/DR backhanded/Y backlit backorder backplate/S backside backstab/S backstabbed backstop backwood Bader/M badland badmen baggageman baggagemen Baghdad Bahama/S Baidu Bakelite Baker/M Bakersfield Baldwin baldy baleen Bali Balinese Ballard/MS ballfields ballistically Baltimore Balzac Bamberger Bambi bamboozle/DGS bamboozlement Bancroft bandaid bandoleers bandstop bangkok Bangor Baptiste Barbara/M Barcelona Barclay barefaced/PY barf barkeep/R Barnabas barnacle/D Barnard Barney barnful barnsful baronet Barrett/M barrette/MS Barron Barry/M Barrymore/S barstool/MS Barstow bartend Barth Bartholomew Bartlett/M Bartok Bascom baseband basemen baseplate Basie basilar basilisk basophilic Bassett bassist/MS bassoon/MS basswood Batavia bates batik Batista batwings Baudelaire Bauer Bauhaus Bavaria Bavarian/MS bayberry/S Bayesian Baylor Bayonne BCD beachcomber/S beachcombing/M beadsman beadworker beasties Beatrice Beauchamps Beaujolais Beaumont Beauregard beautician/S beaux Beaverton bebop Bechtel Becky Bedford bedmate/MS bedpan/MS bedstraw beechwood Beelzebub/M befuddlement begonia behemoths Beirut belate Belfast Belgrade Bella belladonna Bellatrix Belleville bellflower Bellwood bellyache/GR bellyfull Belmont Beloit belove Belton Beltsville belvedere bemuse/D bemused/Y Ben/M benchwarmer/M Bendix benefice beneficent/Y Benjamin Bennett/M Bennington Benny Benson Bentham Bentley/S Benz Beowulf berg/NRS Bergson beribbon Beringer Berkowitz Berkshire/S Berlioz Berlitz Bern Bernadine Bernard Bernardine Bernice Bernie Bernoulli Bernstein/M Berra berserk/R Bert Bertha Bertrand bespoke Bess Bessemer Bessie bestir bestirring bestubble/D betatron/MS Betelgeuse Beth/M bethel Bethesda Bethlehem bethought betoken/DGS bettor Betty/S bewhisker bezel Bhutan biaxial/Y BibTeX BibTeX's bicep bichromate/D biconnected bicyclist/MS Biddle Biden/M bidiagonal Bienville Bierce Bigelow biharmonic bilayer/S bilingualism Billie billionaire/MS billy/S bimetallic bimetallism Bimini bindery bindle Bingham Binghamton biochemist/S Biogen/M biograph bioinformatics biologic biomass biometric/S biometry biomolecule/MS biophysic/S biophysical/Y biophysicist/S bioscience/MS biosphere biostatistic/S biotic/MS birdseed birdwatch birthfather/MS birthmother/MS birthparent/MS birthrate/MS Biscayne biscotti biserial bisexual/MSY bishopric Bismarck bistable bistate bisyllabic Bitcoin/MS bittern bitternut bitterroot BitTorrent/M bitumen Black/M blackball/DGS blackbody/S Blackburn Blackfeet Blackman Blackmer Blackstone Blackwell/S bladdernut bladderwort Blair Blake Blakey blameworthy/P blanc Blanche Blanton blatancy blather/DGR blatting Blatz Blaze/M blazon/DGR bldg bleeps blest/U blindside/DGS Bloch/M blocky/R blog/MS blogged blogger blogging bloodbath/S bloodroot Bloom/M Bloomfield Bloomington blotch/S blowhole/MS blowtorch blueback bluebill bluebook bluebush bluegill bluegrass bluejacket Bluetooth/M Blvd boa/S boardroom/MS Bobbie bobble/DGS Bobbsey bobcat/M Bobrow bobsled bobsledding bock bockwurst Bodenheim bodhisattva bodyweight Boeing Boer Bogart Bogartian bogey/DGS bogeymen bogging boggy Bogota bogy/S Boheme Bohemia Bohemian Bohr boilermaker/MS Boise bokeh/M bolivar bolo/MS bolometer/MS Bolshevist Bolshevistic Bolshoi Bolton Boltzmann Bombay/M bombshell/MS bona Bonaparte Bonaventure boneless bongo Bonham Boniface bonito bonjour Bonn Bonneville Bonnie Bontempo bonzes boogie bookbind/GRZ bookend/S bookkeep bookmark/MRSZ bookplate/S Boole/M boomtown/S Boone boosterism bootblack/S Bootle bop bopping Bordeaux Borden Borealis Boreas Borg borosilicate Borroughs Bose/M boson/MS bossy/PRS Bostitch Boswell botanic botfly botnet/MS bottommost botulin bouillon bountiful/PY boutique/S Bouvier Bowes bowie boxy/PR Boyce bpi BPS brachia brachium bracken brad Bradbury Bradford Bradley Bradshaw Brady braggadocio Brahms Brainard/S brakeman brakemen/M Branchville Brandeis Brandel Brandenburg Brandon brandywine Braniff Brannon Brasilia bratwurst Braun breadfruit/S breakneck breastfed breastfeed/G breastplate Brenda Breyer/M Brian/M bribery brickmason/S brickyard Bridewell Bridgeport Bridgetown Bridgewater Brien Brigadoon Brigham brimming brimstone Brinkley briny/PR Brisbane/M bristly/R bristol/S Britannic Britannica Brittany Britten/M broadloom Broadway Brock brogue/M bronc/S bronchiolar bronchiolitis bronco/S Bronx broody/P Brookdale Brooke Brookfield Brookhaven Brooklyn Brookmont brookside brouhaha Browne Brownell Brownian Brubeck Bruce brucellosis bruin/MS Brunhilde Bruno brushwork Brussels Bruxelles Bryan Bryant Bryce Bryn BS BTW bubonic Buchanan Bucharest Buchwald buckaroo/S bucketful/MS buckeye buckhorn Bucky Budapest Budd Buddha Buddhism Buddhist/S Budweiser/S bufflehead bugaboo Bugatti bugbears bugeyed Bugzilla/M Buick Bulba bulblet Bulgaria Bulgarian bulimia bulimic bullfinch bullfrog bullhead/D bullheaded/PY bullhide bullseye/MS bullshit bullwhackers bullyboy/S bulrush/MS Bumbry Bundestag Bundy Bunsen/MS Bunyan/M Burbank/M burble/DGRS Burch burg/Z Burgundian Burgundy/S burlap burley Burlingame Burma Burmese Burne/S Burnett Burnside/S burrito/MS Burroughs burstiness Burt Burton Burundi Busch bushmaster Bushnell businesspeople/M businessperson/M businesswoman/M busyness butch butene butterball buttercup Butterfield buttermilk buttery buttonweed bypath Byrne byroad Byron/M Byronic Byronism Byzantine Byzantium cabal/S cabana/S cabaret/S cabbie/MS cabdriver/S Cabernet/MS cabinetmaker/MS cabinetry cacao cacciatore/MS cackly CACM cacophonist cacophony cadaver cadaverous/Y caddy/S cadent cadenza cadet cadge/DGRS Cadillac/S cadmium cadre Caesar caffeine/M cagey/P cahoot/S Cain Caine cairn/DS Cairo Caitlin/M Cal calamitous/PY calcareous/PY calcify/DN calcite CalComp calculability/I calculable/IP calculi Calcutta/M Calder calfskin Calgary Calif californium Caligula caliphate calisthenic/S callable/A callback/MS callee/M calligraph/RZ calligraphy calliope Callisto callow/P caloric calorimeter/MS calorimetric calorimetry Caltech Calumet calumniate/DN calumny calvary calve/G Calvinball/M Calvinist calypso cam/S camaraderie camber/DG Cambodia camellias Camelot cameo/S cameraman cameramen Camille Camino Campbell/M Campbellsport campesinos campfire campground/S campsite/S Canadian/S Canaveral Canberra cancerous/Y candidacy Candide candlelight/R Candlewick canine/S Canis canister/S cannabis cannery/S cannibalism/M cannibalistic cannonball/MS canny/PRY Canoga canonic canonist cant/DGRZ cantaloupe/MS canted/AI canteen/S canter/DGS Canterbury canticle cantilever/S cantina/MS Cantonese Canute canvasback Cap'n capacitate/INV Capet Capetown Capistrano capitalistic Capitan capitulate/DNS Cappy caprice Capricorn capsize/DGS capstan/S capstone capsule/DGS Capt captaincy CAPTCHA CAPTCHA's CAPTCHAs captious/PY carabiner/MS Caracas caramel caraway carbide carbine/S carbonaceous Carbondale Carbones carbonyl carborundum carboy carbuncle/D carcinogen/S carcinogenic carcinoma cardiology cardiomegaly cardiovascular careen/DG careerism caretaker/S careworn Caribbean caricature/DS caricaturist Carl/M Carla Carleton Carletonian carload/GS Carlos Carlsbad/MS Carlson Carlton Carlyle Carmichael carmine carnage carnal/Y carnality Carnegie carob Caroline/M Carolinian/S carouse/DGR carousel/MS carp/DGRS carpentry carping/Y carport carrageen carrel/S Carrie carrion carryon/MS Carson carte cartel/MS Carthage cartilage cartographer/S cartographic cartoonist/S cartwheel/DGMRS Carty Caruso carven casbah casebook/S casein casework/RZ Casey cashew/S cashmere casino/S Cassandra cassette/S Cassiopeia Cassite Cassius cassock/D castanet/S castigate/DNS Castlevania castor castrate/DGNRSZ Castro cataclysmic Catalina catalysis catalytic catalytically catapult/DGS catastrophically catatonia catatonic Catawba catbird catcall/MS catchword/S catchy/R catechism catecholamine/S categoric catenate/N catfish catharsis Catherine cathodic catholicism Cathy catlike catnip Catskill/S cattail/MS cattleman cattlemen catty/PRSY catwalk/MS Caucasian/S Caucasus Cauchy caucus/GS cauliflower/S caulk/RS causate/V causative/Y cautionary cavalcade/S cavalrymen caveman/M cavemen/M Cavendish cavernous/Y cavewoman/M cavewomen/M caviar cavil cavort/DG cayenne CD CDF CDT Cecil Cecilia cede/DGR cedilla Celanese celebrant/S celerity celesta celli cello/MS cellophane cellphone/MS cellulose/S Celsius Celtic Cenozoic censorial centaur/S centenary centennial/Y centigrade/S Centralia centrality centrifugal/SY centrifugate/N centrist centroid/S ceramic/S cerate/D Cerberus cerebellum cerebrate/DGNSX ceremonious/PUY cerise cerium certiorari certitude/S cerulean Cervantes cervical cession Cessna cetera/S Cetus Ceylon Cezanne/S CFP Chablis Chad Chaffey chainlike chairlady chairwoman/M chairwomen chaise chalkline chalky Chalmers chambermaid/S chamfer/DGS chamois champ/DGSZ Champlain Chancellorsville chancery/S chancy/PR Chandy/M Chang Channing chantey Chantilly chantry/S chaparral chaperone/S Chaplin Chapman chapping charisma charismatic/U charitably/U charlatan/MS Charles Charleston Charley Charlie/M Charlotte/M Charlottesville charred chartist/S chartreuse chartroom/S charwomen Charybdis chassis chastisement/S chastity/U chateaux Chattahoochee Chattanooga chatted chattel/S chatting chatty/PRY Chaucer Chautauqua chaw checkbox/MS checkerboard/S checklist/S checksummed checksumming checkup/S cheekbone/S cheeky/PRY cheerleader/S cheeseburger/MS cheesecloth/S cheesy/PR cheetah/S Chekhov chelate/DGNX chelation/MS chemic chemotherapy/M Chen Cheney/M Cheng Cheriton/M Chernobyl/M Cherokee/S Cheryl/M Chesapeake Cheshire Chesterfield Chesterton chevalier Chevrolet chevron/D Chevy chewable Cheyenne/S chianti chic/PY Chicago/M Chicagoan/S Chicana/MS chicanery Chicano/MS Chickasaws chicory chiefdom/S chigger/S Chihuahua/MS chilblain/S childbearing childbirth/S childless/P childlike/P childrearing Chile/S chili chimera chimeric Chimiques chimp/MS chimpanzee/S china Chinaman Chinamen chinchilla Ching chinless Chinook chipboard chipped Chippendale chipper Chippewa chipping chiropractor/S Chisholm chitter/DGS chive/S chivying Chloe/M chlorate chloride/S chlorinate/DNS chloroform chlorophyll Choctaw/S choirboy/MS choirmaster chokeberry cholesterol cholinesterase chomp Chomsky/M choosy/R Chopin choppy/PRY chopstick/MS chorale/S chordal chordata chordate choreograph/DRZ choreographed/AU choreographic choreography chorines chortle/DGS chow chowder/S Chris chrissake Christ Christendom Christenson Christianity Christie Christine/M Christlike Christopher/M Christy chromate/D chromatic/PS chromatogram/MS chromatograph/MS chromatographic chromatography/A chrome/DGS chromic chromite chromium chromosphere chronically chronograph/S chronography chronometer/MS chrysalis chrysanthemum/MS Chrysler chub/S chug/S chugging chumming chummy/PRY chunky/RY churchgoers churchgoing Churchill Churchillian churchmen churchwoman churchwomen churl/S chutney/S CIA ciao cicada/S Cicero Ciceronian cilia ciliate/DSY cinch/S Cincinnati Cinderella cinema/S cinematic/U Cinerama cinnabar circa Circe circlet circulant circulatory circumcise/DGNRSX circumcised/U circumferential/Y circumnavigate/DGNSX circumpolar circumscribe/DGS circumscriptions circumspection/S circumsphere circumvention/S citizenry citrate/D citric Citroen citron citrus/S cityscape/S citywide civet cladding Claire clairvoyance clamming clammy/PRY clamshell/S clandestine/PY clank/DG clanking/Y clannish/PY clapboard/S clapped clapping Clara Clare Claremont Clarence claret/S clarinet/S clarinetist/MS clarion Clark/M Clarke Clarridge classicist classificatory/Y classism/M classless/P classy/PRT clattery Claude Claudia Claudio Claus/N claustrophobia claustrophobic clave/MRS clavicle/MS clearcut clearheaded/PY clearinghouse Clearwater cleat/DGS clemence clemency/I Clemens clement/SY Clemente clemently/I Clemson clergymen cleric/S Cleveland clientele cliffhanger/MS cliffhanging Clifford cliffside/MS climactic climatological/Y climatology clinician/S clinometer/IMS Clint Clinton/M Clio clipboard/S Clive cloakroom/S clockwatcher cloddish/P clodhopper/MS clomp/DGS closeup/S clot/MS clothbound clothesbrush clothesline/S clothesman clothesmen clothier clotted clotting cloture/DGS cloudburst/S cloy/G cloying/Y clubhouse clubroom/S clueful clueless clunky/PY Clyde Clytemnestra cm CMU CMU's CNN CNN's coachmen coachwork coadjutor coagulable coalescence coalescent coastline Coates coattail/S coauthor cobalt cobble/DGS cobblestone/DS coble cobra cocaine cochineal Cochise cochlea cockatiel/M cockatoo cockcrow cockeye/D cockeyed/PY cockle cocklebur cockleshell cockpit/S cockscomb cocksucker/MS cocksure cocky/PRY coda/MS coddle/DGRS codebook/MS codebreak codetermine/S codfish codicil coed/S coedited coediting coeditor/MS coedits coeducation coequal/Y coercible/I coexistent coextensive/Y cofactor/S coffeecup coffeepot Coffman cog/S cognac cognate/NSXY cohabitational Cohen coherency Cohn cohort/MS coiffure/D coincident/Y coital/Y coitus cola colander/S colatitude/S Colby Coleridge coleus Colgate colicky coliform coliseum collagen collapsibility collapsible collarbone collard collectivities Colleen/M collegial/Y collegiality collegian/S collimate/DGNS collinear collinearity colloidal/Y colloquia colloquial/Y colloquialism/MS colloquium collude/DGS collusion/S Colombia Colombian/S colonialism colonialist colonnade/DS coloration coloratura colorimeter/MS colorimetry Colosseum coltish/PY Columbia/M Columbian columbines Columbus columnist/S coma/S Comanche comatose combatted combinable combo/S combust/DGRSV combustible/S comeback/RZ comebacker/MS cometary comeuppance commando/S commendable/A commendatory/A commensurability/I commensurable/I commercialism Commie commies commingle/D commiserate/DGNSV commissary committable committal/A committeeman committeemen committeewoman committeewomen commodious/IPY communicable/IU communicational communique/S communism communistic commutable/I commutate/DGNSX compaction compatriot/S compellable compendia compensable competency/S complacency complacent complainant/S complaisance complaisant/Y complementarity complementation/MS compliant/Y comport/DGS comportment composable/U compositor/S compost compote compressibility/I compressor/S compulsive/PSY compulsivity Compuserve/M con concave concavities conceptuality concertgoer/MS concertina concertmaster concerto/MS concessionaire/S conch/S concierge/S conciliate/DNSVX conciliator conciliatory/A conclave/S concoct/DGRSV concordance concordant/Y Concorde Concordia concourse/S concubine/S concussion/S condemnate condemnatory condensate/SX condensible condescension condiment/S condo/MS condolence/S condominium/MS condoms condor/MS conduce/DGS conductance/S coneflower Conestoga coney confabulate/DNSX confect/S confectionery conferee/S conferrable confessional/SY configurability/A confirmatory confiscatory conflagration/S confluent/S conformal conformance conformant conformation/MS conformational/Y conformist/S confrontational Confucian Confucianism Confucius confute/DGRS congeal/DGS congeniality/U congenital/Y congest/GSV conglomerate/DNSVX Congo congratulatory congregationalism congregationalist/S Congressional/Y congressmen congresswoman congresswomen congruential/Y congruity/I congruous/IPY conic/S conical/PY conifer/S coniferous conjectural/Y conjoin/GS conjoint/Y conjugal/Y conjugate/DGNPSVXY conjugated/U conjuncture/S conk/DGRSZ conn/DGRV Connecticut connectionless Connelly connivance connive/DGRS connotation/S connotative/Y connubial/Y conquistador/S conquistadores Conrad/M Conrail/M consanguine consanguineous/Y consanguinity conscionable/U conscript/DGS conscription/S consensual/Y conservator consistence/I consonance/I consonantal conspiratorial/Y constance Constantinople consternate/DGS constrict/DGSV constriction/S constrictor/S constructional/Y consular cont'd contaminant/S contentious/PY contestant/S continence/I continuant contort/DGSV contortion/S contraband contrabass contrabassoon/MS contraception contraceptive/S contrail/MS contraindicate/DGNSVX contraindication/MS contravene/DGRS contravention contrite/NPY controversialists controvertible/I contumacy contumely contusion/S convalesce/G convalescent convection/S conventionality/U conversationalist convexity conveyor/S convivial/Y convocation/S convoke/DGS convolute/NXY convolutional/Y convolve/DGS convulse/DGSV convulsive/PY cookbook/S coolant/S coolheaded Coolidge Coors Copeland Copenhagen Copernicus coplanar Copland/M copolymer/MS Copperfield copperhead coppersmith/S coppery copter/S copybook/S copyist copyrightable/U copywriter coquette/DG cordage cordite cordless cordon corduroy/S coriander Corinthian/S corkscrew/S cornbread cornea Cornell/M cornet/MS cornflower Cornish cornmeal cornstarch cornucopia Cornwall Cornwallis corny/PRTY corona coronal coronate coronavirus/MS coroner/S Corp corporeal/PY corporeality corporeally/I corpsman corpsmen corpulence/S corpulent/PY corpulentness/S corpuscular corral/S corralled corralling correlator/MS corrigendum corrigible/I corrode/DGS corrodible corrosive/PSY corrugate/DGNSX corruptible/I corsage/S Corsica/M Corsican cortex/S cortical/Y corticosteroid/MS cortisone Cortland corundum coruscate/DGNSX corvette cosmic cosmical/Y cosmological/Y cosmologist/MS cosmopolitanism cosmos/S cosplay/DGRSZ cosplayer/MS cosponsor/DS cossack/S Costello cosy/Y cotangent coterminous/Y cotillion cotter/S cottonmouth cottonseed cottonwood cottony cougar/S could've coulomb councilman councilmen councilwoman councilwomen counterargument/S counterattack/R counterbalance/DGS counterclaim countercyclical counterflow counterforce counterintuitive/Y counterman countermand/DGS countermen counterpoise counterproposal countersink/GS countersunk countertop/MS countervail/DGS counterweight/DGMS countrify/D countrymen countrywide coup/AS coupe couplet/MS courtesan covalent/Y covariance/S covariant/S covariate/MNS covary coven Covent Coventry coverall/DS COVID/M covington cowbell cowbird/S cowhand/S cowherd cowhide/DG cowlick coworker/MS cowpoke cowpony cowpox cowpunch/R coxcomb/S coy/PY cozen CPA CPR crabapple crabbed/PY crabbing crackpot/S craftsmanship craftsmen craftspeople/M craggy/PRY Craig Cramer crammed cramming cranelike Cranford crania cranium crankcase crankshaft cranny/DS Cranston crapola crappie/R crass/PTY craw/Y Crawford crawlspace crawlway crayfish crayon/S creaky/RY creamery creationism/M creationist/M credent credential/S credenza credo/S Cree creedal creekside creepy/PR Creighton crematory Creole Creon crescendo cress crestfallen/PY Crestview Cretaceous/Y Cretan Crete cretinous crevasses crewcut crewel crewman crewmen cribbing Crimea Crimean criminality crimp/DGRS crinkle/DGS crinkly crisscross/DS criticality Croatian crock/DRS crockery Crockett/M crocodile/S crocus/S croft/RZ Croix Cromwell Cromwellian cron crone/S crony/S croon/DGRSZ Crosby crossarm crossbeam/MS crosshatch/DGS crosspoint crossproduct/S crossroad/GS crosstalk crosswalk crossway/S crosswise crotch/DS crotchety/P croupier croutons crowbait crowbar/MS crowdsource/DGRS crowfoot/S Crowley CRT crucible crucifix crucifixion crud cruddy crudity/S cruft crufty crummy/RS crump crushproof Crusoe cryogenic/S cryostat crypt/S cryptanalyst/MS cryptanalytic cryptocurrency/MS cryptogram/MS cryptographer/MS cryptographically cryptologic cryptological cryptologist cryptosystem/MS crystalize/DGS CS CSS CST CSV Cuba Cuban/S cubbyhole cubicles cubism cubist/S cud cuddly/R cufflink/S cuisine culinary culpa/S culpable/P cultist/S cultivable Culver/S culvert Cumberland cumin cumulate/DGNSX cumulus Cunard Cunningham cunt/MS cupcakes Cupid cupidity cupric cuprous curate/DGNSV curation/M curative/Y curator/MS curbside curd curdle/DGS curia curiae curie curio/S curlicue curricula curtsey/DGS curvaceous/Y curvilinear/Y curvilinearity curvy Cushman cushy/TY custodial customhouse/S cutaneous/Y cutback/S cutlass cutlet/S cutout/S cutthroat cuttlebone/S cuttlefish/S cutworm CVS Cyanamid cyanate cyanic cyanide cybersecurity/M cyberspace/M cyclical cyclist/S cyclohexanol cyclopean cyclops Cygnus cylindric cynic/S cynicism Cynthia Cyprian Cypriot Cyprus Cyril Cyrus cytochemistry cytolysis cytoplasm czarevitch czarina czarism czarist czarship Czech Czechoslovakia d'art d'etat d'etre d'oeuvre/S DA DA's dab/S dabbed dabbing dachshund Dacron dactyl/S dactylic Dadaism Dadaist Dade Daedalus daffy/R DAG Daimler dairyland dairyman dairymen dais/S Dakar Dakota Dali Dallas dally/DGR Dalton/M Daly Damascus dammed damming dammit Danbury dancelike Dane/S dang/D Daniel/MS Danielson Danish dank/PY Danny/M Dante/M Danube Danville Danzig Daphne dapper/PY dapple/DGS Darcy/M Darlene Darlington Darrell Darrow Dartmouth Darwin Darwinian Darwinism Daryl/M dashboard/S dastard/Y dastardly/P databanks datacenter/MS datafile datagram/MS Datamedia dataset/S dateline/DS Datsun daub/DRS Dave/M davenport David/M Davidson Davie/S Davinich Davis davits Davy/S dawdle/DGRSZ Dawson daybed daysail/GRS Dayton DB DDOS deaconess deactivate/DGNS deadhead/S deadweight deadwood dealerships deanonymization/MS deanonymize/DGS Dearborn dearie deassign/DGS deathbed deathward debacle/S debar/S debarring debase/DGRS debauch/DRS debauched/PY debauchery Debby debenture/S Debian debility debit/DGS debonair/PY Deborah/M Debra debrief/DGS debunk/GRS Debussy/M debut/GS debutante/MS Dec decaffeinate/DGS decal decant/DGRSZ decapitated decathlon/S Decca decedent decennial/Y decertifier/MS decertify/DGNRSZ dechlorinate/DGNRS decibel/S deciduous/PY decile decisional declaim/DGRS declamation/S declamatory declarator/S declaratory declassify/NX declension/S declivity decolletage/S decollimate decommission/DGS decompress/DGRS deconstruct/DGS deconstruction/M decontaminated decontrol decontrolled decontrolling decor decorator/S decorous/IPY decorticate/DGNS decry/DGRS decrypt/DGS decryption DECsystem DECtape deductibility deductible/S deduplicate/DGNS deduplication/M deemphasis Deere deerskin/S deerstalker deface/GRS defacement defame/DGRS defecate/DGNSX defensible/I deferent/S deflate/DGNRS deflect/DGSV deflected/U deflection/S deflector defocus/G Defoe deforest/DGRS deforestation deform/GS deformational defragmentation/M defraud/DGRS defray/DGS defrost/DGRS deft/PRT defunct degrease degum degumming dehumidify/DNRX dehydrate/DGNS deify/N deja deject dejection DeKalb/M delectable/P delectation delegable deleterious/PY Delhi/M deli/MS delicatessen delicti Delilah/M delimitation delirium/S deliveryman/M deliverymen/M Dellwood delouse/DGS Delphi Delphic deltoid/S delusive/PY deluxe demagnify/N demagogue/S demarcate/DGNS demarked demarks demean/DGS demented/PY demerit/S demigod demiscible demit demitted demitting demographer/MS demographical/Y demography demoniac demonic demonstrably/I demote/DGNS demotivate/DGS demountable Dempsey demultiplex/RZ demultiplexer/MS demurred demurrer demurring denature/DGS Deneen deniability denim/S Dennis denominate/DV denominationally denouement densitometer/MS densitometric densitometry dentistry denture/IS denude/DGRS denumerable denunciate/DGNSVX Denver deodorant/MS deoxyribonucleic depiction/S deplorably deployable depositary depository depravity/S deprecate/DGNSX deprecating/Y deprecatory/Y depreciable depredations depressant/S depressible depressors Dept deputation/S depute/DGS derange/DGS derangement Derbyshire deregulate derelict/S dereliction derisive/PY derivate derogate/DGNSV derogatory/Y derrick/DGS derriere dervish/S descant Descartes descendent/MS desecrate/DNRS desegregate/DGNS desist Desmond desorption desperado desperadoes despicable/P despicably despoil/DGRSZ despond despondency despondent/Y despotism dessicate destinate destruct/S destructor/MS desuetude desultory/PY detachable detente/X deter/S detergency detergent/S determinability deterred/U deterrence deterrent/SY deterring deters/V detersive/S detestation/S detonable detonator/MS detour/DGS detrimental/Y Detroit/M detune/DGS deuce/DGS deuced/Y deus deuteride/MS deuterium/S Deutsch devaluation devalue/DGS deviance/S devious/PY devoice/DGS devolve/DGS Devon Devonshire devotional/Y Dewar/MS Dewey Dewitt Dexedrine dexter dextrous diabase diabetic/S diabolic diabolical/PY diachronic/P diacritical/SY diagnometer/MS diagnostician/S diagrammaticality dialectal/Y dialectic/S dialectical/Y dialysis diamagnetic diametric Diana/M Diane/M Dianne/M diaphanous/PY diathermy diathesis diatom/S diatomic diatonic dichloride dichotomous/PY dick/RSZ Dick's dicker/DGS dickey Dickinson Dickson dicotyledon dictatorial/PY didactic/S diddle/DGR Diego/M diehard/S diem diesel/S dietary/SY dietetic/S diethylaminoethyl diethylstilbestrol dietician/S Dietrich differentiability differentiable differentiator/M difficile diffidence diffident/Y diffract/DGS diffraction/S diffractometer/MS diffusible digitalis dignitary/S digram dihedral Dijon/M dilapidate/DGNS dilatation dilator dilatory/PY dilettante/S dilithium dill dillinger Dillon/M dilogarithm DiMaggio/M dimensionless dimethyl dimethylglyoxime Dinah dinette/MS ding/DGRS dinghy/MS dingo dinnertime dinnerware dinosaur/S diocesan diocese Diogenes Dion Dionysian Dionysus diorama/S dioxalate diphthong/S dipodic dipody dipole/MS Dirac directivity directorate directorship directrices directrix direful/Y disablement disaffected/PY disaffection disaffiliate/DGNS disaggregate/DGNV disapprobation disarranged disarray/S disarticulated disassembly/M disavow/DGS disavowal/S disbar/S disbelief discipleship disco/MS discoloration discomfit/DGS discontinuation discordant/Y discorporate/D discourteous/PY discoverable/I discoverably discrepant/Y discretionary discriminable discriminant discursive/PY discus/S discussant/S disdainful/PY disembodied disembowel/S disenchantment disengagement disequilibrium disgruntle/GS disgustful/Y disharmony dishevel/S dishonesty dishwater disincentives disinclination disincorporated disinfect/DGS disinfectant/MS disingenuous/PY disinherit/DGS disinheritance disintegrate/DGNSVX disinterest disinterred disjoin diskette/S dislodgment disloyal/Y disloyalty dismantle/DGS dismembered dismemberment Disney/M Disneyland disobedient/Y disoriented disparage/DGRS disparagement disparaging/Y dispassionate/PY dispensary dispensate dispersal dispersement dispersible dispositional dispositive dispositivy dispossessed dispossession disproportion disproportional disproportionate/NY disproportionation/M disputable/I disputant disquietude disquisition Disraeli disrepair disreputable/P disrepute disrespect disrobe dissect/DGS dissection dissemble/DGR dissimulation dissociable/I dissonant/Y dissuade/DGRS distaff/S distend/D distension distillate/SX distillery/S distortable distributorship disunion disunited disunity disuse/D disvalues disyllable dither/DGR ditto/S ditty/S diuretic diurnal diva divalent diversionary divertimento divestiture divination divisible divisional divisive/PY divorcee/MS divorcée/MS divvied divvies divvying Dixie Dixiecrats Dixieland Djakarta DMA DMCA Dmitri DNA DNS doable Doberman Doc docent/MS docile/Y docket/DGS dockside dockyard doctrinaire/U doctrinal/Y Dodds dodecahedra dodecahedral dodecahedron Dodington doe doff/GS doggone/DG doghouse dogleg dogmatic/S dogmatically/U dogtooth Dogtown dogtrot dogwood doldrum/S dolomite/S dolomitic Dolores dolt doltish/PY Domesday domesticity domicile/DMS dominator domineer/G domineering/PY Domingo Dominic Dominican/S domino Don/M Donahue Donald/M Donaldson Donna donned Donnelly donning donnish/PY donnybrook donor/S Donovan donuts doodle/DGRS Doolittle doomsday/R doorbell doorkeep/RZ doorknob/S doorman doormen dopant Doppler Dora/M Dorado Dorchester Doris dorm/RS Dorothy dosage/S dosimeter/MS dosimetry dossier/S Dostoevsky dotage dotard Doubleday doubleheader doublespeak/M doubleton doubloon Doug Dougherty Douglas Douglass dour/PY dovetail/DGS Dow dowager/S dowdy/PRSY dowel dower downbeat Downey downgrade/DGS downhill/RZ downhiller/MS download/DGSZ downpour downside/MS downslope downspout downswings downtime/MS downtrend downtrodden downturn/S downwind dowry/S dowse/GRS Doyle DPI Dr draconian draftee/S dragger dragnet dragonfly dragonhead dram Dramamine dramatical dramaturgy dreadlocks dreadnought dreamboat dreamless/PY dreamlike dreamt/U dreck/M dreg dressmaking dressy/PR Drexel Dreyfuss drib/S dribble/DGRS driftwood/MS dripped drippy/R drizzle/DGS drizzling/Y drizzly droll/P dromedary droopy/R drophead/MS droplet/S dropout/S drosophila dross drowse/DGS drub drubbing drudge/GRS drudging/Y drugged drugging drugless drugstore/S druid drumhead drumstick/MS Drury Dryden dryer/S dryness drywall dualism Duane dubbed/U Dublin Dubuque ducat duce/MS duckling/MS duct/DGS ductile/I ductwork/M dud/S duddy duet/S duff/RZ duffel/MS Duffy dugout dukedom dulcet/Y dulcify dullard Dulles Duluth Dumas dumbfound/DRS Dumont dumpster/MS Dumpty dumpy/PRY dun Duncan dung Dunham dunk/DGRS Dunkirk Dunlap Dunne duopolist duopoly dupe/DGNRS duplex/DGRS duplexer/M duplicable duplicity DuPont/S Dupont/S durational duress Durham Durkee Dusenberg Dusseldorf dustbin/S Dustin Dutch Dutchman Dutchmen dutiable Dvorak dwarves dwelt Dwight dyad/S dyadic Dyke dynamical dynamism dynamo/S dynastic dysentery dysfunction dysfunctional dyslexia dyspeptic dysprosium dystopia/MS dystopian dystrophy/M e'er eardrum/S Earp earphone/S earplug/MS earsplitting Earthling/MS earthmen earthmover earthmoving earthy/PRY easel/MS eastbound easternmost Easthampton Eastland Eastman Eastwick Eastwood easygoing/P eatable/S eave EBCDIC ebullience/M ebullient/Y ecclesiastic echelon/S echinoderm echocardiogram/MS eclectic eclectically eclecticism/M ecliptic ecological/Y ecologists econometric/S Econometrica econometricians ecosystem/S ecstatic/S Ecuador ecumenic/MS ecumenical/Y ecumenicist/MS ecumenist/MS ed/N Eddie/M edelweiss Edgar Edgerton Edgewater edgewise Edgewood edgy/PRY edify/DGNS Edinburgh Edison Edith editorialist editorship Edmund Edna Eduard educe/G Edward/S Edwardian Edwin Edwina EEG eelgrass eerily efface/DGRS effaceable/I effectual/IP effectuate/DGNS efferent/Y effete/PY efficacious/IPY effloresce efflorescent effluent/S effluvia effluvium efflux effluxion effuse/DGNSV effusive/PY egad/S egalitarian/I egalitarianism Egerton eggbeater/MS egghead/DMS eggheaded/P eggplant eggshell egocentric egotism egotist/S egotistic egotistical/Y egregious/PY egress egret/S Egypt Egyptian/S eh Eichmann eider eidetic eigenstate/S eigenvector/S eightfold Eileen Einstein/M Einsteinian einsteinium Eisenhower ejector/S Ekberg Ektachrome Elaine elan elastomer/MS Elba eldritch Eleanor electorate Electra electress electrician/S electro electrocardiogram/MS electrocardiograph electrodynamic/SY electroencephalogram/MS electrolysis electromagnet/S electromagnetic/S electromagnetism/S electromechanical/Y electromyograph/MS electromyographic electromyographically electromyography electrophoresis electrophorus electroshock/S electrostatic/S electrotherapist electrotypers electroweak elegiac elegy/S Elena/M elephantine elfin Eli elide/DGS Elijah Eliot Elisabeth Elise/M elision/S elite/PS elitism/M Elizabeth/M Elizabethan/S Elkhart Ella Ellie/M Elliot Elliott ellipsometer/MS ellipsometry ellipticity Ellis Ellison Ellsworth Elmhurst Elmira Elmsford elocution Eloise elope/DGRS Elroy Elsie Elsinore eluate/S elute/DGN Elwood/M Elysees elysian Elysium emaciate/GNS emanate/DNSVX emancipate/DGS Emanuel emasculate/DGNS embalm/DGRSZ embank/DGS embankment/S embarcadero embargo/DG embargoes embattle/DGS embedder embezzlement embittered emblazon/DGRS emblematic embolden/DS emboss/DGRSZ embower embraceable embrittle embroil/DGS embryonic emcee/DMS emend/R emendable emeritus Emerson Emeryville/M Emily/M emirate emissary/S emission/AMS emissivity/S emittance/MS emitter/S emitting Emma/M Emmanuel emolument/S Emory emotionalism emotionality empath/MS empathetically empathic emphysema emphysematous empiric empiricism emplace emplacement/MS employability/U emporium/S emptor emulsify/DNRS emulsion/S encampment encase/D encephalitis encephalographic enchain/D enchantress enchiladas enclave/S encomium/S encore/DGS encroach/DGRS encroachment encrust/DGS encumbrance/RS encyclical endearment/S endemicity endgame Endicott endnote/MS endogamous endogamy endogenous/Y endosperm endothelial endothermic endpin/MS endpoint/S energetically enervate/DGNSV enfeeble/DGS enforceability enforceable/U enforcible/U England/M Englewood Englishman Englishmen engorge/DGS engulfed engulfing engulfs enigma enjoinder enlargeable enmesh/D Enoch Enos enquiry/S enrapture/DGS enrichment Enrico enrollee/S ensconced enshrined enshroud enslavement Ensolite entailment entanglement entendre/M enthalpy enthralled enthralling enthrone/DGS enthuse/DGS enticements entitlement/S entomb/D entomologist entomology entourage/S entrain/DGRS entranceway entrant/S entrap/S entrapment/MS entrapped entrapping/Y entree/S entrenchment/S entrepreneurial entrepreneurship entryway/MS entwine/DGS enunciable enunciate/DGS enunciated/U envenom/DGS enviable/P enzymatic enzymatically enzyme/S enzymology Eocene EOF eohippus EPA ephemerides ephemeris Ephesian/S Ephraim epicure epicurean Epicurus epicycle/MS epicyclic epicyclical/Y epidemiological/Y epidemiologist/MS epidemiology epidermic epidermis epigenetic/S epigram/S epigrammatic epigraph/R epilepsy epileptic/S epilogue/S epiphany epiphenomena Episcopalian episcopate epistolatory epitaxy epithelial epithelium epitome/S epochal/Y epoxy/DGS Epsom Epstein equable/P equanimity/S equestrian/S equidistant/Y equilateral/S equilibrate/DGNS equilibria equine/S equinox equipotent equiproportional equiproportionality equiproportionate equivocal/PY equivocation eradicable/I Erasmus Eratosthenes erbium ergodic ergodicity Eric/M Erich Erickson Ericsson Erie Erik/M Erika/M Erikson Ernest Ernestine Ernie Ernst erode/DGS erodible Eros erosible erosion erosive/P erotic/U erotica erotically errancy/S errant/SY errantry errata/S erratically erratum Errol ersatz erstwhile erudite/NY erupt/DGSV eruptive/Y Ervin Erwin escadrille escalator/S escapist escarpment/MS escritoire escrow escutcheon/S Eskimo/S esophagi Esp Espagnol esplanade espousal/S essayists Essex esters Esther estimable/P estimator/S estoppal estrange/DGRS estrangement estuarine estuary/S et eta/S etcetera/S etched ETD ethane ethanol Ethel ethicist/MS Ethiopia Ethiopians ethnically ethnicity/S ethnographers ethnographic ethnography ethnology ethnomethodology/M ethology ethos ethyl ethylene Etruscan etymological/Y etymology/S eucalyptus Eucharist Euclid/M Euclidean Eugene Eugenia eugenic/S Euler/M Eulerian eulogy/S Eunice euphemist euphemistically euphony euphoric Euphrates Eurasia Eurasian eureka Euripides Europa europium Eurydice euthanasia Eva Evan/MS evanescent evangelic evangelical/Y evangelicalism Evangeline evangelism evangelist/S evangelistic Evanston Evansville evasion/S evasive/PY Evelyn evensong eventide/S eventuate/DGS Eveready Everett Everglades everyman evidential/Y evidentiary evildoer/S evocable evocate/NVX evocative/PY evolutionists Ewen ex exabit/MS exabyte/MS exaltation/S examinable excelsior excisable excitability excitatory exclamatory exclusionary excoriate/DGNSX excrescence/S excretory excruciate/DGNS exculpatory excursus/S exec/M execrable/P execrate/DGNSV executrix/S exegesis exegete exemption/S exercisable Exeter/M exhilarate/DGNSV exhilarating/Y exhort/DGRS exhumation/S exhume/DGRS exigent/Y exodus exogamous exogamy exogenous/Y exonerate/DGNSVX exoneration/MS exorciser exorcism exorcist exoskeleton exothermic exotica expandability expansible expansionist expectable expectorant expectorate/N expediency/I expellable experiential/Y experimentalism experimentalist/MS expiable/I expiate/DGNS expletive/S explicable explicate/DGNSV explicative/Y explorative/Y exportation exposit/D expressionism expressionist/S expressionistic expressionless/PY expressway/S expunction/MS expungement/MS expurgate/DGNS extemporaneous/PY extempore extendibility extensional/Y extensor exterminator/MS extern externalities extirpate/DGNV extolled extoller extolling extort/DGRSV extortionary extortionate/Y extracellular/Y extraditable extralegal/Y extramarital extraterrestrial extravaganza/S extrema extremism extricable/I extricate/DGNS extroversion extrovert/DS extrude/DGRS extrusion extrusive exuberant/Y exudation exude/DGS exultant/Y Exxon eyeful eyelash/S eyeless eyelet/S eyesore/MS eyeteeth eyewear/M Ezekiel Ezra Facebook/MS faceplate facetious/PY facilitators facilitatory factious/PY facto factuality fad/S fadeout faerie faery Fagin Fahrenheit/S failsafe Fairchild faire Fairfax Fairfield fairgoer/S fairgrounds fairless Fairmont Fairport Fairview fairway/S fakery falafel/MS falconry Falk fallback/MS falloff fallout/S fallow/P Falstaff familial fanatical/P fanaticism fanfare fanfold/MS fangled Fanny/S fanout fantasia fantasist fantastically FAQ FAQ's FAQs Faraday Farber farcical/Y farfetched/P Fargo/M farina Farley Farmington farmland/S farmworker/MS Farrell farsighted/PY fascicle/DS fasciculate/DNX fasciculation/MS fascism fascist/S fastball/MS fastidious/PY fatalistic fatalists fateful/PY fatherhood fatherless Fatima fatso fatty/PRS fatuity fatuous/PY faucet/S Faulkner Faulknerian faun fauna/I Fauntleroy Faust Faustian Faustus Fawkes Fayetteville faze/DGS fazed/U FCC FCFS FDA fealty fearmonger/DGMRS fearsome/PY feasibly featherbed/S featherbedding featherbrain/D Featherman feathertop featherweight feathery Feb febrile feces fecund/I fecundability fecundity federalism federalist/S federate/DGSVX federated/U federative/Y FedEx/M fedora Feinstein/M feint/DGS Feldman feldspar Felice Felicia felicitous/PY felicitously/I feline/SY Felix fella/S Fellini felon/S felonious/PY felony FEMA/M feminism femme/S femtosecond/MS fencepost fend/RZ fennel fentanyl/M Fenway/M Fenwick/M Ferdinand/M Ferdinando/M Fermi/MS fermion/MS fermium/M Fernando/M fernery ferret/DGRS ferric ferris ferro ferroelectric/S ferromagnet/S ferromagnetic/S ferrous fervid/PY Fess fest/RZ fester/DGS fetal fete/DS fetish/S fettle/DGS feudalistic feudatory fiance fiancee fiasco fiat/S fib fibbing Fiberglas Fibonacci fibrin fibrosis fiche fictive/Y ficus fiddlestick/S fide Fidel fidget/DGS fiducial/Y fiduciary fief fiefdom/MS fieldstone fieldwork/RZ fiendish/PY fiesta Figaro figment figural figurine/S filamentary filbert/S filch/DS filesystem/MS filet/S filibuster/DGRS filigree/D Filipino/S Filippo fillet/DGS Fillmore filly/S filmdom filmmaker/MS filmstrip/S filmy/PRY filtrate/DGS finagle/DGRS finale/MS finalist/S finch findable/U fineable finesse/DG fingernail/S fingerprint/DGS fingertip/S finial finicky/P fink Finland Finn/S finned Finnegan Finnish finny Fiorello Fiori fireball/MRS fireboat firebrand/MS firebreak/S firebug firecracker/S firefight/GRSZ firefighter/MS Firefox firehouse/S firemen firepower fireproof Firestone firewall/DGMS firework Fischer/M fisheye/MS Fishkill fishmeal fishmonger/S fishpond fishy/R Fisk fissile fission/DGS fisticuff/S Fitch Fitchburg fittest Fitzgerald Fitzpatrick Fitzroy fivefold fizz/R fizzle/DGS fjord/S flabbergast/DGS flabbergasting/Y flagellate/DGNS flagman flagpole/S flagstaff flagstone flail/DGS flair flak flaky/PR flam/N flamboyant/Y flamethrower flamingo/MS Flanagan Flanders flange/DS flapped flapper/S flashback/S flashbulb/S flashy/PRY flatbed flathead/M flatiron/S flatland/RS flatulence flatulent/Y flatworm flautist/MS flaxseed fleawort fleck/DGMRS Fledermaus fledge/GS Fleischman Fleisher Fleming/S Flemish/DGS fletch/DGJRS fletching/MS flex/DG flexed/I flexural flexure Flickr/M flimsy/PRSY flintless flintlock flinty/PRY flipflop flippant/Y flipped flippers flipping flirtation/S flirtatious/PY flitting flocculate/DGNS floe/S flog/S flogged flogging floodgate floodlight floorboard/S flophouses flopped flopping floral/Y Florence/M Florentine florid/PY Floridian/S florist/S flotation/S flotilla/S flotsam/M flounce/DGS floury flout/DGRS flowerpot flowstone/MS Floyd flu flub/S flubbed flubbing flue fluency fluff/S fluke/MS fluky/R fluoresce/RS fluorescent fluoridate/DGNSX fluoride/S fluorimetric fluorinated fluorine fluorite fluorocarbon flushable fluster/DGS flutist/MS flux/ADS flyaway flycatcher/S Flynn flywheel/S foal/S foamy/PR fob foible/S foist/DGS foldout/S foliate/DGNSX folio/S folklike folksong/S folksy/PRY follicle/S follicular followup/MS Folsom foment/DGRS fomite/S Fontainebleau Fontana foolhardy/PY footage/S footbridge/S Foote footfall/S foothill/S footlight/MS footloose footmen footpad/S footpath/S footstool/S footwear footwork fop/S foppery foppish/PY Forbes forbore Fordham forebears foreclosed foreclosing foredeck/MS forefeet forefront foreknowledge foreknown foreleg foremen forensic/S forepart forepaws forerunner/S foresaw foreseeing foreshadow/DGRS foreshortened foreshortening forestry foreword forfeiture/S forfend/DGS forgo/GR forklift formability/A formaldehyde formate/S formic Formica formidably formless/PY Formosa Formosan formulaic forsook forswear/S forthcome forthright/PY fortiori fossiliferous Foster/M foulmouth/D foundling/S fountainhead fourfold foursome/S foursquare fovea foxglove Foxhall foxhole/S foxhound foxtail/MS foxy/PRY foyer fracases fractionated/U fractionation fractious/PY frag/S fragged fragging fragility fragmentation Fran/M Francaise Francesca Francesco Francie Francis Franciscan/S Francisco francium Franco/M Francois Frankford Frankfort frankfurter/S Frankie franklin Franklin's Franny Franz Frau fraudulent/P Frayne Frazier frazzle/DGS freakish/PY Fred Freddie Freddy/M Frederic Frederick/S Frederico Fredrick Fredrickson freeboot/RZ freeborn freedman freedmen freehand/D freehanded/Y freehold/RZ freelance/DGRS freemen Freeport freestone freethinkers freewheel/DGRSZ freewheeling/P Freida Frenchman Frenchmen frenetic freon fresco/DGS frescoes freshwater Fresnel Fresno fretted fretting Freud Freudian Frey Fri friable/P Frick frictional/Y Friedman Frigga frigid/PY Frigidaire frilly Frisbee frisky/PRY Frito fritter/RS Fritz frivolity/S frizzle/DGS fro frolicking frontage frontal/Y frontiersman frontiersmen frosh/M Frost/M Frostbelt/M frostbite/G frostbitten frothy/PRY frowzy/R frugality frustum ft/A ftp/GJRSZ Fuchs fuchsia fuck/DGMRSZ fucker/MS fuddy fudge/DGS fugue Fuji/M Fukushima/M Fulbright fulcrum fullback/G Fullerton fulminate/DGNSX fulsome/PY fumigant fumigate/DNSX functionalism functionalist/S functionary fundamentalism fundraiser/MS fundraising funereal/Y fungal fungi fungible fungicides fungoid funk furbish/GRS furl/DU furlong/S furlough/DS furor/MS furring furry/RZ furthermost furthest fuselage/S fusible/I fusiform fusillade/S fussy/PRY fusty/PY fuzz/D FWIW gab gabbing Gabriel Gabrielle gadfly gadgetry Gaelic gaffe/RS gaggle gagwriter/S Gail Gainesville gainful/PY Gaithersburg gal/NS gala galactic Galahad Galapagos Galatea Galbreath galena galenite Galilee Galileo gallium gallivant/DGS gallonage Galloway gallstone/S Gallup Galois galvanic galvanism galvanometer/MS Galveston gambit/S gambol/S gamecock gamut gander Ganges gangland gangling ganglion gangplank gangway/S gantry/S Ganymede Garcia gardenia/S Gardner Garfield gargantuan gargoyle/DS Garibaldi garish/PY garnet Garnett garret/S Garrett garrote/DGRS garrulous/PY Garry Garvey Gary/M Gascony gasify/DGNRSXZ gasket/S gaslight/DGRS Gasset gassy/P Gaston gastronome/S gastronomy gatekeep/GRZ gatekeeper/MS gatekept Gatlinburg gator Gatsby gauche/PY gaugeable Gauguin Gaul gauntlet/D Gauntley gauss/S Gaussian gavel Gavin gawk/DGRS gawky/RY Gaylor Gaylord Gaynor gazelle/S gazette/DGS gazetteer/S gb gee/T geek/DGMS geeky/RT geezer/MS Gehrig Geiger geisha/S gelable gelatine gelatinous/PY geld/GJ Gemini gemlike genealogists genealogy/S genera generational genesis geneticist/MS Geneva/M Genevieve/M genie/MS genital/MSY genitive/MS genotype/MS gent/S gentian/S gentile/S gentility gentlemen/M gentlewomen/M gentrification geocentric geocentricism geochemical/Y geochemistry geochronology geodesic/S geodetic geographer/MS geolocation geologic geology geometer/MS geometrical/Y geometrician geomorphological geomorphology geophysical/Y geophysicist/S geophysics geopolitic/S geopolitical/Y George/MS Georgetown Georgia/M Georgian/S geosynchronous Gerald Geraldine Gerard Gerber gerbil gerenuk/MS Gerhard Gerhardt geriatric/S Germania Germanic germanium Germantown germicidal germicide/S germinal/Y Gerome gerontologist/S gerontology Gerry/MS gerrymandering Gershwin/S Gertrude gerund/MSV gestapo gestate/DGNSX gestation/MS gesticulate/DGNSVX gesticulative/Y getaway/S Getty Gettysburg geyser/DGS Ghana Ghent gherkin/S ghetto/S ghostlike Ghostscript/M ghoul/S ghoulish/PY GHz Giacomo giantess gibber/DGS gibbet/DGS gibbon/S gibbous/PY Gibbs Gibby gibe/GRS gibibyte/MS giblet/S Gibraltar giddap Giddings Gideon GIF Gifford/M gigabit/MS gigabyte/MS gigacycle/S gigadeath/MS gigahertz gigapixel/MS gigavolt gigawatt/MS gigayear/MS gigging GIGO gila gilbert Gilbertson Gilda/M Giles Gilkson Gillespie Gillette Gillian/M Gilligan gimbal/MS Gimbel gimpy ginkgo ginmill ginning ginormous Ginsburg/M ginseng Gioconda Giorgio Giovanni girlie girlish/PY gist git Github/M giveaway/S glaciate/DGNS gladden/DGS gladdy gladiator/S gladiolus Gladstone Gladys glamorous/PUY glandular/Y Glasgow glassless glassware glasswort glaucoma glaucous glaziers Gleason Glenda Glendale Glenn glib/PY glim gloat/DRS glob globetrotter globule globulin/S glockenspiel/MS glommed Gloria glottis Gloucester gloveless gluey glum/PY glut/NS glutinous/PY glutted glutting glutton/MS glyceride glycerin glycerinate/D glycerine glycerol glycol/S Glynn glyph GM gnarl/DS gnash/GS gneiss gnome/S gnomelike gnomonic gnostic GNP gnu/S Gnutella/M gob/MS gobbledygook goddamn/D godfather godhead godless/P Godot godparent godsend/S godson Goethe goggle/DGRSZ Gogh Golda Goldberg/M goldenrod goldenseal goldfinch goldfish Goldman Goldstein/M Goldwater Goliath/M golly Gomez gondola/S Gonzales goober Goodman Goodrich goodwill Goodwin Goodyear gooey goof/DGS goofy/PRY google/DGS Google's gooseberry gopher/S Gordian Gordon gorgon Gorham Gorky Gorsuch/M goshawk gosling/MS gossamer Gotham gothic Gothicism gourd gourmand/MS gourmet/S gout governance GPA GPL GPL's GPS/M GPU GPU's GPUs Gracie grad/S gradate/DGS Gradescope/M gradualist/S Grady graffiti Grafton grail/S grammarian/S grammatic grammaticality/U grandchild grandchildren granddaughter/S grandiloquent/Y grandnephew/S grandniece/S grandstand/DGRS granola grantee grantor granular/Y granule/S granulocytic Granville grapefruit grapheme/M grasshopper/MS grassland/S grassroots gratis graven gravestone/S graveyard/S gravid/PY gravimetric gravitate/DGSVX graybeard/S grayscale Grayson greatcoat/DS Grecian Greece greenbelt Greenberg Greenblatt Greenbriar greenery Greenfeld Greenfield greengrocer Greenland Greenpeace/M Greensboro Greensville Greentree Greenville Greenwich greenwood gregarious/PY Gregg Gregorian Gregory Grendel Grenier Grenoble Grenville Greta Gretchen Gretel/M greyhound griddle gridiron Grieg/MS griffin Griffith/S grillwork grimace/DGRS grime/S Grimm grimmer Grinch/M grinned grinning/Y Gris grisly/P grist/Y gristly/PR gristmill gritty/PRY grizzle/DGS groat/S groggy/PRY groin grok/S grokked grokking grommet groomsmen Groot grosbeak Grosset Grossman Grosvenor Groton grottoes grouchy/PRY groundhog/MS groundless/PY groundskeepers grout/DGRS Grove/M grovelike grubbing grubby/PRY Grumman grumpy/PRTY Grusky GSA Guadalupe Guam guano guardhouse Guatemala Guatemalan gubernatorial guerilla guernsey/S guesswork guffaw/S Guggenheim/M Guhleman GUI Guiana guidepost/S guildhall guileless/PY guitarist/S gullet/S gullible gumbo gumming gummy/PR gumption gumshoe gunboat Gunderson gunfight/RS gunflint gunk gunky gunman gunmen Gunnar gunnery gunny gunshot gunsling/GR Gunter/M gunwale/MS Gus gusset/S gusto gusty/PY Gutenberg Guthrie gutsy/PR gutted gutting guttural/P Guyana guzzle/DGRS Gwen gymnosperm gyp gypping gypsite gypsum gyrate/DGS gyro/S gyrocompass gyroscopic habeas haberdashery/S habitant/S habituate/DGNS hacienda/S Hackett hackle/DGRS hackney/DGS hacksaw/S hackwork haddock/S Hades hadron/MS Hafiz hafnium haggle/DGRS Hague Haifa haiku hailstone hailstorm hairdo/S hairdressing hairline hairpin hairstyle/GMS hairstyling/M hairstylist Haiti Haitian Hal halcyon halfback/S halfhearted/PY halftime halibut/S halide/S Halifax halite hallelujah/S Hallinan Halloween hallucinate/DGNSVX halo/S halocarbon/MS halogen/S halyard/MS Hamey Hamilton Hamiltonian/S hammerhead hammerless Hammett hamming Hammond Hampshire Hampton hamster/S Hancock handclasp handcrafted handgrip/MS handgun/S handheld/MS handhold handicapper handicapping handicraft/RS handicraftsman handicraftsmen handleable handlebar/S handless handmade handmaiden handoff/MS handout/S handrail handset/S handspike/S handstand/S handwashing handwrite/JS handyman handymen hangable hangman/M hangmen hangout/S hangup/MS hank/RZ hanker/DGRS Hannah/M Hannibal Hanoi Hanover Hanoverian Hans/N Hansel hansom Hanson Hanukkah Hapgood happenstance/MS harangue/DGRS harbinger/S Harcourt hardboard hardboiled hardhat Hardin hardscrabble hardshell hardtack hardtop/S hardwire/DGS hardwood/S hardworking harelip/S harem Harlem harmonic/S Harold harpist harpoon/DGMRS harpsichord/S harpsichordist harpy/MS Harriet Harris Harrisburg Harrison Harrisonburg harrumph/DGS Harry/M Hartford Hartley Hartman Harvard/M harvestman Harvey/S hashish Haskell Haskins hasp/S Hatchure hatchway Hatfield hatless hatted hatters Hattie haulage Hauser Havana haw/G Hawaii/M Hawkins Hawley hawser hawthorn Hawthorne Haydn/M Hayes hayfield/S hayloft/MS Haynes haystack/S Hayward Haywood hazelnut/S HDMI HDMI's headboard/S headdress headless/P headlight/S headmaster headquarter/D headroom headset/S headship headsman headsmen headspace/MS headstand/S headstone/S headwall/S headwater/S heady/PRY hearse Hearst/M heartbeat/S heartbreak/G heartbreaking/Y heartburn/G heartfelt heartland/M heartthrob/MS Heartwood heathenish/Y Heathkit Heathman heavenward/S heavyweight hebephrenic Hebraic Hebrew/S hecatomb heck heckle/DGRSZ hectare/S hectic hector Hecuba Hedda hedonism hedonist/S hedonistic heedful/PY heft/DS hefty/PRY Hegel Hegelian hegemonic hegemony/S Heidegger Heidelberg Heidi/M Heinz Heinze Heisenberg Heiser heist/DGMRS Helen Helena Helene helical/Y helices helicon helicopter/MS heliocentric Heliopolis heliotrope helium helix/S hellbender Hellenic hellfire hellish/PY helluva Helm/M Helmholtz helmsman helmsmen Helmut helpmate Helsinki hematite Hemingway hemispheric hemispherical hemmed hemming hemoglobin hemolytic hemorrhage/DGS hemorrhoids Henderson Hendrick/S Hendrickson Hendrix Hennessey/M henning henpeck/D Henrietta henry Henry's hepatitis Hepburn heptane Hera Heraclitus herbal Herbert Herculean Hercules herdsman Hereford hereof hereunto heritable heritor Herman hermeneutics Hermes hermetic Hermite hermitian Hermosa/M Hernandez Herodotus herpes herpetologist/S herpetology Herr herringbone Herrington Herschel Hersey Hershel Hershey hertz/S hesitance hesitancy Hesperus Hess Hessian/S heterodyne heterogamous heterogamy/M heterogeneity heterosexual/MSY heterostructure/MS heterozygous Heublein/M hewn hexachloride hexadecimal/SY hexafluoride hexagon/MS hexameter heyday Heywood hi hiatus/S Hiawatha hibachi hibernate/DGNS Hibernia hick/S Hickey/S Hickok hideaway hierarchal hierarchic hieratic hieroglyphic/S Hieronymus hifalutin highball highboy highfalutin Highfield highhanded highroad hight hightail highwayman highwaymen hilarity Hilbert/M Hilgard/M Hillary hillbilly Hillcrest Hillel hillman hillmen Hillsboro Hillsdale hilly/R Hilton Himalayas Himmler Hindemith/M Hindi hindmost hindquarters Hindu/MS Hinduism Hinkle Hinsdale hinterland/S hipping hippo/S hippodrome hippopotamus hippy/S hipster/S Hiram hireling/S Hirey Hiroshima Hispanic/MS histochemic histochemical histochemistry histology historicism historicity historiography histrionic/S Hitachi Hitchcock Hitler/MS hitless HMC/M ho hoagie/S hoagy/S hoarfrost hob Hobbes hobbing Hobbs hobbyhorse Hobday hobgoblin/MS hobo/S Hoboken hoc hock/GRS hodge/S hodgepodge Hoffman/M hogan hogging hokey/PRT Holbrook holdover/S holdup/S hollandaise holler/DGS Hollerith Hollister hollowware hollyhock/S Hollywood/M Holmes holmium Holocene holography Holst Holstein holster/DGS Holyoke holystone/S Holzman homebound homebuilder/S homebuilding homecoming/S homeland homemake/G homeowner/S homeownership Homeric homerists homicidal/Y homicide/S homily hominem homo/S homogamy homogenate/S homologous homologue homology homonym/MS homophobia/M homophobic homopolymers homosexual/SY homosexuality homozygous/Y hon Hondo Honduras honeybee/S honeydew honeyfarm/MS Honeyman/M honeypot/MS Honeywell hong honk/DGRSZ honky/MS Honolulu hooches hoodlum/S hoofmark/S hookup/S hookworm hooligan/S hooliganism hoopla hoosegow/S Hoosier Hoover/M hooves Hopi Hopkins Hopkinsian hoppled hopples hopscotch Horace Horatio Hornblower horny/PR horoscope/S Horowitz/M hors/X horsedom horseflesh horsefly/S horsehair horselike horsemanship horsemen horseplay/RZ horseplayer/MS horsetail horsewoman horticulture Horton hosiery hospice/S hostelry/S hostname/MS hotbed/MS hotbox hotdogs hotelman/M hothead/D hotheaded/PY hothouse hotrod Houdini hough hourglass houseboat/S housebreak/GRZ housebroken housekeep housewares housewives Houston hove Howard howdy Howe Howell hoy HP HTML http/MS hubba Hubble/M hubbub hubby/S hubcap/MS Hubert Huck huckleberry huckster/DGS Hudson Huey hugged hugging/S Hugh/S Hugo hulk/DGS humanism humanist/S humanistic humanitarian/S humankind/M Humboldt Hume humidistat hummingbird/S hummock/S humongous humorist/MS humpback/DS Humphrey/S Humpty humus hundredfold Hungarian Hungary huntress Huntsville Huron hurray/S Hurst hurtful/PY hurtle/DGS husbandman husbandmen Huston/M hutch Hutchins Hutchinson Hutchison Huxley huzzahs Hyannis hydrant/S hydrate/DGNSX hydride/MS hydro/S hydrocarbon/S hydrochemistry hydrochloric hydrochloride hydroelectric hydrofluoric hydrogenate/N hydrological/Y hydrology hydrolysis hydrometer/MS hydrophilic hydrophobia hydrophobic hydrosphere hydrostatic/S hydrothermal/Y hydrous hydroxide/S hydroxy hydroxyl/MS hydroxylate/N hydroxyzine hyena hygienic/S hygrometer/MS hygroscopic hying hymen/S hymnal hyperbola hyperbole hyperbolically hyperboloid hyperboloidal hypercellularity hypercube/MS hyperemia hyperemic hyperfine hypergamous/Y hypergamy hyperlink/MS hyperplasia hyperspace/MS hypertensive hypertrophy/D hypervelocity/MS hypervisor/MS hyphenate/DGNSX hyphenated/U hypnosis hypnotic/S hypnotically hypnotist/MS hypoactive hypocellularity hypocritical/Y hypophyseal hypotenuse/S hypothalamic hypothalamically hypothalamus hypothermia hypothetic hypothyroid hypothyroidism hysterectomy hysteria hysteric/S iambic Ian/M Iberia Iberian Ibero ibex/MS ibid ibis/S Ibsen Icarus ICC icebox Iceland/MR Icelandic icicle/S iconic iconoclasm iconoclast iconoclastic icosahedral icosahedron ICU/M Idaho idealist idealogical idealogue/MS ideate/NS idempotent/S identifiability ideologist/S idiolect idiom/S idiomatic/P idiosyncratically idiotically idyll idyllic iffy/P igloo/S igneous ignite/DGRSX ignominious/Y ignoramus Igor/M IIRC IKEA IKEA's ileum iliac Iliad ilk/M illegible illegitimacy illegitimate/Y illimitable/P illiteracy illogic illume/DG illumine/DS illusionary illusory/PY imagery imbecile/Y imbibe/DGR Imbrium imbroglio imbruing imbue/DG IMHO imitable/I imitators immanent/Y immeasurable/P immeasurably immensity/S imminence immobile immobility immoderate/NPY immodest/Y immodesty immunological/Y impairment impale/DGS impalpable impartation impartiality impassable/P impeccable impeccably impelled impeller/S impelling impend imperceivable imperceptible imperceptibly imperfectability imperishable/P impermeable/P imperturbable impiety impish/PY implacable/P implacably implantation implausibly implementability implode/DGS impolite/PY impolitic/PY imponderable/PS importunate/PY importune/RYZ importunities impost/RS impotency impound/DGS impoundments imprecate/DGNSX impregnate/DGNSX impresario/MS impressible Impressionism/M imprimatur improbably impropitious impropriety improvident/Y imprudent/Y impudence impugn/DGRS imputation/S inaction inactivate inadvertence inalienable inanity/S inappeasable inarticulate/PY inattention inboard inbound/G inbreed/GR Inca/S incandescent/Y incant/DGS incapacitate/DNS incapacity incarcerate/DGNS incarnate incept/DGSV inceptive/Y inceptor incest incestuous/PY incinerate/DGNSX incinerator/S incipience incipiency incise/DGSV incisive/PY incisor/MS incitement/S inclement/Y incombustible incommunicado incompetency incondensable incongruity/S inconstant incorporable incorrigible/P incorruptibility increasable incrementation incriminating incubi incubus inculcate/DNS inculpable incumbent/S incursion/S indecipherable indefatigable/P indelible indelibly indelicate/PY indemnify/DGNRS indenture/DGS indestructible/P Indianapolis indicant/S indict/DR indicted/U indigent Indira indiscretion indispose/G indisposition indisputable/P indisputably indissoluble/P indium individualism individualist/S individuate/DGNS Indochina indolence Indonesia Indonesian indubitable/P inducible inductee/S indulgent/Y industrialism Indy/S inebriate/DGNS ineffable/P ineffectual/PY inelastic ineligibility ineligible ineluctable inept/PY inequitable inequivalent inertial/Y inexpert/PY inexplicit inextinguishable inextricably infamy infanticide/M infantile infantryman infantrymen infatuation infelicitous/Y infelicity'M inferable infertile infestation/S infield/MRZ infielder/MS Infiniband/M infinitude infirm/DY infirmary inflammation inflammatory/Y inflect/DGSV inflection/S inflectional/Y infliction inflow influx info infographic/MS infra infraction infrared infusible/P ingenuous/PY Ingersoll ingest/DV ingestible ingestion ingrain Ingram ingrate ingratiate/GN ingratiating/Y inhabitation inhalant inhalation inhibitory inhomogeneous inimical/Y inimitable/P iniquitous/PY injectable/U injunctive inkjet/MS inlay/GMRS inline innovator/MS innuendo/S innuendoes inoculate/DGNSVX inoperative/P inquest inquisitor insatiable/P inscrutability inscrutable/P insecticide/S inseminate/N insensate/PY insensibility inseparably inset insincere/Y insipid/Y insolvent insomnia insomniac/S insouciance insouciant/Y INSPEC inspirational/Y instable Instagram/M instep instill/DGR instillation instinctual Institute/MS institutionalist instrumentalities insubordinate/NY insubstantial insufferable insular/Y insularity insulin insuperably insurgence intake/G integrable integrand integument intellectuality intelligentsia intendant/S intensional/Y inter interarrival interaxial intercalate/DGNSV intercase intercaste intercede/RS intercensal interception/MS interceptor interclass intercohort intercollegiate intercom/MS intercontinental intercorrelated interdenominational interdepartmental/Y interdict/V interfaith interferometer/MS interferometric interferometry interferon intergalactic intergeneration intergenerational interglacial intergovernmental intergroup interindex interindustry interject/DGS interjection/MS interlayer/G interlibrary interlingua interlining interlobular interlock/DGRS interlocutor interlude/S intermarriage interment intermeshed intermetrics interminably intermission/S intermolecular/Y internationalism/M internationalist/S internetwork internship/MS interoperability interoperable interpenetrates interplanetary interpol interposition interpretative/Y interpretor/S interprocessor interquartile interracial interred interregional interregnum interrogator/S interrogatory/S interspecies interstellar interstice/S interstitial/Y intersurvey intervenor interventionist intervocalic interweaving intifada/M intimal intonate intone/G intoxicant intra intracity intraclass intracohort intradepartmental intrafamily intragenerational intraindustry intraline intrametropolitan intramuscular/Y intranasal intranet/MS intransigence intraoffice intrapulmonary intraregional intrasectoral intrastate intratissue intravenous/Y intrepid/PY intro introject/DS introversion intuitable inundate/DGNSX inure/DG invalidism invasive/P invective/PY inveigh/R inveigle/DGR Inverness investigatory inveterate/Y invidious/PY invigorate/DGNS invigorating/Y invigoration/A inviolability inviolable inviolate/PY invitational invitee/S invocate involute/NXY involutorial invulnerability Io iodate/DGN iodide iodinate/DGN ionic ionosphere ionospheric iota IOU IOU's IOUs Iowa IP IP's ipecac IPs ipso Iraqi irascibility'M irascible/P IRC Irene iridium Irish Irishman Irishmen Irma ironic ironside/S ironstone ironwood Iroquois irradiate/DNV irradiated/U irreconcilable/P irredeemable irredeemably irredentism irredentist irrelevancy/S irremediable/P irremovable irreparable/P irreparably irreplaceable/P irreproachable/P irreproducibility irreproducible irresistibility irresistibly irresolute/NPY irresolvable irresponsibility irretrievable irreverence irreverent/Y irreversibly irrevocable/P irrevocably irritability irritable/P irritably irritant/S irruption/S IRS IRS's Irvine Irving Irwin/M Isaac/S Isabel isinglass Islam Islamic Islandia ISO isochronal/Y isochronous/Y isocline isocyanate isodine isolationism isolationistic isomer/S isomorph isopleth/S isotherm/S isothermal/Y isotonic isotopic isotropic isotropically isotropy ISP ISP's ISPs Israelite/S issuant Istanbul Italy Ithaca Ithacan itinerant/Y ITR ITT IUD IUDs Ivan Ivanhoe Izaak Izvestia jabbering/S jackass jackboot/DS jackdaw/S Jackie jackknife/DGMS Jackman jackpot/S Jackson/MS Jacksonian Jacksonville Jacky Jacob/S Jacobean Jacobian Jacobite Jacobs/N Jacoby Jacqueline Jacques jag jagged/PY jaggers jagging jaguar/M jailbird/MS Jakarta/M Jake/S jalopy/S Jamaica/M Jamaican/M jamboree/M Jameson/M Jamestown/M Jamie/M Jan/M Jane/M Janeiro/M Janesville/M Janet/M jangle/DGRS Janice/M Janis janissary/S janitorial Jansen/M Janus jasmine/M Jason/M jasper/S Jastrow jaundice/DGS Java/M Javanese JavaScript/M jawbone Jaycee/MS jazzmen jazzy/PRY Jeanette/M Jeanie/M Jeanne/M Jeannie/M Jeff/M Jeffersonian/S Jeffrey/MS Jehovah/M jejune/PY jejunum Jello/M Jenkins Jennie/M Jennifer/M Jennings/M jeopard jeopardy/S Jeremiah/M Jeremy/M Jericho/M Jerome/M jerry Jerry's Jerusalem/M jess Jesse/M Jessica Jessie Jessy Jesuit/S Jesus jetliner/S jettison/DGS Jew/S Jewelled Jewish/P jibe/DGS jiffy/S jigger/D jigging jiggle/DGS jigsaw jilt/DRS Jim/M Jimmie jimmy/DGS Jimmy's Jinny jinx jitter/DGMS jitterbug jittery jive/DGS Joan Joanna Joanne/MS Joaquin jobbery jobbing jobholder/S jobless/P Jobrel jockey/DGS jockstrap/S jocose/PY jocular/Y Jodi/M Jody/M Joe/MS Joel/M joey Joey's joggle/DGRS Johann Johannes Johannesburg Johansen Johanson Johnny/M Johnsen Johnstown joist/S jokester/MS Joliet jollity/S Jon/M Jonas Jonathan/M Jones/S jonquil/S Joplin Jordan Jorge Jorgensen Jorgenson Jose Josef Joseph Josephine Josephson Josephus josh/DGRS Joshua Josiah joss joule/MS jounce/DGS journalese/S journeyman journeymen Jovanovich Jove jovial/Y joviality Jovian jowl/DS Joyce/M joyless/PY joyride/GR joystick/S JPEG JPL JSON Juan/M Juanita Jubal jubilant/Y jubilate/DGNSX Judaism Judas Jude Judea judgeship/MS judgey judgmental judgmentalism'M judicatory judicature/S Judith judo Judy/M jugate jugging juju jujube juke/GS jukebox/MS julep/S Jules Julia Julian Juliet Julio Julius jumbo/S Juneau Juneteenth Jungian junkerdom junket/DGRS junketeer/G Juno junta Jupiter juridical/Y jurisdictional/Y jurisprudence jurisprudent jurisprudential/Y jurist/S justiciable Justin/M Justine Justinian jute/S Jutish jutting juxtaposition kaboom Kabuki Kabul Kaddish Kafka Kafkaesque Kagan/M Kalamazoo kaleidescope Kamala/M kamikaze Kamikazes kangaroo/S Kankakee Kansas Kant kaolin kaolinite kappa karaoke/M karat karate Karen Karl Karlsruhe/M Karol Kate Kathleen Kathy Katie/M Katmandu Katrina/M katydid/MS Katz/M Kavanaugh/M Kay kayaker/MS kazoo/MS kB kb kcal Keaton Keats kebob Keegan Keenan keg/S Keith Keller/M Kelley Kellogg Kelly/M kelp Kelvin Kenilworth Kennecott Kennedy Kenneth Kenny keno Kenosha Kensington Kent Kentucky Kenya Kepler/M Kerberos Kermit kern/DGS Kernighan/M kerning/M Kershaw/M ketone ketosis Kettering Kevin Kewaskum Kewaunee keyhole/S Keynes Keynesian keynote/RS keypunch/DGRS keystone/S kg KGB khaki/S khan Khmer Khrushchev/S kibbutzim kibitz/R Kickapoo kickback/S kickball/MS kickoff/S kidder kiddie/S kidless Kiel Kiev killable Killebrew killjoy kilobaud kilobuck kilogauss kilohertz kilohm kilojoule kiloton/S kilovolt/S kilowatt/S kiloword kilts Kim kimono kinematic/S kinesics kinetic/S kingbird kingfisher/MS kinglet kingpin Kingsbury Kingsley Kingston Kingstown Kingwood kink/U Kinnickinnic Kinsey kinsmen/M kiosk/S Kipling Kirby Kirchoff Kirk/M Kirkland Kirkpatrick Kirkwood kitchenette/S kittenish/PY Kiwanis Klan Klaus klaxon kleenex klystron/S km kneecap/S kneepad/S knick/RZ knickerbocker knitted knitting knobby Knobeloch knockdown/S knockout/S knockwurst knothole/MS knotmeter/MS knotty/PR Knowles Knox Knoxville knuckleball/R Knudsen Knudson knurl Knutsen Knutson koala Koch Kodachrome Kodak/S Kodiak Koenig Koenigsberg Kohler kohlrabi Kong Konrad kooks Korea Korean/S kosher/DG Kraemer kraft Krakatoa Krakow Kramer Krause kraut/S Kremlin Kresge krill Kris Krishna Kristina/M Krueger Kruger krypton Kryptonite/MS Kubernetes kudzu kumquat Kurd Kurdish Kurt kurtosis Kuwait Kyle/M Kylie/M Kyoto la/S labial/Y labile labiodental laborious/PY Labrador Lacey lackadaisic Lackawanna lackey/DGS lacrosse/S lactate/DGNS lactational/Y lactose lacuna/S lacunae ladle/DGS ladylike Lafayette laggard/PSY lagging Lagrange Laguna laissez laity Lakehurst lakeside Lakewood lamas Lamborghini/MS lamentably laminate/DGNSX lammed lamming lampblack lamplight/R lampoon/DGRS lamprey/S LAN Lancashire Lancaster Lance/M landau landfall/MS landfill landhold/GJRZ Landis landless landlubber/MSY landownership landslide/S Landwehr Lange Langeland Langford Langley languor lank/PY lanky/PRY Lansing lanthanide lanthanum Laocoon Laos Laotian/S lapidary Laplace lapped lapping laptop/MS Laramie larceny larch Laredo largemouth largesse largish lariat Larry/M Lars/N Larson larval laryngeal/Y larynx/S las/G lascivious/PY lasso/DR latecomer/MS lathe Lathrop Latinate Latino/MS latitudinal/Y latitudinary Lattimer laud/DGRS laudably laudanum laudatory/Y Lauderdale laughingstock/S laundresses Laundromat/S laundrymen laura Laura's laureate/DGNS Lauren Laurence Laurentian lawbreaker/S lawbreaking Lawford lawgiver/S lawgiving lawmakers lawmaking lawman lawmen Lawrence Lawrenceville lawrencium Lawson/M lax/PY laxative/PSY laxity layoff layperson layup/MS Lazarus lazybones lb/S LCD leach/GS leachate leaderless leadsman leadsmen leafhopper leaky/PRY leapfrog Leary leasehold/R leatherneck leathery Leavenworth Lebanese Lebanon lebensraum/M Lebesgue lecher lechery lectern/MS Lee/M leek leery leeward/S leeway lefty/S legate/DGNSX legatee legato legerdemain legging leggy/R leghorn legume/S leguminous Lehigh Leigh Leighton Leila leitmotif leitmotiv Leland/M Lemke lemming/S Lenin Leningrad Leninism Leninist Lennon/M Lenny lenticular Leo Leon Leona Leonard Leonardo Leone leonine Leopold Leopoldville leper/S lepidopterist/MS Leroy lesbian/S lesion/S Leslie lessor letdown/MS lethal/Y lethality lethargy/S letterhead/S letterman lettermen leukemic Levi/S Levin/M Levine levitate/DGNS Leviticus levity/S Lewellyn lewis lex Lexington Leyden libation/S Libby/M libel/S Liberace liberalism liberality Liberia libertarian/S libertine/S libidinous/PY librettist/S libretto/MS Libya Libyan lice licensable licensor licentious/PY Lichtenstein Lichter licit/Y licorice lidding lidless Lieberman Liechtenstein lieut lifeblood lifeboat/S lifecycle/MS lifeguard/S lifesaving lifespan/S LIFO ligament/S ligand/S ligature/DGS lighthearted/PY lightproof lightships lignite lignum likeable Lillibridge/M Lilliputian lilt/G lilting/PY Lima limbic limbo/S limelight limerick/MS limitless/PY limnologist/MS limo/MS limousine/S limpid/PY Lincoln Linda/M Lindberg Lindy lineage/S lineal/Y linebacker/MS lineman/MS linemen lineup/S lingerie lingo lingua lingual/Y liniment/S Linotype Linus Linux/M Lionel lipid/MS Lipton liquefaction liqueur liquidate/DGS Lisa Lisbon Liss listless/PY Liston listserv/MS Liszt/M litany/S literalism lithium lithograph/RSZ lithography lithology lithosphere lithospheric Lithuanian litigant/S litigious/PY litmus litterbug Little/M littleneck Littleton Litton littoral liturgic/S liturgical/Y liturgy livability Livermore Liverpool liverwort livestock livid/P Livingston Lizzie Lizzy LLNL LLNL's Lloyd loadable loam loamy lob lobotomy lobular/Y lobularity lobule/S locale/S localisms locational/Y lockdown/MS Locke Lockhart Lockheed Lockian locknut locksmith/G Lockwood locomotor locomotory locoweed lodestone lodgepole lodgment Logan logarithmic loge/NX loggerhead logistical/Y logjam logo/MS loincloth Lois Lola loll/GR lolly/S Lombard London/MR Londonderry longevity Longfellow longhand longhorn/S longish longitudinal/Y longshoremen longstanding Longstreet longterm longtime looseleaf lop/DGRS lope/DGR Lopez lopped lopping lopsided/PY loquacious/PY loquacity Lorelei Lorentzian Lorenz/M Lori/M lorikeet/MS Lorraine/M lossage lossless Lothario lotion/S Lottie loudspeaking Louis Louisa Louise Louisiana Louisianan Louisville louse/DGS lousewort lovebird/S Lovejoy Lovelace Loveland loveless/PY lovelorn/P lowboy lowdown Lowell lowercase/DGS lowlight/MS Loy loyalist/S Loyola lozenge/DS LRU LSD LSD's Ltd Lubbock lubricate/DGSVX lubricious/Y lubricity Lucas lucent/Y Lucerne Lucia Lucian lucid/PY lucidity Lucien Lucifer Lucille Lucius lucrative/PY lucre Lucretia Lucretius Lucy/M Ludmilla Lufthansa Luftwaffe lug/RS luge/R lugged lugging Luke/M lulu lumbar lumberman lumbermen lumberyard lumen luminary/S luminescence luminescent luminosity lummox lumpish/PY lumpy/PRY Luna/M lunacy lunary lunate/DNY lunchroom/S lunchtime lunge lupine lurid/PY lush/PSY lustful/PY lutanist Luther Lutheran luxe/S Luxembourg luxuriance luxuriate/DG lycopodium Lycra/M Lydia lye Lyft/M lymphocyte/S lymphoma Lynchburg Lyndon Lyon lyrical/PY lyricism lyricist/S ma/M Mac/MS macabre/Y MacAlister/M MacArthur/M Macarthur/M Macaulay/M Macbeth/M MacDonald/M Macdonald/M Macedon Macedonia Macedonian/M MacGregor/M Macgregor/M Mach Machiavelli Machiavellian machinable machination/MS machinelike machinist/S machismo macho/U macintosh mack MacKenzie Mackenzie Mackinac mackinaw mackintosh MacMillan Macmillan Macon macrodynamic macromolecular macrophage/MS macroscopically macrosimulation macrosocioeconomic Madagascar/M Madame/MS madcap madding Madeleine/M Madeline/M madhouse/MS Madison/M madmen/M Madonna/S Madrid/M madrigal/GS Maelstrom/M maestro/MS MAG Magdalene/M magenta/M Maggie/M maggoty magi/M Magill/M magisterial/Y magnanimity magnanimous/PY magnate/MS magnesia/M magnesite/M magnetite/M magneto/MS magnolia/MS magnum/MS magpie/MS Magruder/M Maguire/MS Mahadev/M Mahal/M maharajah/MS Mahler/M maidenhair/M maidservant/M mailman/M mailmen/M Maine/M mainline/DGRSZ mainmast/MS mainspring/MS mainstream majestically maladapt/DV maladjust/DV maladjustment/MS maladroit/Y malaise/M Malamud/M malaprop malapropism/MS malarial malarious Malay/M Malaysia/M Malaysian/M Malcolm/M malcontent/DMS malcontented/PY maledict malediction/M malevolence/M malevolencies malevolent/Y malfeasant/M malform/DGS malformation/S malign/DY malignancy/MS malingering mallard/MS malleable/P Mallory/M malnourished malocclusion/M malodorous/PY Malone/M malposed malpractice/M Malta/M Maltese/M Malthusian/MS maltreat malware/MS mambo/MS mammalian/M Managua/M manatee/M Manchester/M mandarin/MS mandrake/MS Manfred/M manganese/M manhole/MS mania/M maniacal/Y manic manicurist/MS manikin/MS Manitoba/M Manitowoc/M Mankowski/M manna/M mannequin/MS mannerism/MS manorial/M manservant/M Mansfield/M manslaughter/M mantlepiece/M mantra/M mantrap/M Manville/M Mao/M Maori/MS Maplecrest/M marathon/MS marauder/MS Marcie/M Marconi/M Marcotte/M Marcus Marcy/M Mardi/S Margaret/M margarine/M marginalia marginality Margo/M Marguerite/M maria Maria's Marian/M Marie/M Marietta/M Marilyn/M Marin/M marina/MS marinade/MS Marino/M Mario/M Marion/M marionette/MS Marissa/M marital/Y Marjorie/M marketeer/GMS Markov/M Markovian Markovitz marksman/M marksmanship/M marksmen/M Marlborough Marlene/M marlin/MS Marlowe/M marmalade/MS maroon/DGS marquee/S marquess/S Marquette/M marred/U marriageable marring Marriott/M marrowbone/MS Marseilles Marsha/M Marshall/DGM marshland/MS marshmallow/MS Martha/M Martian/MS martin/MS Martinez/M martingale/MS martini/MS Martinique/M Martinson/M Marty/M Marvin/M Marx/MS Marxism/MS Marxist/MS mascara/MS mascot/MS maser/M Maserati/MS Masonic Masonite/M masque/RSZ massless mastermind/DGS mastiff/MS mastodon/MS matchbook/MS materialistic maternity/M Mathews Mathewson/M Mathias Mathieu/M Matilda/M matinee/M Matisse/MS matriarch/M matriarchal matriculate/DGS matrimonial/Y Matthew/MS Mattie/M matting/M maturate/DGSVX maturational Maude/M maudlin/Y Maui/M maul/GRSZ Maureen/M Maurice/M Mauritania Mauritius mausoleum/S mauve maverick/S maw/M mawkish/PY Mawr/M maxima/M maximalism/M maximalist/MS Maximilian/M Maxine/M maxwell/M Maxwellian Maya Mayan/MS Mayer/M Mayfair/M Mayflower/M Maying Maynard/M mayorship/MS Mays Mazda/MS mb MBA MBA's McAdams McAllister/M McBride/M McCabe/M McCall/M McCarthy/M McCauley/M McClain/M McClellan/M McClure/M McCluskey/M McConnell/M McCoy/M McCracken/M McDaniel/M McDermott/M McDonald/M McDonnell/M McDougall/M McDowell/M McFadden/M McFarland/M McGee/M McGill/M McGillicuddy/M McGinty/M McGovern/M McGrath/M McGraw/M McGregor/M McGuire/M McIntosh/M McIntyre/M McKay/M McKee/M McKesson/M McKinley/M McKinney/M McKnight/M McLanahan McLaughlin/M McLean/M McLeod/M McMillan/M McNaughton/M McNeil/M McPherson/M MD MDT meadowland meadowsweet mealtime mealy/RS measle/D measly/R meaty/PRT mecca mechanist mechanistic mechanochemically meddlesome/P Medea Medfield mediator/S Medicaid Medicare medicate/DGNSVX Medici/S medico/S medievalist/MS mediocre mediocrity/S Mediterranean mediumistic medley/S meerkat/MS meetinghouse Meg/M megadeath/MS megahertz megalomania megalomaniac megalopolises Megan/M megaphone/MS megapixel/MS megaton/S megavolt megawatt/MS megohm/S Meister Meistersinger Mekong Mel/M melamine Melanesia Melanesian melange Melanie melanin melanoma Melbourne melee Melinda meliorate/DGNSVX Melisande Mellon melodic melodically melodramatic/S Melville Melvin memento/S mementoes memorabilia memoriam Memphis menarche/S Mencken mendacious/PY mendacity mendelevium Mendelssohn/M Mendoza Menelaus menfolk/S meningitis Menlo Mennonite/S Menominee menopause Mensch menstrual menstruate/DGNSX mensurable/P mensuration/S Mephistopheles mercantile Mercator Mercedes mercer/S merchantability mercurial/PY mercuric Meredith meretricious/PY meringue/S meritless meritocracy meritocratic Meriwether Merle merlin mermaid/MS merman/M mermen Merriam Merrick Merrill Merrimac Merrimack merrymaking mesa mescaline mesmeric meson Mesozoic mesquite Messrs metabolic metabolism/S metabolite/S metadata/M metalliferous metallography metalloid metallurgic metallurgical/Y metallurgists metalsmith/S metalwork/GJR metamorphic metamorphism metamorphose/D metaphoric metaphosphate metaphysic meteorite/S meteoritic/S meteoroid/MS meteorological meteorologist/MS methane methanol methodism Methuselah/S methyl methylene meticulous/PY Metricom metro/S Metroidvania metronome/S mettle/DS mettlesome Mexican/S Mexico Meyer/S mezzo/S Miami miasma miasmal Michael/MS Michaelangelo Michaelson Michelangelo Michelin Michelle/M Michelson Mick Mickelson Mickey/M Mickie Micky micro/S microamp microanalysis microanalytic microbial microchemistry microcosm microeconomic microfossils micrography microjoule microkernel/MS microlevel micrometeorites micrometeoritic micrometer/MS micron/S Micronesia Micronesian microorganism/S micropayment/MS microphysics microscopical/Y microscopy microsimulation/S microsomal microvolt/S midair midas midband Middlebury middleman middlemen Middlesex Middleton Middletown middleware/MS middleweight/S midge/S midi midland/RS midlife midmorn/G midrange midriff/MS midscale midsection midship/S midshipman midshipmen midspan midstream midterm/MS midweek/Y Midwestern/RZ midwife/DG midwives midyear MIG might've mignon migrant/MS migratory/S MIGs Miguel mike/DGS Mike's Mikhail Mikoyan mil Milan Mildred milieu/S militarist militate/DGS militiamen milkweed Millard millenarian millenarianism millenia millenial/MS millennia millennialism millennium milliamp milliampere/S millidegree/MS Millie milligram/MS millijoule/S milliners millinery millisievert/MS millivolt/S millivoltmeter/MS milliwatt/S millwright/S Milquetoast/S Milton Miltonic Milwaukee MIMD mime/GR MIME's mimeograph/DGMS mimesis mimetic mimetically mincemeat minefield mineralogical mineralogist/S mineralogy/S Minerva/M minesweeper/S mini/S minidress/MS minify/DGS minima minimalist/MS minimax miniscule miniskirt ministerial/Y ministrations miniver Minneapolis Minnie/M Minoan minuend/S minuet minuscule minuteman minutemen minutiae Miocene Mira mirage/DGS Miranda Miriam/M mirthless/PY misadventure/DMS misalign/DGS misalignment/MS misandry misanthrope misanthropic misapprehension/MS misbegotten misbehave/DRS misbrand/DGS miscalculated miscapitalization/M miscapitalize/DGS miscarriage/S miscarry/DGS miscegenation/S miscellany/S misclassification misclassified misclassifying miscode/DGS misconduct/DGS misconfigure/DGS misconstruction/S miscount/DGS miscreant/S miscue/MS misdeed/S misdemeanant/S misdirector/S misestimate/DGNS misfire/DGS misgauge/DGS misgender/DGS mishandle/DGS misidentification/MS misidentify/DGNSX misinterpretation/S misjudge/DGS misjudging/Y mismanage/DGS misname/DGS misogynist/MS misogyny misplacement/S misprint/MS mispronounce/DGS mispronunciation misquote/DGS misrelated misremember/DGS misreporting misrepresent/DGRS misroute/DGS misshapen/PY misshapenness/S Mississippi Mississippian/S Missoula Missouri misspecification misspecified misstatement/S misstep/MS Missy mistletoe mistook mistreatment/MS mistrial miswritten Mitch/M Mitchell/M mitigable Mitsubishi/MS mitzvah/MS mixup mm mobbed mobbing mobcap/S Mobil mobile/MS mobster/S mockingbird mockup/S mod/S modernism modernist/MS modernistic Modesto modicum modish/PY Mohammed/M Mohammedan Mohawk moiety/S Moines moire molal molar/S Moldavia/M moldboard molehill Moliere Moline moll mollie mollify/DGNSX mollusk/S mollycoddle/DGRS Molotov molt/DGRS molybdenite molybdenum momenta momma mommy/MS Mon Monaco monad/S monadic monarchic monasticism monaural/Y Monet monetarism moneylenders moneymaking Monfort Mongolia Mongolian mongoose/S Monica monied monies monkish monochromatic monochromator monocle/DS monoclinic monocular/Y monogamous/PY monogamy monolingual/S monolingualism monolith/S monolithically monologist/S monologue/S monomer/MS monomeric monomial mononuclear monophonic monopod/MS monopolistic monopolists monorail/MS monosyllabic monosyllable/S monotheistic Monroe Monrovia Monsanto monsieur monsoon/S monstrosity/S montage/DGS Montague Montaigne Montclair Monterey Montevideo Montgomery Monticello Montpelier Montreal Monty monumentality moo/DS Mooney Moorish mope/S mopped mopping moraine moralist moralistic moratorium/S Moravia Moravian morbidity mordant/Y Morehouse Moreland Morgan morgen morgue/S Moriarty moribund Mormon Moroccan morocco moronic morose/PY morphed morpheme morphemic/S morphine/S morphism/MS morphologic morphophonemic/S morris Morrison Morristown Morse mortgagee/S mortician/S Mortimer Morton/M Moscone Moscow Moses mosque/S Mossberg mote/MS motherfucker/MS motherhood motherland motional motivator motorman motormen mottle/DGRS mountable mountainside/S mousy/PRY mouthpiece/S movant Mozart/M MPH MST MTS MTV mucilage mucky mucus Mudd/M mudding muddlehead/DS muddleheaded/P mudguard mudsling/GRZ muggers mugging/S muggy/PRY Muhammad Muir/M mulatto/S mulattoes mulch/DGS mulct mulish/PY mull/GNR mullah mulligan Mulligan's mulligatawny multi multicast/DGS multichannel multicollinearity multicolumn multicomputer/MS multiculturalism/M multidimensionality multidisciplinary multifaceted multifigure multifunctioned multilateral/Y multilingual/Y multilingualism multimedia/M multimegaton multimillionaire multimodal multinomial multiplet/S multipliable multipurpose multiset/MS multisyllabic multitudinous/PY multivalent multiversity mum Mumford mummify/DNX Muncie Mundt munge/DGJRSZ Munich munificent/Y Munroe Munson muon/MS muriatic Muriel murk Murphy Murray Murrow Muscat muscovite/S Muscovy musculature mush/R musicality musicianship musicological musicologist/MS musicology Muskegon muskellunge muskmelon muskox/N muss/DGS Mussolini/MS Mussorgsky/M must've mustachio/DS mustang/S mustn't mutant/S mutational/Y mutineer mutt mutuality Muzak Mycenae Mycenaean mycology myers mylar mynah myocardial myocardium myopia myopic Myron mystify/DGNRS mystifying/Y mystique mythic mythographer/S mythography mythological/Y NAACP nab nabbed nabbing Nabisco NaCl nadir Nagasaki nagged nagging/Y Nairobi Nakamura Nakoma nameplate/S nameserver/MS namespace/MS Nan Nancy/M NAND Nanette Nanking Nanook Nantucket Naomi naphtha Naples Napoleon Napoleonic napped napping narcissist narcosis narrate/DGNSX narrator/MS nary NASA NASA's nasality NASCAR nascent/A Nash Nashua Nashville Nassau nasturtium Nat natal Natalie/M natalist natality natch Natchez Nate/M Nathan/M Nathaniel nationalism/S nationalistic nationhood NATO natty/PRY naturalistic nausea/S nauseate/DGS nauseating/Y nautical/Y nautilus Navaho Navajo navel/S navigational/Y Navona Nazarene Nazareth Nazism NBC NBS NCAA NCC NCR nd Neal/M Neanderthal Neapolitan nearsighted/PY nebulae nebular nebulous/PY neckline necromancer/S necromancy necromantic necropsy necrosis necrotic nectar nectarous nectary/S nee Needham needlepoint negativism/S negativity negligee/S negligent/Y negotiant negroid nelson nematic nematode/S nemesis neoclassic neoclassical neocortex neodymium neolithic neologism/MS neomycin/MS neon/D neonatal/Y neoplasms neoprene Nepali Neptune neptunium Nero nerveless/PY nervy/PR Nestor NetApp/M Netcom/M Netflix netherworld netizen/MS Netscape/M nettlesome Neumann/M neuralgia neurasthenic neuritis neuroanatomy neurologist neurology neuromuscular neuronal neuropathology neurophysiology neuropsychiatric neuroscientist/MS neuroses neurosis neurotic/U neuter/DGJRSZ neutralism neutralist/S neutron/S Nevada Newark newbie/S Newbury Newburyport Newcastle newel Newell newfound newfoundland newlywed/S Newman Newport newsboy/S newscast/GRSZ newspaperman newspapermen newsreel newsstand Newsweek/Y newsworthy/P newton Newton's NeXT NeXTStep nexus/S NFS's Niagara Nicaean Nicaragua Niccolo Nicholas Nichols Nicholson nichrome Nicklaus Nicodemus Nielsen/M Nielson Nietzsche Nigeria Nigerian niggard/Y niggardly/P niggle/DGRS niggling/Y nightcap nightclub/S nightdress nighthawk nightmarish/Y nightshirt nighttime nihilism/S nihilist nihilistic Nijinsky Nile nilpotent Nilsen Nilsson nimbus/DS Nina/M ninefold Niobe niobium nipped nipping/Y nipple/S Nippon nirvana nit/MS nitpick/RZ nitpicker/MS nitrate/DGNSX nitric nitride/G nitrile nitrite nitrogenous nitroglycerine nitrous nitty Nixon nm NOAA Noah nob Nobel nobelium Noble/M noblemen noblesse nobody'll nocturne/MS nodal/Y nodular nodule/S Noel noisemake/GRZ nomad/MS nomadic nominalization/MS nominee/MS nonacid nonadjacent nonagricultural nonbusiness noncarbohydrate nonchalant/PY noncombatant noncommissioned noncommittal/Y noncompliance nonconformist/S noncontiguous nondiscrimination nondiscriminatory nondurable/S noneconomic nonemergency nonequivalence nonequivalent nonessential nonferrous nonfiction nonionic nonlinguistic nonliterary nonmagical nonmetallic nonogenarian nonpartisan nonpayment nonperturbing nonpoisonous nonpolitical nonprescription nonprofit/MS nonracial nonrandom nonreducing nonrefundable nonresident nonresidential nonresistance nonrespondent/S nonresponse nonsectarian/MS nonsingular nonstop nonsupervisory nonverbal/Y nonveteran/S nonviolent/Y nonvolunteer/S nonwhite noodle/DGS noontime noose/GS noradrenalin noradrenaline Norfolk Norma Norman/M Normandy normative/PY Norris Norristown Norse Northampton northbound Northeastern's northernmost Northfield northland Northumberland Norton Norwalk/M Norway Norwegian Norwich nosebleed/MS nostalgia nostalgic nostalgically Nostradamus nosy/PRY notary/MS notate/DGSV notoriety Notre Nottingham nouveau nouvelle nova/MS novitiate/S noxious/PY Noyes nozzle/S NP NSA NSF NTFS nth nuance/D nuanced/U Nubian nubile nucleate/DN nuclei nucleic nucleoli nucleolus nuclide nude/PRSTY nudge/DGRS nudism nudist/S nudity nugatory Nugent nugget/MS nuke/MS nullity numerable numerate/DGNSX numerological numerology numinous numismatic/S numismatist nutate/DGNS nutcrack nutmeg nutrient/S nutritional/Y nutritionist/S nutritious/PY nutritive/Y nutshell nutty/PR nuzzle/DGS NVIDIA NVIDIA's NVM nylon/S nymphomania nymphomaniac/S NYSE O'Brien/M O'Clock O'Connell/M O'Connor/M O'Dell/M O'Donnell/M O'Dwyer/M O'Er O'Hara/M O'Hare/M O'Leary/M O'Reilly O'Shea/M O'Sullivan/M oaf/S Oakland/M Oakley/M Oakmont oakwood oases obduracy obdurate/PY obeisant/Y obelisk/MS Oberlin obese obesity obfsucate/DGS obfuscatory obit/R obituary/S objectify/DGNSX objectivity obligational obnoxious/PY oboe/S oboist/MS obscenity/S obsequies obsequious/PY obsequy observably observational/Y obsess/DGSV obsessive/PY obsidian obsolescent/Y obtrude/DGRS obtrusive/PUY obtuse/PRTY obverse/Y ocarina Occam/M occident occidental/Y occipital/Y occlusive occult/RY oceanic oceanographic oceanography oceanside ocelot Oconomowoc octagon/S octagonal/Y octahedron octane Octavia octennial octet octile octillion octogenarian octoroon ocular oculist Odessa odium odometer/MS odoriferous/PY Odysseus odyssey Oedipal/Y offal offbeat Offenbach offertory/S offhand/D offhanded/PY officeholder/S officemate/S officialdom offline offload/DGS offramp offsetting offshoot offshore offstage Ogden ogive ogled ohm/S ohmic ohmmeter/MS oilman oilmen oilseed/S OK's Okamoto Okinawa Olaf Oldenburg Oldsmobile oldster/S oldy/S oleander/S Oleg oleomargarine Olga oligarchic oligarchy oligopolistic oligopoly Olivers Olivetti Olivia Olsen Olson Olympia Olympian Olympic/S Olympus Omaha Oman omega/S omelet/S omicron omni omnibus omnipotence omnipotent/Y omniscience oncology oncoming Oneida onetime oneupmanship onlooker/S onrush/G onslaught/S onstage Ontario ontogeny ontological/Y ontology onus onyx oodles opalescent/Y OPEC Opel operant/MSY operatic operetta ophthalmic ophthalmologic ophthalmologist ophthalmology opine/DGS opinionated/PY opossum/MS Oppenheimer opposable oppositional/Y opprobrium Optane/M opticians optimist/S optionality optometric optometrist/S optometry opulence/M opulent/Y opus/S orangutan/MS orate/DGS oratorical/Y oratorio/S orchestral/Y orchestrate/DGNRSX ordnance/S oregano Oregon Oregonians organdy organically/I organismic organometallic orgasm/S orgiastic oriental/Y origami/M oriole/S Orlando Orleans Orlick ornate/PY ornery/P orographic orography orphanage/S orphanhood Orpheus Orphic Ortega orthodontic/S orthodontist/S orthodoxy/U orthographic orthography/S orthonormal orthophosphate/S Orwellian Osaka Osbert Osborn Osborne Oscar OSDI Oshkosh Oslo osmium osmosis osmotic osprey/S osseous/Y ossify/DNX ostensible ostensibly ostentatious/PY osteology osteopath/S osteopathic osteopathy osteoporosis ostracism Ostrander Oswald Othello otherworld/Y otherworldly/P OTOH Ottawa Otto/M Ottoman ouch oughtn't oust/DGR outage/MS outback outboard/S outbuilding/MS outclass/D outcrop/MS outdated/P outdistanced outdistancing outdo outdrew outface outfield/RZ outfitted outflow/S outfought outfox outgeneraled outgrip outhouse outland/RZ outlandish/PY outlawry outlier/S outlying outmatched outmigration outmoded outnumber/DGS outpatient/S outplayed outpour/GJ outreach outrigger/S outscoring outshine/DGS outshone outsized outsmart/DGS outspoken/PY outspread outstate/N outtake/MS outworn ouzo ova ovate/NSX ovation/DGS overabundance overactive overage overaggressive overarching overbearing/PY overburden/DGS overburdening/Y overcerebral overconfident/Y overconsumption overcooked overcooled overcorrection overcurious overdeveloped overdid overdo/G overdoes overdriving overeager/PY overeat/GNR overeducated overexcited overexploitation overexploited overextend/DGS overextension overfall overfeed overfill/DGS overgenerous overgrazing overgrown overhand/D overheat/DGS overinclusion/MS overinclusive overindulged overlords overloud overpaid overpass/MS overpayment overplayed overplaying overpopulated overpopulation overpressure overprice/D overprotection overprotective overran overrated overreach/DRS overrepresented oversample/DG oversaturate oversaw overshoes oversize/DS oversleep/GS overslept oversoft/P overspill overstay overstepping overstraining overstrike/GS oversubscribed oversupply overtax/DGS overwrap Ovid oviform ovulatory Owen/S owlish/PY owly oxalate oxalic oxaloacetic oxcart Oxford oxidant oxidate/VX oxidative/Y Oxnard oxygenate/DGNSX oxyhydroxides oxymoron/MS oxymoronic oxymoronically Oz Ozark/S ozone Ozzie Pablo/M Pabst/M pacemaker pacesetting pacifism pacifist pacifistic Packwood paddock padlock/DS padre paean/S Paganini paganism pageantry pagoda/S Paine paintbrush/S Pakistan Pakistani/S palatability/U palatable/P palatal/Y Palatine palefaces Paleolithic paleontologist/MS Paleozoic Palermo Palestine palette palindrome/S palindromic palisade/S palladium pallet/MS Palmdale/M palmetto palmist Palmolive palmtop/MS Palmyra Palomar palpable palpably palsy/DGS paltry/PR Pam/M Pamela pamper/DGRS panama Pancho pancreatic pandemic Pandora panicked panicky panini/M panjandrum panoply/D panorama/S panoramic pantheism pantheist pantheon pantomime/D pap paperboard paperhangers paperweight/S papery/P papillary papoose Pappas pappy/S papyri papyrus/S parable/S parabola parabolic paraboloid paraboloidal paracord/M paradigmatic paradoxic Paraguay parakeet/S parallelepiped/S paramagnet paramagnetic paramedical parametrically paranoiac/S paranormal/Y paraphernalia paraplegic paraprofessional/S parapsychology parasol/S parasympathetic paratroop/RSZ paravirtualization/MS parboil/D parenthetic pariah parimutuel/S Paris parishioner/S Parisian parka/MS Parkersburg Parkhouse Parkinson parkish parkland parklike parkway parlance parlay/DGS parley/S parliamentarian/S parochial/Y parochialism/MS parody/DS parolee/S parquet/DG Parrish parrotlike parsec/S parsimonious/Y parsnip parsonage Parthenon participial/Y participle/S particularistic particularity particulate/S partook parvenu Pasadena passable Passaic passband/MS passerby passersby Passover pasta pasteboard pastel/S Pasternak pasteup Pasteur pastiche pasty/PRS Patagonia Patagonians patchy/PRY patentee/S paternalism paternalistic paternity paternoster pathless/P pathogen/S pathogenesis pathogenic pathologic patina/S patio/S patriarchal patriarchy/S Patrice Patricia patrimonial patrimony patristic/S patrolled patrolling patrolman patrolmen patroness Patsy/S patted Patterson/M patting Patton Paul/GM Paula Paulette/M Pauli Pauline Paulsen Paulson paunch paunchy/PR pauper Pavlov pawnshop/MS Pawtucket payday payload/MS paymaster/S Payne/S Payson PB/S PCMCIA PDF PDF's PDFs PDT Peabody peacemaker/MS peacemaking peacetime/S Peachtree peaky Pearce peasanthood pecan/S peccadilloes peccary Pecos pectoral/S peculate/DGNS pecuniary/Y pedagogue pedagogy pedal/S pedant pedantry peddle/DGS pediatrician pedigree/D pediment/D Pedro peephole peepy peerage peevish/PY Pegasus pegboard/S pegged pegging Peggy/M pejorative/SY Peking Pelham pelican/S pellagra pelvic pelvis/S pemmican penal/Y penchant pendant/MS Pendleton penicillin penis/S penitential/Y penknife/M penknives penman penmen Penn pennant/S Pensacola pentagonal/Y Pentecost pentecostal Pentium/MS penultimate/Y penurious/PY penury peony/S Peoria peppergrass peppermint/S pepperoni peppery pepping peppy/PR Pepsi Pepsico peptidase/S peptide/S percept percolator/S percussion/S percussionist/MS percussive/PY Percy perdition/S Perez perfectibility perfectible perfectionism perfidious/PY perfidy perforate/DGNSX perforated/U perfumery perfunctory/PY perfusion/A Pergamon Pericles perihelion perimeter periodicity/S periodontal/Y peripatetic periphrastic periscope/S periwinkle/S perjure/DGRS perjury perk/DGS Perkins perky/PRY Perl/M permalloy permanency permeable/P pernicious/PY Pernod peroxide perpetuity perquisite/S Perry/M persecutory Perseus Pershing Persia Persian/S persiflage persimmon/S persona personae perspicacious/PY perspicuity perspire/DGS pert/PY Perth pertinacious/PY pertinence Peru Peruvian/S pervasion perverse/NPVXY pesky/R pessimism pessimist/S pesticide/S pestilent/Y pestilential/Y pestle/DGS petabit/MS petabyte/MS petaflops Petaluma/M Pete/M Petersburg Petersen Peterson/M petite/P petits petri petrify/DN petrochemical petroglyph/MS petrol petrology Pettibone pettish/PY petulance/S petulant/Y petunia Peugeot Pewaukee peyote Peyton/M pfennig Pfizer PGP Ph pH Phaedra phagocyte/S phalanger phalanx/S phantasy pharmaceutic/S pharmaceutical/SY pharmacist/S pharmacological/Y pharmacology pharmacy/S pharyngeal pharynx/S phenol phenolic phenotype/MS phenyl phi Phil/MY Philadelphia philander/DGRSZ philanderer/MS philanthropic philanthropist/S philanthropy/S Philco philharmonic/M Philip Philippe Philippians Philippine/S Philistine/S Phillips Philly/S philodendron philological/Y philologists philology phish/DGRSZ phisher/MS phlegm phlox phobic phoebe phoenix phonetically phonic/S phonologic phonological/Y phonology phony/PRSY phosphide phosphine/MS phosphor/S phosphoresce phosphorescent/Y phosphorus photochemical/Y photoelectronic photoelectrons photoengravers photogenic photographically photojournalist/MS photoluminescence photolysis photolytic photometric photometry photomicrograph photomicrography photon/MS photorealism photosensitive Photoshop/M phrasemaking phraseology/MS Phyllis phylogeny physiochemical physiognomy physiologic physiologist physiotherapist physiotherapy phytoplankton pianism pianissimo pianist/S pianistic pica Picasso Piccadilly piccolo/MS pickaxe pickerel/S Pickford pickiness/M Pickman pickoff/S pickpocket/MS picky/PR picnicked picnicker/S picnicking picofarad/S picojoule picosecond/MS piddle/G pidgin piedmont Pierre Pierson piezoelectric piezoelectricity pigeonhole/DGS pigging piggish/PY piggy pigmentation/S pigpen/S pigroot pigskin pigsty/MS pigtail/DMS pilfer/DGRS pillory/DGS pillowcase/MS Pillsbury pimento pimp/GSY pimple/DS pimplike pinafore/S pinball pincushion Pinehurst pinhead/DS pinheaded/P pinhole/S pinkie/S pinkish/P pinochle pintail/S pinto pinwheel pion pip Pipestone pipet pipette piquant/PY piracy pirouette/G Pisa Pisces pistachio pistole pistoleers pitchblende pitchfork/MS pitchstone pitman Pitney piton/MS Pitt pittance/MS pitting Pittsburgh/Z Pittsfield Pittston pituitary Pius Pixar/M pixelate/DGS pixmap/MS pixy/PS pizza/MS pizzicato placate/DGNRSV placeable placeholder/MS placeless/Y placenta placental placidity/M plagiarism plagiarist plainclothes Plainfield Plainview planeload planetaria planetarium planetesimal planetoid/S plankton planoconcave planoconvex plantain plaque/S plasm plastically platitude/S platitudinous/Y Plato platonic Platonism Platonist platoon/MS platted Platteville plausibly playback/S playboy/S playhouse/S playoff/MS playroom playtime playwriting plaza/S pleat/DRS Pleiades Pleistocene plenipotentiary plenitude plenum plethora pleura/S pleural Plexiglas pliable/P pliancy pliant/PY plink/DGRS Pliny Pliocene plodded plodding/Y plop plopped plopping plosive plover/S pluggable plugin/MS plummer plummet/DS plunk/DGRSZ pluralism pluralist/S pluralistic plushy/PR Plutarch Pluto plutonium Plymouth plywood PM pneumatic/S Pocahontas pock pocketful pocketknife/M pocketknives Pocono/S PODC podcast/MS podge/RZ podia podium Poe poesy/S pogo pogrom/S poignancy poignant/Y Poincare Poindexter poinsettia Poisson pokerface/D pol polarimeter/MS polarimetry Polaris polariscope polarogram/MS polarograph polarography/M Polaroid polecat polemical/Y policymaker/S policymaking polio politburo politicking politico/S polities Polk polka/MS pollock pollutant/S Pollux polonaise polonium poltergeist/MS polybutene/S polychemicals polycrystalline polyelectrolytes polyester/S polyether/S polyethylene polygamous/Y polygamy polygonal/Y polygynous polyhedra polyhedral polyhedron polyisobutylene polyisocyanates polymerase polymeric polymorph polymorphic polymyositis Polynesia/M Polynesian Polyphemus polyphony polyphosphate/S polypropylene polystyrene polytechnic polytonal/Y polyunsaturated pomegranate Pomerania Pomeranian Pomona/M pompadour pompano Pompeii Pompey pompons pomposity poncho/MS pons Pontiac pontiff pontifical/S pontificate/DGNS pontoon/MS pooch/D poodle pooh poop/DGMRS popcorn poplin popper poppyseed Popsicle/S popularism porcine porgy pornographer/M pornography/M porosity porous/PY porpoise/S portage/DG portent/S portentous/PY porterhouse portfolio/S porthole/MS Portland/M portmanteau/S portraiture portrayal/S Portsmouth Portugal Portuguese Poseidon poseur/S posh/T positivism positivist/S positivity positron POSIX/M posse/S postdate/DGS postdoctoral posteriori postfix/DGS postgraduate posthumous/PY postlude/S postmarital postmark/DS postmen postmortem postoperative/Y postorder postpartum Postpischil/M postponement postpositions postsecondary postvocalic postwar potable/P potage potbelly/D potboil/RZ Potemkin potency pothole/DG potion/S potlatch/S potluck Potomac potpourri Potsdam Pottawatomie Potts POTUS Poughkeepsie Poulenc/MS poultice/S Poussin/S pow powderpuff powdery Powerbook/MS powerhouse/MS PPE PPE's PPP/M practicability pragmatism pragmatist/S Prague praiseworthy/PY pram/S prankish/PY prankster/MS praseodymium Pratt prattle/DGRS prattling/Y Prattville Pravda praxes praxis prayerful/PY preamble/S prearrange/DGRS precalculate/DGRS Precambrian precautionary precess/DGS precession prechlorination precipitable precocity precode/D precollege precolonial precompute/DGRSZ precomputer/MS preconscious precooked precut predator/MS predatory/Y predecline predestined predetermination/M predicator predigested predilect predilection/S predispose/DS predisposition/S predoctoral predominance preeminence preeminent/Y preemployment preemptor preen/GR preexistent preexisting prefab prefabricate/DN prefatory/Y prefect/S prefecture/S preferment prefetch/DGS prefiguration preflight/DGS pregnancy/S preindustrial preinstall/DGS preinterview preisolated prejudicial/PY preliterate preload/DGS premarital/Y premarket/DGS premeditate/NV premix/D premonition/S premonitory/Y Prentice/DG preordainment prep prepackaged prepaid prepay/DGS prepayment preponderance/S preponderant/Y preponderate/GNY prepping preprepared preprocessing preprogrammer preprogramming/M prepubescent prepublication preradiation prerecord/DGS presage/DGRS Presbyterian Presbyterianism preschool/R prescience/M prescient/Y Prescott prescript presentable/P presentational presentments preservationist/MS Presley presoaks pressman pressmen prestidigitate/N prestidigitator prestigious/PY presto/S Preston/M presumable presupposition/S pretest/DGS Pretoria pretrial pretzels prevarication/MS prevision/DGS prewar Priceline/M prickle/DG priestess/S Priestley prig priggish/PY prim/PY primal primate/S primitivism primordial/Y primp/G Princeton Principia printmake/GRZ Priscilla prismatic prissy/PRY pristine/Y privateer/MS probabilist probity procaine processional/Y procreate/NV procreativity procrustean Procrustes proctor/DGMS Procyon prod prodded prodding prodigy/S prof profanity professorial/Y professorship profligate/SY profoundity profundity profuse/NPY progenitor prognoses prognosis prognosticate/NV prognosticator progressivism prohibitory projectile/S projectionist/S Prokofieff prolate prolifically prolix/Y prolixity prolongate/DGNS Promethean Prometheus promethium promptitude promulgators pronto proofread/DGRS propagandist/S propagandistic propane propellant/S propelling prophetically propinquity propionate propitiate/N proportionality proportionate propped propping proprietorship/S proprioception proprioceptive propylene prorate/DGNSX proration/MS prosaic proscenium/S proscribe/DGRS proscription prosecutable prosecutor/S prosecutorial prosody/S prostate prosthetic/MS prostitute/S protactinium protagonist/S protean protease/S protectionist protectress proteolysis proteolytic protestant Protestantism protoplasmic prototypic protozoa protozoan protract/DV protrusive/PY protuberance/MS protuberant Proust provenance proverbial/Y provident/Y providential/Y provincialism proviso provocateur/S provocative/PY provost Proxmire proxy/S prudential/Y prurient/Y Prussia Prussian psalmist pseudocode/DGMS pseudonym/MS psi PST psych psychedelic psychiatric psychic/MS psychical/Y psycho/S psychoacoustic/S psychoactive psychoanalyses psychoanalysis psychoanalyst psychoanalytic psychobiology psychocultural psycholinguistic/S psychometric/S psychometry psychopath/MS psychopathic psychophysic/S psychophysical/Y psychophysiology psychos/S psychosis psychosomatic/S psychotherapeutic/S psychotherapists psychotherapy psychotic PTA ptarmigan pterodactyl/MS Ptolemaic Ptolemaists Ptolemy puberty pubescent publicists publishable Puccini/M puck puckish/PY puddly pudgy/PR pueblo/S puerile/Y Puerto puffball/S puffery puffin/S puffy/P puissant/Y puke/DGS Pulaski Pulitzer Pullman/S pullover pulmonary pulsar/MS pulsate/DGNSX pulverable puma/M pumice/DG pummel/S punctuality punctuate/DGS pundit/S punditry pungency pungent/Y punk/S punky/PRS punster/S pupal pupate/DGNS puppeteer/S puppyish Purcell Purdue/M purgation purgative purgatory Purina purism purist/S puritan/S puritanic puritanical/Y purloin/DGRS purposeless/PY pursuant purvey/DGS purveyor/S pus pushup/MS pushy/PRY pussycat putative/Y putrefy putrid/PY putt/D putted/I putty/DGS Pygmalion Pyhrric pyknotic Pyotr/M pyramidal/Y pyre Pyrex pyridine pyrolysis pyromania/M pyromaniac/MS pyrometer/MS pyrometry pyrophosphate pyrotechnic/S pyroxene pyroxenite Pythagoras Pythagorean/S python/MS QoS quackery/M quad/MS quadrangle/MS quadrangular quadrapole/MS quadrennial/Y quadric quadriceps quadrilateral/S quadrille/NS quadrillion/H quadripartite/NY quadriplegic quadrivium quadruplicate/DGNSX quaff/R quahog Quakeress Qualcomm/M Quantico quantile/S quarryman quarrymen quarterback/S quartermaster/S quartile/S quartzite quasar/MS Quasimodo/M quaternary/S quatrain queasy/PRY Quebec Queensland/M querulous/PY quibble/DGRS quiche/S quickie/S quicklime quicksand/S quickstep/S quiescent/PY quincy Quinlan's Quinn/M quinquennial/Y quint quintessential quintet/S quintile/S quintillion/H quintuple/DGRS quip/S quipping quirk/GS quirt Quixote quixotic quizzical/Y Quonset/MS quorum/MS rabbi/MS rabbinical/Y rabid/PY rabies racetrack/RZ racetracker/MS raceway/MS Rachel Rachmaninoff/M Racine racism racist/S rackety racquet/S racy/PRY Radcliffe radian/S radicalism radices radii radioactive/Y radioactivity/S radioastronomy radiocarbon radiochemical/Y radiochemistry radiographic radiography radiologic radiological/Y radioman radiomen radiometer/MS radiometric radiometry radionics radiophysics radiotherapy radium radon Rafael raffish/PY raffle/DGS ragging ragout ragweed/S railbird/S railhead/S raillery rainless rainstorm rainwater rajah/S Rajive/M rakish/PY Raleigh Ralph/M Ralston Ramada rambutan ramify/DGS Ramirez rammed ramming Ramona rampage/DGS rampant/Y ramrod/S Ramsey rancho/S rancid/P rancidity rancorous/Y Rand Randall Randolph randy/S Randy's rangeland/MS Rangoon/M rangy/PR Raoul/M rapacious/PY Raphael/M rapier rapist/MS rapped rappel/S rappelled rappelling rapper/MS rapping rapport/M rapprochement/M Rapunzel/M rarefy/D Rasmussen rasterization/M ratable ratchet/DGMS rateable ratiocinate/DGNSV rationalism rationalist/S rationalistic rattail ratty/R raucous/PY Ravel/M ravish/GRS ravishing/Y rawboned rawhide/DG Rawlings Rawlins Rawlinson Rawson Rayburn Rayleigh Raymond/M Raymondville Raytheon raze/DGRS razorback RCA rd reachability reactant/S readably/U readapt/S readaptation readership/M readjust/GR readjustment README reaffirmation Reagan/M reagent realtor/S realty reappearance reapplication reappoint/DGS reappointment reapportionment reappraise/G reassembly reassert/DG reassurance Rebecca/M recalcitrant recant/D recappable recency receptionist/S recharge/GR recheck/G recherche/S recipiency recitative recluse/MNSV recluster/G recoilless recommence/G recomposition recondite/NPXY recondition/GJS reconnaissance reconquer/DGS reconstitute/GN recontamination reconvene/G reconvention reconverting recopy/DS recoup/DGS recriminate/DGNSVX recruitment rectify/DNRXZ rectilinear/Y rectitude rectory recumbent/Y recuperate/DGNSV recurred recusal/MS recusant recuse/DGS redact/DGS redacted/U redaction/MS redactor redbird/S redbud redcoat/S redding Reddit/M redecorating redecoration rededicate redemptive redeposition redhead/DRS Redhook rediscover/G rediscovery redistricting Redmond/M redneck/DS redo redound Redstone reduct/V reductionism/M redwood/S Reedville reedy/R reek/DGRS reelection reentry reenumerate/N Reese reestimate reeve reexamination refactor/DGS refashion refectory/S referenda refinance refinery/S refinish/GRSZ refinisher/MS reflectance reflux/DGS reforestation reformatory/S reformism reformist/S refract/DGSV refraction refractive/PY refractometer/MS refrigerate/DN refurbish/DGR regale regalia regatta/S regency regimentation Regina Reginald regionalism registrable registrant/S registrar/MS registry/S regressors reground regulatory Regulus rehabilitate/DGNSVX rehearing rehydrate/DGNS Reich/M Reichenberg Reichstag/M Reiher/M Reilly/M reimbursable reimburse/GS reimplement/GS Reinhard/M Reinhardt/M Reinhold/M reinstitution reintegration reinterpretation reinterview reinvest reinvestigation rejigger rejoinder relatable relativist releasable relevancy reliant/Y relict religionists religiosity relocatable remail/DGS remake/G remand/DG remap/DG remapping remarriage remarry/G rematch Rembrandt/M remediable/P remedial/Y remediate/DGNS Remington/M reminisce/DGS remiss/PY remission remit/S remitted remitting/U remorseful/PY remorseless/PY remount/DGS remunerate/DGNSVX remunerated/U remunerative/PY Remus renaturation renature/G Renault/MS Renee/M renegotiate/N renewable/S renewably Renoir/M renovat/DGRS renovate/DGNRSX renumeration renunciate/NVX Renville/M reorient reorientation repacked repairable repairmen repartee repatriations repayment repeatability repelled repellent/Y repelling repentant/Y reperfusion/M repertory repetitious/PY replenishment/S repopulate/DGRS reportage reportorial/Y reprehensible/P representativity reprimand/D reprise/DG reproachful/PY reprobate/GMNV reps reptilian republicanism repugnance repugnant/Y repurpose/DGS resale rescaling rescind/DR resemblant resettlement reshuffle/DGS residency residual/SY residuary residuum resilience resiliency/M resilient/Y resinlike resonate/DGS resonator/S respawn/DGS respirator/S respiratory respire/G restaurateur restitution restock restorability restorative/PY restructurability restudy/DS resupply/DGMS resurgence resurgent resuscitate/DGNSV resuspension retaliate/DGSV retaliatory retardant/MS retardation retch/G retell/G retest rethink/GR rethought reticulum retiree retitle/S retouching retrenching retrenchment retribution retroactive retrofit retrofitting retroflection retroflex/D retroflexion retrogradations retrograde/GY retrogressive/Y retrorocket retrovision Reuben/M Reuters Reuther/M Rev revaluation revelatory reverberate/DNVX reverent reverie/S reversibility revet revetments revisable revisionary revisionist/S revivalism/M revolutionists revue/S revulsion/M revved revving Rex/M Reynolds RFC RFI rhapsodic rhapsody Rhea/M Rheims Rheinholdt/M Rhenish rhenium rheology rheostat/S rhetorical/PY rhetorician/S rheum rheumatic/S Rhine Rhineland/MRS rhinestone/S rhino/S rhinotracheitis rho Rhodes Rhodesia rhodium rhododendron/S rhodolite rhodonite rhombic rhombus/S Rhonda/M ribald riboflavin ribonucleic ribosomal ribosome/MS Rican/S Richard/MS Richardson/M Richey/M Richfield/M Richland/M Richmond/M Richter/M Rickenbaugh rickets rickety ricochet/DGS ridable riddance ridding Ridgefield/M ridgepole Riemann/M riflemen rigamarole rigger/S Riggs rightist rigmarole/S Riley/M Rilke rimless rimmed rimming Rinehart/M ringlet/MS ringside/Z ringtone/MS rink/R Rio/M riparian Ripley/M ripoff/MS RISC risible/S risky/PRT Ritter/M Ritz riverbank/S riverboat riverfront riverine Riverview/M Riviera/M Riyadh RMS roach/S roadbed/S roadblock/S roadhouse/S roadmap/MS Rob/M Robbie/M Robbins Roberta/M Roberto/M Robertson/S Robinsonville/M roboticist/MS robotism/M Rochester/M rockabye Rockaway/S rockbound Rockefeller/M Rockford/M Rockland/M Rockville/M Rockwell/M rodder/M rodding rodent/S rodeo/S Rodgers Rodney/M Rodriguez roebuck/S roentgen Roger/MS roguish/PY roil/G roistering Roland/M rollback/MS rollicking/Y Rollie/M Rollins rollout/MS Romania Romanian/S Romano/M romanticism Rome/M Romeo/MS Romulus Ron/M Ronald/M rondo/S Ronnie/M rood rooftop/MS rookie/MS roomful roommate/MS roomy/PR Rooney/M Roosevelt/MS Rooseveltian rootless/P Rorschach/M Rosa/M Rosabelle/M Rosalie/M rosary/MS roseate/Y rosebush Roseland/M Rosella/M rosemary Rosen/M Rosenberg/M Rosenthal/M Rosetta/M rosette/MS Rosie/M Ross Rossi/M Rossini/M roster/MS rostrum/M Roswell/M Rotarian/MS ROTC Roth/M rotogravure/S rotor/S rototill/DGRS rotted rotting rotund/PY rotunda rotundity roughish roughneck roughshod roulette/DGS roundhead/D roundheaded/P roundhouse roundtable roundworm Rousseau/M roustabout rowboat/S rowdy/PRSY rowel Rowena/M Rowland/M Rowley/M Roxy/M Rozelle/M RPC RPM RSVP rubbery rubdown rube/S rubella rubicund rubidium rubric/MS ruckus rudderless Rudolph/M Rudy rueful/P Rufus rugby/M Rumford ruminant/SY rummage/DGR Rummel rummy/RS rumpus runabout/S rundown rune/S runic Runnymede runoff/S runt/S runty/P runway/S Runyon rupee/S Ruppert rurality ruse Rushmore rusk Russ Russell Russia/M rustproof rutabaga/S Rutgers Ruth ruthenium Rutherford Rutland Rutledge rutted rutting rutty/R RV RV's RVs Ryan/M Ryder sabbath sabbatical/MS Sabine sabras Sacajawea/M sacral sacrament/S Sacramento sacrilege sacrilegious/Y sacrosanct saddlebag/S Sadie safari/MS safekeeping saffron saga sagebrush sagged sagging Saginaw saguaro/MS Sahara Saigon sailboat/GRSZ sailfish sailmaker/MS sainthood Sal/M salaam salacious/PY salamander salami/S Salem Salerno salesgirl saleslady salesmanship saleswoman/M saleswomen/M salience saliency salinger Salisbury salivary salivate/DGNS Salk saloonkeeper salsa/MS salsify saltwater salubrious/PY Salvador Salvadoran salvageable Salvatore salvo/S Sammy/M Samoa Samoan samovar Sampson Samson Samsung/M Samuel/S Samuelson sanatoria sanatorium Sanchez Sancho sanctimonious/PY sandalwood sandbag sandbars sandblast/DGRS sandbox/DGS Sandburg/M Sanderson/M sandhill Sandia/M sandman/M sandpile/MS sandpiper/MS Sandusky/M Sanford/M sanguinary/Y sanguineous Sanhedrin sanitate/X Sanskrit/M Sanskritic Santa/M Santayana/M Santiago/M sapped sapping sappy/PR sapsucker Sara/M Sarasota/M Saratoga/M sarcastically sarcoma/MS sarcophagi/M sarcophagus/M sardine/S sardonic Sarge/M Sargent/M sari/MS sartorius Sartre/M sashay/D Saskatchewan/M sassafras sassing sassy/RT Satan/M satanic satiable/I satiate/DGNS Satie/M satiric satirical/Y Saturn/MS saturnalia/S saturnine/Y Satya/M Satyanarayanan/M Saud/M Saudi/MS sauerkraut/M Saukville/M sauna/MS Saunders saute/S sauteed sauteing sauterne/S savagery/M Savannah/M Savonarola savoy savvy/DG sawdust/MS sawyer/MS sax/MS Saxon/MS Saxony/M saxophone/MS saxophonist/MS Saxton/M scab/S scabbed scabrous/PY scalability/M scalably/U Scalia/M scalpel/MS scamp/MS Scandinavia/M Scandinavian/MS scandium scapegoat/GMS scapula/M scapular/S scarecrow/MS scarface/M scarify/NR scarred scarves scat/M scathing/Y scatterbrain/D scattergun scatting scavenge/DGS sceptic/MS sceptical scepticism/M schadenfreude/M Schaefer/M Schaeffer/M Schafer/M Schaffner/M Schapiro/M Scheherezade/M Schelling/M Schenectady/M Schiller/M schism/M schist schizoid schizomycetes schizophrenic Schlitz/M Schmidt/M Schmitt/M schmuck/MS schnapps Schneider/M schoolbag/MS schoolbook/MS schoolgirl/MS schoolgirlish schoolmarm/MS schoolmate/MS schoolteacher/MS schoolwork/M Schopenhauer/M Schroeder/M Schroedinger/M Schubert/M Schultz/M Schulz/M Schumacher/M Schuman/M Schumann/M Schuster/M Schwartz/M sciatica Scientology/M scimitar/MS scintillate/DGNS scion/MS sclerosis sclerotic scofflaw/MS scoot/DGRS scopist/MS scops scoreboard/MS scorecard/MS scoreless Scorpio/MS Scot/S scotch Scotchgard Scotchman Scotia Scotian Scotsman Scotsmen Scottish Scottsdale Scotty SCOTUS scrabble/DGRS scraggly scram scramming Scranton scrapbook/DGRSZ scrapbooker/MS scrapping scratchy/PR scrawny/PR screechy screed screenplay screenshare/DGS screenshot/MS screenwriter/MS screwball screwdriver/S screwup Scribners scrim scrimmage/DGRS scrimp/DGS Scripps scriptural/Y scriven/R scrollbar/MS scrounge/DGRSZ scrubbed scrubber/MS scrubbing scrumptious/Y scrupulosity scrutable/I SCSI scuba scuff/DGS scull/DGMRS sculptural/Y scurrilous/PY scurvy/PY Scylla Scythia se/NR Seaborg Seabrook seafare/GRZ seafood seagull/S seahorse sealant/S seamanship/S seamless/PY seamstress/S seamy/PR seance seaplane/MS seaquake Seaquarium searchable/AU searchlight/S seascape/MS seasick/P seatmate/MS Seattle/M seawater/MS seaway Sebastian Sebring/M secant/S secession secessionist seclude/GS secretariat sectarian secularism secularist/S secularity sedan/S sedate/DGNPSVY sedentary Sedgwick sedimentary sedimentation sedition seditious/PY seduction/S sedulously seedbed/S seedless seedy/PRY Seeley seepage seersucker seesaw/DGS segmental/Y segregant/MS segregationist segue/DMS segueing Segundo seismograph/RS seismography seismological seismology selectable selectional Selectric selenate selenite selenium selfie/MS selfless/PY Selfridge sellout Selma seltzer Seltzer's semen semi semiannual/Y semiarid semiautomatic semicircular semidefinite semidrying semilogarithmic seminarian/S Seminole semiprofessional/SY semipublic semiquantitative/Y semisecret semistructured Semite semitic/S Semitism/M semitrance semitropical senatorial sendmail/M Seneca Senegal senile/Y senioritis senor Senora senorita sensate/IY sensationalism sensual/Y sensuality sensuous/PY sentient/Y sentimentalists sentimentality Seoul separability/I sepia sept septate/N septennial/Y septic septillion septuagenarian septum sepulchral/Y sequestration sequin/DS sequitur/MS sequoia Serafin serape seraph/S seraphim Serbian Serbo serenade/DRS serfdom serge/G serological/Y serology Serra Service/M serviceability serviceman servicemen serviette/S servitor/S servo/S servomechanism/S sesame setback/S setscrew/S sevenfold severability/M severable severalfold severalty Seville sewage Seward sewerage sewn sextant/MS sextet sextillion sexton sextuple/DGMS sextuplet sexy/PRY Seymour SGML shag/S shagging shah shakeable/U shakedown shakeout/MS Shakespeare Shakespearean Shakespearian shalom shamble/DG shamefacedly Shamir/M shampoo/RS shamrock Shanahan/M Shanghai/G shank/D Shannon/M shapeshift/DGS Shapiro shards sharecrop sharecropping Sharon sharpshoot/GRZ Shasta shat shatterproof shaw Shawano Shawnee sheathe/U sheave/G Sheboygan shedding sheepish/PY sheepskin Sheffield/RZ sheik Sheila Shelby/M Sheldon shellback/MS Shelley Shelton Shenandoah shenanigan/S Sheraton sherbet Sheri/M Sheridan sherlock Sherman sherry/S Sherwin Sherwood shibboleth/S shiftless/PY Shiite/MS shill/S Shillong Shiloh shim/S shimming shimmy/DGS shinbone shindig/MS Shinto Shintoism shipbuild/R shipman shipmate/S shipmen shipshape shipyard/S shire/S Shirley shirtmake/R shirttail shitter shitting shitty shivery shoddy/PRY shoelace/S shoemake/Z shoestring/S shoo/G shoofly shootout/MS shopkeep shoplifting/M shopworn shoreline/S Shorewood shortfall/S shortish shortsighted/PY shortstop Shostakovich/M showboat showcase/DGMS showdown showman showmanship showmen showoff/MS showpiece/S showplace showroom showy/PRY shrapnel shredded shredding Shreveport shrewish/PY shrift shrinkage shriver shroom/MS shrove shrugged shrugging shuck/RS shuddery shuffleboard shunned shunning shunt/DGRS shutoff/MS shutout shuttlecock/S Shylock Shylockian Siamese Sibelius/M Siberia Siberian sibilant/Y sic Sicilian/S Siciliana Sicily sickish/PY sickroom sidearm/S sideband/MS sidecar/S sideline/RS sidelong sideman sidemen sidereal sidesaddle sideshow/S sidestep/S sidestepping sidewall sideway sidewinder sidle/DGS Sidney Siegfried sienna siesta sightsee/RZ sightseeing sigma/S Sigmund signboard Signora signpost/DGS Sikh/MS Sikorsky silage Silas silica silicate/S silicide silkworm/S silo/DGMS siltation silty Silverman silversmith/S silverware SIMD simian simile Simmons Simmonsville Simms Simon simpleminded/PY simpleton Simpson simulcast Sinai Sinatra Sinclair sinewy singe singlehanded/Y singlet singsonged sinistral/Y sinless/PY sinter/D sinuous/PY sinuousities sinus/S sinusoid Sioux sipped sippers sipping Sirius sis sisal Sistine Sisyphean Sisyphus situ/S Siva sixfold sixgun sizeable sizzle/DGR skat skateboard/DGMRSZ skateboarder/MS skeet/R skepticism sketchbook/S sketchpad skeuomorph skeuomorphic skid/S skidded skidding skiff/S skillet skimpy/PRY skindive/G skinless skinny/PR Skippy skit/S skittish/PY skittle skullcap skullduggery skydive/DGRSZ skydove Skye skyhook skyjack/DGRZ skyline Skype/M skyrocket skyscrape skyward skywave skyway/MS slag slake/DG slaked/U slalom/S slanderous/PY slapstick slatted slatting slaughterhouse/S Slav/S Slavic slavish/PY slaw sleazy/PRY sledding sleepwalk/R sleety sleight Slesinger sleuthing slimmer/S slingshot slink/DGS slipstream slither/DGS slitter/S slitting sliver/DGS slivery Sloan Sloane slob Slocum/M sloe slog sloganeer/GMS slogging sloop/S slosh/D slothful/PY slough/DGS sloven/Y slovenly/P slowdown/MS sludge/S slugged slugger/S slugging sluice/DGS slumming slunk slurp/DGS slurring slurry/DGS slush slyness smallish smalltime Smallwood smartphone/MS smattering/S smidge/M smidgen/MS smiley/M smilies smirk/DGS smithereens Smithfield Smithsonian Smithtown smokehouse smokescreen smokestack smooch/G SMS SMSA SMSA's SMSAs Smucker smudge/DG smudgy/PY smut/S smutty/PRY snafu snag/S snagged snagging snakebird snakelike snakeroot snapback snapdragon/S snappish/PY snazzy/PRT Snead Sneed snicker/DGR snide/PRTY sniffle/DGRS snifter snip/DGRSZ snipe/DGRSZ sniper/MS snipped snipper/MS snippet/MS snipping snippy/R snitch/MRS snivel snob/S snobbery snobbish/PY Snodgrass snook/RSZ snoopy/Y snorkel/DGR snotty snowball/DGS snowbank/MS Snowbelt/M snowblower/S snowfall snowflake/S snowmobile/GR snowstorm snub/PS snubbed snubbing snuffboxes snuffle/DGR snugged snugging snuggly Snyder soapbox/MS soapstone/S soapsud/S soapy/PRY sobbed sobbing/Y sobriety/I sobriquet socialistic sociality socio sociocultural/Y sociodemographic socioeconomic/S socioeconomically sociologist/S sociometric sociometry Socrates Socratic sodden/DGPY sodding soffit/MS Sofia softball softwood soggy/PRY soiree/S Sol/Y Solaris soldiery solecism solenoid/S solicitation solicitous/PY solicitude solidarity soliloquy solipsism soloist/S Solomon solstice solvability solvating solvency/I soma Somali/S Somalian/MS somatic sombrero/MS somebody'll someone'll somersault/GS Somerset Somerville sommelier/MS somnolence somnolent/Y sonata/S songbag songbook songful/PY songwriter/MS Sonia/M sonic sonny sonofabitch Sonoma Sonora sonority/S sonorous/PY sonuvabitch Sony/M soothsay/GRZ sop/S Sophia/S Sophie/M sophism sophist/R sophisticate/S sophistry Sophoclean Sophocles sophomoric soporific/MS sopping soprano/S Sorensen Sorenson sorghum sorority/S sorrel Sorrentine sortie SOSP Sotomayor/M soubriquet souffle soulful/PY soundbox/MS soundproof/DGS sourdough Sousa/M Southampton southbound southeast/R southeaster/Y southeastern southernisms southernmost Southfield southland southpaw/S southward/S southwest/R southwester/Y southwestern souvenir/S sovereignty sowbelly sown sox/RZ soxer/MS soy soya soybean/S spacecraft spacesuit/S spacious/PY Spahn Spalding spam/MS spammed spammer/MS spamminess spamming Spandex/M spandrels spangle/DGS Spaniard/S spaniel spar/S SPARC sparkle/DGRS Sparkman sparky/RY sparling/S sparring Sparta Spartan spasm/S spastic spatiality spatterdock spatula Spaulding/M spavined spay/DG speakership spearhead/DGS spearmint spec/S specie specifiability specious/PY spectral/PY spectrograph/MS spectrographically spectrography spectrometer/MS spectrometric spectrometry/M spectrophotometer/MS spectrophotometric spectrophotometry spectroscope spectroscopic spectroscopy specular/Y specularity speedboat/GR speedometer/MS Speer speleological speleologist speleology spellbound spellcheck/DGRSZ spellchecker/MS Spencerian Spenglerian sperm/S spermatophyte Sperry spew/DGJRS spheric/S spheroid spheroidal/Y spherule/S sphinx/S spic spicebush Spiderman/M spiderwort spidery Spiegel spigot/S spiky/R spillage/MS spillover/MS spilt spineless/PY spinnability spinnaker/MS spinster spiny/PR spirituality spitfire spittle splashy/PRY splat splattered splay/D splenetic splint/DGS splintery splotch/DS splotchy splurge/GS splutter/R spoilables spoilage Spokane spokespersons spongy/PR spontaneity spoof/DGS spoonerism spoonful/S sporadic/Y sporadically sportsmanship sportsmen sportswear sportswriter sporty/PRTY Spotify spotty/PRY spousal Sprague/M sprain/DS springboard Springfield sprocket/DGS sprocketed/U sprue SPSS spud spume/G spumoni spunk spunky/PRTY spurge spurred spurring sputnik/S spyglass spyware/MS SQL sqrt squalid/PY squalor squamous/Y squander/DGRS Squaresville squashy/PRY squatted squatter/S squatting squaw squeaky squeamish/PY squeegee/DS squelch/DGRS Squibb/G squirehood squirmy squirt/DGRS squish/DGS squishy/PRT SSD SSD's SSDs st stableman stablemen staccato/S stackable Stacy/M stadium/MS Stafford Staffordshire/M stagecraft/MS stagnate/DGNS stagy/PRY stairwell/S stakeholder/MS stakeholderMS stalactite/MS stalag/MS stalemate Staley/M Stalin/MS Stalinist stallion Stallman/M Stamford staminate Stan/MS stanchion/DGS Standish/M standoff Stanford/M stank Stanley stannic stannous Stanton staphylococcus Stapleton starchy/PRY stardom stargaze/GRS Starkey starling/S Starr starship stash/DGS stasis statehood stateless/P Staten stateroom/MS statesmanlike statesmanship statesmen statewide stationarity stationery/S stationmaster Statler statuary statuette Stauffer steamy/PRY Stearns steelmaker steely/PRS steeplebush steeves steganographic steganography/M stein/RZ Steinbecks Steinberg Stella stenography stenotype stepbrother stepchild stepchildren stepdaughter stepfather Stephan Stephanie/M Stephenson stepladders stepparent/DGMS steppe/S stepsister stepson stereography stereophonic stereoscopy stereotypic sterility sternal Sterno sternum steroid/S stethoscope Stetson/S Steuben Steve/M stevedore/S Steven/MS Stevenson Stevie stewardess/S stewardship Stewart/M stickle/DGR stickleback stickpin stigmata stiletto stillbirth/S stillborn Stillwell stilt/DS stilted/PY Stimson stimulatory stingy/PRY stinkpot stinky Stirling STL stochasticity stockbroker Stockholm stockpile/GR stockroom Stockton stocky/PRY stodgy/PRY stoic/S stoichiometric stoichiometry stoicism stoke/DGRS stolid/Y stomachs stomp/DGS stonecutter/S Stonehenge stonemason/S stonewall/DGS stoneware stonewort stooge/GS stoolie/MS stopover/S stopwatch/S storefront/MS storekeep/RZ storeroom stormbound storyboard/S storyteller/S storytelling Stouffer stowage/S Stowe straddle/DGRSZ strafe/GRS straightaway straitjacket/DGMS stranglehold/MS strangulate/D strapped strapping Strasbourg strata strategically strategist/S strategize/DGS Stratford stratigraphic stratigraphy stratosphere stratospheric Strauss Stravinsky/M strawflower/MS streetwalk/DGRSZ streetwalker/MS streptococcus streptomycin stressful/Y stretchable striate/DGNSX striated/U striation/MS stricture/S stridency strident/Y strikebreak/GRZ striptease/R striven Stromberg Strongheart strongroom/S strontium strop/S strophe/S stropped stropping Stroustrup/M structuralist/S strum strumming strychnine Stuart Stubblefield/S stubby stucco studded Studebaker stultify/GN stumpage stumpy stunk stunned sturgeon/MS stutter/DGRS Stuttgart Stuyvesant Stygian styli stylist/MS stylites stylometric stylometry stylus/S stymie/DS styrene/MS Styrofoam Styx suable suave/PY suavity subaltern subareas subassembly subbing subcaste subchain subclassifications subcommand/S subconcept subconstituent subcontinent subcontract/G subcontractor/MS subdirectory/MS subdistrict subindex/MS subjectivist/S subjugate/DGNS sublease sublimate/DGS subliminal/Y subliterary sublunary submachine submersible submissive/PY submittal submitter/MS subnational subnet/S subnormal/Y suboptimal subordinator suborn/DGRS subpage subparagraph subparagraphMS subpart/S subpoena/DGS subpopulation/S subquestion/MS subregion/S subregional/Y subrogation subsample/S subsentence subservience subservient/Y subsistent subsocietal subsoil/R subspecialty/MS subspecies substandard substation/MS substitutionary substratum subsurface subtable/S subtended subtends subterfuge/S subtest subtotals subtype/S suburbanite/S suburbia subversive/PSY successorship succubus Sudan Sudanese Sudanic Suez Suffolk suffragette/S suffuse/DGNSV suggestibility suitemate/MS Sukarno sullied/U Sullivan sully/DGS sulphur/M sultana Sulzberger sumac Sumatra Sumatran/M Sumerian Summerdale summertime summitry Sumter sunbaked sunbather/MS Sunbelt/M sunbonnet sunburnt sunder/DGS sundial/S sunfish sunflower/MS sunlit Sunnyvale sunscreen/DGMS sunshade/S sunshiny sunspot superblock/MS supercilious/PY supercomputing/M superconcept supercritical superficiality superhighway/MS superlunary supermachine Superman/M supernatant supernatural/PY supernaturalism supernormal/Y supernova/MS superposable superposition/S superpredicate supersensitive/P supersonic/S superstructural superstructure/S supervene/D supervillain/MS supine/PY supping supplementation supplicant/MSY supplicate/G supposable suppressible/I suppressor/S supra supranational supranationalism suprasegmental supremacist surcease/DG surcharge/DGS surfactant/S surfeit/DRS surreal surrealism surrealist/S surreptitious/PY surrey/S surtax surveil/DGS surveillance/S surveillant surveilled surveilling survivability survivable/U survivalist/S survivorship Susan/M Susanne/M susceptibility/I sushi Susie/M suspensor suspicionless Susquehanna/M Sussex/M sustainability sustainable/U sustainment sustenance Sutherland/M Sutton/M SUV SUVs Suwanee/M Suzanne/M Suzuki/M svelte/PY swab/S swabbed swabbing swabby/S Swabian/MS swaddle/DG swag/G Swahili/M swami swampland/MS swank/R swanky/PRY swanlike Swanson swappable swart/P Swarthmore Swartz swash/R swastika/MS swat/S swatch/S swath/DGJMRS swathe/DGJRS swatter swatting Swaziland sweatband sweatshirt sweatshops sweaty/PRY Swede/S Sweden Swedish Sweeney/S sweepstake/S sweetish/Y sweltering/Y Swenson swig swigging Swinburne swindle/DGRS swingable swingy/R swinish/PY swirly/R swishy/R swiss switchback/MS switchblade switchgear switchman switchmen/M Switzer Switzerland swivel/S swizzle/DGR swordfight/MS swordfish swordplay/R swordtail Sybil sycophant/SY sycophantic sycophantically Sydney syllabic syllabicity syllabify/N syllogistic sylvan Sylvania Sylvester Sylvia Sylvie symbiont symbolical symbolists Symington symlink/DGMS sympathetically symphonic symposia symptomatology synagogue/S synaptic sync/G synchronism synchrotron/MS syncopate/DNV syndic/S synergy synod/S synonymy synoptic syphilitic Syracuse Syria Syrian/MS syrupy systemic systolic TA tabbing tabby/S tableland tabletop/MS tabloids tabula Tacitus tackiness taco/S Tacoma tactful/PY tactic tactical/Y tactlessness tactual/Y tadpoles taffeta taffy/S Taft Tahiti Tahoe tailback tailgate/DGR Taipei Tait/M Taiwan Taiwanese takedown/MS takeoff/S takeover/S Taliban/M talismanic talky Talladega Tallahassee Tallahatchie Tallahoosa Tallchief Talleyrand tally/DGS tallyho Talmud talon/DS tamable tamale tamarack tamarind tambourine Tammany Tammy/M tamp/DGS Tampa tampon Tanganyika/M tangency tangerine tango/S tankard tanned Tannenbaum tannery tannin tanning tantalum Tantalus Tanya Tanzania tao/S taoism taoist/S Tapdance tapeworm tapir/S tappet/S Tara tarantula/S tarnish/DGS tarpapered tarpaulin/S tarpon/S tarred tarring Tarrytown tartar Tartuffe Tarzan/M TAs taskmaster Tasmania tasty/PY Tate tater tatting tattle/DGRS tattletale tatty/R tawdry/PRY Tawney taxably taxiway/MS taxpaying Taylor/S tb TBA TBD Tchaikovsky/M TCP's teacart/MS teacup/MS teahouse/S teakettle/MS teakwood/M teal/S teammate/MS teamster/MS teamwork/M teapot/MS teardrop/MS teasel teat/DS tech/D technetium tectonic/S Ted/M Teddy tee/S teeing teensy/R teetering Teheran Tehran tektite/S telecommunicate teleconverter/MS Teledyne Telefunken telegraphy telekinesis Telemann telemarket/DGRSZ telemarketer/MS telemeter/MS telemetric telemetry telepathic telepathically telepathy telephoto/MS telephotography teleport/DGRS teleprinter teleprocessing teleprompter telescopic Telex telltale/MS tellurium telnet/S telomeric temerity temp Templeman Templeton tempo/S temptress tenable/P tenacity tenancy/S tenderfoot tenderloin tendon/S tenebrous tenet/S Tenex tenfold Tenneco Tenney Tennyson tenon tensile tensional/I tensionless tensorial tenspot tenuous/PY tepees tepid/PY terabit/MS terabyte/MS teratogenic teratology/S terbium tercel Teresa terminable/P terminableness/I termini terminological/Y termite/S tern terpsichorean Terra terramycin Terran terrapin/S terry/S Terry's terse/PRTY tertian Tess tessellate/DNS Tessie testamentary testate/I testator/MS testbed/MS testes testicular testimonial/S testy/PRY tetanus tether/DGS tetrachloride tetracycline tetrafluoride tetragonal/Y tetrahalides tetrahedra tetrahedral/Y tetrahedron tetrameron tetrasodium tetravalent Teutonic Tex Texaco/M Texan/S Textron textural/Y th Thai/M Thailand thallium thallophyte Thames that'd that'll theatric/S Thebes Theia/M theism theistic Thelma theocracy Theodore Theodosian Theodosius theoretician there'd there'll there're therefor therefrom Theresa theretofore thereunder thermal/SY thermionic/S thermistor/MS thermite/M thermo/S thermocouple/S thermodynamically thermoelastic thermoelectric thermoformed thermoforming thermogravimetric thermometric thermometry thermonuclear thermopile thermoplastic thermopower thermosetting/M thermostable thermostatic/S thesaurus Theseus thespian/S theta/S thiamin thickish Thiensville thine thinned thinning thinnish thiocyanate thiouracil this'll thistledown thither Thomas Thompson/M Thomson Thor Thoreau thoriate/D thorium Thornburg Thornton thoroughbred thoroughgoing Thorpe thou/S thrall threadbare/P threefold threesome thresh/DGR throaty/PRY throbber/MS throes thrombi thromboses thrombosis thrombus Throneberry throwback thrum thrumming Thruway/S Thu thudding thuggee Thule thulium thumbnail/MS thumbtack/DGMS thunderclap/S thunderous/Y thunk Thurber Thurman thwack thy thyratron/MS thyroglobulin thyroid/S thyroidal thyronine thyrotoxic thyrotrophic thyrotrophin thyrotropic thyrotropin thyroxine THz Tiber Tibet Tibetan tibia Tiburon tic Ticonderoga tidbit/S tideland/S tidewater Tieck tiff tiffany tigress Tigris Tijuana tillage Tillich Tillie tilth Tim/MS timberland/S timbral timbre timepiece timestamp/DGS timeworn Timex Timmy Timon timothy tincture/DG tinder tine/S tinfoil tinner tinplate tinsel/Y tinsmith/S tintable tintype tinware Tioga tipoff Tippecanoe Tipperary tipple/DGRS tippy/R tipster/MS tipsy/PRY tiptoeing tirade/S titan/S titanate titanic titanium titian titillate/GNV titillating/Y titmouse/M Tito titrate/DGNS titular/Y Titus TiVo/DGMS TNT toady/DGS toadyism tobaggon/MS Tobago toccata/MS today'll Todd/M toddle/DGRSZ toddler/MS toenail/S toffee tofu tog/S toga/DMS togging Togo toiletries toilsome/PY tokamak/MS Tokyo Toland Toledo Tolley/M tollgate tollhouse Tolstoy toluene Tomasulo/M Tombigbee tomblike tombstone/S tome/S tomfool Tommie tommy tonal/Y tonality/MS toneless/PY tong/R Toni Tonio tonk/S tonsillitis tony/R toodle toolbar toolbox/MS toolmake/GRZ toolsmith Toomey toot/DGRS toothpaste toothy/RY tootle/DGR tootsie/S tootsy/S topaz topcoat/S Topeka topgallant topnotch/R topocentric topographic topographical/Y topography/S topped toppers topping/S topside/S topsoil Topsy Torah tori toroid/S toroidal/Y Toronto torpid/Y torpor Torquemada/M torrence torsion/AI torsional/Y torso/S tort/N tortilla/MS tortoiseshell tortuous/Y tory/S Tosca/M Toscanini/M Toshiba/M tot/DGRS totalistic totalitarian totalitarianism tote/DGRS totem totemic totient/M Toto totted touchdown/S touchstone/S Toulouse tourism tousle/DGS tout/DGRS towboat/S towhead/D townhouse Townley Townsend townsman townsmen townspeople/M Towsley toxic Toynbee Toyota traceback/MS tracepoint/MS tracery/D trachea trackage trackless Tractarians traction Tracy tradable/U tradesmen traditionalism traditionalistic traditionalists tragedian/S tragicomic trailhead/MS trailside traineeships trainman/M trainmen traipse/G traitorous/Y tram trammel/S tramway transactional transalpine transaminase transatlantic transcendence transcendental/Y transcendentalism transcendentalists transcod/DGRS transconductance transcultural transducer/S transduction transect/DGS transept/S transfeminine transferee transferor/S transfix/DGS transformative transfusable transfuse/DGNX transgender transgressor/S transliterate/N translucence translucency transman transmasculine transmen transmissible transmittable transmittance transmutation transmute/DGS transoceanic transom/S transpacific transpiration/S transplantable transplantation transponder/MS transportable transposable transship/S transshipment transshipping transversal/Y transverse/SY transvestite transvestitism transwoman transwomen Transylvania trapdoor/S trapezium trashy/PR trauma/S Travelift/MS traversable travertine Travis trawl/R treadle/DG treadmill Treadwell treasonable treasonous trebuchet/MS treelike trefoil trekked trekking trellis/DS trembly tremulous/PY trenchant/Y trencherman trenchermen trendy/PRY Trenton trepidation trestle/S Trevor/M triable/P triad triadic triage/DGMS triamcinolone triangulate/DNY Trianon triatomic tribesman tribesmen tribulate/NX tribulation/MS trichloroacetic trichloroethane trichromatic trickery/S trickster trident/S tridiagonal triennial/Y trifluoride trig trigonal/Y trigram/S trilobite trilogy Trimble trimester Trinidad trinitarian/S trinity trio/S triode/S trioxide tripartite/N tripe triphenylarsine triphenylphosphine triphenylstibine triphosphopyridine triplex triplicate tripod/S tripoli tripolyphosphate tripped tripping/Y triptych trisodium Tristan tristate trisyllable trite/PRTY tritium/M triton triumphant triune trivalent trivium trodden/U troglodyte troika trollop trombone/MS trombonist/MS troopship/S trope/MS Tropez trophic tropism/S tropocollagen tropospheric Trotsky trotted trotter trotting troubadour/MS trounce/DGS troupe/GRS Troutman troy truancy Truckee truculence truculent/Y Trudy Trujillo Truman/M Trumbull Trump/M trumpery trundle/DGRS truss/GRS trusteeship TRW trypsin tsar/MS tsarevich tsarina tsarism tsarist tsunami/MS Tsunematsu TTL tuba tubular/Y tubule/S Tucson Tudor Tue Tufte/M tugged tugging Tulane tularemia tulle Tulsa tum tumbrels tumid/Y tummy/MS tun tuna/S tundra tuneful/PY tunelessly tung tungstate tungsten Tunis Tunisia Tunisian tupelo turbinate/DS turbine/S turbofan turbojet turgid/PY Turin turk/S Turkish turnabout turnaround/S turnoff turnout/S turnpike/S turnstone turntable turpitude turtleback/S turtleneck turvy Tuscaloosa Tuscan Tuscany tusk/RSZ Tuskegee tussle/DGS tut tutelage Tuttle tutu tuxedo/DMS TVA TVs TWA twaddle/DGRS tweedy/PR tweet/DGMRS tweeze/DG twiddle/DGS twigged twigging twinge/GS twinning twirly twisty twitchy/Y twitting twosome tycoon tympani/MS tympanist/MS tympanum/M typeahead typeface typescript typeset/S typesetter/S typesetting typewrite/G typewritten Typhon typhoon typhus typicality typo typographer typological/Y typology/S tyrannic tyrannical/PY tyrannicide tyrosine Tyson Uber/M UCD UCD's UCLA's UCR UCR's UCSB UCSB's UCSC UCSC's UCSD UCSD's Udall udon/M UDP Uganda UID Ukrainian/S ulcerate/DNSVX Ullman ulster ulterior/Y ultimatum ultra ultracentrifugally ultracentrifugation ultracentrifuge/MS ultraconservative ultrafast ultramarine ultramodern ultrashort ultrasonic/S ultrasonically ultrasound ultrastructure ultraviolet Ulysses umber/DG umbilical umbilici umbilicus/S umbra umbrage umlaut/MS UN unaccountable unadventurous unaggressive unambiguity unamused unanimity unappeasable unappeasably unappreciative unassign/G unasterisked unbalance unbeknownst unbend/G unbent unbind unbutton/G uncap uncharacteristic unchecking unchristian unclasping unclog uncodable uncoiling uncombable uncomment/GS uncommunicative uncompassionate unconcern unconscionable/P uncourageous uncousinly uncritical unction/I undedicated undeliverability undeliverable undependable underachievers underadjusting underarm underbedding underbelly underbracing underclassman underclassmen underclothes underclothing underconsumption undercooked undercount/DGMS undercover undercurrent undercut/S undercutting underdeveloped underdevelopment underdog undereducated underemployed underemployment underenumerated underenumeration underexpose/DGS undergarments undergirding undergrowth underhanded/PY underheat underinclusion/MS underinclusive underlay underpaid underperform/DGS underpins underpopulated underprivileged underrate/D underregistration underreported underreporting underrepresentation underrepresented undersea/S undersecretary/MS undershirt/MS undershoot/GS undershot underside/MS undersigned undersize/DGS understate/GS understatement/S understructure/MS understudy/MS undertow/MS undervalued underwater underwhelm/DGS underwood undeserved undock/DGS undulate/DGNSX unearth/DG unease uneconomic uneducated unencroachable unenviable UNESCO unfaded unfailing/PY unfathomable unfelt unfertile unfitting unfoldment unfrocking unfrozen ungallant ungodly/P ungracious unhand unharmonious unheated unhelpful unhesitant unhinge unholy/P unhook/DG unhurried unhurt Unibus unideal unidimensional unidiomatic unifilar unilateral/Y unimaginative unimodal unimpeachable unimpeachably unimposing unimpressive uninformative uninitiate uninominal uninterested unintuitive uninventive uninvolved unipolar uniprocessor/MS Uniroyal Unisys unitarian/S unitarianism unitary/Y Univac univalent univariate universalism universalistic unkempt unlacing unlasting unlearn/D unliterary unlovely/P unmake unmalicious unmanly/P unmask unmeasured unmeritorious unmet unmethodical unmindful unmoving unmute/DGS unoriginal unorthodox unpaintable unpardonable unpartisan unpersuasive unphysical unpicturesque unplug unpremeditated unprepared unprocurable unproductive unprofessional unprovocative unquestionable unquestioning unquiet/PY unready/P unreality unreason/G unreasoning/Y unreceptive unredeemable unreeling unreflective unrelieved unremarkable unremitting/Y unrepentant unrepresentative unreviewable unreviewably unrewarding unripe/P unromantic unscathed unscrew/DG unseat unsee unselfconscious/P unservile unset unshackle/GS unshed unsightly unsinkable unsold/R unspeaking unspecific unspectacular unstilted unstore unstuffy unsubscribe/DGS unsubtle unsurmountable unsystematic unteach untellable untenable untenanted unthinking untraditional untraveled untrustworthy unutterably unviewably unwaivering unwarrantable unwary/P unwed unweighted unwire unwomanly unworkable uparrow upbeat upbring upcome/G upend upheaval/S upholstery upped uppercase/DGS upperclassman upperclassmen uppercut upraise/D uprise/R upriver uproarious/PY upscale upsilon upslope upstanding/P upstate/R upsurge upswing/S uptake/A uptight/P uptime/MS Upton uptown uptrend upwind uranium Uranus uranyl Urbana urbane/Y urbanism urbanite/S urea uremia urethane/S urethra urgency/S urinal/S urinary URL URL's URLs Ursa Ursula Ursuline Uruguay USA USAF USART USDA USENIX USENIX's USPS USSR usurer usurious/PY usurpation usury UTC UTC's uterine Utica utile/I utilitarian utopia/S utopianism Uzi/M vacationland/MS vaccinating vaccination/S vaccine/S vaccinia vaccinial vacuity vacuolate/DGNS vacuolated/U vacuole/S vaginal/Y Vail vain/P vainglorious/PY valance/DS valedictory Valencia/M Valerie Valhalla validator/MS Valkyrie/MS valuate/DGS valueless/P vamp/R vampire/S vanadium Vance Vancouver vandal/S vandalism Vandenberg Vanderbilt Vanderburgh vanguard vape/DGS vaporware/M Varian variate/DGS variegate/DN varistor/MS Varityping varmint vascular vasectomy/S Vasily/M Vatican Vaudois Vaughn vectorial Vega/S velar Velasquez veldt/MS vellum velour/S velum velvety venal/Y vendetta vendible veneer/GMRS venerate/DGNSX venereal Venetian/MS Venezuela Venezuelan vengeful/APY venial/PY Venice/M Venn venous/Y ventilator venturesome/PY venturi/S venue/MS Venus Venusian/S Vera veracious/PY verandah/D verbatim verbiage verbosity verdant/Y Verdi/M Vergil veridical/Y verifiably verisimilitude verity Verizon Verlag vermiculite vermilion Vermont vermouth Vern vernacular/Y vernal/Y Verne vernier Vernon Verona Veronica Versailles vertebra vertebrae vertebral/Y vertigo verve vesicle/S vesicular/Y vesper/S vestal/Y vestibule/D vestments vestry/S vesture/DGS vet/MS vetch vetted/A vexatious/PY VGA VHF viaduct/S vibes vibrancy vibrant/Y vibrato vibrio vibrionic Vic/M vicar vicarious/PY Vichy/M Vickers Vickie/M Vicksburg/M Vicky/M victimless Victoria/M Victorian/S Victrola/MS Vidal/M videoconference/DGS videographer/MS Vienna/M Viennese/M Viet Vietnam/M Vietnamese/M viewfinder/MS viewgraph/MS viewgraphMS viewless/Y vigil/MS vigilantism Viking/S Vince Vincent/M vindicate/DGNSV Vinson vintner vinyl viola/MS violist/MS violoncelli violoncellist/M violoncello/MS virginal/Y Virginian/S Virgo/MS virgule virile virility virtualization/M virtualize/DGS virtuosi virtuosic virtuosity virulence virulent/Y viscera visceral/Y viscid/Y viscoelastic viscoelasticity viscometer/MS vise/DGV viselike Vishnu Visigoth/S vitiate/DGNS vitreous/PY vitrify/N vitriol vitriolic vitro vituperative/Y Vitus viva vivace vivacious/PY vivacity Vivaldi vive/Z Vivian vivified/A vivify/DNR vivo/S vixen Vixie/M viz Vladimir Vladivostok VLSI VMware/M vocable/AI vocabularian vocabularianism vocalic vocalism vocalist/S vocative/Y vociferous/PY vocoded vocoder/MS vodka/M Vogel voiceband voiceless/PY voila Vol volar volcanism volcanologist/MS volition volitional/Y volitionality Volkswagen/S Volstead Volta voltaic Voltaire voltmeter/MS voluble/P volumetric volumetrically voluminous/PY voluptuous/Y Volvo voodoo/S voracious/PY voracity vortices vorticity votary vouchsafe/DGS vs/A Vulcan vulpine vulturelike vying Wabash wacko/MS wacky/PRY Waco wad/S wadded waddle/DGRSZ waddler/MS Wade/M wagged wagging waggish/PY waggle/DGS Wagner/M wainscot/DGS Wainwright WAIS waistline Wakefield wakeful/PY wakeup Walbridge Walcott Walden Waldensian Waldo Waldorf wale/S Waler Walford Walgreen/S walkie/MS walkover wallaby/MS Wallace wallboard Wallenstein wallop/DGRS wallpaper/S wally/S Wally's Walpole Walsh Walt/RZ Walton Walworth Wang/M wangle/DGRS Wansee Wansley wapiti/S wardroom/S warehouseman Warfield/M warhead/S warless warmhearted/PY warmish warmonger/GS warmup warren/RSZ Warsaw/M wartime/S warty Warwick/M washbasin washboard washbowl Washburn washcloths Washoe washout washy/R waspish/PY Wasserman wastebasket/S wasteland/S wastewater wastrel/S watchband watchmake/GRZ watchmen watchpoints waterbed/MS Waterbury watercourse waterfront Watergate Waterhouse waterline/S waterloo waterman watermark/DGMS watermelon watershed/S waterside/R watertight/P Watertown Watkins Watson/M watt/S wattage/S Wattenberg Watterson wattle/DGS Waukesha Waunona Waupaca Waupun Wausau Wauwatosa waveguide/MS WaveLAN Waveland wavenumber wavy/PRY waxwork/S waylaid Wayne Waynesboro weaponless weaponry weatherbeaten Weatherford weatherman/M weathermen/M weatherproof/P weatherstrip Webber webbing Weber/M Webmail/M Webster/M Websterville wedlock weedy/P Weider Weidman weightlessness weighty/PRY Weinberg Weiner Weinstein weirdo/S weirs Weiss Weissman Weissmuller Welch/RS Weldon Weldwood wellbeing Wellesley wellhead/MS Wellington Wellman Wellsville Welmers welsh/R welt/RS welter/DG Wendell Wendy/M Wentworth werewolf/M werewolves Werner Wesley Wesleyan Wesson westbound Westbrook Westchester Westfield Westhampton Westinghouse Westminster Westmore Weston Westphalia Westport Westwood wetland/S Weyerhauser WFF wham whamming Wharton/M what'd what're whatnot Wheatland Wheaton Wheatstone whee wheedle/DGS wheelbarrow/MS wheelbase wheelchair/M wheelhouse wheelie Wheelock wheeze/DGS wheezy/PRY Whelan whelk Wheller where'd where're whereabout wherefore/S whereof whereon wheresoever wherewith whet/S whetted whetting whiff whiffle/DGRS whig/S whimsey/S whinny/DGS whiplash/S Whippany whippet Whipple whipsaw/D whir/Y whirligig whirly/S whistleable whistleblower/MS Whitcomb whiteboard/MS whiteface Whitehall whitehead Whiteleaf Whiteley whitetail Whitewater whitey Whitfield whither Whitlock Whitman Whitney Whittaker Whittier who'd who'll who're who've whoa whodunit/MS whomsoever whoosh whop whoppers whopping whosoever Wichita wicket/S widowhood widthwise Wieland wiener/S WiFi/M wigging Wiggins wiggle/DGRS wiggly wigmaker Wiki/MS Wikipedia/M Wilcox wildcard/DGS wildcatter wildfire/MS wildlife Wiley Wilfred wilful/Y Wilhelm Wilhelmina Wilkes Wilkinson Willamette Willard Willcox Willem William/S Williamsburg Williamson Willie/DS Willoughby willowy Willy/DS Wilma Wilmette Wilmington Wilshire Wilsonian wimp/MS wimpy/RT winch/DGRS Winchell winchester windbag/S windbreak/S windfall windless/PY windowless windowpane/S windowsill windshield Windsor windstorm windsurfer/MS windup windward/Y Winehead winemake winemaster winery/S wineskin Winfield wingback/MS wingman/M wingmen/M wingspan wingtip Winifred winkle/DGS winless Winnebago Winnetka Winnie Winnipeg winnow/R wino/S Winograd Winooski Winsborough Winsett Winslow winsome/PY Winston wintertime Winthrop winy wireman wiremen Wisconsin/M wiseacre wisecrack/DMRS wisenheimer wishbone wishy wispy Witherspoon witter witting/Y wizen/D wobble/DGRS wobbly/P woebegone/P wok/N Wolcott Wolfgang wolfish/PY Wolverton won Woodard Woodberry Woodbury woodcarver woodchopper/S woodcut woodcutters woodgrain/G woodhen Woodlawn woodlot Woodrow woodruff woodshed woodside Woodward/S woodwind/MS woodyard woolgather/GR Woolworth Woonsocket Wooster wop/S Worcester Worcestershire/M wordless/PY Wordsworth workaholic/M workday workflow/MS workgroup/MS workhouses workingmen workmanlike workout/S workpiece/S workplace/MS worksheet/S workspace/S worktable wormy/R worsen/DGS Worthington/M would've wow wrack/DGS wraith/S wraparound wrathful/PY wreathe wright Wrigley wrinkly wristband writeup/MS wrongdoer wrongdoing wrongful/PY Wronskian wry/RT wryly WWW Wyman Wyoming WYSIWYG Xandie/M Xanthus Xavier Xenia xenon xenophobe/MS xenophobia xerography Xerox/M Xerxes XML XOR xterm/M xylem xylene xylophone/S yacht/GSZ yachtsman yachtsmen Yahoo/M Yakima yaks Yale Yalies Yalta yang Yankee/S yap yapping Yaqui yardage yarmulke yarrow Yates yaw/DGS yawl yay Yeager/M yearbook yeasty/PRY Yeats Yellowstone/M Yemen yen yeomanry yeshiva yesteryear Yiddish yin yip yipping YMCA yodel/S yoga yogi yogurt/M yokel/S Yoknapatawpha Yokohama yolk/S Yonkers yore Yorick Yorktown Yosemite youngish Youngstown YouTube/MRZ YouTuber/MS yow yowl/DGS Ypsilanti yr ytterbium yttrium Yuba Yucatan yucca yucky/PRT Yugoslav Yugoslavia Yukon yule yup Yuri Yves Yvette Yvonne/M YWCA Zach/M Zachary Zadok/M zag/S zagging Zaire Zanzibar zealot/MS Zeffirelli Zeiss zeitgeist Zellerbach Zen Zennist zestful/PY zesty/R zeta/S Zeus/M Ziegfeld/MS Ziegler/M zig zigged zigging Ziggy zigzagged zigzagging zilch zillion/MS Zimmerman/M zing/DGRS Zion/MS Zionism Zionist/MS zip/S Zipf/M zipped zipper/DS zipping zircon zirconium/M zloty zlotys zodiacal zombienet/MS zoologist/S zoology Zoom's Zoroaster Zoroastrian/S zounds Zurich/M zymurgy ispell-3.4.02/languages/english/PaxHeaders.22185/altamer.20000644000000000000000000000013213770761356017754 xustar0030 mtime=1608770286.636287185 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/english/altamer.20000444003214100001440000000245513770761356021033 0ustar00geofffaculty00000000000000asafoetida bejewelled bejewelling bemedalled bimetallist bimetallistic calliper/S cancellable cancellous chiselling/S corbelling/S councilorship counsellee counsellorship cryptocrystaline crystalizability/MSU crystalizable/MSU crystalographical/Y cupellation cupeller/S disenthral/S driveller/S empanelled enamellist/S forejudgement/MS frivolled frivoller frivolling gambolled gambolling gavelled glamorless gruelled hiccupped hiccupping houselled/U hovelled impanelled indraught intercrystalization/MS intercrystalize/S interjudgement/MS jewellery/S judgemental judgementalism kennelled/U kernelled labellable lapelled libellant/S libelled libellee/S libelling libellist marshall/S medallist/S metallization/MS metallize/DGS microcrystaline microcrystalinity miocrystaline mislabelled monometallism monometallist nonacknowledgement/MS noncrystalizable/MS noncrystalized/MS noncrystalizing/MS overjudgement/MS penciller/S perilled phanerocrystaline photolabelled photolabeller photolabelling preacknowledgement/MS precancellation prejudgement/MS programmist/MS programmistic/S raveller/SU ravelling semicrystaline snobsnivelling subtotalled subtotalling superacknowledgement/MS teazelling tendrilled trammelled trammelling tranquillization/AMS trowelled trowelling weevilled woollenization/MS woollenize/S woollie woollybutt ispell-3.4.02/languages/english/PaxHeaders.22185/altamer.00000644000000000000000000000013213770761355017751 xustar0030 mtime=1608770285.468249864 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/english/altamer.00000444003214100001440000000372113770761355021025 0ustar00geofffaculty00000000000000abridgement acknowledgement/AMS analogue/MS appal/S apparelled archeological/Y archeologist/MS archeology autodialler/S barrelled barrelling bevelled bevelling/S canalled canalling cancelled/U canceller cancelling channelled channeller/MS channelling chiselled chiseller/S councilor/MS counselled counselling counsellor/MS crystaline crystalize/DGRSZ crystalized/AU crystalizes/A crystalizing/A dialled/A dialler/AS dialling/AS draught/MS duelled dueller/S duelling/S enamelled enameller/S enamelling/S enrol/S equalled/U equalling eviller evillest focussable focussed/AU focusser focusses/A focussing/A fuelled/A fueller/S fuelling/A fulfil/S funnelled funnelling glamor/DGS glamourize/DGRSZ gospeller/S gravelled gravelling grovelled groveller/S grovelling/Y imperilled initialled initialler initialling jewelled jeweller/S jewelling judgement/MS kidnapped kidnapper/MS kidnapping/MS labelled/AU labeller/MS labellers/A labelling/A laurelled levelled/U leveller/S levellest levelling/U marshalled marshaller marshalling marvelled marvelling marvellous/PY medalled medalling metalled metalling misjudgement/MS modelled/A modeller/S modelling/S multilevelled nickelled nickelling panelled panelling panellist/MS parametrizable parametrization/MS parametrize/DGS parametrized/U parcelled/U parcelling pencilled pencilling/S petalled pretence/NSVX quarrelled quarreller/S quarrelling queueing relabeller/S remodelling revelled reveller/S revelling/S rivalled/U rivalling shovelled shoveller/S shovelling shrivelled shrivelling signalled signaller/S signalling spiralled spiralling squirrelled squirrelling stencilled stenciller/S stencilling symbolled symbolling syphon/DGMS syphons/U totalled totaller/MS totalling towelled towelling/S tranquillity tranquillize/ADGJRSZ tranquillized/AU tranquillizer/AMS tranquillizing/AMSY travelled traveller/MS travelling/S troweller/S tunnelled tunneller/S tunnelling/S unravelled unravelling victualler/S woollen/S woolly/PRS worshipped worshipper/MS worshipping ispell-3.4.02/languages/english/PaxHeaders.22185/english.aff0000644000000000000000000000013213773266643020355 xustar0030 mtime=1609395619.512577455 30 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/languages/english/english.aff0000444003214100001440000007165713773266643021446 0ustar00geofffaculty00000000000000# # $Id: english.aff,v 1.26 2020-12-30 22:20:19-08 geoff Exp $ # # Copyright 1992, 1993, 1999, 2000, 2001, 2005, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # Affix table for English # nroffchars ().\\* texchars ()\[]{}<\>\\$*.% # First we declare the character set. Since it's English, it would be # easy, except that English likes to borrow accents (notably # acute/grave) from other languages. To be safe, we'll declare a majority # of ISO Latin-1. However, we do not declare the German "eszett" # (sharp S) in capitalized form, because ispell can't handle a capital # letter that has a different length than a lowercase one (the capital # sharp s was only added to German orthography in 2017). # # In keeping with the march of progress, UTF-8 is the default # encoding. This helps us avoid some of the more obviously difficult # problems involving encoding acute and grave accents as apostrophes. # # We also declare the apostrophe, so that possessives can # be handled. We declare it as a boundary character, so that quoting with # single quotes doesn't confuse things. The apostrophe is the only # character that gets such treatment. # # We declare the apostrophe first so that "Jon's" collates before "Jonas". # (This is the way ASCII does it). # # UTF-8 # defstringtype "utf8" "nroff" ".txt" options raw_display squeeze_strings boundarychars ' wordchars a A stringchar \xC3\xA0 \xC3\x80 # àÀ Latin letter A with grave stringchar \xC3\xA1 \xC3\x81 # áÁ Latin letter A with acute stringchar \xC3\xA2 \xC3\x82 # â Latin letter A with circumflex stringchar \xC3\xA3 \xC3\x83 # ãà Latin letter A with tilde stringchar \xC3\xA4 \xC3\x84 # äÄ Latin letter A with diaeresis stringchar \xC3\xA5 \xC3\x85 # åÅ Latin letter A with ring above stringchar \xC3\xA6 \xC3\x86 # æÆ Latin letter AE wordchars [bc] [BC] stringchar \xC3\xA7 \xC3\x87 # çÇ Latin letter C with cedilla wordchars [de] [DE] stringchar \xC3\xA8 \xC3\x88 # èÈ Latin letter E with grave stringchar \xC3\xA9 \xC3\x89 # éÉ Latin letter E with acute stringchar \xC3\xAA \xC3\x8A # êÊ Latin letter E with circumflex stringchar \xC3\xAB \xC3\x8B # ëË Latin letter E with diaeresis wordchars [f-i] [F-I] stringchar \xC3\xAC \xC3\x8C # ìÌ Latin letter I with grave stringchar \xC3\xAD \xC3\x8D # íÍ Latin letter I with acute stringchar \xC3\xAE \xC3\x8E # îÎ Latin letter I with circumflex stringchar \xC3\xAF \xC3\x8F # ïÏ Latin letter I with diaeresis stringchar \xC3\xB0 \xC3\x90 # ðÐ Latin letter eth wordchars [j-n] [J-N] stringchar \xC3\xB1 \xC3\x91 # ñÑ Latin letter N with tilde wordchars o O stringchar \xC3\xB2 \xC3\x92 # òÒ Latin letter O with grave stringchar \xC3\xB3 \xC3\x93 # óÓ Latin letter O with acute stringchar \xC3\xB4 \xC3\x94 # ôÔ Latin letter O with circumflex stringchar \xC3\xB5 \xC3\x95 # õÕ Latin letter O with tilde stringchar \xC3\xB6 \xC3\x96 # öÖ Latin letter O with diaeresis stringchar \xC3\xB8 \xC3\x98 # øØ Latin letter O with stroke wordchars [p-s] [P-S] # See comments about eszett above # stringchar \xC3\x9F SS # ß Latin small letter sharp s # stringchar \xC3\x9F \xE1\xBA\x9E # ß Latin letter sharp S stringchar \xC3\x9F # ß Latin letter sharp S wordchars [tu] [TU] stringchar \xC3\xB9 \xC3\x99 # ùÙ Latin letter U with grave stringchar \xC3\xBA \xC3\x9A # úÚ Latin letter U with acute stringchar \xC3\xBB \xC3\x9B # ûÛ Latin letter U with circumflex stringchar \xC3\xBC \xC3\x9C # üÜ Latin letter U with diaeresis wordchars [v-y] [V-Y] stringchar \xC3\xBD \xC3\x9D # ýÝ Latin letter Y with acute stringchar \xC3\xBF \xC5\xB8 # ÿŸ Latin letter Y with diaeresis wordchars z Z stringchar \xC3\xBE \xC3\x9E # þÞ Latin letter Thorn altstringtype "latin1" "nroff" ".list" ".txt" altstringchar \xE0 \xC3\xA0 # à Latin letter a with grave altstringchar \xC0 \xC3\x80 # À Latin letter A with grave altstringchar \xE1 \xC3\xA1 # á Latin letter a with acute altstringchar \xC1 \xC3\x81 # Á Latin letter A with acute altstringchar \xE2 \xC3\xA2 # â Latin letter a with circumflex altstringchar \xC2 \xC3\x82 #  Latin letter A with circumflex altstringchar \xE3 \xC3\xA3 # ã Latin letter a with tilde altstringchar \xC3 \xC3\x83 # à Latin letter A with tilde altstringchar \xE4 \xC3\xA4 # ä Latin letter a with diaeresis altstringchar \xC4 \xC3\x84 # Ä Latin letter A with diaeresis altstringchar \xE5 \xC3\xA5 # å Latin letter a with ring above altstringchar \xC5 \xC3\x85 # Å Latin letter A with ring above altstringchar \xE6 \xC3\xA6 # æ Latin letter ae altstringchar \xC6 \xC3\x86 # Æ Latin letter AE altstringchar \xE7 \xC3\xA7 # ç Latin letter c with cedilla altstringchar \xC7 \xC3\x87 # Ç Latin letter C with cedilla altstringchar \xE8 \xC3\xA8 # è Latin letter e with grave altstringchar \xC8 \xC3\x88 # È Latin letter E with grave altstringchar \xE9 \xC3\xA9 # é Latin letter e with acute altstringchar \xC9 \xC3\x89 # É Latin letter E with acute altstringchar \xEA \xC3\xAA # ê Latin letter e with circumflex altstringchar \xCA \xC3\x8A # Ê Latin letter E with circumflex altstringchar \xEB \xC3\xAB # ë Latin letter e with diaeresis altstringchar \xCB \xC3\x8B # Ë Latin letter E with diaeresis altstringchar \xEC \xC3\xAC # ì Latin letter i with grave altstringchar \xCC \xC3\x8C # Ì Latin letter I with grave altstringchar \xED \xC3\xAD # í Latin letter i with acute altstringchar \xCD \xC3\x8D # Í Latin letter I with acute altstringchar \xEE \xC3\xAE # î Latin letter i with circumflex altstringchar \xCE \xC3\x8E # Î Latin letter I with circumflex altstringchar \xEF \xC3\xAF # ï Latin letter i with diaeresis altstringchar \xCF \xC3\x8F # Ï Latin letter I with diaeresis altstringchar \xF0 \xC3\xB0 # ð Latin letter eth altstringchar \xD0 \xC3\x90 # Ð Latin letter Eth altstringchar \xF1 \xC3\xB1 # ñ Latin letter n with tilde altstringchar \xD1 \xC3\x91 # Ñ Latin letter N with tilde altstringchar \xF2 \xC3\xB2 # ò Latin letter o with grave altstringchar \xD2 \xC3\x92 # Ò Latin letter O with grave altstringchar \xF3 \xC3\xB3 # ó Latin letter o with acute altstringchar \xD3 \xC3\x93 # Ó Latin letter O with acute altstringchar \xF4 \xC3\xB4 # ô Latin letter o with circumflex altstringchar \xD4 \xC3\x94 # Ô Latin letter O with circumflex altstringchar \xF5 \xC3\xB5 # õ Latin letter o with tilde altstringchar \xD5 \xC3\x95 # Õ Latin letter O with tilde altstringchar \xF6 \xC3\xB6 # ö Latin letter o with diaeresis altstringchar \xD6 \xC3\x96 # Ö Latin letter O with diaeresis altstringchar \xF8 \xC3\xB8 # ø Latin letter o with stroke altstringchar \xD8 \xC3\x98 # Ø Latin letter O with stroke altstringchar \xDF \xC3\x9F # ß Latin small letter sharp s altstringchar \xF9 \xC3\xB9 # ù Latin letter u with grave altstringchar \xD9 \xC3\x99 # Ù Latin letter U with grave altstringchar \xFA \xC3\xBA # ú Latin letter u with acute altstringchar \xDA \xC3\x9A # Ú Latin letter U with acute altstringchar \xFB \xC3\xBB # û Latin letter u with circumflex altstringchar \xDB \xC3\x9B # Û Latin letter U with circumflex altstringchar \xFC \xC3\xBC # ü Latin letter u with diaeresis altstringchar \xDC \xC3\x9C # Ü Latin letter U with diaeresis altstringchar \xFD \xC3\xBD # ý Latin letter y with acute altstringchar \xDD \xC3\x9D # Ý Latin letter Y with acute altstringchar \xFF \xC3\xBF # ÿ Latin letter y with diaeresis altstringchar Y \xC5\xB8 # Ÿ Latin letter Y with diaeresis altstringchar \xFE \xC3\xBE # þ latin letter thorn altstringchar \xDE \xC3\x9E # Þ Latin letter Thorn # # TeX/LaTeX # altstringtype "tex" "TeX" ".tex" ".bib" altstringchar \\`a \xC3\xA0 altstringchar \\`A \xC3\x80 # àÀ Latin letter A with grave altstringchar \\'a \xC3\xA1 altstringchar \\'A \xC3\x81 # áÁ Latin letter A with acute altstringchar \\^a \xC3\xA2 altstringchar \\^A \xC3\x82 # â Latin letter A with circumflex altstringchar \\~a \xC3\xA3 altstringchar \\~A \xC3\x83 # ãà Latin letter A with tilde altstringchar \\\"a \xC3\xA4 altstringchar \\\"A \xC3\x84 # äÄ Latin letter A with diaeresis altstringchar {\\aa} \xC3\xA5 altstringchar {\\AA} \xC3\x85 # åÅ Latin letter A with ring above altstringchar {\\ae} \xC3\xA6 altstringchar {\\AE} \xC3\x86 # æÆ Latin letter AE altstringchar \\c{c} \xC3\xA7 altstringchar \\c{C} \xC3\x87 # çÇ Latin letter C with cedilla altstringchar \\`e \xC3\xA8 altstringchar \\`E \xC3\x88 # èÈ Latin letter E with grave altstringchar \\'e \xC3\xA9 altstringchar \\'E \xC3\x89 # éÉ Latin letter E with acute altstringchar \\^e \xC3\xAA altstringchar \\^E \xC3\x8A # êÊ Latin letter E with circumflex altstringchar \\\"e \xC3\xAB altstringchar \\\"E \xC3\x8B # ëË Latin letter E with diaeresis altstringchar \\`{\\i} \xC3\xAC altstringchar \\`I \xC3\x8C # ìÌ Latin letter I with grave altstringchar \\'{\\i} \xC3\xAD altstringchar \\'I \xC3\x8D # íÍ Latin letter I with acute altstringchar \\^{\\i} \xC3\xAE altstringchar \\^I \xC3\x8E # îÎ Latin letter I with circumflex altstringchar \\\"{\\i} \xC3\xAF altstringchar \\\"I \xC3\x8F # ïÏ Latin letter I with diaeresis # (not listed) Latin letter eth # TeX doesn't define it, but ispell requires us to provide *something*. altstringchar {\\eth} \xC3\xB0 altstringchar {\\Eth} \xC3\x90 # ðÐ Latin letter eth altstringchar \\~n \xC3\xB1 altstringchar \\~N \xC3\x91 # ñÑ Latin letter N with tilde altstringchar \\`o \xC3\xB2 altstringchar \\`O \xC3\x92 # òÒ Latin letter O with grave altstringchar \\'o \xC3\xB3 altstringchar \\'O \xC3\x93 # óÓ Latin letter O with acute altstringchar \\^o \xC3\xB4 altstringchar \\^O \xC3\x94 # ôÔ Latin letter O with circumflex altstringchar \\~o \xC3\xB5 altstringchar \\~O \xC3\x95 # õÕ Latin letter O with tilde altstringchar \\\"o \xC3\xB6 altstringchar \\\"O \xC3\x96 # öÖ Latin letter O with diaeresis altstringchar {\\o} \xC3\xB8 altstringchar {\\O} \xC3\x98 # øØ Latin letter O with stroke altstringchar {\\ss} \xC3\x9F # ß Latin small letter sharp s altstringchar \\`u \xC3\xB9 altstringchar \\`U \xC3\x99 # ùÙ Latin letter U with grave altstringchar \\'u \xC3\xBA altstringchar \\'U \xC3\x9A # úÚ Latin letter U with acute altstringchar \\^u \xC3\xBB altstringchar \\^U \xC3\x9B # ûÛ Latin letter U with circumflex altstringchar \\\"u \xC3\xBC altstringchar \\\"U \xC3\x9C # üÜ Latin letter U with diaeresis altstringchar \\'y \xC3\xBD altstringchar \\'Y \xC3\x9D # ýÝ Latin letter Y with acute altstringchar \\\"y \xC3\xBF altstringchar \\\"Y \xC3\xB8 # ÿŸ Latin letter Y with diaeresis # (not listed) Latin letter thorn # TeX doesn't define it, but ispell requires us to provide *something*. altstringchar {\\thorn} \xC3\xBE altstringchar {\\Thorn} \xC3\x9E # þÞ Latin letter Thorn # # N/Troff with -ms/-me/man macro packages. Some of these are only # supported by the FSF versions of the packages. # altstringtype "nroff" "nroff" ".nr" ".ms" ".me" ".man" altstringchar a\\*` \xC3\xA0 altstringchar A\\*` \xC3\x80 # àÀ Latin letter A with grave altstringchar a\\*' \xC3\xA1 altstringchar A\\*' \xC3\x81 # áÁ Latin letter A with acute altstringchar a\\*^ \xC3\xA2 altstringchar A\\*^ \xC3\x82 # â Latin letter A with circumflex altstringchar a\\*~ \xC3\xA3 altstringchar A\\*~ \xC3\x83 # ãà Latin letter A with tilde altstringchar a\\*\: \xC3\xA4 altstringchar A\\*\: \xC3\x84 # äÄ Latin letter A with diaeresis altstringchar a\\*o \xC3\xA5 altstringchar A\\*o \xC3\x85 # åÅ Latin letter A with ring above altstringchar \\(ae \xC3\xA6 altstringchar \\(AE \xC3\x86 # æÆ Latin letter AE altstringchar c\\*\, \xC3\xA7 altstringchar C\\*\, \xC3\x87 # çÇ Latin letter C with cedilla altstringchar e\\*` \xC3\xA8 altstringchar E\\*` \xC3\x88 # èÈ Latin letter E with grave altstringchar e\\*' \xC3\xA9 altstringchar E\\*' \xC3\x89 # éÉ Latin letter E with acute altstringchar e\\*^ \xC3\xAA altstringchar E\\*^ \xC3\x8A # êÊ Latin letter E with circumflex altstringchar e\\*\: \xC3\xAB altstringchar E\\*\: \xC3\x8B # ëË Latin letter E with diaeresis altstringchar i\\*` \xC3\xAC altstringchar I\\*` \xC3\x8C # ìÌ Latin letter I with grave altstringchar i\\*' \xC3\xAD altstringchar I\\*' \xC3\x8D # íÍ Latin letter I with acute altstringchar i\\*^ \xC3\xAE altstringchar I\\*^ \xC3\x8E # îÎ Latin letter I with circumflex altstringchar i\\*\: \xC3\xAF altstringchar I\\*\: \xC3\x8F # ïÏ Latin letter I with diaeresis # (not listed) Latin letter eth # nroff doesn't define it, but ispell requires us to provide *something*. altstringchar \*(et \xC3\xB0 altstringchar \*(ET \xC3\x90 # ðÐ Latin letter eth altstringchar n\\*~ \xC3\xB1 altstringchar N\\*~ \xC3\x91 # ñÑ Latin letter N with tilde altstringchar o\\*` \xC3\xB2 altstringchar O\\*` \xC3\x92 # òÒ Latin letter O with grave altstringchar o\\*' \xC3\xB3 altstringchar O\\*' \xC3\x93 # óÓ Latin letter O with acute altstringchar o\\*^ \xC3\xB4 altstringchar O\\*^ \xC3\x94 # ôÔ Latin letter O with circumflex altstringchar o\\*~ \xC3\xB5 altstringchar O\\*~ \xC3\x95 # õÕ Latin letter O with tilde altstringchar o\\*\: \xC3\xB6 altstringchar O\\*\: \xC3\x96 # öÖ Latin letter O with diaeresis altstringchar o\\*/ \xC3\xB8 altstringchar O\\*/ \xC3\x98 # øØ Latin letter O with stroke altstringchar \\*8 \xC3\x9F # ß Latin small letter sharp s altstringchar u\\*` \xC3\xB9 altstringchar U\\*` \xC3\x99 # ùÙ Latin letter U with grave altstringchar u\\*' \xC3\xBA altstringchar U\\*' \xC3\x9A # úÚ Latin letter U with acute altstringchar u\\*^ \xC3\xBB altstringchar U\\*^ \xC3\x9B # ûÛ Latin letter U with circumflex altstringchar u\\*\: \xC3\xBC altstringchar U\\*\: \xC3\x9C # üÜ Latin letter U with diaeresis altstringchar y\\*' \xC3\xBD altstringchar Y\\*' \xC3\x9D # ýÝ Latin letter Y with acute altstringchar y\\*\: \xC3\xBF altstringchar Y\\*\: \xC3\xB8 # ÿŸ Latin letter Y with diaeresis # (not listed) Latin letter thorn # nroff doesn't define it, but ispell requires us to provide *something*. altstringchar \*(th \xC3\xBE altstringchar \*(TH \xC3\x9E # þÞ Latin letter Thorn # # N/Troff with -mm macros. Some of these are not actually supported # by nroff. # altstringtype "-mm" "nroff" ".mm" altstringchar a\\*` \xC3\xA0 altstringchar A\\*` \xC3\x80 # àÀ Latin letter A with grave altstringchar a\\*' \xC3\xA1 altstringchar A\\*' \xC3\x81 # áÁ Latin letter A with acute altstringchar a\\*^ \xC3\xA2 altstringchar A\\*^ \xC3\x82 # â Latin letter A with circumflex altstringchar a\\*~ \xC3\xA3 altstringchar A\\*~ \xC3\x83 # ãà Latin letter A with tilde altstringchar a\\*\: \xC3\xA4 altstringchar A\\*; \xC3\x84 # äÄ Latin letter A with diaeresis altstringchar a\\*o \xC3\xA5 altstringchar A\\*o \xC3\x85 # åÅ Latin letter A with ring above altstringchar \\(ae \xC3\xA6 altstringchar \\(AE \xC3\x86 # æÆ Latin letter AE altstringchar c\\*\, \xC3\xA7 altstringchar C\\*\, \xC3\x87 # çÇ Latin letter C with cedilla altstringchar e\\*` \xC3\xA8 altstringchar E\\*` \xC3\x88 # èÈ Latin letter E with grave altstringchar e\\*' \xC3\xA9 altstringchar E\\*' \xC3\x89 # éÉ Latin letter E with acute altstringchar e\\*^ \xC3\xAA altstringchar E\\*^ \xC3\x8A # êÊ Latin letter E with circumflex altstringchar e\\*\: \xC3\xAB altstringchar E\\*; \xC3\x8B # ëË Latin letter E with diaeresis altstringchar i\\*` \xC3\xAC altstringchar I\\*` \xC3\x8C # ìÌ Latin letter I with grave altstringchar i\\*' \xC3\xAD altstringchar I\\*' \xC3\x8D # íÍ Latin letter I with acute altstringchar i\\*^ \xC3\xAE altstringchar I\\*^ \xC3\x8E # îÎ Latin letter I with circumflex altstringchar i\\*\: \xC3\xAF altstringchar I\\*; \xC3\x8F # ïÏ Latin letter I with diaeresis # (not listed) Latin letter eth # nroff doesn't define it, but ispell requires us to provide *something*. altstringchar \*(et \xC3\xB0 altstringchar \*(ET \xC3\x90 # ðÐ Latin letter eth altstringchar n\\*~ \xC3\xB1 altstringchar N\\*~ \xC3\x91 # ñÑ Latin letter N with tilde altstringchar o\\*` \xC3\xB2 altstringchar O\\*` \xC3\x92 # òÒ Latin letter O with grave altstringchar o\\*' \xC3\xB3 altstringchar O\\*' \xC3\x93 # óÓ Latin letter O with acute altstringchar o\\*^ \xC3\xB4 altstringchar O\\*^ \xC3\x94 # ôÔ Latin letter O with circumflex altstringchar o\\*~ \xC3\xB5 altstringchar O\\*~ \xC3\x95 # õÕ Latin letter O with tilde altstringchar o\\*\: \xC3\xB6 altstringchar O\\*; \xC3\x96 # öÖ Latin letter O with diaeresis altstringchar o\\*/ \xC3\xB8 altstringchar O\\*/ \xC3\x98 # øØ Latin letter O with stroke altstringchar \\*(ss \xC3\x9F # ß Latin small letter sharp s altstringchar u\\*` \xC3\xB9 altstringchar U\\*` \xC3\x99 # ùÙ Latin letter U with grave altstringchar u\\*' \xC3\xBA altstringchar U\\*' \xC3\x9A # úÚ Latin letter U with acute altstringchar u\\*^ \xC3\xBB altstringchar U\\*^ \xC3\x9B # ûÛ Latin letter U with circumflex altstringchar u\\*\: \xC3\xBC altstringchar U\\*; \xC3\x9C # üÜ Latin letter U with diaeresis altstringchar y\\*' \xC3\xBD altstringchar Y\\*' \xC3\x9D # ýÝ Latin letter Y with acute altstringchar y\\*\: \xC3\xBF altstringchar Y\\*\: \xC3\xB8 # ÿŸ Latin letter Y with diaeresis # (not listed) Latin letter thorn # nroff doesn't define it, but ispell requires us to provide *something*. altstringchar \*(th \xC3\xBE altstringchar \*(TH \xC3\x9E # þÞ Latin letter Thorn # # HTML/SGML/XML # altstringtype "html" "html" ".html" ".htm" ".shtml" ".xml" altstringchar à \xC3\xA0 altstringchar À \xC3\x80 # àÀ Latin letter A with grave altstringchar á \xC3\xA1 altstringchar Á \xC3\x81 # áÁ Latin letter A with acute altstringchar â \xC3\xA2 altstringchar  \xC3\x82 # â Latin letter A with circumflex altstringchar ã \xC3\xA3 altstringchar à \xC3\x83 # ãà Latin letter A with tilde altstringchar ä \xC3\xA4 altstringchar Ä \xC3\x84 # äÄ Latin letter A with diaeresis altstringchar â \xC3\xA5 altstringchar  \xC3\x85 # åÅ Latin letter A with ring above altstringchar æ \xC3\xA6 altstringchar Æ \xC3\x86 # æÆ Latin letter AE altstringchar ç \xC3\xA7 altstringchar Ç \xC3\x87 # çÇ Latin letter C with cedilla altstringchar è \xC3\xA8 altstringchar È \xC3\x88 # èÈ Latin letter E with grave altstringchar é \xC3\xA9 altstringchar É \xC3\x89 # éÉ Latin letter E with acute altstringchar ê \xC3\xAA altstringchar Ê \xC3\x8A # êÊ Latin letter E with circumflex altstringchar ë \xC3\xAB altstringchar Ë \xC3\x8B # ëË Latin letter E with diaeresis altstringchar ì \xC3\xAC altstringchar Ì \xC3\x8C # ìÌ Latin letter I with grave altstringchar í \xC3\xAD altstringchar Í \xC3\x8D # íÍ Latin letter I with acute altstringchar î \xC3\xAE altstringchar Î \xC3\x8E # îÎ Latin letter I with circumflex altstringchar ï \xC3\xAF altstringchar Ï \xC3\x8F # ïÏ Latin letter I with diaeresis altstringchar ð \xC3\xB0 altstringchar Ð \xC3\x90 # ðÐ Latin letter eth altstringchar ñ \xC3\xB1 altstringchar Ñ \xC3\x91 # ñÑ Latin letter N with tilde altstringchar ò \xC3\xB2 altstringchar Ò \xC3\x92 # òÒ Latin letter O with grave altstringchar ó \xC3\xB3 altstringchar Ó \xC3\x93 # óÓ Latin letter O with acute altstringchar ô \xC3\xB4 altstringchar Ô \xC3\x94 # ôÔ Latin letter O with circumflex altstringchar õ \xC3\xB5 altstringchar Õ \xC3\x95 # õÕ Latin letter O with tilde altstringchar ö \xC3\xB6 altstringchar Ö \xC3\x96 # öÖ Latin letter O with diaeresis altstringchar ø \xC3\xB8 altstringchar Ø \xC3\x98 # øØ Latin letter O with stroke altstringchar ß \xC3\x9F # ß Latin small letter sharp s altstringchar ù \xC3\xB9 altstringchar Ù \xC3\x99 # ùÙ Latin letter U with grave altstringchar ú \xC3\xBA altstringchar Ú \xC3\x9A # úÚ Latin letter U with acute altstringchar û \xC3\xBB altstringchar Û \xC3\x9B # ûÛ Latin letter U with circumflex altstringchar ü \xC3\xBC altstringchar Ü \xC3\x9C # üÜ Latin letter U with diaeresis altstringchar ý \xC3\xBD altstringchar Ý \xC3\x9D # ýÝ Latin letter Y with acute altstringchar ÿ \xC3\xBF altstringchar Ÿ \xC3\xB8 # ÿŸ Latin letter Y with diaeresis altstringchar þ \xC3\xBE altstringchar Þ \xC3\x9E # þÞ Latin letter thorn # Here's a record of flags used, in case you want to add new ones. # Right now, we fit within the minimal MASKBITS definition. # # ABCDEFGHIJKLMNOPQRSTUVWXYZ # Used: * * **** ** * ***** *** # A D GHIJ MN P RSTUV XYZ # Available: -- -- -- - - - # BC EF KL O Q W # Now the prefix table. There are only three prefixes that are truly # frequent in English, and none of them seem to need conditional variations. # prefixes flag *A: . > RE # As in enter > reenter flag *I: . > IN # As in disposed > indisposed flag *U: . > UN # As in natural > unnatural # Finally, the suffixes. These are exactly the suffixes that came out # with the original "ispell"; I haven't tried to improve them. The only # thing I did besides translate them was to add selected cross-product flags. # suffixes flag V: E > -E,IVE # As in create > creative [^E] > IVE # As in prevent > preventive flag *N: E > -E,ION # As in create > creation Y > -Y,ICATION # As in multiply > multiplication [^EY] > EN # As in fall > fallen flag *X: E > -E,IONS # As in create > creations Y > -Y,ICATIONS # As in multiply > multiplications [^EY] > ENS # As in weak > weakens flag H: Y > -Y,IETH # As in twenty > twentieth [^Y] > TH # As in hundred > hundredth flag *Y: Y > -Y,ILY # As in messy > messily [^Y] > LY # As in quick > quickly flag *G: E > -E,ING # As in file > filing [^E] > ING # As in cross > crossing flag *J: E > -E,INGS # As in file > filings [^E] > INGS # As in cross > crossings flag *D: E > D # As in create > created [^AEIOU]Y > -Y,IED # As in imply > implied [^EY] > ED # As in cross > crossed [AEIOU]Y > ED # As in convey > conveyed flag T: E > ST # As in late > latest [^AEIOU]Y > -Y,IEST # As in dirty > dirtiest [AEIOU]Y > EST # As in gray > grayest [^EY] > EST # As in small > smallest flag *R: E > R # As in skate > skater [^AEIOU]Y > -Y,IER # As in multiply > multiplier [AEIOU]Y > ER # As in convey > conveyer [^EY] > ER # As in build > builder flag *Z: E > RS # As in skate > skaters [^AEIOU]Y > -Y,IERS # As in multiply > multipliers [AEIOU]Y > ERS # As in convey > conveyers [^EY] > ERS # As in build > builders flag *S: [^AEIOU]Y > -Y,IES # As in imply > implies [AEIOU]Y > S # As in convey > conveys [CS]H > ES # As in lash > lashes [^CS]H > S # As in cough > coughs [SXZ] > ES # As in fix > fixes [^SXZHY] > S # As in bat > bats flag *P: [^AEIOU]Y > -Y,INESS # As in cloudy > cloudiness [AEIOU]Y > NESS # As in gray > grayness [^Y] > NESS # As in late > lateness flag *M: . > 'S # As in dog > dog's # $Log: english.aff,v $ # Revision 1.26 2020-12-30 22:20:19-08 geoff # Add UTF-8 options to the default character set. # # Revision 1.25 2020-12-23 16:26:37-08 geoff # Switch to UTF-8 as the default character encoding. # # Revision 1.24 2015-02-07 23:59:51-08 geoff # Correct the suffix generation for words ending in TH. # # Revision 1.23 2005/04/21 14:06:40 geoff # Add UTF-8 as an encoding option. # # Revision 1.22 2005/04/13 22:52:37 geoff # Update the license. Add expanded rules for LY and ES. # # Revision 1.21 2001/07/25 21:51:47 geoff # *** empty log message *** # # Revision 1.20 2001/07/23 20:43:37 geoff # *** empty log message *** # # Revision 1.19 2000/08/22 11:03:59 geoff # Fix a typo in the previous checkin. Provide dummy definitions for eth # and thorn for tex/nroff, since ispell insists on having them. # # Revision 1.18 2000/08/22 10:52:25 geoff # *** empty log message *** # # Revision 1.17 1999/01/07 01:58:15 geoff # Update the copyright. # # Revision 1.16 1995/01/08 23:23:59 geoff # Add a NeXT to the defstringtype statement so that nextispell can # select it. # # Revision 1.15 1994/01/25 07:12:40 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # ispell-3.4.02/languages/english/PaxHeaders.22185/british.10000644000000000000000000000013213770761354017770 xustar0030 mtime=1608770284.412215695 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/english/british.10000444003214100001440000001217613770761354021050 0ustar00geofffaculty00000000000000acclimatise/GRSZ acclimatises/A actualise/DGS actualises/A aerobrake/MS aesthete/S aggrandisement/MS americanised amortisation/MSU animised annualise/DGS anonymisation/M arsehole/MS Balkanisation/MS biosynthesised bureaucratisation/MS caesium calliper/S cancellate/D canonised/U cauterise/DGS caviller/S centreline/S Christianising civilisational/MS cognisable commercialisation/MS communise/DGS computerisation conditionalise/DGS conventionalised criminalise/DGS crystalise/DGS crystalite/S crystallisation/AMS crystalographer/S crystalographic crystalography/M decentralising decontextualisation/M decontextualise/DGRS deemphasise/DGRSZ deglycerolised dehumanise/DGS demineralisation/MS democratisation/MS democratise/DGRS democratises/U demonise/DGS demoralisation/MS demythologisation demythologise/DGRS depersonalisation/MS depersonalised deputised destabilise/DGS destigmatisation desynchronise/DGS detribalise/DGS diagonalisable dialysed/U diarrhoea/MS diarrhoeal dichotomisation digitalisation/MS digitisation dioptre/MS discoloured/MPS discoloureds/U discolours disfavour/DGRSZ disfavourer/MS dishevelled disincentivise/DGRS dislodgement disorganisation/MS disulphide dowelling downdraught dramatisation/MS dramatise/DGRSZ draughtsperson/MS draughty/PRY duellist/S dynamised emphasise/ADGRSZ energised/U energises enthral/S epicentre/MS eulogise/DGRSZ Europeanisation/MS Europeanised exorcise/DGS extemporise/DGRSZ externalisation/MS favouritism/MS federalise/DGS fibreboard foetid/PY foetus/MS fossilised/U fraternise/DGRSZ galvanisation/AMS galvanise/DGRSZ galvanises/A generalisable/MS germanised gimballed glottalisation glycerolised gruelling/Y gynaecological/MS gynaecologist/MS harmonisation/MS homoeomorph homoeopath homogenisation/MS homogenise/DGRSZ honouree/MS hospitalisation/MS humanise/DGRSZ humanises/AI hydrolysed/U hypnotise/DGRSZ hypnotiser/MS hypnotises/U hypophysectomised idolise/DGRSZ immobilise/DGRS immortalised/U immunisation/MS impersonalised incentivisation/DGMS incentivise/DGRS industrialised/AU industrialising institutionalisation/MS institutionalisation's/A internationalisation/MS internationalised ionise/DGJNRSXZ kinaesthesis kinaesthetic/S kinaesthetically lacklustre learnt/U legitimise/DGRS libeller/S libellous/Y liberalisation/MS lionise/DGRSZ lodgement magnetised/U manoeuvrability manoeuvrable marbleised marbleising maximisation/MS mazourka/MS mediaevalist/MS memorialised/U mesmerised/U metabolised metropolitanisation milligramme/MS millilitre/MS mineralised/U misbehaviour/MS mischaracterisation/MS mischaracterise/DGS misdemeanour/MS misrouteing mobilisation/AMS mobilise/DGRS mobilises/A modernisation/MS monetisation/M monetise/ADGS monopolisation/MS monopolise/DGRSZ monopolised/U monopolises/U multicolour/DMS narcotises nasalisation/MS nasalised naturalised/U neutralisation/MS nominalised novelised ochre/MS oedema/MS oedematous operationalisation/S operationalise/D orthogonalisation/M orthogonalised orthopaedic/S ostracised outmanoeuvre/DGS overemphasise/DGRSZ packetisation packetise/DGRSZ packetiser/MS palatalisation palatalise/DGS palletised panelisation panelised parenthesise/GS particularise/DGS pasteurisation/S pedalled pedalling peptising plagiarise/DGRSZ platinise/DGS ploughshare/MS polarise/DGRSZ polarised/AU politicised polymerisations preprogramme/S prioritisation/M proletarianisation proletarianised pronominalisation pronominalise pummelled pyorrhoea/MS pyrolyse/MRS radiopasteurisation radiosterilisation radiosterilised rancour/MS randomisation/MS rationalisation/MS realisability/MS reconceptualisation recrystallise/G regularising reharmonisation remonetisation repopularise revitalisation revitalise/DGRSZ ritualised romanticise/GS rubberised sanitisation/M Sanskritise satirise/DGRSZ satirises/U scandalised/U scandalising sectionalised secularisation/MS secularised/U sensationalise/DGS sensitised/U sentimentalise/DGRSZ sentimentalises/U serialisability/M serialisable sexualised signalises snivelled sniveller/S snivelling/S snowplough/MS socialisation/MS stabilisation/MS stigmatisation/MS stigmatised/U stylisation/MS subcategorising subsidisation/MS substerilisation suburbanisation/MS suburbanised suburbanising sulphaquinoxaline sulphide sulphite sulphonamide/S sulphurous/PY swivelled swivelling synergise/DGS systematisation/MS systemisation/MS teaselled teaselling teetotaller temporise/DGJRSZ temporiser/MS temporising/MSY temporisings/U theatregoer/MS theatregoing tinselled tinselling traditionalised travelogue/MS trialisation triangularisation/S tricolour/DMS tyrannise/DGJRSZ tyrannising/MSY uncauterised/MS underutilisation/M underutilised undialysed/MS undramatised/MS unenergised/MS uneulogised/MS unfossilised/MS unfraternising/MS unhydrolysed/MS unidolised/MS unindustrialised/MS unitised universalise/DGRSZ unmagnetised/MS unmemorialised/MS unmineralised/MS unmobilised/MS unpolarised/MS unpreemphasised unsavoury/MPS unstigmatised/MS untrammelled unvocalised/MS unvulcanised/MS updraught/MS urbanisation/MS urbanised vacuolisation/MS vaporisation/AMS varicoloured/MS velarise/DGS visualisation/AMS vocalisation/MS vocalise/DGRSZ volatilisation/MS vulcanised/U waggoneer watercolour/DGMS watercolourist/S yodelled yodeller yodelling ispell-3.4.02/languages/english/PaxHeaders.22185/english.30000644000000000000000000000013213776176064017763 xustar0030 mtime=1610153012.119049319 30 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/languages/english/english.30000444003214100001440000050602313776176064021042 0ustar00geofffaculty00000000000000Aachen Aalborg Aalesund aardwolf Aargau Aaronic AAU abac abaca abactinal abadan abakan abamp abampere abator Abba Abbado abbasid abbatial abbess Abbeydale abcoulomb abdias abdominous abednego Abelard Abele Abelmosk abeokuta aberdare Abernethy Aberystwyth abfarad abhenry abib abietic abilene abingdon abirritant abirritate abkhaz ablactation ablator abohm aboideau aborticide aboukir aboulia abranchiate Abravanel Abraxas abri abruzzi Absalom/M abseil absinthism absonant absorbefacient absorptivity absquatulate abstergent Abu abukir abulia abvolt abwatt aby abydos abysm Abyssinian acajou acanthaceous acanthine acanthoid acanthous acariasis acarid acaroid acarology acarpous Acarus acas acaudal accad accentor accidie accipitrine accommodatory accouplement accrescent Accrington accutron Aceldama acerate acerose acescent acetabulum acetanilide acetometer acetophenetidin acetum acetylcholine acetylide acetylsalicylic achaea Achaemenid Achates achelous achene Achernar acheron acheulian Achitophel achlamydeous achlorhydria achondrite achondroplasia achromatin achromatous achromic acicula aciculate aciculum acidometer acidophil acidophilus acidosis acierate acinaciform aciniform Acis ackee aclinic acnode acol aconcagua aconite acotyledon acouchi acridine acriflavine acrilan acrocarpous acrodrome acrogen acrolein acrolith acromegaly acromion acrospire acroter acrylamide acrylyl acta actin actinal Actinia actinidin actiniform actinochemistry actinoid actinomere actinomorphic actinomycete actinomycosis actinon actinopod actinotherapy actinouranium actinozoan Actium aculeus acutance acyclical adactylous adamawa Adamite adamsite adana adaptably Adar Addams addax Addington ademption Adenauer adenectomy adenitis adenocarcinoma adenohypophysis adenoidectomy adhibit adiaphorism adiaphorous adiathermancy Adige adipocere adit adivasi admetus adminicle adnate adnominal adnoun Adonai Adonic adowa adrastus adscription adsorbtion adsuki adularia Adullamite adumbral aduwa adventitia adversarial Advowson adygei adynamia adytum adzhar adzuki aeciospore aecium Aedes aedile Aegeus Aegina Aegisthus aegospotami aegrotat aeneous Aeolic Aeolipile Aeolis Aepyornis Aeschines Aesculapian Aesculapius Aesir aestheticism Aetolia afebrile Affenpinscher affettuoso afflatus affreightment aforemention aforetime Africanist Afrikander Afrikanerdom afrit afrormosia afterbody afterbrain afterheat afterpains aftersensation aftershaft aga agadir agalloch Agama agamogenesis Agapanthus agaric agartala agateware agegroup Ageratum aggro agha Agincourt agiotage agist Aglaia aglet agley aglimmer agma agminate agnail agni agnus agora Agostini Agra agraffe agram Agrapha agraphia agrestal agrestic agrigento Agrippa agrippina agrose agrostology agrypnotic Aguascalientes agueweed agulhas ahab Ahasuerus ahimsa ahithophel Ahmednagar Ahriman ahura Ahvenanmaa Ahwaz Aidan Aidin aiglet aiguille aiguillette aikona Aileen ailurophile ailurophobe ain aintab airboat airbrick aircraftman airdrie aire airforce airgun airt aisha aisne ait aitchbone ajaccio ajmer aka Akan akbar akela akene akhara akhenaten Akhmatova akihito Akkad Akkadian akkerman Akmolinsk aksum Aktyubinsk akure akvavit alagez alagoas Alamein alamode alanbrooke alanine alannah alap alar Alaric albacete albata albemarle alberti albertite albertus albescent Albi Albigenses Albinoni albinus Albion albite Alboin albuminate albuminuria albumose alburnum Albury alcaeus alcahest alcaide alcalde alcan alcatraz alcheringa alcidine Alcman alcmene Alcock alcoholicity Alcoran alcuin Alcyone aldabra aldan Aldermaston Alderney aldershot Aldine aldis aldol aldoxime Aldus alecost alecto alegar alekhine Aleksandropol Aleksandrovsk Alemanni Alemannic alembicated Aleppo alessandria alethic aleurone alevin alexandretta Alexandrian alexipharmic Alexius alfieri alfilaria alforja algarroba algebraical algeciras Algerine alginic algoid algolagnia algology algometer Algonkian algor algorism alible alicante aligarh aliped aliunde alkalic alkane alkene alkmaar Alkoran alky alkyd alkylation alkyne Allahabad allanite allantoid allantois allargando Allenby Allende alleppey allhallows Allhallowtide alloa allodial allodium allonym alloplasm allotts allyou almada Almeida almelo almemar Almohade almonry Almoravide almucantar almuce alodium alopecia alost alow alpenhorn alpes alphatically alpheus alphonsus alphorn alphosis alsace Alsatia alsike alt Altaic Altamira altdorf/R alternant althing althorn altiplano altissimo altona altostratus Altrincham aludel alula aluminiferous aluminothermy alumroot alvey alvine amadavat amadou amagasaki amalekite amalthea amaranthaceous amaranthine amarelle amaryllidaceous Amaryllis Amati amatol amaut amazonas ambala ambary amberjack amberoid amblygonite amblyopia ambo amboceptor Amboina amboise amboyna ambroid Ambrosian ambry amdahl ameba ameer Ameling amenhotep Amerigo Amerindian Amersfoort amesace Ameslan Amfortas amhara amharic amianthus amice amidol amidship Amiga amin aminophenol aminopyridine aminopyrine amir Amish ammine ammocoete ammon ammonal ammonate ammonic Ammonites amoebaean amon amontillado amoroso amowt Amoy Ampelopsis amphiarthrosis amphiaster amphibiotic amphiblastula amphibrach amphichroic amphicoelous amphictyon amphictyony amphigory amphimacer amphimixis amphiprostyle amphiprotic amphisbaena amphistylar amphithecium amphitricha Amphitrite Amphitryon amphora amphoteric ampulla amravati amrita Amritsar amstrad Amundsen amygdala amygdalate amygdale amygdalin amygdaline amygdaloidal amylaceous amylase amylene amyloid amylolysis amylopectin amylopsin amylose amyotonia Amytal Anabaena anabantid Anabas Anableps anabolite anabranch anacardiaceous anachorism anaclinal anacoluthia anacoluthon anacoustic Anacreontic anacrusis anadem anadex anadromous anadyr anaglypta anagnorisis anagoge anak analcite analects Anam anambra anamnesis anamorphism anamorphoscope anamorphosis anandrous Ananias ananthous anapaest anaphrodisiac anaplasty anaptyxis anapurna anarthria anarthrous anasarca anastomose anatase anatolia anatto anaxagoras anaximander anaximenes anbury Anchises anchylose ancipital ancohuma ancon Ancona ancy ancylostomiasis andalusia Andaman anderlecht Andhra andizhan andreanof andreotti androcles androclinium androecium androgenous androgyne androsphinx andvari ane anear anelace anele anemochore anemography anemology anemophilous anemoscope anergy anethole aneto aneurin Angara Angarsk angelico angell angelology Angelus Angevin angiology angioma Angkor Anglesey Anglian Anglicist Anglomania Anglophone angostura angra Anguilla anguilliform anguine angwantibo anhalt anhinga anhwei aniakchak aniconic anil anilingus animatism animato anisodactyl anisogamy anisole anisometric anisometropia Anjou anking ankus ankylosaur ankylose ankylosis ankylostomiasis anlace anlage annaba annabergite Annam Annamese Annapurna annates annatto annecy anno annulose anoa anoestrus Anopheles anorak anorthositic Anouilh anoxaemia ansate anschluss Ansermet anshan Antarctic antemeridian antependium antepenultimate antetype anteversion antevert anthelmintic anthemion antheridium antherozoid anthocyanin anthophore anthotaxy anthozoan anthracene anthracoid anthraquinone anthropomorphosis anthropomorphous anthropopathy anthropophagi anthropophagite Anthurium antibaryon antibes anticathode antichlor antichrist anticlastic anticlinorium anticosti anticyclone/S antidromic antiegalitarian antifebrile antifederalist antiferromagnetism antifluoridation Antigonus Antigua antihalation antihelices antihelix antihero/S antilepton/S antilogism antilogy antimasque antimere antimilitarist/S antimissile/S antimonous antimonyl antiochus antiparallel antipater antiperistalsis antipsychiatry antirachitic antiremonstrant antisana antiscorbutic antistatic antisthenes antitragus antitype antiworld antlia antlion antofagasta antoninus antonioni antonius antonomasia antre antrim antrum antung anu Anubis anuradhapura anuran anuresis anuria anurous anvers anyang Anzac anzio anzus aorangi aosta aoudad apagoge apanage aparri apatetic apeldoorn apelles apeman apennines apery apetalous aphagia apheliotropic aphesis Aphis aphonia aphtha apia apiezon Apis apivorous aplanospore aplite apnoea apocarp apochromat apocopate apocynaceous apocynthion apogamy apogeotropism apollinaris Apollyon apopemptic apophasis apophthegm apophyge apophyllite apophysis apopolectic aposiopesis apospory apostil appaloosa apparitor appassionato appel appendicectomy appendicle appenzell applecart/S applesnits appointor/S approximal approximator/S appulse apriorism APS apteral apterygial apuleius apulia apure apurimac Apus apyretic aqaba aqualung aquashow aquileia aquitaine aquittal ara/S arabica arabinose Arabist arad Arafat arafura aragats aragon aragonite araguaia Araiza arak/S arakan araldite araliaceous aram Aramaic aran araneid arany arapaima ararat araroba araucania Araucanian Araucaria Arawakan araxes arbalest Arbela arbil arbitress arboraceous arbroath arbuthnot Arcadic arcature archaean archaeomagnetism Archaeopteryx Archaeornis archaeozoic Archean archegonium archenteron archerfish archespore archicarp archidiaconal archidiaconate archiepiscopal archiepiscopate archil Archilochian archilochus archimage archimandrite archine archipenko archiphoneme archiplasm archoplasm arcograph Arctic Arctogaea arcus ardeb ardennes Areca areg arenicolous arenite areography Areopagus Ares Arethusa aretino arezzo argal argali argand argenteuil argentum Argerich argil argilliferous argillite argol argolis argonon argovie Argyrol Arian arica Ariel arietta aril arillode arimathea ariminum ariose arioso ariosto arista aristaeus aristarchus Aristides Aristippus aristophanes Arius arjuna Arkhangelsk Arkhipova arkose arkwright Arlberg arles arlon armagh armagnac armband armes armet armiger armillary Arminian arminius armipotent armorica armure arne arnhem arnica arnim arno aroid aroint arp arpent arquebus arran Arrau arrestable arretium arrivisme arroba Arroyo arru arse arsenopyrite arsphenamine artaud artaxerxes arteriovenous arthralgia arthromere Arthurian artic artistical artois arunachal arundel arundinaceous aruspex aruwimi arvo arytenoid asantehene asarabacca Asarum asben Ascanius ascariasis ascarid Ascensiontide asch Aschaffenburg Ascham asci asclepiadaceous Asclepiadean Asclepius ascocarp ascogonium ascoli ascomycete aseity asepalous asgard Ashanti ashcroft ashe ashet Ashford Ashkenazi Ashkenazy ashkey Ashkhabad ashlar/DGS Ashmore ashplant Ashton ashtoreth Ashur ashurbanipal asir askari askja aslef asmara asmodeus aso asoka Aspasia aspergillosis aspergillus asphyxiant/S aspinwall asquint asquith assad Assamese assentient asshur assibilate assiniboine Assisi assiut associationism assuan assurbanipal astable astaire asternal asti Astilbe astolat astomatous astraphobia astrict astrobotany astrocompass astrodynamics astrogeology astroid astrometry asturias astyanax asur aswan asyllabic asymptotical asyut atacama ataghan atahualpa ataman atbara Aten athabaska athamas Athanasian athanasius athelstan athematic athermanous atheroma Atherton athodyd athos Atlantean Atlantov atli atmolysis atomy atrabilious attaboy attemper Attenborough attenuant attercliffe Attila attlee attu atween aubade aube Aubergine Aubervilliers Aubrietia Aubusson aude audiotypist audiphone Auger Augsburg Augustinian auklet aulic aulis aurangzeb aurelian aureus auriferous Aurignacian auriol aurist aurum ausforming ausonius Aussie austen austenitic Auster Austerlitz Australasia Australiana Australianism Australoid Australorp Austrasia Austronesia Austronesian autacoid autarchy autarky autecious autecology auteur autochanger autochthon autocode autocue autocycle Autoharp autoicous autokinetic autoload/DS autolycus autolyse automorphic autopista autoput autostability autotimer autotoxaemia autotoxin autotype autoxidation auvergne auxanometer auxochrome avadavat avagadro avalon Avar avebury aveiro avellaneda avens averno Averroism Avestan aveyron avicenna aviemore avignon avizandum avlona avunculate awheel awlwort Axminster axseed axum ayacucho ayah ayahuasca aycliffe aydin ayesha Aymara ayr Ayrshire ayub ayurveda ayutthaya azan azazel azbine Azerbaijani azikiwe Azilian aznavour azo/H azobenzene azoic azole azotemia azotic Azotobacter Azov Azrael baa/S Baal Baalbek Baaskap Bab babar babassu babbage babeuf Babi babiche babirusa Babism babu babul babur babylonia Bacchae bacchius bacciform baccivorous baccy Bacharach backbench/RZ backblocks backbreaker backbreaking backchat backcloth backcomb backdate/DGS backhaus backmost backscratcher backsheesh backstreet backus backwardation baclava bacolod Bacquier bacteraemia bacteriological bacteriology bacteriolysis bacteriophage bacteriostasis bacteroid bactria Bactrian baculiform baculum badajoz badalona badderlocks baddie badman badoglio baeda Baedeker bael baeyer baez Baganda bagasse Bagdad bagehot bagh baghlan bagie bagnio baguio bagwash bagwig bagworm bahadur Bahai Bahaism bahasa bahia Bahrain baht bahuvrihi baikal baile baines Bairam bairnsfather baja bajan bakeapple bakehouse bakewell bakra baksheesh bakst bakunin Bala Balaam balaclava Balakirev Balaklava balanchine balas balata Balaton balbo balbriggan baldmoney baldric Balearic balibuntal balikpapan baliol balkh balkhash Balkis balladmonger ballance ballarat ballflower balliol ballocks ballonet Balmacaan balmain Balmoral balmung balneal balneology balpa balsamiferous balsaminaceous Balt Balthazar Baltsa Baluchi Baluchistan Bambara Bamberg banaras banat banc Banda bandaranaike banderilla banderillero bandh bandicoot bandjarmasin bandobust bandoline bandore bandsaw bandspreading bandung Banff bangalore bangka bangweulu banian banja banjermasin banjul Bank banka banket banknote/S bannerol Bannockburn bansela banstead bant/G Bantoid Banville bap Barabbas baranof Barathea baraza Barbarossa Barbary barbel barbellate Barber barbet barbette barbican barbicel Barbirolli barbituric barbizon Barbuda barbule barbusse barca barcarole barce barchart/S Barcoo Bardolatry bardot bareilly Barenboim barents baresark bargee bargepole Bari barilla barite barkentine barkhan barletta barm Barmecide barnardo barnaul barnsley barnum barocchio baroda baroja barong baroscope barostat Barotse barouche barozzi barque barquentine barquisimeto barracoon barracouta barranquilla barrault barrenwort barret barrie barros Barsac Bart bartizan Bartoletti bartolommeo barye barysphere baryta barytes barytone basaltware bascinet baseburner bashan bashibazouk Bashkir basifixed basilan basildon Basilian basilicata Basingstoke Baskerville basle basotho Bassas bassein bassenthwaite basseterre bastardry bastia Bastianini bastinado bastnaesite bastogne Basutoland Bataan batangas batata bateleur batesian bathetic batholith Bathonian bathsheba bathyal bathymetry bathyscaph bathysphere batley battels Battenburg battersea battik Battle battledore battlepiece batum batwoman bauchi baucis Baudo baudouin Bauhinia bautzen bawbee bawdyhouse/S Bax Bayard bayern bayeux bayle baysian baywood bazoo BBC BCPL bdellium beachie Beaconsfield beadledom beanery beanfeast beano beanpole beasty beatles beatty Beaufort beauharnais beaumarchais Beaune beaut beauvais beauvoir beaverbrook bebeerine bebel Bebington beccafico bechet Bechuana Bechuanaland Beckenham Beckford Beckmann becquerel beddable bedesman Bedfordshire bedight bedivere bedizen Bedlington bedrail bedsit/S bedsitter bedspaces bedwarmer bedwetting bedworth beeb beechnut beefburger beento beerbohm beersheba beeswing beetfly beetroot/S beezer beforeimage/S begad beggarweed Beghard begird begorra Beguin begum behan behistun Behrens beiderbecke beigel beira bejabers bejewel belah belemnite belfort belga Belgae Belgravia Belial Belisarius Belisha belitung bellarmine bellay belleau Belleek Bellerophon belletrist Bellingshausen bellinzona Bellmouth belloc Bellona bellybutton Belmondo belmopan Belorussia Belostok belovo Belsen Beltane Bemba bemean Benackova benadryl benares bendel bendigo bendy benedicite Benedictus Benedikt benempt benevento benfleet bengaline benghazi benguela Beni Benin Benison Benne Bennet benoni bentinck bentwood benue benzaldehyde benzidine benzine benzoate benzocaine benzofuran benzoic benzoin benzol benzophenone benzoquinone benzoyl benzyl berar Berber berbera berberidaceous Berberis berbice Berbie Berchtesgaden Berdichev Berdyayev Berenson Berezina Berezniki Berg/R Bergama Bergamo Berganza bergdama bergerac bergius Bergonzi Bergsonism beria bering berio beriosova berk/S Berkeleian Berkeleianism berley berlichingen berlinguer berm bermejo bermondsey bernadette bernadotte Bernese bernhardt bernicle bernina berretta bersagliere berseem bertillon bertolucci berzelius bespangle bespread Bessarabia bestrode Bethany bethe Bethmann bethral/S bethralled bethralling bethsaida betjeman betook Betta betti betulaceous Beulah beuthen bevan bevanite/S bevatron Beveridge bevin bevvy Bewick bexley beyrouth bezique bezoar bezonian bezwada bhagalpur bhai bhakti bhang bharal bharat bharatiya bhatpara bhavan bhavnagar bhindi bhishti bhopal bhubaneswar bhutto biafra biak biannulate biarritz biauriculate bibliomancy bicarb Bice bicephalous bicester bicollateral bicorn bida bidarka biddle bidentate bidistill/DGS Biedermeier biel bield Bielefeld bienne bierkeller biestings bifarious biffin bifoliate bifoliolate biforate bifrost bigarreau bigener bigmouth bignoniaceous biguanide bihar Bihari Biisk bijapur bijugate bikaner bikila bilander bilbao bilberry bilboes bilection bilestone Bilharzia bilirubin biliverdin billabong billfish Billingham Billingsgate Billiton billyo bilobate biltong Bim bimanous bimbo bimorph binal binate bingey binghi binh binodal binominal binturong biocellate bioclimatology biocycle bioenergetics bioherm biolysis bioplasm biopoiesis bioscope bioscopy biosis biostatics biostrome biparietal biparous bipetalous bipyramidal biquadrate biquarterly birendra biriani Birkenhead biro/S birobidzhan birthweight/S birtwhistle bis bisayas biscay bise bisectrix biserrate bish Bishop bishopbird bisitun bisk biskra bismuthic bismuthinite bismuthous bissextile bist bistability bisulcate bisutun bisymmetric bithynia bitolj bitterling bitterwood bivvy bizerte Blachut Blackbeard blackbuck blackbutt blackcurrant blackett blackmore blackpool blackshirt blackstrap blackwall blackwood bladdernose bladderwrack Blagoveshchensk blague blah blain blamey blanquette Blanzat blasco blastocoel blastocyst blastoderm blastoff blastogenesis blastomere blastopore blaubok Blavatsky blaydon bleb Blech bleep/DGR Blegen blennioid blenny blent blepharitis blet blewits Bley blida bligh blighty blimey blindage Blindheim blindstorey Blini Bliss blockboard bloemfontein blois Blomstedt bloodsport/S bloomery Bloomsbury blotto blowie blowlamp blub bludge bluethroat bluetit blundell blunge/R BNF boabdil boadicea Boanerges boarfish boarhound boarish boatbill boathook Boatwright bobbysoxer bobfloat boblet bobol bobotie bobowler bobsleigh bocage boccaccio boccherini boccioni Boche bochum bocklogged bodensee bodge/R bodgie bodh bodmin Bodoni bodybuild bodycheck boethius boeuf bofors bogan bogarde bogart Bogas bogbean bognor bogong bogor bogtrotter bogwood boh bohea Bohm bohol bohunk boiardo Boildieu boileau boilover Boito bokassa Bokhara bokmakierie bolection boleyn bolide bolingbroke boliviano bollocks Bolshie Bolson Boltonia bolzano boma bombacaceous bombora bombycid bomu bonaire Bonapartism bonaventura bonce bondservant boneblack boneshaker bonhoeffer bonin bonism bonnard bonsela bontebok Bonynge boobialla boobook boohoo bookeeper booklouse boole boomkin boomslang boong boothia boothroyd bootloader bophuthatswana boracic boracite boraginaceous borborygmus Bordelaise bordure borecole boree borehole/S borgerhout borges Borghese borgholm borgia bornholm bornu Borodin borodino Boronia borrowable bors borstal borzoi boschbok boschvark bosh bosk boskop Bosky Bosnia bossboy bossuet bosworth botargo botha bothnia bothwell bothy botryoidal bott botticelli bottlebrush bottlenose bottomost bottrop botvinnik boucicault boudicca Bougainville Boughton boulanger Boulez Boult bourges bourgogne Bournemouth Bouvet bovid bovril bovver bowden bowsaw bowshot bowyangs boxboard boxfish boxroom boyla boyne boyoma boysenberry boz/N Bozcaada Braata brabant brach brachiopod Brachiosaurus brachycephalic brachydactylic brachylogy brachypterous brachyuran bracknell bracteate bracteole bradawl bradman bradycardia braga Bragi brahe Brahman Brahmana Brahmani Brahmanism Brahmin Brahui Brailler/S Braillewriters braillex braillink braillo brailtel brainchildren brakesman brakpan bramante bramley branchiopod brancusi brando branle Brantford brasenose brashy brasier brasil brasilein brasilin brassie bratislava braunite braunschweig bravais bravissimo braxy brazils breadline breadmaking breadnut/S breakbone breastpin breathalyse breathalyzer brecht brecon Breconshire breda brede bree breenger bregenz brekky Bremerhaven Brendel Brentano Brentwood Brescia Breslau Bresson Bretagne Bretton Breuer Breughel brevier brewis brey brezhnev briand Briareus briarroot bricklay bricole Bridgeford Bridgeman bridie bridlewise bridoon brie brierroot brigalow brighouse Bright brightside Brigid brinell brinjal brinny briony Britannia Briticism Britishism brittonic britzka brix Brixton Brno broadbill Broadbrim broadmoor broca broch brocken broddle broderie broederbond brogan brolga bromal Bromberg brome bromeosin bromoform bromsgrove bronchia bronchiectasis bronchopneumonia bronchoscope brookite brooklet brooklime brookweed broomgrove broomhill broonzy brose browband broz brubeck Brubeck's Bruch brucine bruges Brule brumal brumby brume Brummagem brummell brummie brundisium Brunei brunel Brunelle brunelleschi brunhild brusa brushless Bruson brutify Brutus Bryansk brynhild bryology bryony bryozoan Brython Brythonic btu bub/R bubal bubaline Bubo bubonocele bucaramanga buccinator bucentaur Bucephalus buchan Buchmanism buchner buchu buckeen buckhound Buckingham Buckinghamshire buckish buckjumper buckra buckram bucovina Buddleia budgerigar budgetted budgetting budweis Buenaventura Bueno buffon buganda bugbane bugong buhl buibui buitenzorg bukavu bukhara bukharin bukovina bul bulawayo bulbiferous bulganin Bulgar bulle bullpen bullroarer bulnbuln bumbailiff Bumbledom bumf bummaree bumph bumsucking Buna bunche buncombe Bundaberg bundelkhand bundesrat bundh bundobust Bundoora Bundu bunin bunraku buntal bunyip buonaparte buonarroti buoyage buprestid bur buran buraydah burbage Burberry burbot burgas burghley burgomaster/S Burgos Burgoyne burgrave burhel burk burka Burkina burleigh burnet burney burnley buroo burrawang bursarial Burseraceous bursiform burstone buryat busbar busera bushbaby bushcraft bushhammer bushido bushie Bushire bushpig bushranger bushtit bushveld bushwheel busoni busra bustee busuuti butanone butat butcherbird Bute butenedioic butskellism butskellite butterbur butterine Buttermere Butterworth buttonmould butung butyrin buzzsaw Bydgoszcz Byelostok byelovo byng byrnie byssinosis byssus bytom Caballe cabanatuan cabbageworm cabezon cabimas Cabinda cabob cabochon cabora cabral cabretta cabrilla cachexia cachinnate cachucha cacique caciquism cacodyl cacoepy cacoethes cacology cacomistle cadaster Caddoan cadelle cadi Cadmean Cadmus caecilian caecum Caelian Caelum caen caenozoic caeoma caerleon caernarfon Caernarvonshire Caerphilly caesalpiniaceous caesaraugusta caesarea Caesarean Caesarism caespitose caesura caetano cafard caff cagliari cagliostro cagmag cagney cagoule/S Cahokia caiaphas Caicos cainogenesis cainozoic caird cairngorm caithness caius cajeput cajuput Calabar calabria Caladium calalu calamanco calamondin calandria calathus calaverite calcar calcariferous calceiform calces calchas calcicole Calciferous calcsinter calculational caldarium Caledonia Caledonian calefacient calefactory cali Caliban calices caliche calicle Calicut califate caligula calimere calipash calipee calisaya calix callais callao Callas callicrates callimachus Calliopsis callipash callipygian callisthenics calor caloyer calpe caltanissetta Calvados calvaria Calvinism calvities calx calyces calycine calycle Calydonian calyptra calyptrogen camail camass cambay camberwell cambist camboose cambrai cambrel cambria Cambridgeshire cambyses Camelopardus Camenae cameral camerlengo camiknickers camisado camoodi campagna campania campanulaceous campeche campestral campina/S campo camus camwood Cana Canaanite Canaanitic Canadianism canaigre canakin canaletto canaliculus canara canarese canaster Candace candia Candiot candleberry candlefish candlelit Candlemas candlenut candlewood candyfloss candytuft canea canella cangue Canicula canikin cannabin cannae cannelloni cannelure cannes cannock cannula cannulate canoewood canonicate canonry canoodle Canopic Canossa canova canso Cantabrian cantal cantala cantatrice cantharides cantilena cantorial cantoris cantrip Canuck canula canzona canzone canzonet Capablanca caparison Cape capelin capercaillie Capernaum Capetian capillaceous caplin Capone caporetto capote cappadocia capparidaceous cappie Cappuccilli cappuccino capreolate Capri capric capriccioso Capricornus caprifig caprifoliaceous caproic capsaicin Capsian capua capuche caput caracal caracalla caracara caracul carageen caramba caratacus Caravaggio caravanserai carbamate carbamic carbamidine carbene carbineer carbonade carbonado Carbonari carboxylase carburation carburetted carburetter carby carbylamine carcajou carcanet carcassonne carchemish carcinomatosis Cardiganshire cardin cardinalate cardiod carditis cardoon carduaceous carducci caretaking carew carfax carfuffle caria Caribbee caribbees cariboo carifta carillon carillonneur carina carinate carinthia cariocan carline Carlist carlota Carlovingian carlow carmagnole Carman carmarthen Carmarthenshire Carmel Carmelite carminative carnarvon carnassial carnatic carnauba carnet carnify carniola carnot carnotite carny carolus carotenoid carotid Carpathian carpel carpentaria carpentier carpogonium carpology carpometacarpus carpophagous carpophore carrack Carreras Carrick carrycot carryng carse carstensz cartagena carteret Carteri cartful Carthaginian carthorse Carthusian Cartier cartouche cartulary cartwright caruncle carvel cary/S caryatid caryophyllaceous caryopsis carzey casablanca casals casaubon cascabel cascarilla casease casebound casefy caseload/S caseose caserta caseworm casimere Caslon Caspar Casparian Caspian cassareep cassata cassation cassatt Cassegrainian cassel Cassia cassimere cassini cassiodorus cassirer cassiterite cassowary Castalia castellammare castellan castellany castellated castiglione castile Castilian Castilla Castleford Castlereagh castries Casuarina casuist catabasis catacaustic cataclasis cataclinal Catalan catalase catalo cataloguers catalonia catalyzed catamenia catamite catania catanzaro cataphoresis cataphyll cataplasia catarrhine catastrophism catchfly catchweight catechol catechu catechumen catenane catenoid catfall cathar Cathay catholicon catiline catling catmint cato cattalo cattegat cattermole cattery Cattleya catullus CATV cauca caucasia Caucasoid caudad caudex caudine caulis causalgia cauterant cauvery cavafy cavalla cavan cavatina caveator cavefish Cavell Cavesson Cavetto cavicorn cavie cavite Cavour cavy Cawdrey Cawley Cawnpore Caxton Cayes Cayman Cayuse CB CCNY CDPD Ceanothus cecity Cecrops cecum ceefax Ceiba ceilidh Celadon Celaeno celaya Celeste celestite cella celle cellini cellobiose celloidin cellulase cellulitis cellulous celom Celtiberian cembalo cementum cenacle cenesthesia cenis cenogenesis cenote Centaurus centimetric centipoise centisecond/S Central centrobaric centroclinal centurial ceorl cep cephalalgia cephalin cephalochordate cephalometer cephalonia cephalopod cephalothorax Cepheid CEQ ceram ceramal cerargyrite cerastes Ceratodus ceratoid cercaria Cercis cercopithecoid cercus cerebrospinal cerecloth Cerenkov Ceres ceresin ceria ceric cermet cero cerography ceroplastic/S cerotic cerotype cerous cerro cert cerussite cervelat cervicitis cervid cervin cesena cespitose cess/R cessionary cestode cestoid cestus cesura cetatea Cete ceteris cetinje cetology ceuta CGS chabazite chabrol chacma Chaco chaconne Chadderton chadic chaeronea chaeta chaetognath chaetopod chaffinch chagall chagres Chailly chainman chainplate chairborne chalaza chalcanthite chalcidice Chalcis chalcography chalcolithic chalcopyrite chaldea Chaldean Chaldee chaliapin chalicothere chalkpit chalkstone challah challis chalybeate Cham chamade Chamaeleon chamaephyte Chambertin chambord chamonix champac champignon champollion chandernagore chandigarh chandragupta chanel changan changchiakow changchow changchun changsha changteh chanterelle chanukah chaoan chaochow chaparejos chapatti chappal chappie chapstick chapterhouse charas charcot chardin charente charivari charkha charlady/S charleroi charlock Charlottenburg Charlottetown Charlton Charmeuse charminar charollais Charpentier charpoy charqui charr charterage charterhouse Chartism chartless chartography Chasidim chasuble Chatterton Chaucerian chauffer chaulmoogra chaunt chausses chavannes chayote cheb cheboksary Chechen checkbits checkerbloom checky cheddite Cheek cheekpiece cheerlead cheeseboard cheesemonger cheesewood chefoo cheiron cheju chekiang chela chelicera chelicerate cheliform Chellean Chelmsford cheloid chelp Cheltenham Chelyabinsk Chelyuskin chemin chemisette chemmy chemnitz chemosmosis chemosphere chemostat chemosynthesis chemotaxis chemotropism chempaduk chemulpo chemurgy chenab Chengchow Chengteh Chengtu chenopod Cheongsam Cheops Cherbourg Cheremiss Cheremkhovo Cherenkov cheribon Chernovtsy Chernozem chersonese Chertsey Cherubini chervonets cheshunt Chessel Chesterfieldian chetah Chetnik Cheval chevet chevrette chewa chewie chiack Chian chiapas chiastic chiastolite chiat chiba Chibchan chibouk chicane chiccory chichagof chichen chichester chichewa chichihaerh chickabiddy Chickasaw chickenpox chiclayo chiffchaff chifley chigetai chigwell chihli childbear childcare Childermas childminder/S childminding Chilean chiliad chiliasm chilkoot chilli chillon chillum chilopod chilpancingo Chiltern Chilton chilung chimb chimborazo chimbote chimkent chimneypot China chinaberry chinagraph chinan chincapin chincherinchee chindit chindwin Chinee ching chinghai chingtao chinkapin chinkiang chino Chinookan chinwag Chionodoxa chios chipolata chippewa chippy chirac chirau chirico chirm Chiron chirurgeon chishima chisimaio Chita chital chitarrone chittagong chiv chivaree Chkalov chlamydate chlamydeous chlamydospore chlodwig chlorambucil chloramine Chlorella chlorenchyma chloroacetic Chloromycetin chloropicrin chlorosis chlorotic chlorous choanocyte Chocho Choco chogyal choiseul chokebore chokecherry chokedamp choko cholecyst cholecystectomy choli cholic cholla chollers cholon cholula chondrify chondriosome chondroma chondrule choof chook choom chopine choplogic choragus chordophone chorea choreodrama choriamb chorley choroid chorology chorusmaster chota chott chough choux chrematistic chresard chrism chrismatory chrisom Chrissie Christadelphian Christchurch Christhood Christmastide Christoff Christology Christophe chromatology chromatolysis chromatophore chromogen chromogenic chromolithograph chromolithography chromomere chromophore chromoplast chromous chromyl chronon chrysalid chrysarobin chryselephantine chrysoberyl chrysoprase chrysostom chrysotile chthonian chubb chubbyness chudskoye chufa chukar Chukchi chukka chukker chunder chunderous Chung chunnel chunter chupatti/S chuppah chur churchgo churchwarden/S churidars churinga churr Churrigueresque chuttie Chuvash chyack chyle chyme chymosin cibber ciborium cic cicala cicatricle cicatrix Ciccolini Cicely cicerone cichlid/S Cid cienfuegos cig cii cil cilice cilicia Cilician ciliolate cilium cimabue Cimbri cimex Cimmerian cimon Cinchona cinchonidine cinchonine cinchonism Cincinnatus cine cineaste Cinemascope cineol Cineraria cinerarium cinereous cinerin cingulum cinna cinnamic cinquain cinque cinquecento cinzano Cipango cipolin circassia Circassian Circinus circlorama circumbendibus circummartian circumnutate circumsolar cirenaica cirencester cirrate cirri cirripede cirrocumulus cirrose cirrostratus cirsoid Cisalpine ciscaucasia cisco ciskei cispadane cissoid cistaceous Cistercian cisterna Cistus cithara cither citole citreous citriculture citrin citrine cittern/S City ciudad civ civism clachan clackmannan Clacton clactonian cladded cladoceran cladode cladophyll clairaudience clamworm/S Clapham clapperboard/S clapperclaw Clapton Clarabella Clarenceux clarino Clarkia claro clarts clary classis clastic clathrate Claudel claudication Claudius Clausewitz clavate clavicembalo clavicorn claviform clavius claymore claypan claystone Claytonia cleanskin cleanthes clearcole clearstory clearway/S clearwing cleck cleek cleethorpes cleg cleisthenes cleistogamy clem Clematis clemenceau Clementine Clemmons Cleome cleon Cleopatra clepsydra cleptomania clerestory clerkess cleruchy Cleve cleveite Clevenger clianthus Cliburn clichy cliffhang clii clinandrium clingfish clinkstone clinostat clinquant Clintonia Clipperton clippie clishmaclaver clisthenes clitellum cliv clix clockmaker clomb clonus closedown Clostridium cloudberry cloudscape clouet clough clovis clubhaul clubland clubman clucky Cluj clumber cluny clupeoid clustan clusterability clusterable Cluytens clvi clvii clwyd clxi clxii clxiv clxix clxvi clxvii clydebank Clydesdale clype clypeus clyster cnidarian cnidoblast cnidus cnossus cnut CO coachwood coadjutant coagulum coahuila coalface coalfield/S coalfish coalmine/S coalport coaming Coast Coatbridge coatee coati cobaltite cobaltous cobber Cobbett cobden Cobham cobnut coburg coccid cocciferous coccolith coccyx cochabamba Cochin cochleate Cockaigne cockalorum cockayne cockboat cockchafer cockcroft cockleboat cockloft cockneyfy cocksfoot cockspur cockswain cockup cocopan Cocos cocotte cocteau codasyl codder codominate/DGS codswallop coedit coelacanth coelenterate coelenteron coeliac coelom coelostat coenacle coenobite coenocyte coenurus coercibility coessential coetaneous coeur coexecutor coextend coff cofferdam coggan coglike cogon cohabitee/S cohesional cohobate cohune coimbatore coimbra Cointreau coir coire coit cokuloris colbert colcannon colchester colchicine Colchicum Colchis colcothar colectomy colemanite coleopteran coleoptile coleorhiza coles colet colewort coley colicroot colicweed coligny Colima collapsar collarette collectanea collembolan collenchyma Collier Collinsia collisionless collocutor colloid collop Colloq collotype collywobbles colmar Colobus colocynth Cologne colombes colonitis colonsay coloquintida colossae Colossian colossians colotomy colpitis colporteur colquhoun Coltrane colubrid colubrine colugo colum Columba columbarium columbic columbite columbium columbous columella columnwise colure Colwyn coly Comanchean comaneci comate comatulid combe comecon comedo comenius comfrey comines Comintern comitia Command commeasure commedia commendam commines commis commo commodus commonable communicatie comnenus como comorin comoro Comoros comp compadre compander/S compilability complect compony Compositae compossible compostela compotation comprador Comptometer comstockery comte Comus conan conation conative conatus concelebrate concertino concha conchie conchiferous conchiolin conchobar conchoid conchoidal conchology condillac condottiere condyle condyloid condyloma Conferva confessant configurationism confirmand confiteor confiture conformability congeneric congius conglobate conglutinant congou congrats Congreve conidiophore conidium coniine coniology Coniston Conium conjuction connacht connaught connemara connexions conodont conoid conoscenti conquian conscionably consentient conservatoire conservatorium consett consocies consolute constantan constatation contactor contango contemn conto contradance contrasuggestible contrate contravallation contrayerva contredanse controllee/S conure convertite convolvulaceous Convolvulus cooee Cook cookhouse coolabah coolgardie coom cooncan coontie cooperativity coopt coordinal cootch copaiba copal copalm copepod copita copley coprolalia coprology coprophagous coprophilous Coprosma Copt Coptic copygraph copyread coquelicot coquilla Coquille coraciiform coracle coracoid Coral corallite coralloid coralroot Corantijn coranto corban corbeil corbicula corbie corbusier corby corcyra corday Cordelier cordeliers cordierite cordillera/S cordoba cordova Cordovan corella corelli Coreopsis corf corfam corfu corgi coriaceous corinthians coriolis corium corkage corkwood cormel cormophyte corncockle corncrake corneille cornel cornelian cornetcy cornett cornflakes cornflour cornhusk corniculate cornmonger corno cornstone cornu cornute corody corollaceous coronach corot corozo correggio corregidor corrida Corriedale corrientes corrival corrodent corrody corrugator corsac corselet corsetry Cortes corticotrophin cortisol cortot corunna Corvallis corves corvine Corybant Corydalis Corydon corymb coryphaeus coryza cosa cosecant cosech coseismal cosenza cosgrave cosignatory cosmine cosmodrome cosmoid cosmopolis cosmotron cospar coss cossie Costa costard costate Costermansville costermonger costotomy costrel cotan cotemporary cotenant coterminosity coth cothurnus cotidal Cotinga cotonou cotopaxi cotquean Cotrubas cotswold/S cottbus cottian cottonade cottonweed cotyloid coucal couchant couchette coulee coulibiaca couloir coulometer/S coumarin coumarone counterattraction counterblast countercharge counterculture counterfactual counterglow counterinsurgency counterposition counterproof countershade/DGS countersubject countertype counterweigh counterword counterwork Couperin courante courantyne courbet courbevoie coureur courgette courlan Courland coursework courtelle courtrai Cousteau couthie couvade coverdale coverley coversed covin cowberry cowbind Cowell cowes cowfish cowherb Cowichan cowitch cowk cowley cowpat cowper cowskin coxa coxalgia coxcombry coxsackie coxswain coyotillo coz Craal crabbe crabmeat crabstick crackbrain/D cracket crackjaw cracknel cracksman cracow craddock cradlesong craigie craiova crake crambo cramoisy cran cranach cranage cranesbill Cranfield craniology craniometer craniometry craniotomy cranko crankpin cranmer crannog cranwell crapaud crapulent craquelure crashable crashaw crasis crassulaceous crassus cratch craunch crawley cray creamcups creamlaid creatinine credendum creel/S creepie cremator cremona crenel creodont creophagous crepitus Cressida cressy Creston cresylic Cretic creuse crewe cribellum Crichton cricoid crikey crim crimmer crimple crimplene cringle crinite crinkleroot Crinum criollo cripes crippen cripps criseyde crispate/N crispbread crispi crissum cristate cristobalite Croat croce crocein crocidolite Crockford crocoite croesus crombec cromlech Crompton Cronin cronk cronus Crookes Crookesmoor crosier crosscheck crosse crossfire crosshead crossjack Crossley crossopterygian crosspool crossruff crosstabulate/N crosstie/S crotone crotonic croute crowboot Crownland crownpiece crownwork croze crozier cru/S cruces crucian cruck cruiseway crumhorn crummock crunode crura crural crusado cruse cruyff crwth cryer cryocable cryohydrate cryometer cryophyte cryoplankton cryptaesthesia cryptanalyze cryptoclastic cryptocrystalline cryptogam Cryptomeria cryptozoic cryptozoite crystallographica ctenidium ctenoid ctenophore ctesiphon cubane cubeb Cuberli cubiculum cubital cucking cuckooflower cuckoopint cuculiform cudbear cudgerie cudweed cuenca cuernavaca cuesta cufic cuirass cuirassier cuisse culch culebra culet Culex culicid cullet cullis culloden cully culm culmiferous cultrate culverin cum cumae cumber cumbernauld cumbria Cumbrian cummerbund cumquat cumshaw cumulet cumuliform cumulonimbus cumulostratus cunaxa Cundick cuneal cuneo cunjevoi cupel cuppa cuprum curacy curare curarine curassow curch Curculio Curcuma curiosa curitiba curlpaper currajong currawong currycomb Curtana curtin Curvet curzon cusco Cuscus cusec cush cushat Cushitic cusk cuso customable custos custumal cutcherry Cuthbert cuticula cutin cutis cuttack cuttle cutty cuvette cuxhaven cuyp cuzco cwmbran cyan cyanamide cyanine cyanite cyanogen cyanosis cyanotype cybele cyber cybernate cyclamen cyclicity cycloalkane cyclograph cycloheptatrienyl cyclohexane cyclohexyl cyclonite cycloparaffin cyclopedia cyclopentadienyl cyclopentane cycloplegia cyclopropane cyclosis cyclostome cyclostyle cyclothymia cyclotomy cyder cydnus cylindroid cylix cyma cymar cymatium cymbalo cyme cymene cymogene cymograph cymoid cymophane cymose Cymric cymru cynghanedd cyperaceous cyprinid cyprinodont cyprinoid Cypripedium cypsela Cyrano Cyrenaic cyrenaica cyrene cystectomy cysticercoid cystine cystitis cystocarp cystocele cystoid cystolith cystoscope cystotomy cythera Cytherea cytidine cytochemical/Y cytogenesis cytokinesis cyton cytoplast cyzicus czardas czarevna Czechoslovak Czernowitz Czerny dabchick dabster dace dacha dachau dachsund dacia dacoit dacoity dacron dactylogram dactylography dactylology dado dadra dagan Dagenham Dagestan dagga Dago dagoba dagon daguerre dahna daimyo dairen daisycutter dak dal daladier dalai dalesman dalhousie dallapiccola dalmatia Daltonism Damara Damaraland Damascene Damien damietta damodar dampcourse dampier damselfish Damson Danaides dandie dandiprat Danegeld Danelaw Danio Danton Daphnis Dapsang daraf darbies Darby Dard Dardan dardanelles dardanus Dardic daresbury darfur darg dargah daric Darien dario dariole Darjeeling darkend darlan darmstadt darnel darnley darogha Darry dartboard Dartford Dartmoor dasheen dashiki dashpot dassie dasyure databank datary datatype datcha dato datolite datuk daube daubery daubigny daudet daugava daugavpils daumier davao Davidovich daw dawes dayak dayan dayboy dayfile dayflower dayfly dayspring deaconry deadstarting deakin dealfish dearchive/DGS deary deassignment deathtrap Deauville Deb debag debarred debe debrecen debs debus debye decanal decane decanedioic decani decanoic decapolis decastyle deccan decelerometer Decembrist decemvirate decenary decentralist decern decimetric decisionmaker declinometer declog/S declogged declogging decluster/DGS declutch/DGS decoke decompound decreet decurion decurrent decury dedal deek deemster Deepfreeze deergrass deerhound deferable defilade definiendum definiens deflocculate degassed degasses deglutinate deglutition degression degust dehisce dehiscent dehorn dehra dehydrogenase dehydrogenate dehydroretinol deianira deicide deictic deific deiform deil deipnosophist dejecta dekker dekko delacroix delagoa delaine delaunay dele deledda delegatory delgado Delian Delibes delimeter/S deliquescence delitescence Delius Deller Delorme Delos Delsarte deltiology demavend deme dement demerara demesne demeter demibastion demicanton demilune demimondaine demimonde demirel demirelief demirep demisemiquaver demist demivierge demivolt demob democritus Demogorgon demoiselle demonism demonolater demonolatry Demosthenes demould/DGS dempster demulsify demy denarius denary Denbighshire dendral dendrochronologist/S Dene dengue Denis denitrate deniz denning Dentalium dentex dentilabial dentilingual dentoid denudate deodand deodar deoxygenate departmentalism depasture dependant/S depicture deplume Depraz depressomotor depside depurative deraign derailleur derain derbent deregister deregulatory derestrict derisible dermatitis dermatogen dermatome dermatophyte dermatophytosis dermatoplasty dermis dermoid Dernesch dero derringer Derris derry derv derwent derwentwater desai desalinate deschamps deschool descriptional descriptivism deselect/DGS deselection/S desicate designational desinence deskill/DG desman desmid desmoid desmoulins despenser despoilation despoliation despumate desquamate dessalines dessau dessertspoon dessiatine dessicator/S deterge detmold detrend/DGS detrition detrude detruncate deurne deuteragonist deuteranope deuterogamy Deuteronomist Deuteronomistic Deuteronomy deutoplasm deutsch Deutschland Deutzia deva devanagari deventer Devereux devi devilfish Devonian dewan dewberry dewclaw dewsbury dextran dextrin dextroglucose dextrogyrate dextrorotation dextrorse dezhnev dhahran dhak dharna dhaulagiri dhobi dhole dhoti dhow diablerie Diablo diabolo diacaustic diacetylmorphine diacid diacidic diactinic diadelphous diadic diaeresis diagenesis diageotropism diaghilev diagraph diallage dialogism diamantine diamegnetism diamine Diamond diamondback diandrous dianetics dianoetic dianoia diapedesis diapente diaphoresis diaphoretic diaphototropism diaphysis diapir diarch dias diascope diastalsis diastase diastasis diastema diastyle diatessaron diathermancy diazine diazo diazole diazomethane diazonium dibasic dibbuk dibranchiate dibromide dicarbonyl dicast dicephalous dichasium dichlamydeous dichloroethanol dichromaticism dichromic dichroscope diclinous Dictaphone Dictograph dicynodont Didache diderot didgeridoo didymium didymous didynamous dieback diecious diefenbaker dien diencephalon dieppe diesis Dieskau diestock diffusivity digamy digestant digged dight digitalism digitiform digitoxin digitron dihydric dihydrofolate dikkop diktat dilatancy dilatant dilly dimashq dimethylformamide dimethylpropane dimetric dimissory Dimitrovo dimity dimorph dinar Dinaric dineric Dinesen Dingaan dinge dinitrobenzene dinitrogen dink Dinka dinkum dinky Dinnington Dinoceras dinoflagellate dinothere dio diodorus dioestrus diomede/S Dione Dionysia Dionysiac dionysius diophantus diopside dioptase dior Dioscuri dioxan dipeptide dipetalous diphenylamine diphosgene diphyletic diphyllous diphyodont diplegia diploblastic diplocardiac diplococcus Diplodocus diplont diplopia diplopod diplosis diplostemonous dipnoan dippy diprotodont dipteral dipteran dipterocarpaceous dipterous Dirham diriment dirk dirndl disaccredit disafforest disbranch disbud discalced disciplinant disciplinarianism discobolus discommodity discommon disconsider discotheque discovert disembogue disembroil disenable disentail disentitle disentomb disentwine disepalous disforest dishpan dishtowel disject disjunctor/S disoperation dispend dispermous dispersability dispersable dispersity dispersoid displayable disproven dissappear disseminule dissentious dissepiment distich distichous distrainee distringas distrito distrubuted dita ditheism dithionite dithionous dithyramb dithyrambic dittander dittany dittography Ditzel diu diuresis div divaricator diversiform diverticulitis diverticulosis diverticulum divi divinylbenzene divisibly divulgate diyarbakir dizen djailolo djaja djajapura djambi djebel djerba Djibouti djinni djokjakarta DMF Dneprodzerzhinsk Dnepropetrovsk Dniester doab dobby dobla dobro dobruja dobsonfly Docetism dockland/S doddle dodecagon dodecanese dodecanoic dodecasyllable dodgem Dodgson dodoma Dodona doek doenitz Doese doeskin dogfishs dogger doggo dogman dogsbody dogvane dogy doh doha Dohnanyi Dol dolabriform dolby dolerite dolichocephalic Dolichosaurus doline dollarbird dollarfish dollfuss dolmas dolmen dolmetsch dolorimetry doloroso dom domett dominee Dominica dominie dominium dominoes Domitian Donar donatello Donath Donatist donatus donau donbass Doncaster Donegal Donetsk donga Dongola Donizetti donjon donne donnert donny doodah doorframe doorn doornik dopa Dopper Dor Dorati dordogne dordrecht Dorian Dorking dormobile Dormoy dornbirn dornick Doronicum dorp dorpat dorsad dorsiferous dorsigrade dorsiventral dorsoventral dorsum dort dorty dory dosshouse dost dotation dottle douai douala douay doublure doubs douc douceur doukhobors doum doura dourine douro douroucouli dovap dowable dowding dowery Dowland downcome/R downhole downpatrick downpipe downthrow downwash downweight/DG downwell dowsabel Dowson doxastic doxographer doxology doxy doyen doyley DPP drabbet Dracaena Draconic draff draggletailed draghound dragoman dragonnade dragonroot dragrope drail Drakensberg dramatis drammen drancy drava drayhorse Drayton dree dreggy dreich dreiser drenthe dresden Dressen drillstock drin drinkwater dripstone drogheda drogue droit dromond Dronfield drongo/S droob dropsonde droshky druffen drunkeness drupelet Druse drysdale drystone Duala dubai dubbin Dubonnet dubrovnik dubuffet duccio duchamp dudeen duello duero dufy duhamel duiker Duisburg duka Dukas dukhobors dulciana Dulcinea dulia dulosis dumas Dumbarton dumbell/S dumfries dumortierite dumyat duna/I dunaj dunant Dunbarton dundalk dundee dunfermline dungas dungeness dunite duniwassal Dunker dunkerque dunlin dunnage dunnakin dunnite dunno dunnock dunny dunois dunoon dunsany dunsinane dunstable dunstan dunt duntroon dunwoody duodenary duodenitis duotone dup duparc dupatta dupleix duplet dupondius duppy Dupre duque Duralumin duramen durative durazzo Durban durbar durex durgah Durkheim durmast duro Duroc durra durst Durufle durum durzi dushanbe dustability dustable dustcart/S dustmen dustsheet/S Dutoit duumvir duumvirate duvalier duvet dux Duyker Dvandva Dvina Dvinsk Dvorsky dwale DWT Dyak dybbuk dyfed dykes dynameter dynamicism dynamoelectric Dyonisian dyscrasia dysgraphia dysmenorrhoea dysphemism dyspnoea dysteleology dysthymia dysuria dytiscid dyula Dzaudzhikau Dzerzhinsk Dzhambul Dziggetai Dzongka Dzungaria Eaglestone Eaglewood ealdorman ealing eanes earbash earhart earlap earless earom earthlight earthman earthmove earthnut Eastbourne Eastertide Eastleigh eastmost eatage Ebert Ebling/M eblis ebon ebonite ebracteate ebullioscopy eburnation ECAD ecbatana ecbolic ecce ecchymosis ecclesall ecclesia Ecclesiastes Ecclesiasticus ecclesiolatry eccrinology ecevit echard Echeveria echinate echinococcus echinoid echinus echoism echolalia echopraxia eck eckhart eclampsia eclipsis eclogite ecocide ecowas ecstacy ecthyma ectocrine ectoenzyme ectophyte ectopia ectoproct ectosarc ectype edale edam Edda Eddington eddo eddystone ede edessa edgehill edgeworth edile edirne Edo edom Edomite educatory educt Edwardine eelpout eelworm eff effable effendi efficency effusiometer Efik efta eftsoons Egbert Egeria egest egesta Egham egis Egmont Ehrenburg Eichendorff Eiffel eigenfrequency/S eigenstructure eigensystem/S eiger eightsome Eijkman Eikon Eilat Eindhoven Einkorn eirenic eirenicon eisegesis Eisenach Eisenstadt Eisenstein eisk Eisteddfod Ekaterinburg Ekaterinodar Ekaterinoslav elaeoptene elagabalus elam Elamite eland elasmobranch elasmosaur elastance elasticate/DGS elastoplast elat elaterid elaterin elaterium elbe Elbert elbrus elburz eld eldo elea Eleatic elecampane electrochemist/S electrograph electromerism electronvolt electrophone electrostriction electrotechnology electrotonus electrovalency electroviscous eleemosynary eleia elemi elenchus eleoptene Eleusinian eleusis Elfland elflock elgon Elia/S elidible elis Elisabethville Elisavetgrad Elisavetpol elkhound Ellesmere Ellice Elohim Elohist eloign elsan Elsass elusion Elvira elyot embolus embow embrectomy embryectomy embus emden emesis emetine emf Emirates emiscan emmen emmenagogue Emmenthal emmer Emmet emmetropia Emmy emotivism empale empassion empedocles emphasing empolder Empson empyema empyrean empyreuma emulsoid enantiomorph enarthrosis enate encaenia enceladus encephalin encephaloma encephalomyelitis enchiridion enchondroma enchorial encomiast encrinite Endamoeba enderby endo endocarditis endocardium endocarp endocentric endocranium endoneurium endosome endostosis endothecium endothelioma endothelium endover endplate endplay Endrich Endymion energid energumen Enesco enface enfeoff enfilade enforcable/U engadine Engel Englishism Englishry engrail eniwetok ennage ennead enneagon enneahedron ennerdale ennervation ennis enniskillen ennius enounce enow enphytotic enschede ensor Entamoeba entasis entebbe entelechy entellus enteritis enterokinase enteron enterostomy enterotomy enthetic enthymeme entoblast entomic entomostracan entophyte entopic entozoic entozoon entrammel entrechat entremets entresol entryism entryist/S entryname/S entrypoint/S enugu enure enuresis enver enwomb enwreath enzed enzootic enzymolysis eobiont eogene eolian eolic eolipile eolith eolithic eonian eonic eos eosin eosinophil Eozoic epact epaminondas eparch eparchy epencephalon epenthesis epergne epexegesis ephah ephebe Ephedra Ephemera ephemeron ephesians ephod ephor Ephraimite epiblast epiboly epicalyx epicanthus epicedium epiclesis epicontinental epicotyl epicrisis epicritic epictetus epicycloidal epidaurus epideictic epidiascope epididymis epidote epidural epifocal epigastrium epigeal epigene epigenous epigeous epiglottis epigone Epigoni epigynous epilate epileptoid epilimnion epimere epimerism epimorphosis epimysium epinasty epinephrine epineurium epiphenomenalism epiphenomenon epiphragm epiphytotic epirogeny epirus episcopacy Episcopalism episematic epispastic epistasis epistaxis episternum epithalamium epithelioma epizoic epizoon epizootic eponym eponymy epos epping eprom/S epyllion Equatorial equifrequent/Y equilibrant equimolecular equipartition Equisetum equites equuleus eradiate Erastianism erciyas erebus Erechtheum Erechtheus eremite Erenburg erepsin erethism erevan erfurt ergastoplasm ergatocracy erhard Erica ericaceous Ericson eridanus Erin erinaceous eringo erinyes eris eristic erith Eritrea erivan erk erlang/NR erlking Ermanaric Ermler erne erotema erotology erotomania errhine errupt/V Erse erst erubescence eruct erumpent Erymanthian erymanthus eryngo erysipelas erysipeloid erythrism erythrite erythritol erythroblast erythrocyte erythrocytometer erythromycin erythropoiesis erzgebirge erzurum esaki esau esbjerg Escallonia escalope escaut eschalot escharotic eschatology Escherichia escoffier escolar Escorial escribe escuage escudo escurial esdraelon Esdras eserine esher Eskilstuna esky espalier esparto Esperanto espoo Esquiline esquimau esro essaouira Essene essequibo essonite essonne estancia este esterase esterify esthonia estienne estipulate estival estivate/N Estonian estoppel estovers estrade estragon estreat estremadura estrin etaerio etalon etamine etaoin etchant eteocles eterne etesian Eth Ethelbert Ethelred ethene etherege etherify Ethiopian ethmoid ethnarch ethnobotany ethnogeny ethonone ethoxide ethoxyethane ethylbenzene ethyne etiolate etna Eton etymon etzel eubacteria euboea eucaine eucalyptol Eucharis euchlorine eucken eudemon eudemonia eudemonics eudiometer eudoxus eugenol eulachon eulogia Euonymus Eupatorium eupatrid eupen eupepsia euphausiid euphonic euphorbiaceous euphrasy euphroe Euphrosyne eupnoea euratom eure eurhythmy euripus Euroclydon Eurodollar Euromarket Eurovision Eurus Euryale eurypterid Eurystheus eurythermal eurytropic eusebius eusporangiate Eustachian eutectoid euxenite Euxine evacuant evaginate evanish evaporable evaporimeter/S Everton Evertor Evesham evite Evonymus Ewing exanthema exarate exarch exarchate Excalibur excaudate exclaustration exeat executability exedra exemplum exequatur exequies exergue exigible eximious exine exitance Exmoor exo exocarp exocentric exoderm exodontics Exon exonym exophthalmic exophthalmos exoplasm exorable exosystem/S expellant experientialism explicite/Y explicity explictly exponible expresso exsanguine exsect exstrophy extention/S extine extinguishant extracanonical extrados extraposition extremadura exuviae exuviate eyas eyebath eyeblack eyehook eyeleteer eyetie eyot/S eyra eysenck fab fabaceous Fabianism fabians fabius fabliau fabre Fabrikoid facebar facetiae facia facilties Factice faculae fadden fadge faecal faeces faenza faeroes faeroese faff fagaceous fahlband faial faille fairbanks fairweather fairyfloss Faisal faiyum Faizabad Falange falbala falchion falconiform falconine faldstool falerii Faliscan Falkirk Falkner Falla fallal fallfish falsety/S falsework falsies Falstaffian falster faltboat falun famagusta familist famulus fanagalo fandangle fanfani fanfaronade fangio fango fankle fanon fantail fantasm fantast Fanti fantoccini fantom faqir faradic faradism farandole farci farcy fard fardel Fareham farinaceous farinose farl Farnborough Farnese Farnesol Farnham Faroe/S Farouk Farquhar Farrago farrier farriery farside fart Farthingale Fartlek Faruk fasciate fascine fash fashoda Fassbaender Fassbinder fastback fastigiate fatah Fathometer fatidic Fatimid Fatshan Faubourg faucal fauces faugh faunus Faure fauteuil fauve faveolate favrile favus Fayal fayalite fayum feal fearnought featheredge featherstitch feaze febricity febrifacient febrifuge fechner feck fecula Fedoseyev feedbag feeze Feigin feininger Feisal felafel fellmonger felloe felo felucca Feme fencible fenestella fenestra Fenian Fenice fennelflower Fenrir feoff feoffee feoffment ferbam fere feretory fergana Fergus feria fermanagh fernandel Fernandi Ferrara ferrari ferreous ferricyanic ferricyanide ferrochromium ferroconcrete ferrocyanic ferrocyanide ferrofluid ferrol ferromagnesian ferromanganese ferrosilicon ferula ferule Fescennine fesse festal festschrift fetial feticide fetiparous fetterlock Feuchtwanger Feuerbach Feuilleton feverfew feverwort feydeau Fezzan fiacre Fianna fibrefill fibriform fibrinogen fibrinolysin fibrinolysis fibrinous fibro fibrocement fibroid fibroin fibroma fibrositis fichte ficino ficticious fid fiddlewood fideicommissary fideicommissum fidelism fidge fidus fieldmouse fieldpiece fieldsman fieri fiesole fifa figuline figurant figwort filable filariasis filecard filefish filespace filestore filiate filicide fillagree fillmore filmset filoplume filose filoselle fimble finable finalism finchley finfoot fingerbreadth fingermark/DGS fingerstall/S fingo finisterre finitary finnan finner finney Finnic finnmark fino finochio Finsen Finsteraarhorn fiorin fipple Firbank firdausi fireback firebomb firebrat firecrest firedog firedrake firenze firepan firestorm firethorn firewarden firewater firkin firry fishbolt fishfinger fishgig fishskin fissipalmate fissiped fissirostral fistmele fistula fistulous fitchew fittipaldi fitzsimmons fiume fivepenny fivepins fizgig flabellum flagelliform flagellum flaggy flagrante flagstad flambeau flamborough flamelet/S Flamig flamingoes Flaminian flamininus flaminius flamsteed flanch flannelette flashcube/S flasket flatette flatfish/S flatlet/S flatling flatmate/S flatways flaubert flaunch flavescent flavine flavone flavopurpurin flavorous flaxman fleabite/S fleam fleapit/S fledgy Fleetwood Flensburg flense Fletcher Fletcherism fleurette fleury flexitime flexo fley fleysome flinders Flintshire flitch flite floccose flocculant/S flocculent flocculus floccus flodden flong floreated flores florey floribunda florilegium florio flory flos flotow flowability flowerbed flowerless Flugelhorn fluorene fluoric fluorometer fluorophore fluoroscope fluoroscopy fluviomarine fluxmeter/S flyback flyblow flybook flyleaves Flysch flyte flytrap/S foch fock foehn foetal foetation foeticide foetor fogbow/S fogdog foggia foie foin Foism Foison Fokine Fokker foliar folie foliolate foliose foliot/S folium folkestone folketing folkmoot folliculin folsom fonda fondant/S fonseca fontanelle fonteyn Foochow footplate/S footsie footslogged footslogging footstalk footstock footworn foraminifer forasmuch forby forcemeat fordone forecourse forecourt/S foredo foredoom/D forefend foregut forehock foreshock forespent forestaysail foretooth foretop foretriangle forewent forewind forewing forfar forficate forgat forme formfeed/S formicary formicate/N formulism formwork Fornax fornenst fornix Forrester forsee forseen/U forspeak forster forsterite Forsythia fortaleza fortepiano fortis fortissimo fortuitism fortuna forwhy forzando fosbury fossa fosse fossette fossick fotheringhay foucault foucquet foulard Fouquet Fourierism Fournet Fournier fourpence fourpenny foveola fowey fowliang foxfire foyboat FPS fractocumulus fractostratus frae fraenum fragonard fraise fraktur framboesia Francescatti Franck francolin Franconia Franconian Francophile Francophobe Francophone franger frangipane frankalmoign Frankenstein Frankish frass fratchy Frauenfeld Fraunhofer fraxinella Frazer Frazil Freccia Freda Fredericia Frederiksberg Fredrikstad freebie freedomites freemartin freemason freesheet/S Freesia Freiburg freightliner fremantle fremitus Frenchy Freni frenulum frenum Frescobaldi Freytag friarbird Fribourg Fricandeau fricasee Frigg Frijol fringilline frippet Frisch Frisco frisket Friuli Friulian Frizette Frobisher froe froebel frogfish frogged frogging froghopper frogmarch frogmouth frogspawn froissart frome Froment fromenty fromm fronde frondescence frons frontenac frontlet frontrunner frontwards frore froude frow frowst fructiferous frugivorous fruitarian frumentaceous frumenty frunze frustule frutescent Ft fuad fubsy fuchsin fuckwit fucoid Fuegian fugard fugato fugger fugio fukien fukuda fukuoka fukushima fula fulani fulgurite Fulham fulmar fulminic fulminous fulvous fumaric fumatorium fumatory fumitory funchal fundi fundus fundy funfair fungistat funicle furan furfur furfuraceous furfuraldehyde furfuran furioso furmenty furnivall furphy furred fusain fuscous fushih fushun fusionism/I fustanella fustic futtock Futuna futurist/S futurology fyke fylde fylfot fyn fyrd Fyzabad gabar gabelle gaberlunzie gabion gabionade gablet gabo gabor gaborone gaby Gadarene gaddafi gadhelic gadid gadoid gadolinite gadroon gadsden gaea gaekwar Gael Gaeltacht gaffsail Gagarin gagauzi gahnite Gaia gaikwar gaillard Gainsborough gaiseric gaitskell gaius galactagogue galactometer galactopoietic Galago galah galangal galantine galanty galashiels galata galatians galba galbanum galbraith galea Galenic Galenical Galenism Galibi Galician galileo galimatias galingale galiot galipot Galla galle galleass gallfly gallia galliambic galliard Gallic Gallican Gallicanism gallice Gallicism galligaskins gallimaufry gallinacean gallinaceous gallinas galliot gallipoli gallipot galliwasp gallnut galloglass galloon galloot gallous galoot galop galsworthy Galton galvanoscope galvanostat galvanotropism galvo Galwegian galyak gama gamba gambado Gambeson Gambetta Gambier Gamboge gambrel gambrinus gamelan gametangium gametocyte gametogenesis gametophore gametophyte gammadion gammer gamogenesis gamopetalous gamophyllous gamosepalous gamp gan gance gand gandalf gandhi Gandhiism gandy gandzha ganesa Ganga gangbang gangrel gangtok gangue ganister ganja ganof ganoid gansey gapeworm gapped Garamond garand garbanzo garbo garboard garboil gard gardant garderobe gardiner garfish garganey Gargantua garget garnierite garonne garpike garrick Garrya Gascon gasconade gaselier gasiform gaskell gaskin gasman gasohol gasometry Gaspar gasteropod gastralgia gastroenteric gastroenteritis gastroenterology gastroenterostomy gastrolith gastrology gastropod gastroscope gastrostomy gastrotomy gastrovascular gastrula gatehouse Gates gateshead gath Gatha gatling gatt Gaucho gauffer gaugeing gauhati Gaulish Gaullist Gaultheria gaumless gauntry gaup gaussmeter gautama gautier gavage gavial gawp gaya gayomart Gaza gazankulu gazehound gaziantep gazump gdynia gean geanticline gearwheel geber gec gedact gedanken Gedda geelong gefilte Gehenna gehlenite Geisel Geissler gelada gelatinoid Gelderland gelibolu gell gelligaer Gelsemium Gelsenkirchen gelt Gemara gemmiparous gemmulation gemmule gemology gemot gen/S genappe Gencer Gendron generalism generalissimo genet Genevan Genf Genfersee Genghis genip genipap genitor genitourinary genizah genk Genoese Genova genro genseric genstat gentianaceous gentianella Gentoo genu geodynamics geognosy geoid geomechanics geometrid geophagy Geordie Georgette geosphere geostatic/S geosyncline geotaxis geotectonic gera gerah geraniaceous geranial geraniol geratology gerent gerfalcon gerlachovka germander germanicus Germanism Germanophile Germanophobe germanous germinant germiston gerona geronimo gerontological gers geryon gesso gest gestatorial gesualdo Gethsemane Geum gey geyserite gezira Gharial Gharry ghat/S Ghaut Ghazi Ghazzah Gheber Gherao Ghiaurov Ghiberti Ghibli Ghillie Ghirlandaio Ghitalla Giacometti gibbsite gibeon Gibeonite gibli gibran gid gide gidgee gie Gielgud Gierek Giessen giftwrap gifu gigaherz gigantomachy gigli Gigout gigue Gilbertian Gileadite Gilels gilet gilgai gilgamesh gillies Gillingham gillion gillray gillyflower gilsonite gilthead gimcrack gimel gimme gingiva gingivitis gink ginnel giorgione giotto gip gipon Gippsland Gippy giraldus girandole Giraud Giraudoux girdlecake girgenti gironde gironny girosol gisarme Gisborne Giscard gish gissing gittern Giulini Giulio giusto glabella glabrous glacialist gladbeck gladdon gladiate gladrags Glagolitic glaikit glair glaive Glamorgan glandule glarus glaser glassman glastonbury glauce glauconite Glazunov glebe gleeman gleet gleiwitz glencoe glendower Glengarry glenoid glenrothes glia gliadin Glickman Glinka glissando glister gliwice globate globeflower Globigerina globin globoid globose globuliferous glochidium glomerate/N glomerule glomerulus glomma Glorioso glossa glossator glossectomy glosseme glossitis glossography glossology glossopharyngeal glottic Gloucestershire Gloxinia gloze glucagon glucinum Gluck glucocorticord gluconeogenesis glucoprotein glucoside glucosuria glume gluon glutelin gluteus glyceric glycerophosphate glycogenesis glycolic glycolysis glyconeogenesis glycoside glycosuria glyoxaline glyphography glyptal glyptic/S glyptodont glyptography gnatcatcher gnathic gnathion gnathite gnathonic gnocchi gnosis goalmouth goanna goatfish goatherd goatsbeard goatskin goatsucker gobbet Gobbi Gobelin gobi gobioid gobstopper goby godard godavari godefroy goderich Godesberg Godetia Godiva Godolphin godown godroon Godspeed Godthaab Godunov Goebbels gogga gogglebox goglet Gogol gogra Goidel Golconda goldarn goldcrest goldeye goldilocks Goldmark goldoni goldschmidt goldthread Golgi Golgotha goliard goliardery golliwog gollop goloshes Gomberg gombroon gomel gomorrah gompers gomphosis gomulka gomuti goncourt Gond gondar Gondi Gondwanaland gonfalon gonfalonier gongola Gongorism gonidium goniometer gonk gonna gonococcus gonocyte gonof gonophore gonopore googly gook goole gooney goop/MS goosander goosefoot goosegog goosegrass goosy gopak gorakhpur goral gorbals gorblimey Gorcock goreng gorgerin gorgias gorgoneion Gorgonzola gorica gorizia Gorki Gorlovka gormless gorsedd Goshen Gosplan gosport gosse gossipmonger/MS gossoon goster gotama Goth Gotha Gothenburg/M Gotland/M gotta gouache Goucher Gounod gourami Gourmont goutweed/M gowan gower gowk gowon goy/M Goya/M Graafian Graben Gracchus gracile gracioso graduand gradus Graeae graecism graffito Graffman/M grahame graiae Graian grainger grallatorial grama gramarye gramercy gramineous graminivorous grammatology grampian grampus granada granadilla granados grandaunt grandmaster/S granduncle/S grangemouth granicus graniteware granitite granodiorite granolith granophyre granta Granth granuloma granulose graphomotor grappa grappelli graptolite grasmere grassfinch grasshook grassquit grassroot gratian grattan gratulate graupel grav gravamen gravenhage gravettian gravimetrical graz Grecism gree greegree greeley Green greenaway greenbottle greenbrier greenfinch greenfly greengage Greenham greenhead greenheart greenock greenockite greensand greenshank greensickness greenstick greenstone greenstuff Greisen gremial Grenada Grenadines gressorial Gretna greuze greyback greybeard greyhen greystones greywacke gribble griddlecake gridfile/S Grierson Griffe Griffon Grig Grigioni Grignard Grikwa grillparzer grilse grimalkin grimsby Grindelia grindelwald grindery Griqua Griqualand grisaille griseous grisette grishun griskin Grison grisons grivation grivet grockle grodno grogram Grolier gromyko groningen gropius gros grosgrain grosseteste grosswardein grosz grot grote grotius groundage groundsill groundsman groundspeed groundswell groupwork grouty grovet groyne grozing grozny grugru grumous Grundheber grundy Grus grysbok guacharo guaco guadalajara guadalcanal guadalquivir Guadeloupe guadiana guaiacum guan guanabara guanaco guanajuato guanase Guarani guardafui guarneri guayaquil guayule gubbins gudeance gudrun guelders guenon Guernica Guernsey Guerrero guesthouse Guevara Guido guidon guienne Guildford Guillaume guilloche Guillou Guinea Guinness guipure guiscard guitarfish guizot gujranwala gulag/S gular gulbenkian gulden gulfweed gumma gummite gummosis gummous gumshield gumtree gunge gunnel gunpaper gunstock gunter guntur gunyah gur gurdwara gurgitation gurglet gurjun gurkhali Gurmukhi gurnard Gurzenich gustavo guthrun gutta guv guyenne gwalior gwelo gwent gwynedd gwyniad gyani gybe gymnasiarch gymnasiast gymslip gynaeceum gynaecocracy gynaecoid gynaecomastia gynandrous gynarchy gynecium gyniatrics gynophore Gypsophila gyronny gyrose gyrostatic/S gyve Habsburg habu hachure hackamore hackbut hadaway Haddington hadhramaut Hadith hadj hadji hadrosaur hae haecceity haeckel haem haemachrome haemacytometer haemagglutinate haemagglutinin haemagogue haemal haematein haematemesis haematic haematin haematinic haematite haematoblast haematocele haematocrit haematocryal haematogenesis haematogenous haematoid haematological haematology haematolysis haematoma haematopoiesis haematosis haematothermal haematoxylin Haematoxylon haematozoon haematuria haemic haemin haemochrome haemocoel haemocyanin haemocyte haemocytometer haemodialysis haemoflagellate haemoglobin haemoglobinuria haemoid haemolysin haemolysis haemophile haemophilia haemophiliac haemophilic haemopoiesis haemoptysis haemorrhage haemorrhagic haemorrhoidectomy haemorrhoids haemostasis haemostat haemostatic haeres haftarah hagar hagbut Hagegard hagfish haggadah haggai hagiarchy hagiocracy Hagiographa hagiographer hagiolatry hagiology hagioscope hahnemann Haida haidar haig haik haile Hainan hainaut haiphong hairball hairgrip hairif hairnet hairtail hairweaving hairworm Haitink hajj hake Hakea hakim hakluyt hakodate halafian halakah halation halberd halcyone haldane haleakala halesowen halfbeak halfwit halicarnassus hallah hallam Hallamshire Halle hallel Hallowmas Hallstatt hallux halm halmahera halmstad halobiont haloid halophyte Halpern hals haltemprice hama hamadryad hamadryas hamamatsu hamamelidaceous hambletonian hame hamelin hameln hamersley hamhung hamilcar Hamite Hamitic hamm hammerfest hammersmith hammerstein hammurabi hampden hampstead hamshackle hamsun hamulus hamza hanaper hanau handbarrow handbell handbrake handfeed handleability Handley handstroke hangbird hangchow hankerchief hankow hannover hanratty Hansard Hanseatic Hanuman Hanyang hapax haphtarah haplite haplography haplosis hapteron haptic hapto haptotropism harakiri harald harambee harappa harar hardecanute Hardenberg hardhack hardicanute hardie Hardy harebell hargeisa Hargreaves haricot harikari Haringey Harl Harlow harmattan harmonist harmonograph/S harmotome Harmsworth harney harpenden Harper harquebus harquebusier harrar Harrild harrogate Harrovian harslet hartal harte hartebeest harthacanute hartlepool hartnell hartree hartshead harun haruspex harvestmen harwell harwich haryana harz hasa hasdrubal hashemite hask haslet hassan hasselt hatchback Hathor hatpin hatshepsut haubergeon hauberk haugh haulm Hauptmann hauraki haustellum haustorium havant havel havelock Haversian havildar havre hawes hawfinch hawhaw Hawick hawkbill hawksbill hawkweed haworth hawse hawsehole hawsepipe haybox hazelhen hazlitt headlamp headrace headrail headreach headscarf headsquare headward/S heald/S Heard heartworm heathberry heathfowl heaume Heaviside hebbel hebephrenia hebetate hebetic Hebraism Hebraist Hebron heckelphone hectocotylus hedjaz heehaw heelpost heenan heerlen heffer hegira hegumen heh Heidemann/MS heiduc Heifetz heilbronn heilungkiang heirdom heitiki heitler hejira hekate hekla hel Helgoland Helianthus helichrysum helicline helicograph Heligoland Heliogabalus heliolithic Helios heliotherapy heliotropin heliotype Helladic Hellas hellbent Helldiver helle/S Helleborine Hellenism Hellenist Hellenistic hellery helmand helminth helminthiasis helminthic helminthology helmont helpmann helsingborg helvellyn Helvetia Helvetian Helvetic Helvetii hemel hemelytron hemeralopia hemialgia hemianopsia hemicellulose hemichordate hemicycle hemidemisemiquaver hemielytron hemipode hemipteran hemipterous hemispheroid hemistich hemiterpene Hemmings hemstitch henbit hencoop hendecagon hendecahedron henge hengelo hengist henhouse Henie Henryson Henslowe Henze Hephaestus hepplewhite hepta heptad heptadecanoic heptahedron heptamerous heptangular heptarchy heptastich Heptateuch heptatriene heptavalent heptose hepworth heraclea heracles Heraclid herakleion Herat herby hercegovina herculaneum Hercynian hereat heredes hereditable hereditist Herefordshire hereinto Herero heresiarch hereward heriot herisau herl herm hermannstadt Hermaphroditus hermon hermosillo hermoupolis herne herniorrhaphy herod herodias herophilus herrick herriot herstmonceux Hertford Hertfordshire Hertzian Herzegovina Herzl Herzog hesiod Hesione Hesperia Hesperian Hesperides hesperidin hesperidium hestia Hesychast Het hetaera hetaerism heterocercal heterochromatic heterochromosome heterochromous heteroclite heterodactyl heterodont heterogenous heterography heterogynous heterolecithal heterologous heteromerous heteronym Heteroousian heteroplasty heterosporous heterostyly heterotaxis heterothallic heterotopia hevelius hevesy hexachloroethane hexachord hexacosanoic hexadecane hexaemeron hexamerous hexangular hexapla hexapody hexastich hexastyle Hexateuch hexavalent hexene hexone hexosan hexose hexyl heyduck heyerdahl Heynis Heysham Hezekiah Hialeah hibernaculum Hibernicism hic Hickox hiddenite Hideyoshi Hieland hiemal hieracosphinx hierocracy hierodule hierogram hierology hierophant highchair highjack highveld hijaz hijinks Hilary Hildesheim hilla hillery hillfort hilliard hillingdon hilus hilversum himachal himalayas himeji himmler Himyarite Himyaritic hin Hinayana hinckley Hindenburg hindgut hindoo hindustan hinny hinshelwood hipparch hipparchus Hippeastrum Hippocrene hippolyta Hippolytus Hippomenes hiragana hircine hiri hirohito hiroshige Hirudin hirundine Hispania Hispanicism Hispaniola hispid histogen histogenesis histoid histone historiated hitparade Hittite hmso hoactzin hoad hoarhound hoatching hoatzin hobbema Hobbism Hochheimer hochhuth hockney Hocktide hodden hodeida Hodgson hodman hodometer hoek Hoene hofei Hofmann hofmannsthal hofuf hogarth hogg/D hogmanay hognosed hogtie hogue hogweed hohenlinden hohenlohe hohenstaufen Hohenzollern hoick/S hoiden hokkaido hokku hokusai holarctic holbein holinshed holkar Hollandia Holliday Holliger holmic holocaine holofernes holoplankton holothurian holp/N hols holyhead holyoake holytide Hom homebuild homecome homecraft homeopaths homeown homocentric homochromous homocyclic homodont homogenous Homoiousian homotaxis homothermal honan honecker honegger honewort honeybunch honeysucker Hong honiara Honiton hoofbound hoogh/Y hooke hooknose hoopoe/S hoovered hoovering hoovers hopeh hoplology hoppus hopsack horae horal Horatian Horatius hordein horeb Horenstein horme hormuz hornbook hornby Horne hornfels hornstone horologe horologium horoscopy horripilation horsa horsebox horseboxs horseleech/S horseriding horst horta Hortense horthy horticulturalist hortus hosea hosier hospitalet hospitaller hospodar Hosta hosteller hostelling hostie hotien hotplate hotpot hotspur hottie Houdan houdon houmous hounslow housebuilding housecarl housel houseleek/S houseline housemaster/S housman Houstonia houting hovercraft hoverport hovertrain/S howdah howitzer Howland howlet howrah howtowdie hoxha Hoya hoylake hradec hrvatska hsi hsian hsiang hsining hsinking hua huambo huang hubble hubli huckel huckle hucklebone Huddersfield Huddleston Hudibrastic huelva huesca hufuf huggermugger hughie Huguenot huhehot hula hulme humber humberside humblebee Humperdinck hunan hungnam Hunnish huns huntingdon Huntingdonshire hunyadi huon hupeh huppah hurds hurstmonceux hus husain husein hushaby huss hussein husserl Hussite hutchie hutment hutu Huybrechts huygens huysmans hwang hwyl Hyacinthus hydantoin hydathode hydatid hyderabad hydnocarpate hydnocarpic hydracid hydrastinine Hydrastis hydrazoic hydria hydriodic hydrobromic hydrocele hydrocellulose hydrocoral hydrogenolysis hydrogenous hydrograph hydrolyte hydromedusa hydromel hydrometallurgy hydrometeor hydronaut hydrophilous hydroquinone Hydroski hydrostat hydrotaxis hydrotherapeutics hydroxonium hydroxylamine Hydrus hyetograph hyetography Hygeia hygristor hygrophilous hygrostat hyksos hylomorphism hylophagous hylotheism hylozoism hymenopteran hymenopterous hymettus hymnist Hynninen hyoid hyoscyamine Hyoscyamus hypabyssal hypaesthesia hypaethral hypallage hypanthium hyperaemia hyperbaton hypercatalectic hypercorrection hyperdulia hyperextension hyperfocal hyperglycaemia hyperion hyperkinesia hypermarket hyperpnoea hyperpyrexia hyperstability hyperstable hypersthene hyperterm/S hypesthesia hypethral hyphae hypnology hypnopaedia hypnopompic Hypnos hypoacidity hypoblast hypochondrium hypocotyl hypoderm hypoeutectic hypogastrium hypogeal hypogene hypogenous hypogeous hypogeum hypoglossal hypoglycaemia hypognathous hypogynous hypoid hypolimnion hypomania hyponasty hyponitrite hyponitrous hypophosphate hypophosphite hypophosphoric hypophosphorous hypophyge hypophysis hypopituitarism hypoplasia hypopnoea hyposthenia hypostyle hypotaxis hypothec hypoxanthine hyracoid hyrax hyrcania Hyson hyssop hysterogenic hysteroid hysterotomy hystricomorph iamb Iapetus iata iatric ibadan ibarruri ibert ibibio ibiza Ibo Ibrahim Icaria Icarian Iceni ichang ichinomiya ichnography ichnology ichor ichthyic ichthyoid ichthyolite ichthyology ichthyophagous Ichthyornis ichthyosaur ichthyosis iconium iconomatic iconostasis icterus ictinus ictus ideatum identifers identikit ideosyncrasy/S idioblast idiopathy idiophone idiosyncracy/S Ido idocrase idolum Idomeneus Idun Igbo Ignatius ignis ignitability ignoratio ignotum Igorot iguanodon ihram Ijssel Ijsselmeer ikan ikebana ikeja ikhnaton ilea ileac ileitis ileostomy ilesha ileus ilex Ilford ilia iliamna iligan ilion ilium Ilkeston ilkley illampu illawarra illich illimani illinium illocution illude illyria Illyrian illyricum ilmen iloilo ilorin imagen Imai imbros iminourea Immanuel Immelmann immersionism Immingham immortelle immoveables immunoglobulin immunomicrosphere immunoreaction impanation imparipinnate imparisyllabic impaste impasto Impatiens impearl impeccant impedimenta impennate imperium imperscriptible impetigo imphal impi implacental impolder impolicy imponderabilia imponent imposable impostume impower impresa imprescriptible impressure imprest improbity imroz inappellable inapprehensive inarch inartificial Inbal inbeing incaparina incapsulate incardinate incensory inchmeal incipit incisure incluse incomprehensive incunabula Ind indaba indeces indene indetermine indexation Indiaman Indic indigestive indigoid indiscernability indo Indologist indophenol indore indorsee indoxyl indra indre Indris induplicate indusium indy inearth inequable inerrable inescutcheon inessive inextirpable infallibilism infante infare infeudation infibulate infight infill infold infracostal infralapsarian infulae infundibuliform infundibulum infuscate inge ingeminate ingenerate ingesta ingleborough inglenook ingoing ingolstadt ingraft ingravescent ingres ingulf Ingush inhambane inhaul inhesion inkberry inkblot Inkerman inlace inmesh inmigrant inniskilling innoxious innsbruck Innuit innumerate innutrition inoculable inodorous inofficious inqilab insalivate inscape insectarium Inselberg inshrine insipience insnare insomuch instalation installant inswing integrant integratable Intelsat intendancy interagency interbedded interchannel interconnectable interconsole interflow interfluent interfluve intergranal Interisland interjacent interlaken interlap interlay interlocation interlunation intermesh intermigration intermittency interosculate interpage interpellant interphone interpolant interprete/S interradial interrex interrogable interstratify intersystem intertexture intertrigo intracoastal intranational intranuclear intrasocietal intratelluric intravasation intuc intuitivism intwine inuit inurbane Invar invercargill involucel involutory invultuation inwrap inyala iodism iodometry iolite iona Ionesco Ionia Ionian ionone ionopause iontophoresis iphigenia ipoh Ipomoea ipsambul ipsus ipswich iqbal iquique iquitos iracund irade irbid irbil irenicon Ireton irian iridectomy irido iridotomy Irishism iritis Irkutsk ironbark ironfounding Irons Iroquoian irradiant irrelievable irremissible irretentive irriguous irtysh isagoge isagogics isallobar isar isarithmic isatin isauria Isbn Iscariot ischaemia ischia ischium isentropically isherwood Ishmael Ishmaelite Ishtar Isidore Iskander Iskenderun islay Islington Ismaili ismailia iso isoamyl isobath isocept Isocheim isochor isochroous isocracy isocrates isocyanic isocyanide isodiametric isodiaphere isodimorphism isodynamic isoenergetic isogamete isogenous isogeotherm isogon isohel isohyet isolecithal isoleucine isolex isologous isophone isopod isoprene isopropyl isorhythmic isosceles isoseismal isosmotic isospondylous isostasy isosteric isothere isotone isotron isotropical israfil issachar ISSN issus istana isthmian istle istria itacolumite itaconic Italia italicity italicy ithunn ithyphallic iulus Ivanovo Ivanovsky Ives iviza Ivory Ixia Ixion Ixtaccihuatl ixtle iyar iyeyasu Izhevsk izmir izmit iznik Iztaccihuatl izzard Jabalpur Jabir Jabiru Jaborandi jacamar Jacaranda jacdaw jackeroo jackfish jackfruit jackshaft jacksnipe jackstay jackstraws Jacobin jaconet Jacquard jadeite Jadotville jael jaffa jaffna Jaga jaguarondi jahveh Jahvist jahweh jailhouse Jain Jainism jaipur jalap jalapa jalisco jambeau jambi jambo Jamesian jammu jammy jamnagar jampan jamshedpur jamshid jana Janacek janata Janiculum Janigro janina Janowitz Jansenism Jap Japheth Japhetic jarl jarp jarrah jarrow jarry jarvey Jarvi/S Jarvis/M jassy Jat jato javari jawan jawara jawbreak jaxartes jayawardena jaywalk JCL jebel jedda jefe jehad jehol jehoshaphat Jehovist jehu jekyll jellaba jellicoe jellify jellybean jemadar jemappes jembe Jemmy Jena Jenghis Jenner Jephthah jequirity jerba jerbil jerboa Jeremiad jerez jerid jerreed Jersey Jervis Jespersen Jesselton Jesu Jethro Jetton jevons jewelfish Jewess jewfish Jewry Jezebel Jezreel jhansi jhelum jibbons jibouti jidda jiggermast jihad jillaroo jilolo jinghis jinja jinnah jipijapa jissom jitterbugger jitterbugging jiujitsu Joab jobname Jocasta Jochum jocko jodhpuri Jodo jodrell joffre jogged jogjakarta Johnsonian johore Joinville jokjakarta jollify jolo Jolson Jonah jongleur jonnock Jonson jook joppa jordaens jorum jos josquin jota jotter jotun Jotunheim journalled jowett Juantorena juba jubbah Jubbulpore jube Judaea Judah Judaic judezmo judicative judicator judogi jugal jugfet juggins juglandaceous jugulate jugum jugurtha Juilliard juiz Juliana jullundur jumbuck jumna juncaceous Juneberry jungfrau Junius junkman Junoesque jupon juratory juryman jus justiceship justiciary justle juvenal Jylland Kaaba Kabaka kabalega kabaragoya kabbala kabob Kabyle kachang kachina kadi kadiyevka kaduna Kaffir kaffirs Kaffraria Kafir kafiristan kagera kagoshima kagu kaiak kaieteur kaif kaifeng kail kailyard kain kainogenesis kairouan Kaiserslautern kaka kakapo kakemono kaki Kalahari kalat kalends Kalevala kaleyard kalgan kalgoorlie kali kalian kalidasa kalif kalimantan kalinin kaliningrad kalisz kaliyuga kalmar Kalmuck kalong kalpa kalpak kalsomine kaluga kama kamakura kamala kamasutra kame kamerun kamet kami kampong kampuchea kamseen Kamu kana Kanaka kananga kanara Kanarese Kanawa kanazawa kanchenjunga kanchipuram kandahar Kandinsky kandy kanga kangwane Kanji kannada kano kanpur kansu kantar kanu kanzu kaohsiung kaolack kaoliang kapellmeister Kapfenberg kaph karabiner karafuto karaganda Karaite Karajan karakoram karakorum Karakul karamanlis karbala Karczykowski karelia Karelian kariba Karloff Karlovy Karlsbad Karnak karnataka karoo kaross Karpov Karri Karst kart karyogamy karyokinesis karyolymph karyolysis karyoplasm karyosome karyotin kasai kasbah Kasha kasher kashgar kashmir Kashmiri Kaspszyk kassa kassala kassel kat katabasis katabolism katakana katanga katar kathak katharevusa katharsis kathiawar katmai Katrine katsina kattegat katzenjammer kauai kaunas kaunda kauri kaveri kawasaki kayseri kazachok kazakh kazan kazantzakis kazbek kea kean kearney keble keck kedah kedge kedgeree kediri kedron keef Keeling keelung keepnet Keewatin kef keffiyeh Keighley Keijo keitel keitloa kekkonen kelantan keloid kelpie Kelson kelt/R kemal kemble kemerovo kempe Kempff kempis kenaf kendal Kennelly Kennington kenogenesis kenosis kenspeckle Kentish kentledge kenyatta keos kep kerala keramic/S keratin keratitis keratogenous keratoid keratoplasty keratose keratosis kerb/G kerbaya kerbela kerbstone kerch Kerenski kerf kerguelen kerkrade kerman Kermanshah kermes kermis kermits kero kerouac kersey kerseymere Kertesz kesselring kesteven Keswick ketonuria ketoxime kevel kew kewpie kex keytop/S KGI Khabarovsk Khachaturian Khaddar Khakass Khakis Khalid Khalif Khalkha Khalkidiki Khama Khamsin Khanate Khanga Khania Kharif Kharkov Khat Khayal Khedive Khelat Kherson Khieu Khingan Khirbet Khiva Khoikhoi Khoisan Khojent Khotan Khufu Khulna Khuskhus Khyber Kiaat Kiang Kiangsi Kiangsu Kiaochow Kibitka Kiblah kickdown kicksorter kicktail kidd Kidderminster kiddle kidron kief Kielce Kier Kierkegaard Kieselguhr Kif kike Kikoi Kikumon Kilauea Kildare Kilderkin Kilkenny Killarney Killick Killiecrankie Killifish Killikinick Kilmarnock kilung kimberley kimberlite kinabalu kinase kincardine kinchinjunga kincob kinematograph King kingbolt kingcraft kingcup Kingdom Kingman kingwana Kinnock kino Kinross Kinshasa kioto Kirchhoff Kirghiz Kiribati Kirigami Kirin Kirkby Kirkcaldy Kirkcudbright Kirkman Kirkuk Kirkwall Kirman Kirmess Kirovabad Kirovograd Kirshbaum kirtle Kiruna Kirundi Kisangani Kish Kishinev Kishke Kismayu Kissel Kissin Kissinger Kist Kistna Kisumu kitbag/S kitchenless kitenge kithara kittiwake Kitts kitwe kiushu Kizil Klagenfurt klaipeda Klangfarbe Klansman Klausenburg Klee Kleiber Kleist Klemperer klepht klieg Klimt Klipspringer Klondike klong klootchman klopstock knackwurst knag knap knar knawel Kneller Knesset knickpoint kniferest Knighthead Kniplova Knobkerrie knop knossos knotgrass knotwork knurly Knussen koa koan kob kobarid kobe Koblenz kobold kochi Kodaly kodok koel Koestler kofta koftgar kofu Koheleth Kohima Kohl Kohn Kohoutek Kokand Kokanee Kokobeh Kokoschka kokura kolar kolding Kolhapur Kolinsky Kollo Kollwitz Kolmar Kolmogorov Kolo Kolomna Kolyma Komati Komatik Komi Kommunarsk Kommunizma Komsomolsk Konakry Kondo Kondrashin koniology Konstanz konya koodoo Kootenay Kopeisk koph Kopje Koppa Korbut Korchnoi Kordofan Kordofanian korfball Korma Korngold Korsakov Kortrijk Koruna Korzybski Kos Kosciusko Kossuth Kostroma Kosygin Kota Kotabaru koto Koulibiaca Koumis Kovno Kovrov Koweit Kowhai Kozhikode Kra Kraal Kragujevac Krait Krakau Kramatorsk Krameria Kranj Krans Krasnodar Krasnoyarsk Krefeld Kreisky Kreisler Kremenchug Kremer Krems Kreplach Kreutzer Kriegspiel Kriemhild Krimmer Krips Kriss Kristiansand Kristianstad Krivoy Kromesky Krone Kronig Kronos Kroon Kropotkin Krugersdorp Kruller Krummhorn Krupp Kruysen Krym Kshatriya Kuala Kuban Kubelik Kublai Kubrick Kuch/GN Kueh Kuenlun Kufic Kuibyshev Kukri Kuku Kula Kulturkampf Kulun Kum Kumamoto Kumasi Kumbaloi Kung Kungur Kunming Kunzite Kuomintang Kuopio Kura kurchatovium Kurgan Kuril Kurland Kurosawa Kuroshio Kurrajong Kursaal Kursk Kurzeme Kuskokwim Kutaisi Kutch Kutuzov Kuznetsk Kwa Kwacha Kwajalein Kwakiutl Kwangchow Kwangchowan Kwangju Kwangtung Kwantung Kwanza Kwara Kwazulu Kweichow Kweilin Kweisui Kweiyang Kwela KWOC kyanite kylin kylix kyloe kymograph kymric kymry Kynewulf Kyongsong kyphosis Kyprianou Kyrie kythera Kyushu La Laager Laaland labarum labe labefaction labiche labionasal labiovelar lablab labret labroid labrum labuan Laburnum labyrinthodont laccolith lacedaemon Lacedaemonian lacerant lacertilian lachlan lachryma lachrymatory laclos laconia lactalbumin lactam lactary lactescent lactiferous Lactobacillus lactoflavin lactometer lactophenol lactoprotein lactoscope Ladin Ladino ladislaus ladoga ladrone ladyfy ladysmith ladysnow laertes laevogyrate laevorotatory laevulin laevulose laforgue lagan lagena lagerkvist Lagting lah Lahnda Lahti Laibach laik lairy laius Lakes Laksa Lakshadweep lala lalang lalapalooza lallans lallation Lalo Lamaism Lamarckian Lamarckism lamartine lambdacism lambdoid lambkin lambrequin lamellicorn lamellirostral lamina Lamington laminitis Lammas Lammastide lammergeier lampas lampedusa lampern lampeter lampholder lampion lamppost/S lamprophyre lampshade/S lanark lanate Lancastrian lancejack lancelot lancewood lanchow Landamman Landau Landeshauptmann landgrave landgraviate landgravine landloper landor landowska landrace landscapist/S landseer landshark landshut landsknecht landtag landwaiter lanfranc Langland Langobard Langobardic langouste langrage langres Langridge langsyne Langton Langtry langue languedoc languet laniard laniary laniferous lankester lanner lanneret lanose lansquenet Lantana lanthorn lanugo laoag laodicea laomedon laotze lapidate lapidify lapillus lapis Lapith Laplacian Lapland Lapp lapsus laptev Lar lardon largen larine larisa larmor larn larnax larousse larrigan larrikin larrup larum larwood laryngotomy lascaux lashio lashkar lasker lasket Laski lassa lassalle Lassen lassus lat Latakia lateroversion lathi lathy latifundium latimer Latimeria Latinism Latinist latium Latona Latour latria lattermost Latvian lauda Laudian Laughton Launce Launceston lauraceous laurasia lauric laurier laurustinus lautrec lav laval lavolta lawbreak lawes lawgive lawks Lawless lawmake Lawrentian laxey layamon layard laycock layshaft Lazar lazaretto lazio lazuli lazulite lazurite Leacock leadbelly leadwort Leaf leafcutter leafletting Leah leakey leal Leamington leaseback leat Leatherette leatherhead leatherjacket leatherwood leavis leben lebkuchen leblanc lebowa lebrun lecce lech lecky leconte lector lecythus Leda leet leeuwarden Lefkowitz lefthand/D leftwing/RZ legaspi legnica legumin lehmann lehmbruck lehr Leibnitz Leicester Leicestershire Leichhardt Leiden Leif Leinsdorf Leinster leiria Leishmania leishmaniasis leister Leitner leitrim leix lek lekker lely leman Lemberg Lemmens lemniscate lemnos lemuroid lenglen lengthman Leninabad Leninakan Leno lentamente lenticel lentigo Lenya leoben Leoncavallo Leonidas Leopardi Lepanto lepaya lepidopteran Lepidosiren lepidote lepidus lepontine leporid leporine leprosarium leprose Leptocephalus Lepton leptophyllous leptosome leptotene Lepus Lermontov Lerwick lesbos lesseps letchworth Lethbridge Leto Lett letterset Lettish leucas Leucippus leuco leucocratic leucocyte leucocytosis leucoderma leucomaine leucopenia leucoplast leucopoiesis leucorrhoea leucotomy leuctra leukas leuven levalloisian Levant Levantine Leverhulme Leverkusen leverrier leviable Levite Levitical levkas Levko lewes Lewisham lexicology lexigraphy lexis Leyte Lhasa Liadov Liao Liaoning Liaotung Liaoyang liard Lias liase liason libau libava libeccio liberec liberticide libia lichenin lichenology Lichfield lichi liddell lidice Liebfraumilch liebig liebknecht liegeman liegnitz lienal lientery liestal lietuva liffey liftboy liftoff ligan ligeti ligniform lignocaine ligroin ligula liguria lii likasi liklihood lilburne liliaceous lilienthal Lilith liliuokalani lille lilo lilongwe limacine limassol limbate Limbourg Limburg/R limewater limicoline limicolous limitarian limoges limousin Limpopo linacre linalool linares Lincolnshire lincrusta linctus lindesnes lindisfarne lindwall lineate/X linefeed/S linenumber linestyle linewidth lingam lingayen linguiform linguini linhay linkwork linlithgow linn Linnaean linnaeus linnet linnhe lino linocut linolenic Linsang linstock lintwhite linz lionfish lipari lipase lipchitz Lipetsk lipography lipoid lipoma lippe lippi lippie Lippizaner liquefacient liquesce liquidus liquorish Liriodendron liripipe lisieux Listerism literae lithoid lithomarge lithometeor lithotrity littoria liu Liv livingstone livonia livorno livraison livy lix lixivium Ljubljana Llandaff Llandudno Llanelli Llangollen Llewellyn Lleyn loadstar loadstone loanda Lobachevsky lobengula lobito lobola lobworm Locarno lochia lockyer locl locoman locris locum lod lodi lodicule Loewe loewi lofoten loganberry loganiaceous logaoedic logicism loglog logoff logography logopaedics lohengrin loiret Lolland lollapalooza Lollard lomax lombok Lombrosian lombroso loment lomond londrina longan Longbenton longcase longcloth longe Longford longicorn longinus longlasting longleaf Longobard longship longshore longueuil longueur longus longways longyearbyen Lonicera loofah lookin loopy loosebox lophobranch lophophore lor lordy Lorengar lorentz Loretta lorica lorient lorimer lorrain lorris losey Lota lothair lothario lothian/S lothringen lotic louche loudish loudspeak Loughborough Louisburg louth louvain louvar lovage lovat lovell lovey lowan lowerclassman lowestoft lowveld loyang lozengy lozi LPG lualaba luanda luang luau Luba lublin lubra lubumbashi Lucan Lucania lucarne lucca luce luciferin lucilius Lucina Lucknow lucullus lud Luddite Ludendorff ludhiana ludo Ludwigsburg Ludwigshafen luff/DGS Luffa Luganda Lugansk lugo lugsail lugworm luichow luik Luluabourg lumberjacket lumbricalis lumbricoid lumiere lumisterol lumme lumpenproletariat lumumba luna lunarian lungan lungi lungki lungworm lungwort lunik luns lunula lunulate Luo Lupercalia lupin Lur lurdan lurex lusatia Lusatian Lusitania lusus luteolin lutestring Lutetia luthern luthuli lutine lutist Luton Lutoslawski Lutyens Luxemburg Luxon luxor luxulianite lvi lvii Lvov lxi lxii lxiv lxix lxvi lxvii lyallpur lyautey lycanthrope lycaon lycaonia lycia Lycian lycopod lycurgus lydda lyddite lydgate Lydian lyell lyly Lyme Lymington lymphangial lymphangitis lymphoadenoma lyncean lynchet Lyonnais Lyonnesse Lysander lysias Lysimachus lysippus lysol lyssa Lytham Lythraceous lytic lytta lytton Lyublin Ma Maag Maar Maarianhamina Maas Maastricht Maazel Mab mabela mabuse macaco Macao Macaskill Macau Maccabean Maccabees maccaroni Macclesfield Macdonnell macebearer macedoine machado machan machel machin machmeter machree machu Mackay MacKerras Mackerras Maclean Macleod Macmahon Macneice Macpherson Macready macroclimate macroencephaly macrograph macrophysics macroprocessor macropterous macrosporangium macrospore macrosystem macruran macula madafu Maddalena madhya madina madre madrepore madura madurai maduro madwort maebashi Maecenas maenad maestoso maestricht maewo mafeking maffick mag/N magallanes Magdalen magdalena Magdalenian Magdeburg Magellan maggiore Maghreb magilp maginot magistery Maglemosian magnetochemistry magnetosheath Magnificat magnificats magnoliaceous magnus magot magritte maguey Magyar mahabharata mahalla mahanadi maharashtra Mahdi mahewu Mahican mahjong Mahomet mahometan Mahonia Mahound mahratta mahseer Maia maidan maidstone maiduguri maigre maihem maikop mailcoach maillol maimonides mainbrace maintenence Maintenon maintopsail mainz maiolica Maitland Majlis majunga makalu makarios makeyevka makhachkala makkah makurdi makuta malabo Malacca malachi malacophyllous malacopterygian maladdress malam malang malassimilation malatesta malatya Malaya maldon maleable malebranche malevich malherbe malihini malimprinted malines malinke Malinowski Malison malkin mallam mallee mallenders malleolus mallorca malm malonic malonylurea malory malpighi malpighiaceous Malpighian maltha malthus maltman maluku malvaceous malvern malwa Mam mamaguy mamba mamelon Mameluke mamilla mamillate mammee mammet mammiferous mammilla mampara manado managerialism manakin manassas manasseh manaus manche manchineel Manchu manchukuo manchuria Mancunian Mandaean Mandalay Mande Mandeville mandi Mandingo mandir manet mangabey mangalore manganin mangelwurzel mangonel mangosteen Manichaeism manichaeus manilla manille maninke maniple manipur manisa manitoulin manizales manky mannar Mannerheim Mannheim manolete manresa mansart mansholt manteau mantegna mantelletta manteltree mantilla mantinea Mantler mantoux mantova manufacturable Manuguerra manuka manukau manus manutius Manx Manxman manyplies manzanilla manzoni maoism maputo maquette mara Marabout marabunta maraca Maracaibo maracanda maracay marasca marat Maratha Marathi maravedi marcasite marcellus marcescent marche Marchland Marciano Marcionism marcos marcuse marduk mardy maremma Marengo Marenzio margaric margarite margate Margaux Margay Marge margravate margrave margravine margrethe Mariana marianao maribor mariculture Mariehamn Marienbad Marinduque Marinetti Mariolatry Mariology mariposa Marist maritage maritain maritsa Mariupol Marius Marivaux Markevitch Markhor Markka Markova Marley marlite Marlow marmara marmite marmolada maroc Maronite maroquin maros marprelate marquand Marquesan marquesas marquessate Marrakech Marrakesh marram marrano marriageability Marriner marron marryat Marsala Marseillaise Marseille Marshalsea marsilius marsipobranch Marston martaban martagon martel martellato martello Martin martineau Martinmas Martinon Marton marvell marxists masaccio Masai masan masaryk masbate Mascagni mascarene mascle Masefield masharbrum mashhad mashie masinissa masjid maskanonge masqat massa massachuset massasauga massasoit Massawa Massenet massine massinissa massorete massotherapy mastaba mastigophoran mastitis masuria masurium Matabele Matabeleland matadi matamoros matanzas matapan matchbox matchmark matchstick Mathis mathura matlo matlock mato matoke matopo Matorin matozinhos matrass matriclinous matrilocal matroclinous matronage matsu matsuyama mattamore matterhorn matthias Mattila mattins mattoid mattrass matzoon maubeuge mauby Mauceri Maud Maugham maui maulana maulmain maulstick maumet mauna maund/R maundy maungy maupassant maupertuis mauretania mauriac Mauricio Maurist maurois maury maurya Mauser Mavourneen mawger mawkin mawsie Mawson Maxim maximus maxint maxisingle maxixe Mayakovski mayday Mayen mayence mayon Mayotte mazard mazarin Mazdaism mazuma mazzini Mbujimayi Mccarthyism Mccartney Mccormack Mccullers Mcdiarmid Mcgonagall Mcluhan Mclure Mcmunn Mcmurdo McNair Mcnaughten Mcqueen Meade mealworm meany meatus Meccano mechanotherapy mechelen Mechem Mechlin meck Mecklenburg meconium medan medawar Mede mediastinum Medina medway mee/D meerut mega megacephaly Megaera megaflop/S megalocardia megalocephaly megalosaur megapode megara megaron megathere megger meghalaya megiddo megilp mehemet Mehta meilhac meiny meir Meissen meitner mekka Melaleuca melanchthon Melanochroi melanous melaphyre melchior Melchite Melchizedek Meleager meliaceous melilla melilot melinite melisma Melitopol melodeon meloid melos meltage Melton Melungeon mem memel memling Memnon memoire memorex Memphian Memphremagog memsahib menado menai menam menander menaquinone mencius Mendeleyev Mendelism menderes mendips Menelik menes Mengelberg mengistu meningocele menispermaceous meno menology menomini menon menotti mensa Menshevik mentalism Menton menuhin mepacrine merano merca mercaptan mercaptide merchet mercia Mercian mercians Mercouri Mercurian Mercurochrome merengue mergui Merionethshire meristic merkin merlon meroplankton Merovingian merozoite merrymake merse Merseburg Mersey Merseyside mersin merthyr Merton mesarch Mesembryanthemum mesencephalon mesenchyme mesenteritis mesentery meshach meshuga mesitylene mesnalty mesobenthos mesocephalic mesocratic mesogastrium mesoglea mesognathous mesolithic mesolonghi mesomeric mesophyll mesophyte mesothelioma mesothelium Mesple messalina Messapian messene messenia messiaen messina messmate/S mestee mester metacharacter/S metachromatism metacinnabarite metafemale metagnathous metalline metallocene metallophone metamale metamer metanotion/S metaperiodate metaphosphoric metaphrase metaphrast metapolitics metaproduction/S metasymbol/S metasyntax/S metatheory metatherian metathorax metaxylem metchnikoff metempirical metempirics metestrus methacrylic methaemoglobin metho methodius methotrexate methoxide meths methylcyclohexane methylphthalate methylthionine metic metoestrus Metol metonic metopic metricate metrify metritis metronymic metrorrhagia Metternich metz meu meung meuse Mexicali Meyerbeer Meyerhof mezcal mezcaline mezereon mezereum MFD mho miaou miaul Micah micawber Michaelmas michelozzo mick mickery mickiewicz mickle Micmac microbalance/S microbody/S microbrailler microchip/S microconcrete microcrack/DGS microdetector microdont microdot microfabric microgel microkink/G micromixing micropalaeontology microphyte micropyrometer Microscopium microsporophyll microstomatous microsystem/S microtherm microtomy microwatt/S microwriter/S micrurgy Middelburg middlebreaker middlemost Middlesbrough Middlewood mideast midheaven midian midinette midiron midlothian Midway mieres miffy mihrab milage Milashkina milazzo mileometer miletus Milford Milhaud milkfish milkhouse milkwort millais millefleurs millepede millepore milli milligan millrun millwheel/S millwork milne Milnes milo milometer/S milreis Milstein miltiades mimas mimetite mimir mimosaceous Mina minacious minas minch Mindel mindoro mindszenty minelayer mineworker/S minge Mingrelian mingus minho minibike minicab/S minimus ministerialist ministerium minitab minivet Minkowski minna minnesinger Minorca Minorite mintoff Minton Minya miombo Miquelon mirabeau miracidium mirador miraflores mirepoix mirk MIRV mirza misapplys miscarrys misdeclared misdefined mise miseno Miserere misericord Mishima Mishnah miskolc mislaid misplead missal/S missel missis mississauga mississipi missolonghi misspelt missus mistal mistassini misti mistigris mistle mistral/S mither mithgarthr Mithraism Mithras mithridate/S mithridatism mitis mitrailleuse mitrewort Mitropolous Mitropoulos Mittelland Mitterrand mixolydian Mixtec Mizoguchi mizoram mizzen MKS MKSA Mlle Mme Mnemosyne moa moab mobutu modena moderne modge modigliani modillion Modiolus Modred mofette mog/N mogador Mogilev Mohave Mohican moho Mohock mohole mohs mohur moidore moirai Mojave moke mokha mokpo Moldau Moldavian Moldavite Molech molina molise Moll mollah mollescent Mollet mollusc/S molluscoid mollweide Molokai molopo moltke molybdenous mombasa momism Mommsen Momus monacid monadelphous monadnock monaghan monal monanthous monas monaxial monazite monck Moncton Mondale Mondial monecious Monegasque moneme monetarist moneychanger mong Mongo Mongol Mongolic moniliform monkeypot monkfish monkshood Monmouthshire monnet monoatomic monobasic monocarp monocarpellary monocarpic monocausal monochasium monochloride monochloroethanol monochord monoclinous monodispersity monody monohydrate monohydric monohydroxy monoicous monolatry monomark monomerous mononucleosis monopetalous monophagous monophobia monophyllous Monophysite monoplegia monopode monopodium monopteros monosemy monosepalous monosized monosome monospermous monostich monostichous monostome monostrophe monostylous monothetic monotower monotropism mons monsignor montagnard montagu montagues montale montane montauban montbretia montcalm montefiore montego monteith montenegro montero monterrey montesquieu montessori Monteux Montezuma montfort montgolfier Montgomeryshire montherlant montmorillonite montparnasse montpellier montreuil montreux montrose Montserrat monza monzonite moog moolvie moonfish moonflower moonraker moonshot moonwort Moorcock moorfowl moorhen Moorland moorwort mopboard mopoke moquette mora/A moraceous Moradabad morar morava morbific morbihan morbilli morcha mordecai mordred Mordvin Mordvinian morea moreau morecambe moreen moreish morelia morello morelos morepork moresco Moreton Morisco morish mornay Moro Morocco moroni morphallaxis Morpheus morphogenesis morphophoneme morphosis morphotype/S morphy morro morula morwong mos mosasaur moschatel moseley Moselle moshesh moskva mosley mosotho mossbunker Mossi mossie mosso mosstrooper Mosul motherwell motherwort mothy motmot motocross motorable motorbicycle motorbus motorcoach motown motte motu mouflon moujik mouldboard mouldy moulmein Mountbatten Mountie mousebird mousetail mousseline Moussorgsky Mousterian mouthbrooder mouthwash mouthwatering movietone moviola mowburnt moxa Mozambique Mozarab Mridang MSC mucin muckamuck muckle mucksweat muckworm mucoid mucopurulent mucro mucronate mudcat mudfish mudir mudlark mudpack mudra mudskipper/S muenster muesli mufulira mugabe muggins mugwort muhammadan Muharram mujik Mulciber muldoon muleta muleteer mulga mulhouse mulki mulley mulliken mullock mulloway multan multangular multeity multicide multidrop multifid multifile multiflora multifoil multifoliate multigravida multihop multikey/S multilateralist/S multimembered multinuclear multipacket multipara multiped multiplane multiplepoinding multipunch/D multireel multirole multistorey multisubject multivariable multivibrator multivocal multiway multiword multure mumbo mumchance Munch Munda munga mungo muniment/S munnion munro munsell munster munt muntin muntjac muntz murage murasaki murat murcia Murdabad Murdoch mure murex muricate Murillo murine Murmansk murra murrelet murrhine murrumbidgee murther musaceous Musca muscadel muscae muscarine muscid muscleman musclemen muscovado museology musil musjid muskeg Muskhogean muso musquash musset Mussulman mustafa mustee musteline musth mutch mutchkin Muti mutism mutsuhito muttonhead muttra mutule muzorewa muzz MVS MVT Mwalimu Mweru myalgia myalism myall myasthenia mycelium mycetoma mycetozoan mycin Mycobacterium mycostatin mydriasis mydriatic myelencephalon myelin myelitis myiasis mylonite myna myocardiograph myogenic myograph myology myoma myope Myrica myrmecology myrmecophagous myrmecophile Myrmidon myrobalan myrtaceous mysia mystagogue mythopoeia mytilene myxoedema myxoma myxomatosis myxomycete mzee mzungu Naafi Nabataean nabis nabla/S nablus nabob Nabokov Nabonidus naboth nacre Nadia nae naevus Naga Nagaland Nagana Nagano Nagari nagor Nagpur Nagyszeben naha Nahuatl Nahum nailbrush nailfile nailhead nainsook nairn naissant naker nakhichevan nakuru nalchik nalgo Nama namangan Namaqualand namas namelist/S namen nametape namhoi Namibia namur Nana nanak nanchang nanda nanga nankeen nanning nanometric nanoplankton Nansen nanterre nantes nantung naphtali naphthyl Napier Napierian napiform Napoli nappa Napravnik nara Narayanganj narbada narceine narcoanalysis narcosynthesis narcotism nardoo nares narial nark narmada Narraganset narthex narva narvik naseberry naseby nashe nasho nasion nasofrontal nasopharynx nasser nastase Nathanael natheless natrium natrolite natron natsopa natter natterjack naturism naturopathy nauch naucratis naumachia nauplius naur Nauru nautch nautiloid navar navarin navarino navarre Navassa navew navicert navratilova navvy naxalite naxos Nayarit Nazarite naze NCAR ndola neagh neap Nearctic nearside neb Neblett nebo nebuchadnezzar neckar neckband neckcloth neckpiece neckwear necrobiosis necrolatry necromania necrophobia necrose necrotomy neddy Nederland needlecord needlecraft needlefish needleful neep nefertiti negev Negress negresses negrillo Negritic Negrito negritude Negrophil Negrophobe negropont negros Negus Nehemiah neisse Nejd nek Nekrasov nekton Nelly Nelson neman nemathelminth Nembutal nemea Nemean nemertean nemery Nemesia nene neoarsphenamine Neocene neocolonialism neoconservative Neogaea Neogene neoimpressionism neoplasty neoscholasticism Neotropical Neozoic neper nephogram nephograph nephology nephralgia nephridium nephrite nephritic nephritis nephrosis nephrotomy nepos Neptunian neral Nereis nereus Neri neritic nernst neroli neruda nerva nerval nervate nervine nervure nesh nesselrode nessus Nestorianism nestorius netaji netball neto netsuke nett Neubrandenburg neume neurasthenia neurectomy neurilemma neuro neuroblast neurocoele neurogram neurohypophysis neurolemma neuroma neuropath neuropsychiatry neuropteran neuropterous neurotomy neurotransmitter/S neurovascular neusatz neuss neustria neutretto Neville Nevis Nevski New Newburg Newcombe Newcomen Newfie Newgate Newham Newhaven Newmarket newshawk newspeak Newtonabbey Newtown ney nez Ngaio Ngaliema NGK Ngoma Nguni Ngwee Nha niblick Nicaea Nice Nicene Nicias nicknack nickpoint Nicobar Nicol Nicola Nicolai Nicolesco Nicolson Nicotiana nicotinism nictheroy nictitate/G nidaros niddering nide nidicolous nidify nidus niebuhr Niedersachsen niello niemen Niersteiner Nietszche nieve niff Niflheim nightlife nightrider nightspot nightwear nigrescent nigrify nigritude nihon niigata Nijmegen Nikaria Nike Nikolainkaupunki Nikolayev nilgai nilgiri Nilotic nim nimblewit Nimitz nimonic Nimrod Nimwegen Ningpo ningsia Ninon ninus niobic niobous niort nipa nipigon Nipissing nipplewort nippur Nisei Nishapur nishinomiya Nissen nisus niton nitramine nitrobacteria nitrochloroform nitrohydrochloric nitrometer nitromethane nitroso nitrosyl Niue nival nivation niven niveous nivernais nixie Nizam nizhni njord nkomo nkrumah Noachian nobbut nobiliary Noctiluca noctuid noctule noesis nofretete Noguchi noh noil noisette nolde nolle nomarch nomarchy nombles nombril nome nomen nomism nomocracy nonactive nonaggression nonaligned nonanalytic nonanoic nonappearance nonblank/S noncausal noncomputable noncontributory noncritical nondirected nondispersive noneffective nonego nonet nonevent nonexecutable nong nonharmonic nonhierarchic nonhierarchical nonhuman nonidentical noninteger noninvertible nonnumeric nono nonowner/S nonparametrical nonparous nonparty nonproliferation nonrecursive/Y nonrelevance nonrelevant nonsequenced nonsmoker/S nonstarter nonstative nonstick nonstriated nonsuch nonsuit nonunionism nonvocal nonvoter nonvoting noordbrabant Noordholland nopal nord nordau Nordkyn norge noria noricum norite nork Norland Normanton Norn norodom Norseman Northallerton Northamptonshire Northcliffe Northcountryman Northman Northmen northmost Northumbria Northumbrian/S Northwich noseband nosography Nostoc nostology notelet noticeboard/S notifiable notitia notochord Notogaea Notornis Nototherium Notour Nottinghamshire notum Notus noumenon novalis novara novation novaya novelese novello novercal Novgorod Novokuznetsk nowel nowhence nowt nox noyade noyau noyon NTP Nuba nubecula nubians Nucci nucha nuddy nudicaul nudum nuevo Nuffield nuggar nuggety nuissance nukus nullah nullarbor nullifidian nullipara Nullstellensatz numantia numbat numberplate numbfish numbles numdah numen numerary numidia nummary nummulite numnah nunatak nunc nuncio nuncle Nuneaton nunhood nunny Nupe Nuremberg nureyev nuri nuristan nusa nutant nutbrown nutcase nutgall nuthouse nutlet nutter nutwood nyala Nyanja nyanza nyasa Nyasaland nyctaginaceous nyctalopia nyctinasty nyctitropism nyctophobia nye nyeman nyerere nylghau nympha nymphaeaceous nympho Nyoro nyx Oahu Oakham oakum Oakville oarfish oarlock oast oates Oaxaca oba Obadiah oban obasanjo obconic obedientiary Oberammergau Oberhausen Oberland Oberon oblanceolate obligato obmutescence obolus obote Obraztsova obreption obscurum obsecrate obsequent obstipation obvolute oca occasionalism occular occultate oceanid oceanus ochlophobia Ochman ochone ochrea ockeghem ocker Ockham ocode Ocrea octachord octad octahedrite octamerous octanedioic octangle octangular Octans octarchy octaroon octavalent Octavian octavo Octobrist octocentenary octonary octu octuple octylphenylether ocularist oddfellow Odelsting odense odoacer odontalgia odontoblast Odontoglossum odontograph odontoid odontophore odovacar odra odyl oecology oenone oestrin oestrogen oestrone oestrous oestrus ofay offa/Y offcut/S officinal ogaden ogasawara ogbomosho ogdoad ogee Ogham Oglethorpe Ogpu ogun Ogygian oho Oidium oilbird oilcup oilfield oilfired Oireachtas oise Oistrakh oita oka okavango Okayama oke Okeechobee Okefenokee Okhotsk Okie okta Olcott Oldcastle Oldham oldwife oleaceous olecranon olefine olefinic oleic olein oleograph oleoresin oleum olibanum olid oligotrophic oliguria olio oliphant olivaceous olivary Oliveira olivenite olivier olla olm ology olomouc oloroso olszyn Olynthus omadhaun omagh omar omasum omayyad ombre Omdurman ommatidium ommatophore Ommiad omnicompetent omnific omophagia omphale omphalos Omsk omuta onager onagraceous onassis ondes ondo ondograph ondometer onega onitsha onlook onomasiology onychophoran onymous oof oogamy oogenesis oogonium ooh oolite oology oolong oomiak oompah oont oophorectomy oophoritis oophyte oose oosperm oosphere oospore oostende ootheca ootid opah opalesce ope opencast operose ophicleide ophir Ophiuchus ophthalmia ophthalmitis opisometer opisthobranch opisthognathous opiumism Oporto Oppens oppidan oppilate oppugnant opsimath optacon/S optoelectronic optometer oradea oran Orangeism Orangeman Oratorian orc Orcadian orcein orchestrina orchidaceous orchil orchitis orcinol orczy ordinator/S ordonnance Ordovician ordzhonikidze oread orectic orel Orenburg orense orfe Orff orfray organogenesis organography organoleptic organology organon organotherapy organum organza organzine orgeat oribi oriel oriente origen orinasal orissa Oriya orizaba orjonikidze orkneys orle Orleanist orlon orlop Ormandy Ormazd ormer ormolu ormuz orne ornis ornithischian ornithomancy ornithopod ornithopter Ornithorhynchus ornithoscopy orobanchaceous oroide orometer orontes orozco orpharion Orphean Orphism orphrey orpiment orpine Orpington orrery orris orsini Orsk ortegal orthohydrogen orthophosphoric orthophosphorous orthopter orthopterous orthoptic/S orthostichy orthotone ortles oruro Orvieto oryol Osage Oscan oscitancy osculant oscular OSHA Oshawa Oshogbo Osijek osman Osmanli osmious Osnaburg ossa ossein Osset ossetia Ossetic Ossian ossie ossietzky ossiferous osso osteal ostend ostensory osteoclasis osteogenesis osteomalacia osteomyelitis osteotome osteotomy ostia ostiole ostium ostler ostmark ostosis ostracoderm ostracon ostrava Ostrogoth ostwald Ostyak otalgia othergates Othin othman otho otic otitis otocyst otolaryngology otology otoscope otranto ottar ottava otterburn Ottley otway ouachita ouananiche oubangui oudh ouessant Ouija oujda oulu ouse ousel outasight outdate outjockey outlist outman outrunner outrush outswing outwash outwith Ovambo ovenproof/DGS ovenware overachieve/DGRS overarch overboot overcheck overcloud overcompetence overconsolidate/DGNS overcrop overdetermine/GS overdye overfold overground Overijssel overleaf overlive overmantel overmatter overnice overpitch overrunning overscore overset oversew overside oversleeve overspent overstaff/DGS overstepped overstress/D overstruck overtask overtype/G oviedo oviferous ovisac owelty owerri owt oxenstierna Oxfordshire oxhide oxidimetry oxime oxon oxonium oxpecker oxter oxtongue oxus oxyacetylene oxyacid oxycephaly oxychloride oxyhaemoglobin oxysalt oxytocic oxytone oyer oyez oyo oystercatcher/MS ozalid Ozawa/M ozonolysis ozs Paal pabulum paca paceway pacha pachalic Pachisi Pachouli pachuca Pacific/M padang padauk paddlefish/M Paddywhack pademelon paderborn Paderewski/M padishah padma padouk padova padsaw padua paduasoy Padus paederast paediatrician/MS paediatrics paedogenesis paedology paedophilia paeony pageful/S pagurian pah pahang Pahari Pahlavi pahsien paigle Paignton paillasse paillette painkiller/MS paintbox/MS paisa paisano Paiute pakeha paki Palacio palaeanthropic Palaearctic palaeethnology palaeoanthropology palaeobotany Palaeocene palaeoclimatology palaeoecological palaeoecology palaeoethnobotany palaeogene palaeography palaeolith palaeolithic palaeomagnetism palaeontography Palaeozoic/M palaeozoology palais Palau palawan palea palembang palencia Palenque palestra palestrina paletot paley Pali palikar palimpsest palindromicity palk palladic palladio palladous Pallas pallete palma palmaceous Palmerston palmira palolo palos palour palpebrate palsgrave palstave pamirs pampero pamphrey pamphylia pamplona panada Panama panatella/S Panathenaea panay panchayat panchen pancosmism pancreatin pandanaceous Pandarus Pandean pandore pandour pandowdy pandurate pandy pandybat panettone panga Panhellenic Panhellenism panicmonger paniculate Panjabi panjim pankhurst panmixia panmunjom pannage panne pannikin pannonia panocha panoptic pansophy Pantagruel pantechnicon pantelleria pantihose panto pantoum paoting paotow papadopoulos papain papandreou papaveraceous papaverine papaya papeete paperbark paperclip/S paperknife paperknives paperless paperthrow papeterie Paphian paphlagonia paphos Papiamento papier papilionaceous pappus Papuan papule papyraceous papyrology parabasis parablast parabrake paracasein Paracel Paracelsus paracetamol parachronism paraclete paradrop paraesthesia paraformaldehyde paragoge parahydrogen paraldehyde paralipomena paramaribo paramatta paramo paramorph paramorphine paramorphism parang parapraxis parashah parasitology parastichy parasyntheton parcae parcheesi parclose pardalote pardubice pareira parergon paresis paresthesia pareu parfleche parget parhelic parhelion paripinnate parishad parison parisyllabic parkin parky parlando parleyvoo parliamentarianism parm Parma parmenides parmentier parmigianino Parnassian Parnassus parnell paroicous parotic parotoid parousia parramatta parrel parrotfish Parsee Parthenopaeus Parthenope Parthenos parthia Parthian partita partlet parturifacient parulis parzival pasargadae pasay Pasch pash pashalik pashka pashm Pashto pasionaria pasolini pasqueflower pasquinade passacaglia passade Passamaquoddy passant passepied passifloraceous passionflower Passiontide Pasteurism pasto patagium patellate Pathan pathfind pathic pathlength pathognomy patiala paticularly patin patisserie patmore Patmos patna paton patras patrial patriclinous patrilocal patroclus patrology pau paua paucal Pauk pauldron pauling Paulinus paumotu pausanias pav pavage pavane Pavarotti pavis pavlodar pavlova Pavo pavonine pawky Pawnee pawnees paxwax paynim PCB/S peag peake pean pearlwort pearmain Pears peart peary peasouper peau peavey pechora peckinpah peckish Pecksniffian pectase pecten peculium pedalo pedate pedatifid pedicular pediform pedunculate peebles peen/DGS peepshow peepul peetweet peewit pegmatite pegu Pehlevi peipus peiraeus peirce pejoration pekan peke Pekin Pekingese Pelagian Pelagianism pelagius pelargonic pelargonium Pelasgian pelerine Peleus Pelew pelf Pelias pelion pelisse pelite pella pelles pelletier pellicle Pelmanism pelmet peloponnese Peloponnesian Pelops peltast peltier pemba Pembrokeshire pemphigus penang penchi pendente penderecki pendragon peneplain peneus pengpu penillion peninsulate penki pennine/S penninite pennon pennoncel pennycress pennyweight pennywort pennyworth penrith penstemon penstock penta pentachlorophenol pentangular pentanoic pentaprism pentastich pentatomic pentelikon pentene penthesileia pentheus pentimento Pentland pentlandite pentose pentothal pentoxide Pentstemon pentyl penuchle Penutian penza penzance pepin peplos peplum pepo pepperwort pepsinate Pepys Pequot pera peracid peraea perak perborate Perceval Percheron perchloric perchloride percoid perdido perdu pereira perfin pergamum pergolesi peri perianth periapt periblem periclase periclinal pericline pericope periglacial perigon perigordian perinephrium perineuritis perineurium periodate perionychium periosteum periostitis peripteral perique perisarc perisperm perispomenon perissodactyl peristalsis peristome peristyle perithecium peritoneum peritrack Peritricha periwig perlis Perlman perlocution permanganate permanganic pernambuco pernickety pernik pernod perogative perpignan perrault perrin perron persalt perse persephone persepolis Persicaria persiennes Persis personalty perspectivism perspex Persson pertussis perugia perugino peruke perutz peruzzi perv pes Pesach pesade pesaro pescadores pescara peseta peshawar peshitta pestalozzi pesthole pesthouse petaliferous petalody petechia Peterborough Peterlee Peterloo Peterman Petermann Petersham pethidine Petra petrarch Petrie Petrine petrodollar petrograd petrolic Petronius Petropavlovsk Petrosian Petrov Petrovsk Petrozavodsk petsamo pettifogging pettitoes petuntse pevsner pewit Peyer Pfalz Pforzheim Phaeacian Phaedrus phagedaena phagomania phagophobia phalangeal phanerocrystalline phanerophyte phanerozoic pharmacophore/S pharmacophoric pharsalus pharyngology pharyngoscope pharyngotomy pheidippides phelloderm phellogen phenacaine phenacetin phenacite phenanthrene phenazine phenformin phenix phenolphthalein phenomenom phenylamine phew phidias phidippides Philadelphus philae philby philemon philhellene philibeg Philippeville philippi Philippic philippics philippopolis philips Philistia philistines Philistinism phillips Philoctetes philomel Philomela phimosis phiz phlebosclerosis Phlegethon phlogopite phlyctena phnom phocaea phocine phocis phocomelia phoebus Phoenician phoenicians phomvihane phonendoscope phonetist phonometer phonoscope phonotype/S phonotypy phooey phosgenite phosophoric phosphaturia phosphino phosphonium phosphoprotein phosphorate phosphoroscope phossy phot photoactinic photoactive photochronograph photoconduction photoelastic photoelasticity photoelectrotype photofit photonasty photoneutron photophysical photophysics photoselected photoselection phototherapy photothermic phototonus phototopography phototype phototypeset photozincography Phragmites phrasal phrenitis phrixus phrygia Phrygian phthalein phthalic phthiriasis phthisic phthisis phut phyfe phyllite phylloquinone phyllotaxis Phylloxera physicochemical physiocrat physoclistous physostomous phytogenesis phytotoxin phytotron piacenza piacular piaf piaffe piaget Pianola piave Piavko piaza Picard picardy piccanin piccaninny piccard pichiciego pickerelweed pickin Pickwickian pico picong picot picotee picrate picric picrite picrotoxin Pictish pictogram pictor picts picul piddock piedmontite pieman piemonte pieria Pierian Pierides pieridine piero Pierrot Pietermaritzburg Pieterson piezo piezochemistry pigface/D pigfish piggin piggledy piggott pigmeat pignut pigswill pigweed pika pikelet pikeperch pilatus pilau pilch pilcomayo pileous pili piliferous piliform pilliwinks pillwort pilocarpine pilose Pilsen Pilsudski Piltdown pimiento pimpernel pinaceous pinchpenny pinckney pindar Pindaric pindus pinero pinfeather pinfish pinguid pinite Pinkerton Pinkster pinnatifid pinnatipartite pinnatiped pinnatisect pinny pinochet pinole Pinsk pintadera pinturicchio pinwork pinworm piny piolet pipa pipeclay pipefitting piperaceous pipewort pipistrelle pipsqueak piragua pirandello piranesi pirhouette pirn pirog pirozhki Pisanello Pisano piscary piscatorial Piscis pisgah pish pishogue pishpek pisistratus pissarro pistareen piste pistoia pitapat Pitcairn pitchometer/S Pithecanthropus pithos pitsaw Pitta pituri pityriasis piura pix pize pizzle placet placoderm placoid plafond plagioclimax plagiotropism plainchant plainsong planchette planform planimetry plano planogamete planometer plantagenet plantigrade plantocracy plash plashy plasmodesma plasmosome plassey Plasson Plasticine plastometer plata plataea platan platelayer/S platemark/S plath platiniferous platiniridium platinocyanic platinocyanide platinoid platinotype Platonical Plattdeutsch Platte Platteland platy platyhelminth platyrrhine plauen Plautus playgroup/S playlet playschool pleach pleasance pleb plebby plectognath pled pleiad pleiocene pleiotropism pleochroism pleomorphism pleonasm pleopod plesiosaur plessor plethysmograph pleurodynia pleuron pleurotomy pleuston pleven plexor plica plicate ploat plodge plonk plonko plotinus plottable plumate plumbaginaceous plumbicon plumbum pluriliteral pluripresence plutus pluviometer pluvious pma pneuma pneumobacillus pneumoconiosis pneumodynamics pneumogastric pneumograph pneumonectomy pneumonitis pneumothorax pnom poaceous POBox pochard pococurante pocus poddy podesta podgorica Podolsk podophyllin podsol poenology pogey pogge Pogonia Pogorelich pogy pohai pohutukawa poind pointsman poitiers poitou pokeberry pokelogan pokeweed pokie pola Polack polacre Polanski poleaxe polemarch polemoniaceous polenta poleyn Polje Pollack pollaiuolo pollan Pollini pollinosis polliwog Pollyanna polony Polska poltava polyadelphous polyatomic polybasic polybius Polycarp polyconic polycrates polydemic polydeuces polydipsia polydisperse polydispersity polyembryony polygalaceous polygnotus polygonaceous polyhydric polymerous polynices polyoxyethene polyphosphoric polyphyodont polypod polyprotodont polypus polysyllogism polythetic polythionic polyvinylidene polyxena pom pombal pombe pomfret pomiculture pommern pommy pomorze pompidou pondicherry Pondo pondokkie Pondoland pondweed pone/A pongee poniard Pons ponta pontchartrain pontefract pontevedra pontianak Pontic pontifex pontil pontormo pontus pontypool pontypridd pooftah poon poona poonce poove popedom popeyed Popov Popp poppadom popsicle popsy porbeagle pori porirua porism porkpie pornocracy poromeric porosimeter porphyrogenite porsena Porson portadown portfire portlaoise portulacaceous Posen posho Positif posology poss possie postcava postcode/S postexilian posticous postie postil postimpressionism postliminy postmeridian postrider potamic potamology potatory potch potentiostat pothecary potherb potiche potiphar potman potoroo potyomkin pouncet powan Powhatan powys poyang pozsony pozzuolana pozzuoli pozzy pracharak pradesh praemunire praenomen Praesepe praetor Praetorian praetorius pragmat/S praha prajna Prakrit pralltriller prang prat prato prau praxiteles preadamite precall precatory precedential preceed precis precompile/DGS preconnected preconnection preconsolidate/DGNS predella predeterminate predial predicant predikant prefill/DGS preglacial preincubate/DGS prelacy prelatism prelect prelexical prelims premaxilla premedication premiership premultiply/DG premultiplys prenomen prenominal preopened preoxidation prepositor prerelease presa prescan prescriptible prescriptivism presentationism Pressburg pression prestel prestonpans prestwich preterhuman pretonic pretor pretorius Pretre Preussen Previn previse Prey priapism Priapus pribilof Price priestcraft primaeval primaquine primatives primigravida primine primordium primulaceous Principe prisage Priscian proc procarp proceleusmatic prochronism proclus Procne procopius proctoscope procuratory producable proem profiterole progenitive Prokopyevsk proleg prolegomenon prolepsis promethazine promycelium propanoic propenamide propene propertius propionic propjet propontis propylaeum propylite proserpina prostheses prostyle protagoras protandrous protanopia Proterozoic proters protestantism protoactinium protochordate protogynous protomorphic Protophyta protosemitic prototherian protoxide protrusile protuberate protude/GS protyle proudhon proustite prout proventriculus Provincetown provo provocate/X proxima prudentius Prunella prunelle Prussianism prut prynne prytaneum psammite psephite pseudaxis pseudepigrapha pseudocarp pseudomorph pseudomutuality pseudopodium pshaw psilomelane psittacine psittacosis Pskov psoas Psoralea psoriasis psst psychasthenia psychomimetic psychotechnics ptah pteridology pteridophyte pteridosperm pteropod pterosaur pterygoid pteryla ptisan ptochocracy ptolemaeus Ptolemaist ptosis ptyalin ptyalism PUC pudsey puebla puffbird/S puget puglia pugwash pulsatile pulsejet pulvinate punakha punce punchable punchbowl/S pune punjab punka punnet/S punta Puppis purana Purbeck puri purim purpurin Puseyism pushkin pushrod/S pushto putamen putto putumayo puvis puy PWT pyaemia pydna pye pyelography pylorectomy pylos pym pyogenesis pyoid pyosis pyramus pyranometer pyrazole pyrenees pyroconductivity pyrogallate pyrognostics pyrographic pyrography pyrolysed pyrolysing pyromagnetic pyrone pyrophosphoric pyrophotometer pyrophyllite pyrostat pyrrha pyrrho Pyrrhus pyrrolidine pyrruvic Pythagoreanism Pythia Pythian pythias qaboos qaddafi qaddish qadi qairwan qattara qeshm qibla qintar qishm qoph quadragenarian Quadragesima quadragesimal quadraplegic quadrella quadriga quadrinomial quadriplegia quadrophonics quadrumanous quadruplex quaere quagga quaggy quaky quale quango/S quaquaversal quare quarrian quarterlight/S quartersaw quashi quasicontinuous quasiorder quasiperiodic quasistationary quass Quassia quathlamba quatre quebracho Queenborough queencake queensberry Queenstown quelpart quelquechose quemoy queneau quenelle quercetin quercine quesnay quetta quetzalcoatl quiberon quidnunc quillet quillon quilmes quim Quimper quinary quinate quincentenary quindecagon quindecaplet quindecennial quinic quinnat quinol quinone quinonoid quinquagenarian Quinquagesima quinquecentenary quinquefoliate quinquepartite quinquereme quinsy quintan quintana quintero quintilian quinze quipu quire quirinus Quirites quist Quivar quiverful qum qumran quokka quotha rabato rabaul rabbath rabbitfish rabbitoh Rabelais Rabelaisian Rabi Rabia racecard/S racegoer/S raceme rachmanism Rackham rada Radetzky radicel radiguet radioactivate radiocommunication radioligand radioluminescence radiomicrometer radiophonic radioscope radiotelegram radioteletype radiothermy radiotoxic Radnorshire radom raeburn raf raffinate Rafflesia ragbolt ragusa ragworm/S ragwort rahman Raia railcar/S railwayman Raimondi rainband rainbird raincheck rainforest rainout raison rajab rajasthan rajkot Rajput rajputana rajya rakata rakehell raki rallentando ralline rallycross Rama ramachandra ramakrishna ramat ramayana rambert Rambouillet rameau Rameses ramjet/S rammish Rampal rampur ramsay ramsgate ramsons ramtil ramulose rancagua rance rancherie ranchero ranchi randan randers Randova ranee rangefinder rani ranjit Ranki ranmoor ransome ranunculaceous rapacki Rapallo rapeseed raphe Raphia raphide rapparee rara raree rareripe rarotonga rase rasht rask raspatory rasputin rasse Rastafarian ratan ratatouille ratbag ratbaggery ratbite rateen ratfink ratfish ratha rathenau ratiometer ratisbon ratite ratlam rato ratsbane rattigan rattish Rattle rattlebox rattoon Rauwolfia ravelin ravenna ravin rawalpindi rawsthorne raylet razee razoo razzia razzle Rea reade readonly readwrite realgar reallotment reapply/DS rearguard/S reassertion reassociation reast rebato rebec rebell rebellow rebid rebond/DG Rebozo rec recalesce recaption receiptor recept recipience Recklinghausen recodify/DGS reconsolidate/G recrement rectillinear rectocele recuperator recurrency recursivity recurvate redan redback redbrick Redbridge redbug redcurrant redd redditch reddle Redemptorist redfin Redgrave rediffusion redingote redon redose redowa reductionalist redware reebok reedling reen reflate/DGS reflet regelate Regensburg reger reggae reggio regin regiomontanus rego regrate regulable Rehoboam Reichsrat reigate reims Reiner reintroduction reinvoke/G reith rejig rejuvenesce relatum relearn religionism reluct remainderman Remblai Reme Remex remittee remix/GS remontant remontoir remould/DG removalist remscheid Renardy rendzina renegado Renfrew reni rennes Rensselaerite renvoi reorientate/DGS repassivation repechage replevy replicator/S repoint repot reprocessor reptant resample/G resaturate/GN rescissible reseat reseau reselection resequence resettle residentiary resiniferous resipiscence resistencia resit resnais resnatron Resnik respecify/S Respighi resrict restiform restorationism restransmit resurrectionism rete retene retension/D retentionist retiary retinite retro retroact retrochoir retrodiction retroject reuchlin reus reuter reutlingen reval revanchism revelationist reverberator reversi reverso revoice rewire/G rexine reynaud reynosa rhabdomyoma rhachis Rhadamanthus rhaetia Rhaetian Rhaetic rhee rhein Rheinland Rhemish rheobase rheotaxis rheotropism rhetic rheydt rhigolene rhinology rhinoplasty rhizomorph Rhodesian Rhodesoid Rhodian rhodic rhodinal Rhodope rhodos rhotacism rhumbatron rhynchocephalian rhyton RI ria ribbentrop ribble ribbonfish ribbonwood ribera ribwort/S ricardo Ricci Ricciarelli riccio ricercare richelieu richthofen ricinoleic rickettsial rident ridgetree ridgeway riefenstahl riempie rienzi Riesling rightable righthand/D rightish righto rightwinger/S Rigi Rigil Rigsdaler Rijeka Rijksdaaler Rijn Rijswijk Riksdag rimester Rimini Rimsky rimu rinforzando ringgit ringhals ringinglow ringster ripcord ripon ripplet Ripuarian Riss rissole risus ritardando ritenuto ritornello rivage Rivera rizal rizzio roadroller/S Roanoke robben robbia Robeson Robespierre roborant Robson roca rocaille Rochberg Rochdale Rochelle rockery Rockhampton Rockingham rockweed Rodin rodomontade Rodrigo Rodzinski roentgenopaque roeselare Roethke rogatory roget Rojak Rolf rollaway rollbar rollmop/S rollneck Rollo rollway Roma Romagna Romaic Romains Romaji Romanes Romanic Romanism Romanist Romanov Romansch Romany/S Romberg Romero/S Romish Rommel Romney Roncesvalles rone roneo ronggeng Ronin Ronsard roo rooinek rootle ropable roquefort roquet roraima rorschach rort rosace Rosalind rosario rosarium roscius roscoe roscommon roseberry rosehip rosewall rosh Rosicrucian rosinante roskilde rospa rossetti rossiya rostand rostock Rostov Rostropovich Rotherham Rothermere Rothesay roti rotorua Rotterdam Rouault Roubaix roucou rouget roulers roumelia Roussillon Routemarch Rowan Rowbotham Rowicki Rowlandson rowntree roxas Roxburgh Royden Rozhdestvensky RTT rubbra rubby rubefy Rubenstein rubescent rubiaceous Rubicon rubinstein rubrician rubstone rudderhead Rudesheimer rudish Ruhr ruisdael rumelia Rumpelstiltskin runcorn Rundstedt Rupert Rurik Ruritania Ruskin Russky Russophile Russophobe ruthenia Ruthenian Rutherfordium ruthful rutilated Rutter ruwenzori ruysdael ruyter ryazan Rybinsk rydal ryobu ryokan ryot Ryswick Ryukyu Ryurik Rzewski Saadi Saar Saarinen Saarland sabadell Sabaean sabah Sabaoth sabatier sabayon Sabbatarian Sabellian sabretache sabulous saccharic saccharoid sacco Sackville Sacramentarian sadat saddlebill Sadducee sade sadhu sadi sadiron sadowa Saens Safar saffian Safi safid sagamore saghalien sagitta saguache saguenay saguia sagunto Sahaptin Saharan saharanpur sahitya saida saiga sainsbury Saint Saintpaulia saipan Saiva Sakai sakhalin Sakharov saktas sakti Sakyamuni salade saladin salado salamanca salambria salduba salep salet Salford Salian salicaceous salicional Salicornia salicylic saliferous salify salique sallee Sallinen sallust salmanazar Salminen Salol Salonen salonika saloop salop salopette Salpa salpicon Salpiglossis salpingectomy salpingitis salpinx salta saltant saltchuck/R saltfish saltigrade saltillo salto saltpan saltus salvatorian Salvia salween salyut Salzburg salzgitter samarang samaria Samarkand Sambo sambre samekh samfoo Samian samiel samiti samizdat Samnite samnium samos samothrace Samoyed samsara samshu samsun sanctitude Sanctus sandakan sandfly sandgrouse sandhi Sandhurst sandpit Sandringham Sandwich sandwort/S Sanger Sangh sango Sangraal sangre sangria sanies Sanjak sankey Sankhya sankt sanmicheli santalaceous santana santander Santee Sao saorstat sapajou sapanwood sapele saphena sapiential sapindaceous sapir sapotaceous sappanwood sapphira sapporo sapraemia sapropel sapwood saragossa Sarajevo Sarangi Saransk Saratov sarawak sarcocarp sarcous Sard sardar sardegna Sardinian Sardis Sardius Sardou Sargodha Sargon Sark Sarkis sarmatia sarmentose sarnen sarnia saronic saros sarpanch sarpedon Sarracenia sarraceniaceous sarraute sarre sarrusophone Sarsen sarthe sarto sartor sarum sarvodaya Saschowa sasebo sasin sassaby Sassanid sassari Sassenach sassoon sastruga satai satellitium satinflower satinpod satrap satrapy Satsuma Saturnian saturnism satyagrahi Sauerbaum saurischian saury saussure sav sava/S savaii savannahs saveloy savoie savoir savona sawbill sawder sawhorse sawn Sawney Saxe saxicolous saxifragaceous saxo saxons sayan sazerac scafell scaldfish scaleboard scalenus scaliger scall scammel scandaroon scanderbeg Scandian scandic scansorial scapa scapewheel scaphopod scarabaeus scarcement scarificator scarlatina scarron scatterplot/S scend Schaerbeek Schaffhausen schappe scheel scheele scheelite Schein scheldt Schenck scherzando schiaparelli schickard Schiedam Schiff schilling Schippers schizogenesis schizophyceous schizopod schizothymia schlegel Schleiermacher Schlesien Schleswig Schliemann schmo schmooze Schnecken Schnitzler schnook schnorkle schnorrer schnozzle schola schongauer schoolie schorl schottische schouten schrodinger schul schwa schwaben schwann Schwarz Schwarzkopf schwarzwald schweinfurt schweiz schwerin schwitters schwyz Sci sciaenid sciamachy scienter scilly Scimone scincoid sciomachy scipio scire scissel scissure sciurine sciuroid sclera sclerenchyma scleritis Scleroderma sclerodermatous scleroid scleroma sclerometer sclerophyll scleroprotein sclerotomy sclerous Scofield scolopendrid scop scopas Scopus scorify scorpaenoid scorper Scorpius Scotism scotopia Scotswoman scotswomen Scotticism Scotto scotus scramb scran scraperboard/S scrapheap/S Scriabin scrimshank scrobiculate scroop scrophulariaceous scrump scrumpy scry scudo scullin scuncheon scunge scungy scunthorpe scuta scutage scutate scutch scutcheon scute scutellation scutellum scutiform scyphiform scyphistoma scyphozoan scyphus scyros Scythian seaborg seacock seakale Sealyham seami seanad Searle seasonality seato Seaton seawan seaworthyness sebacic Sebastopol sebiferous secam secern sech sectoral Secunderabad secundine/S seddon Sedgemoor Seebeck Seeger Seeland seferis seg Seidlitz seif Seifert seisable seise/R seismism seismometer seismoscope selah selangor selectedly Selene selenodont selenomorphology seleucia Seleucid seleucus selfheal Selig Seljuk sellotape selsyn selva semanteme semarang sematology semele sememe semeru semibituminous semibold semicompile semination seminumerical Semipalatinsk semipalmate Semitics semivitreous semivocal sempach sena senarmontite sendai sendal sendoff Senechal senegambia senghor Senlac sennacherib sennar senussi sepaloid Sephardi seppuku septarium septavalent Septembrist septenary septennium septet septicaemia septilateral septime septivalent septuagesima Septuagint septuple septuplet septuplicate seq sequestrant serajevo seram serang Serapis Serb sercq serdab serein seremban serenata sergipe seriema seringa seringapatam serjeant Serkin serotine serpigo serpulid serriform serrulate/N sertorius servetus servia servicewoman servicewomen servient sesotho sesquialtera sesquioxide sestos setiferous setiform sett settable sevan Sevastopol Severnaya Severus sewan sewell Sexagesima sexangular sexcentenary sexennial sexivalent sexpartite sextain sextan sextile seyfert seyhan sfax sforza sfumato sgraffito shaba Shaban shabbat Shabuoth Shackleton shadrach shaduf shadwell shaef shaftesbury shaftsbury shahaptin shahjahanpur Shaka shakhty Shakta Shakti shamash shamba shameface shamo Shang shangaan shango Shankar Shankaracharya shanny shantow sharefarmer/S shareown Sharia sharksucker sharrow Shavian shavuot Shaw Shawwal Shchedrin Shcheglovsk Shcherbakov sheading shearlegs shearling sheba Shechem shechina sheene sheepcote sheepdog sheepwalk sheerlegs Shekinah shellbark shelta shem shema shembe Shemite Shemitic shenyang Sheol sherbrooke sheria Sherpa Sherrington sherwani Shetland shetlands shewbread shewn Shiah shiai shicker/D shihchiachuang Shiism shikoku shillyshally Shimonoseki shinar shinkin shinty shipka shiralee Shiraz shirtsleeve shithead shittah shittim shiva shizuoka Shluh Shoa shockheaded shockstall shoeshine shoetree shofar sholapur Sholokhov Shona shoogle shool shopfloor/S shophar shopsoiled shopwalker shopwork/R shoreless shortlist/DGS shortlived shoshone Shoshonean shote shott shouse showd showerproof showgirl showjumping shrewdie shrewmouse Shrewsbury shrieval Shropshire Shrovetide shufty shufu shuggy Shulamite shushan shuteye shypoo sialkot sialoid siang siangtan sibiu Sicanian sicilia sickbay sickert sickie sicyon Siddhartha siddons sidechain/S sideffect/S sideplate/S siderophilin siderosis siderostat sidesman sidewheel/R sidi sidon sidra siegbahn siegler sieglinde sienkiewicz Sierra sifaka sightscreen sigil sigismund sigla siglos sigmate sigmoidoscope signac signore signorelli sigurd Sihanouk Sika sikang silastic sile siliciferous silicium siliculose siliqua siloam Silures Silurian silurid Silvanus silverpoint silvertail simar Simarouba simaroubaceous Simbirsk simchath Simeon Simferopol simitar simla simoniac simonides simplicidentate simplon simsim simula simulant Sinaloa sinanthropus sinarquist sinatra Sindhi Singhalese singultus sinhailien Sinhalese Sinicism sinistrodextral Sinitic sinn Sinopoli sint Sintow Siouan siple siqueiros Siracusa sirdar siret sisera Sisley sismondi sitar sitcom sitella sitfast sithole Sitka sitology sitsang situla sitwell sitz sitzkrieg Sivaism Sivan sixain sixte Sixtus sjambok skagerrak skara skatepark skatole skaw skean skelf skelly skelmersdale Skelton sken skerrick sket skewwhiff skiamachy skibob skidlid skidpan skidproof skidway Skijoring Skikda skillion skilly Skimmia skiplane skippet Skipton skirret skite Skokiaan Skolly Skrowaczewski Skua skylab skyscape slade slaister slapshot Slatkin slaughterman slaughtermen Slavism Slavkov Slavonia Slavophile/S slavs sleave sleezy Slesvig slezsko slickenside sligo slimmed slingback slipnoose slipperwort slipsheet slipway sloot Slovak Slovene slowcoach slowworm slubberdegullion slype smallage smallboy smallclothes smallholding smallmouth smallsword smaltite smalto smaragd smaragdite smarmy smatch Smeaton Smetana smew smilacaceous Smilax Smirnov smit smokeho smokejack smoko Smolensk Smollett smoodge smriti snackette SNCC sned snib snicket snipefish SNOBOL snog snorri snowberry snowbird snowblink snowdon snowdonia snuck snye soakaway soapberry soapolallie soares sobeit Sobranje soche Socinian socinus socman socred sodamide soddy Soderblom Soderstrom Sodom soekarno soemba soembawa soenda soerabaja Soffel softa sogat Sogdian sogdiana soh soho soilage soissons sokoto sokotra solan solander solarimeter solarism soldo Solenodon solent soleure solfeggio solferino soli solidary solifidian solihull soliman sollicker solonchak solothurn Solti Solutrean solvay solway solyman Solzhenitsyn Somaliland somewise somme somniloquy somnus sondage Sondheim Songhai songkok soniferous soo soochow sook soong sophistocated sorata sorbefacient Sorbian sorbic sorbitol Sorbonne Sordello soredium sorn sorocaba sororicide sorosis sorrento sosnowiec Sothic Sothis sotto soudan soult soundpost soupfin Souphanourong sourdine Souslik Sousse Souterrain Southdown Southern southmost Southport Southron Southwark soutine Sovetsk Soviet Soweto Soyinka Soyuz sozzled Spaak spacewalk spadefish spadiceous spagyric spalato spalpeen spancel sparable sparce sparerib sparid sparoid sparrowhawk sparry Spartacus Spassky spatchcock spatterdash spearwort spectrobolometer speedwriting Speenhamland speight spelaean spelk spellican Spenborough Spence Spengler Spenser Spenserian speos spermatorrhoea spermic spermine spermogonium spermophyte spermous spey/R sphenic sphenogram spheroidicity sphingomyelin sphragistics sphygmic sphygmoid spiderman spif spiffing spiflicate spignel spina spindlelegs spiniferous spinose Spinoza Spinozism spiritus spirketting spiroid spironolactone spitchcock spithead Spitsbergen spitsticker spiv Spivakov splake splanchnic splashback/S splenitis splodge spock spode spoilfive spondulix spongin spongioblast sponsion spoonbill sporades sporocyte sporran sportscast sportswrite sporule sprag Spratly sprechgesang sprechstimme Springhaas springhalt springhead springhouse springlet springvale spruik spue spuggy spumescent squacco squalane squarrose squattocracy squeteague squireen squirrelfish squit squiz Srbija srinagar stableboy stabroek stackframe stacte staddlestone Stade stadholder stadiometer staffa staffman stagflation staggard stagira Stagirite staines stairhead Stakhanovism Stalinabad Stalingrad Stalinogrod Stalinsk stambul staminode standalone standfast stane Stanislavsky Stanleyville stanniferous stannite stannum stanovoi stans staphyloplasty staphylorrhaphy stara starflower Starker startc starwort statius stauroscope Stavanger Stavropol staysail steakhouse steamie steamtight stearoptene steatorrhoea Steber stecher stedfast Stefansson Stegodon Stegomyia Stegosaurus Steier Steiermark Stein Steinbeck Steinitz stellarator stelliferous Stellite stellular stemhead stendhal stenopetalous stenophyllous stenotropic stepdame stercoricolous sterculiaceous stereochrome stereochromy stereometry stereotaxis stereotomy stereovision sterlitamak Stern sterne stevenage stevengraph steyr sthenic stheno stibium stich stichometry stickybeak Stijl stilicho stillage stillicide stilliform Stillson/S Stilton Stilwell stingo stinko stitchwort stiver stoa stob stockfish Stockhausen stockjobber Stockport Stockwood Stokowski Stokys STOL stomack stomatic stomatoplasty stoneboat stonecast stonechat stonefish stonefly stoneground stonk stonkered stook stoppard storeyed storiated stormproof stornoway storr/S Storting stoss stot stotinka stotious stotter stound stoup stour Stourbridge stoush strabo strabotomy strachey Stradivari Stradivarius Strafford Stralsund strandloper Stranraer Stratas strategem/S Strathclyde stratigraphical/Y stratopause Straus Stravaig strawworm streamy streetlight Streisand Strelitzia strepitous stretchy Stretford Streusel striction strigiform strimon strine strobic strobilaceous stroganoff Stroheim strokefinder stromboli strongman strongyle strontian Strophanthus stroppy stroy strychnic Strymon Stu stubbs studdingsail studwork sty Stylops stylostixis stypsis styracaceous styria suakin subacetate subah subangular subapostolic subaqua subarid subassemblage/S subastral subauricular subaxillary subbass subcalibre subcartilaginous subception subchannels subcluster/S subdelirium subduct subelement/S subepidermis subequatorial suberic suberin suberose subfloor subfusc subinstance/S subjectify sublapsarianism submental subordinary subordinationism subotica subpanel/S subparameter/S subprocessor subscan/S subscapular subsocial subsolar substantialism substomatal subtangent subternatural subtorrid subtreasury subufd/S suburbicarian subvene subzero succentor succeptibility successsive succinic succoth succursal succuss suckerfish sudarium sudbury sudd Sudetenland sudetes sudor Sudra suetonius sufferage suffiency sufflate suffruticose suffumigate Sufi Sufism sufu suggestibly suharto suisse sukarnapura sukhumi sukkoth suleiman sulla Sultanabad Sulu Sumba Sumbawa Summers summerweight Sumo sump sumpter sumy sunbake Sunderland sundog sundress/S sundsvall sungari sungkiang sunglow sungrebe sunhat Sunni Sunnite sunray sunstar suntrap suo Suomi superaltar superbazaar supercede/DS supercolumnar superconduction superdense supererogate superfemale superfuse superglacial superhero superhet superhumeral superlanguage superload supermale supermodel/S supermundane supernational superorganic supersex superstruct suplex supralapsarian supremo suqutra sur sura surakarta sural surat surculose surd surfbird/S surfcasting surfie surgeoncy surgeonfish suribachi suricate Surinam Suriname surrebuttal sursum susa susah Susanna suseptible Susian suslik suss susso Susu susurrate Sutcliffe sutlej sutler suva Suvorov Suwannee Svalbard Sverdlovsk sverige Svetlanov svizzera Swabia swacked Swadeshi swanage Swanee swaraj sward swarf Swatow Swazi Swedenborg Swedenborgianism sweelinck Sweeny sweetiewife sweetman sweetmeal sweptback sweptwing sweven sweyn swiftie swiftlet swindon swinepox swingboat swingle swingometer/S switchgirl Swithin swob swordbill swordcraft swordsmen swordstick/S swound/S swy sybaris sydneysider syene syktyvkar syllabism syllabogram syllabography sylva Sylvan sylvanus Symons sympathectomy symphile sympodium symposiac synarchy syncarp synchrometer synclastic synclinorium syncom syncrisis syndactyl synecious synovia synthetism sypher syphiloma syr Syriac Syrtis syssarcosis systematology sytactic syzran Szabadka Szczecin Szechwan Szeged Szell Szerying Szeryng Szewinska Szombathely Szymanowski taata tabaret Tabasco tabescent Tabriz Tacamahac Tacchino Tachina tachograph tachylyte tachymetry tachyphylaxis tacket tacmahack tadmor Tadzhiki taegu taejon tael taenia taeniafuge taffrail tafia tafilelt Tagalog taganrog taggers tagliatelle tagmeme tagmemics tagore tagus tahina tahr tahsil tahsildar Tai Taichung taig tailpipe tailplane tailskid tailstock taimyr tain Tainan taine Taino Taiping Taisho taiyuan taj Tajik tajo takahe takamatsu takao takeaway takin takoradi Talaing talapoin talaria talavera talbot talca talcahuano taliesin taligrade taliped tallinn tallis Talmudist talos taluk Talvela talweg tamasha tamatave tamaulipas tambac tambora Tambov tamburlaine Tamerlane tamis tammerfors tammuz tammy tampere tampico Tamworth tana Tanagra tanana tancred tandjungpriok tandoori tangleberry tangshan tanguy tanis tanist tanjore Tanjungpriok Tannenberg tanta tantalous tanto tantrism tapadera tapemark/S taphouse tarabulus taradiddle taramasalata tarantass tarantella taranto tarawa tarbes Tardenoisian tarentum Targum tarim Tarkington tarnal tarnation tarnishs Tarnopol tarpan Tarpeia Tarpeian Tarquin tarradiddle tarragona tarrasa tarshish tarsia/I tarsometatarsus Tartarean Tartaric tartarous Tartarus tartu tashi tashkent tasimeter tasman Tasmanian tasset tassie tassle Tatar Tatary tatchell tati tatouay tatra Tatum Taunton taupo tauranga tauromachy tav tavel tawney taxaceous taxiplane/S Tay Taymyr Tayra Tayside Tbilisi Tchad teacake Teal Tear teashop Tebaldi Technicolor Technion technocommercial technography tectorial tecumseh tedder teesside teet tef teg tegular tehuantepec teide teilhard tejo Tel tela telanaipura telautograph telecomunications telega telegenic telegnosis telegonus Telegu telemachus Telescopium telescopy telescript telespectroscope telestereoscope telestich teletext teletranscription teletube teletypesetter televideo telewriter telexed telexes telexing telfer telferage Telford tellurate tellurion tellus telpherage Telstar Telugu Tema Temne Tempe Templar temuco tenaille Tenebrae tenedos Tenerife teng tengri teniafuge teniers tenniel tenno Tennstedt tenorite tenorrhaphy tenotomy tensible tentation Tenzi tenzing tepal tepefy tephrite tepic teratism teratoid terbia terceira Terence terephthalic tereshkova Teresina Tereus terminosity termor terne/N terni Ternopol terotechnology Terrani terrestial terrine territorian tertial tertium tertullian teruel terylene terza terzetto tesseract tessin testiculate testudinal Tethys Teton tetrabrach tetrabutylammonium tetrachlorethylene tetracyclic tetragram tetraphenyl tetraplegia tetrapody tetrapterous tetrastich tetrastichous tetrasyllable tetrazzini tetroxide tetzel Teucer Teucrian teutoburger Teuton Teutonism tevere tevet Tewkesbury textualism teyde tezel thackeray thaddeus thadentsonyane thales thalweg thammuz thanatopsis thanet thanjavur thapsus thatcherism thaumatology thaumatrope theaceous theanthropism thearchy Thebaid thebaine thegn theine Themis themistocles thenardite theocrasy theocritus Theodora theodorakis Theodoric theomachy theomancy theomania theomorphic theopathy theophagy Theophilus theophobia theophrastus theorbo theravada therezina therfore therianthropic thermaesthesia Thermit thermobarograph thermobarometer thermoelectricity thermogenesis thermomotor thermophysical thermoregularity thermostatical thermotensile thermotherapy theroid theropod Thersites thersitical thesauri thespis Thetford thickleaf thimblewit thingumabob thioalcohol thiofuran thionine thionyl thiopentone thiophen thiosinamine thirdstream thirlage thirlmere thisbe tholos Thomism thonburi thoracoplasty thornbill Thorndike thoron thoroughpaced thorp thorshavn Thorvaldsen thrave threadneedle threadworm threap throatlash thrombogen thrombose Thucydides Thuja thumbnut thumbstall thummim thun/R thunderbox thundery Thurgau Thuringia Thuringian Thurn thuya Thyestes thymelaeaceous tia tiberias Tiberius tibesti tibiotarsus tibullus tibur ticino tiddler tiddly tidewaiter tiebreaker tiepolo tierra tiffin tiflis tightknit tiglic tigrinya tihwa tikoloshe Tilburg Tilbury tiliaceous tillicum Tilsit timaru timberyard timbuktu timecard timescale/S timeslice/S Timor Timoshenko Timour tindal tineid tinpot Tintagel tintinnabulum tipcat Tippett tiptop tipu tiran tiresias tirich tiro/S Tirol tirpitz tirso Tiruchirapalli Tirunelveli Tisa Tishab Tisiphone tisza Titanesque titanite Titanomachy titanosaur titanothere tithonus titicaca titman Titograd titubation tiu tiv Tivoli Tjirebon TKO Tlaxcala Tlemcen Tlingit Tmesis toadeater/MS toadfish/MS toadflax toadstone/MS Tobey tobit tobol Tobolsk Tobruk tocantins tocology Tocqueville toecap toey Togliatti Togoland toheroa Tojo Tokay Tokelau Tokharian Tokoloshe Tokugawa Tolan Tolbert Tolima Tolkien Toller Tolly tolpuddle Toltec Toluca toluyl tolylphosphine tomalley toman tombola tombouctou Tome tomograph Tomowa Tomsk Tonbridge Tonga Tonka Tonkin tonle tonsillotomy toowoomba toparch topazolite Tophet topotype topspin torbay torc toric torii torino torose torquay torquemada torre/S torrefy torricelli Torricellian torsibility Torsk tortelier tortellini tortile tortola tortuga Torvalds toscana toscanini toul toulon touraine tourane tourcoing Tourel touristy tournai tourneur toussaint touzle towbar towkay townhall townscape townshend Townsville toxaemia toxalbumin toyama TP trabzon tracasserie Traci/M tracksuit Tractarianism tractile trad tradeability traditor traducianism trafalgar traherne trailblaze trajan tralee trammie tranformed tranmission tranmitted trannie transcalent Transcaucasia transculturation transcurrent transformism transgranular transilient transkei transliterator translunar transmigrant transmittancy transmundane transpadane transpassive transpond transportaion transput/RZ transshipped Transylvanian tranverse trapan trapani trapes trapeziform trappean Trappist trasimene travancore traymobile trebizond Treblinka treename/S treenware tref trehala treitschke trengganu Trent trente trento tressure tret trevally Trevino Treviso trevithick triac triazole tribade triblet tribromoethanol tricarbonyl tricentenary trichinopoly trichloro trichloroethanol trichloroethylene trichology trichosis trichroism tricktrack tricostate tricritical tricriticality tricrotic tricyclohexyl tridactyl tridentate Tridentine tridentum triecious trieste trifold trihedron trihydrate trihydric triiodomethane trike trilateration trilemma trilithon trimethadione trimetric trimolecular trimurti trinacria trincomalee Trinil trinitrobenzene trinitrocresol trinitroglycerin trinitrophenol trioecious triolein tripalmitin tripersonal triphenyl Tripitaka tripody tripolitania tripterous triptolemus triptyque tripura tripwire triserial triskaidekaphobia trismegistus tristich tristichous tritanopia tritiate Triticum triunitarian trivandrum troas troat trobriand trocar trochelminth trode trog troilism troilus trois trollope tromba Tromelin Trondheim tropaeolin trophoplasm tropicbird tropine tropophyte troppo tropylium trossachs trotskyist trotyl troubador trouse Trowbridge Troyanos troyes trucial truckie trudgen Truffaut trug/S truk trumeau Truro tryma tryptophanyl tsade tsana tsarevitch tsarevna tsaritsyn tselinograd tshiluba tshombe tsinan tsinghai tsingtao tsingyuan tso tsonga tsotsi tsugaru tsukahara tsushima tsutsugamushi tswana Tuamotu Tuareg tuart tuatara tubate tubman tubuai tubuliflorous Tucana Tucker Tuckwell tucotuco tugela tuileries tula tularaemia tull tully tumblehome tumefacient tumefy tumular tumulose Tunbridge tungstous tungting Tungus Tungusic tunguska tunnage tupamaro Tupi tuppenny tupungato turaco Turanian turbary turbogenerator Turco turdine turenne turgenev turgent turgite turgot turishcheva turkestan Turkey Turki Turkic Turkism Turkmen Turkoman Turks turku turncock turnround turpeth turpin tusculum tussaud tussis tutankhamen tutiorism tutsan tutsi tutty tutuila tuva Tuvalu tuxtla tver twat twattle twayblade twee tweeddale tweedledum tweedsmuir tweeny Twelfthtide twelvemo Twi Twickenham twite TWP Tyche tychism tycho tye tylopod tylosis tympanitis tyndall tyndareus tynemouth tyneside Tynwald typebar typhlitis typhlology typhoeus typhogenic typhoidin typothetae tyr Tyrian Tyrol Tyrolienne Tyrone Tyrr Tyrrhenian tyumen tzekung tzetze Ubangi ubbelohde ubiety Ubiquitarian ucayali ucca uccello udaipur udal Ude udine udmurt udo udometer uele ufa ufd ufo ufology ugali ugaritic ugli Ugrian Ugric UHF uhlan Uhland Uhuru Uigur Uinta uintathere Uitlander Ujamaa Ujiji Ujjain Ujung Ukase Ukiyoe Ulbricht ulfilas Ullswater Ulm ulmaceous ulpian Ulsterman ultramicrometer/S ultramicroscopic ultramundane ultrared ultrathin ultravirus ultrawet Ulyanovsk umayyad umbellule umberto umbles umbo umbria Umbrian Umbriel umiak umpy umrcc umtali unaesthetic Unalaska unallocateed unamuno unaneled unaskable unbelt unbirthday unbonnet unchurch unclad unco uncodeable unconservative uncontroversial undated undefine underachieve underbuy undercart underclay undercroft underdevelop underemphasis underfelt underfilled underfloor underfur undergrown underhung underletting underlinen undermentioned undernourish underpainting underpay underpinned underpitch/DGS underprice/DGS underprop underquote underseal underset undersheriff undersmooth/DGS underspent understaff underthrust undertint undertrump undertype undialectical undirectional undro undset unexcited unforced ungaretti ungava unguiculate unguinous unguis ungula unguligrade uni Uniat unibus unicef unicolour unicostate unidirection uniformally unilateralist/S uniliteral unimak unimodular uninfluential uninterruptable Union/A unipersonal unipod uniseptate uniserial United uniterm unlead unlettable unmodeled unmusical unpaddable unpolitic unprepossessing unreactive unreckonable unreligious unrepair unrwa unskilful unspecifed unspecify unsteel unsuggestive unsupportive unterwalden untravelled untypical unwarrant upanishad upcountry uphroe upolu upperbound/S uppsala uprouse upsadaisy upsala upstand upstretched upswell Ural Uralic uranalysis Uranian uranism uranite Uredo uredosorus uredospore uretic urey urfa urga Uriah Uriel urim urinant uriniferous Urmston Urnfield urogenous uroscopy urquhart urticaceous uruapan urumchi urundi username ushant ushas usnach uspallata usquebaugh ussher ussuri ustashi Ustinov ustulation ustyurt usumbura utamaro utgard uther utriculitis utrillo uttar uvedale uvulitis Uxbridge uxmal Uzbek Vaal Vaasa VAC vacherin vadodara vadose VAG vagal vaginate vaginectomy vaginismus vaginitis vagotonia vagus vahana Vaishnava vaisya valais valdai valdemar valdivia Valenciennes valency/S valens Valentinian valera valerianaceous valeric valeta valetta valgus Valjakka valladolid vallation vallecula vallombrosa valona valonia valuta valvate valvule valvulitis vambrace vanadate vanadic vanadinite vanadous vanbrugh Vanda Vandyke vang Vanir vansittart vanua Vanuatu vanzetti vaporescence vaporific vaporimeter vara varactor Varady varanasi Varangian vardar vardon varec varese Varga vargas variablity varicella varicellate varicelloid varicocele varicosis varicotomy variola variolate variole variolite variscite varityper varna varro Varuna vas vasari vasco Vaseline vashti vasoinhibitor vasoregulatory Vaticanism vaticide vauban vaucluse vaud vav vavasor VDU Veasy Veblen Vedalia Vedanta Vedda Vedernikov vedette Vedic veg vegan veii veinstone veinule vela velate velcro veldskoen veleta veliger velites vellicate vellore Velsen vena Venda venenose venepuncture Veneti Venetia Venetic Venezia Venizelos venlo Venora venose venosity ventris Venusberg Veracruz verbenaceous vercelli vercingetorix verderer verdun verecund vereeniging vergeboard verglas verkrampte verlaine verligte vermeer vermination vermis vermivorous Vernoleninsk verny Veronal Veronese verrazano Verrett verrocchio verruca verrucae verrucose versabraille versant versatec verst vert verticillaster verticillate vertu Vertumnus verulamium vervain vervet verwoerd vesalius vespasian vespertilionine vespucci vesuvius vetiver viareggio viator vibraculum vibronic vicenary vicenza vico vicomte victoriana videlicet videotex vidhan vienne Vierne Vietcong Vietminh viewport/MS viewscan vignola vigny vigo Vihuela Viipuri Vijayawada Vilayet Villach Villahermosa Villainage Villanovan Villars Villeneuve Villeurbanne Villiers Villon villous Vilnius Viminal vimineous vina vinasse Vincennes Vindhya vinegarette Vineland vinificator Vinland vinnitsa violone Virchow viren virial virtu Visakhapatnam Visby viscoid Visconti Viseu Vishakhapatnam Vishinsky vistula vitaceous vitaphone vitascope Vitebsk vitoria vitrain vitrescence vitrescent vitric vitriform vitruvius vitta vittle vituline viverrine viyella Vizagapatam Vizcacha Vizsla Vlaardingen Vlach Vladikavkaz Vlaminck Vlei VLF Vlissingen Vltava vocate Voetsek Voetstoots Vogelweide Vogul voidage voiotia voir voix vojvodina Volans Volapuk Volga Volgograd volitant vologda volost Volsci Volscian volsung volsunga voltaism voltammeter volturno volvulus vomer Von voortrekker Vorarlberg Voronezh Voroshilov Voroshilovgrad Voroshilovsk vorster Vortumnus vosges vostok Votyak vouge Vouvray vox Vries VTOL Vuelta vuillard Vulcanite vulgaris Vulpecula vulvovaginitis Vyatka vyborg Vyshinsky Vyvyan WAAC WAAF Waart wabble/DGS wace wadai Waddenzee Waddington wadmal wadset wagram wagtail Wahhabi Waikato Waikiki waistcloth Wajda Wakashan Wakayama Wakerife Waksman Walach Walachia Walbrzych Walcheren Waldemar Waldenburg Waldgrave Waldheim Waley walfish walhalla walkable walkley Wallachia wallah wallasey Walloon Wallsend Walpurgis Walsall Walsingham Walther Walvis wame Wand wanderoo wandoo Wandsworth wanganui wanhsien wank wankel wankie wanna Wapentake Wappenshaw Waragi Warangal waratah Warbeck Ward wardian wardle wardmote Warfarin Warhol warhorse/S Warison Warley Warren warrigal Warrington warsle warta Wartburg Warwickshire Wasatch washaway washday/S washerwomen washery washin washwomen wassermann wasteweir watap watchstrap waterage waterbrain waterbuck Waterford waterspout watertower Watford Watling Watteau Wattenscheid wattlebird Watts Watusi Waugh waul waveband/S wavefunction/S wavellite wavemeter waveoff waw wawa wawl waxberry waxbill waxplant Wayland wayzgoose waziristan weakfish weald weaponeer wearproof weasand weaverbird webbs Webern webwheel weddell wedekind Wedgwood weedkiller weelkes ween weeny Weigela weighbridge/S weightlifter weightlifting weihai Weikert Weikl Weill Weimar Weismannism Weisshorn Weizmann weka welkom welland wellesz wellies Wellingborough Wellingtonia Welsbach Welshman welterweight Welwitschia welwyn Wembley Wenceslaus Wendish Wenkel Wensleydale wentletrap wernerite wersh weser wesker wessex Westernism Westfalen Westmeath Westmorland westmost Wetterhorn Wexford Weymouth whacko whangarei whare wharfie wharve whatsit whaup wheatworm whereafter wherrit wheyface whidah Whikehart whimbrel whin whinchat whinge whipstall whipworm whirlabout whitby White whitebeam Whiteboy Whitechapel whitedamp Whitefield whitefly whitethorn whitewood Whitlam Whitley Whitlow Whitsun Whitsuntide Whittington wholefood wholemeal wholism whortleberry whyalla whydah Wickersley wicketkeeper/S wicketkeeping Wickliffe Wicklow wickthing wicopy widdershins widgery widgie widnes Widor widukind wien Wiesbaden Wigner Wigtown Wijngaarden wikiup Wilberforce wilde wilhelmshaven wilhelmstrasse Willcocks willemstad willowherb wilmslow wilno Wilton Wimbledon Wimshurst wincey Winceyette Winchesters Winckelmann windbound windcheater/S windchill windermere windflower windgall windhoek windhover windlestraw windrow windsail windsock winebibber winkelried winnipegosis winterfeed winterthur winterweight wipo wirepuller wiretapping wirewalker wirra wirral wis Wiseman wishlist/S wislany wismar wist witan witchetty wite witenagemot withershins Wittenberg wittol Witwatersrand wivern Wixell woad/D woadwaxen woald Wobbegong Wodehouse Woden wodge/S wog woggle Woking Wokingham wold Wolds wolfbane wolfenden Wolffian wolffish wolfit Wolfram wolframite wolfsbane Wolfsburg wollastonite Wollongong wolly Wolof wolsey wolve/R Wolverhampton womera wonsan woodborer woodcarving woodchat woodgrouse woodhook woodlark woodlouse woodrush woodscrew woodseats Woodsia woodwaxen woodworm Woolf woolfell woolgrower Woomera woop woorali workaday workbag workfile/S workmate/S workperson workshy worksop wormcast wormseed wormwood worsley wot Wotton Woulfe Wraac wran wrapover wrapround wreckfish wreckful wrekin Wrexham wroclaw wrongdo/Z wroth wrybill wryneck wuchang wuhsien wuhu wulfenite wulfila Wunderlich wundt wuppertal wurley wurst wus wusih wuthering wutsin wycherley wycliffe Wycliffite wye Wykeham wynd wyvern xanthein xanthippe xanthochroid xanthochroism xanthoma xanthophyll xanthous xanthus xci xcii xciv xcix xcvi xcvii xenakis xenocrates xenocryst xenogamy xenogenesis xenoglossia xenolith xenomorphic xenophanes xenophon Xeres xeroderma xeromorphic xerophthalmia xerophyte xerosere xerosis xhosa xiphisternum xiphoid xiphosuran Xmas xuthus xxi xxii xxiii xxiv xxix xxv xxvi xxvii xxviii xxx xxxi xxxii xxxiii xxxiv xxxix xxxv xxxvi xxxvii xxxviii xylan xylidine xylocarp xylograph xylography xyloid xylol xylophagous xylyl xyst/R yabber yabby Yablonovy yaffle yafo yagi yahata Yahweh Yakut Yakutsk Yalu yamagata yamani yamashita yammer Yangtze yanina Yankeeism yapok yapon Yarborough Yarkand Yaroslavl yarwood Yashmak yataghan yate yauld yaunde yaup yaupon yautia yawata yawp yazd yean yeanling yegg Yekaterinburg Yekaterinodar Yekaterinoslav yeld Yelisavetgrad Yelisavetpol Yelizaveta yelk yellowbark yellowbird yellowhammer yellowlegs yellowweed yellowwood yenan Yenisei yentai Yerba yerevan Yerkes yestreen yeti Yevtushenko yezd ygerne Yid yike yingkow yippee yirr ylem ymir yob yod yodle yogh yohimbine yoicks yokefellow yola yom yoni yonne yonnie Yorke Yorkist/S Yoruba Yoshihito Youngberry Younker Ypres Yquem Yresko Ysaye Yser Yseult Yssel ytterbia ytterbite yttria yttriferous Yuga yuk Yukawa yulan Yuman Yurev Yurlov yurt Yuzovka yvelines ywis Zaandam Zabrze Zacatecas Zaccaria Zacharias zacynthus zaffer zagazig zagreus zagros Zaibatsu Zakai Zakuski zama Zambezi Zamboanga Zamenhof Zamia zamindar zamindari zamora Zanasi zante Zanthoxylum zanu zapata zaporozhye Zapotec zappa zapu zaqaziq zaragoza zarathustra zaratite zareba zarf zarga zaria zarzuela zastruga zayin zeami zebec zebedee zebrawood zebu zebulun zecchino zechariah zed zedekiah zedoary zee Zeebrugge Zeeland Zeeman zein zeist zemindar Zemstvo zenana Zend zener Zenobia zephaniah zephyrus Zepperitz Zermatt Zetland zeugma zeuxis Zhdanov Zhitomir Zhivkov Zho Zhukov zia ziaur zibeline zibet ziff ziggurat zigzagger zila zilpah Zimbabwe zinciferous zincite zinckenite zincograph zincography Zindabad zingiberaceous zinjanthropus zinkenite Zinman Zinovievsk Zinzendorf zipangu zircalloy ziska zlatoust Zoa zoaea zoan zoea zoffany zohar zola zond zonule zoochemistry zoochore zoogloea zoography zooid zoolatry zoometry zoomorphism zoophile zoophilia zoophilism zoophobia zooplasty zoosperm zoosporangium zootomy zootoxin/S zorilla Zoroastrianism zorrilla zoster Zouave zoug Zoysia zsigmondy zucchetto zugzwang Zuider Zuidholland/M Zukerman/M Zwilich/M ispell-3.4.02/languages/english/PaxHeaders.22185/altamer.10000644000000000000000000000013213770761356017753 xustar0030 mtime=1608770286.044268368 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/english/altamer.10000444003214100001440000000110413770761356021020 0ustar00geofffaculty00000000000000autofocussed autofocusser autofocusses autofocussing cancellate/D caviller/S cigaret crystalization/AMS defocussing dishevelled dislodgement dowelling downdraught draughty/PRY duellist/S enthral/S gimballed glamourous/PY gruelling/Y libeller/S libellous/Y lodgement nonprogramer/MS pedalled pedalling polycrystaline programability programable programed/A programer/AMS programing/A pummelled recrystalize snivelled sniveller/S snivelling/S swivelled swivelling teaselled teaselling teetotaller tinselled tinselling travelogue/MS untrammelled updraught yodelled yodeller yodelling ispell-3.4.02/languages/english/PaxHeaders.22185/british.20000644000000000000000000000013213770761354017771 xustar0030 mtime=1608770284.956233387 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/english/british.20000444003214100001440000012225013770761354021044 0ustar00geofffaculty00000000000000abnormalise/S abolitionise/S absolutisation/MS absolutise/S accessorise acclimatisable/MS accoutre/DGS acculturise acetonisation/MS acetonise/S achromatisation achromatise/DGS acidise/S acronymise/S actionise/S activise/S adrenalise/S adulterise/S adverbialise/S aegyptus aeon/MS aeonian aeonic aeonism/MS aerosolisation aesthesia aesthesis aesthetical aesthetician aestheticise/S aestival aestivate/N aetiology/MS aetna Africanisation/MS Africanise/DGS Afrikanerisation/M Afrikanerise/DGS agatise/S agenise aggrandisable/MS aggrandisation aggrandise/DGRSZ agnise/DGS agrarianise/S alarum albumenisation albumenise/DGS albuminisation/MS albuminise/S alchemise alcoholisable/MS alcoholisation/MS alcoholise/S algebraisation/MS algebraise/S alienise/S alkalinisation/MS alkalinise/S alkalisation alkalise/DGS allegorisation allegorise/DGRS alphabetisation/MS alternise/S aluminisation aluminise/DGS amalgamatise/S amalgamisation/MS amalgamise/S Americanisation/MS Americanise/GRSZ amoralise/S amorphisation amorphise amortisable/MS amortisement/MS amourism/MS amouristic/S anaemically anaesthesiologist anaesthesiology anaesthetisation/MS anaesthetist anaesthetization/MS anagrammatisation anagrammatise analogise/S analysation anarchise/S anathematisation anathematise/DGS anatomise angelicise/S angelise/S Anglicanise/S anglicisation/MS anglicise/DS angularisation/MS angularise/S anhydridisation/MS anhydridise/S animalisation/MS animalise/DGS animalises/A annalise/S annualisation anodisation antagonisation/MS anthologisation anthologise/DGRS anthracitisation/MS anthropomorphisation anthropomorphise/DGS anticatalyser/MS anticentralisation/MS anticise/S antiepicentre/MS antifertiliser/MS antilabour/MS antimediaeval/MS antioxidiser/MS antioxidising/MS antipathise/S antiquarianise/S antirumour/MS antisensitise/RSZ antisensitiser/MS antisepticise/S antiseptise/S antisyphon/MS antithesise anvilled anvilling aphorise/DGRSZ apostatisation apostatise/DGS apostrophise/DGS apotheosise apparelling appetise/DSZ appetisement/MS Arabianise/S Arabicise/S arabisation arabise/DGS arborisation arborise/DGS arboures arcticise/S arithmetisation/MS armourless aromatisation aromatise/DGS arsenicise/S arterialisation/MS arterialise/DGS artificialise/S Aryanisation Aryanise/DGS asafoetida asepticise/S Asiaticisation/MS Asiaticise/S Assyrianise/S astigmatiser/MS asynchronise/DGS atomisability atomisable atticise/S attitudinisation attitudinise/DGS Australianise/S Austrianise/S autoimmunisation autoionisation automatisation/MS automatise/S autotomise avianise azotisation azotise/DGS Babelise/S Babylonise/S bachelorise/S baconise/S bacterise balladise/S balsamise/S bantamise/S baptisable/MS baptisement/MS barbarianise/S barbarisation barbarise/DGS baronise/S barycentre bastardisation/MS beaverise/S beclamour/DGS becudgelled becudgelling bedlamise/S bedrivelled bedrivelling bejewelled bejewelling bemedalled Berlinise/S Bessemerise/S bestialise/DGS beveller/S bichromatise/S bicolour/D bimetallist bimetallistic biographise/S biologise/S bipolarisation bipolarise/S Birminghamise/S bistre/D bisulphate bisulphide bisulphite bituminisation bituminise/DGS bolshevise bonderise borise/S Boswellise/S botanise/DGS boulevardise/S bourbonise/AS bowdlerisation bowelled bowelling brominise/S brutalisation/MS bureaucratise/DS busheller/S Byronise/S Byzantinise/S cadaverise/S cadmiumise/S Caesarise/S Calvinise/S Canadianisation/MS Canadianise/S canalisation/AMS canalise/DGS canaller/S cancellable cancellous cannibalisation/MS canonisation/MS canonise/GRSZ canonises/U capitalisable/MS Caponisation caponise/DGS capsulisation capsulise/DGS caracolled caracolling caramelisation/MS caramelise/DGS carbolisation carbolise/DGS carbonatisation/MS carbonisable/MS carburisation carburise/DGS carnalise/S carolled caroller/S carolling cartelisation/MS cartelise/S castorised/MS catabolise/DGS cataloguise/S catalyse/RSZ catalyser/MS catechisable/MS catechisation/MS catechise/DGRSZ catheterisation/MS catheterise/S Catholicisation catholicise/RSZ Catholicised catholicises/U Catholicising causticisation/MS causticise/RSZ causticises/A cauterisation/MS cavillation cavilled cavilling/S celestialise/S Celticise/S centigramme/MS centilitre centreboard centrefold centrifugalisation/MS centrifugalise/S cephalisation cerebralisation/MS cerebralise/S ceremonialise/S chameleonise/S championise/S channelisation/MS channelise/S chattelisation/MS chattelise/S cheerfulise/S chemicalisation/MS chemicalise/S chequerboard chiselling/S chloridise/S chlorinise/S chloroformisation/MS chloroformise/S chorisation/MS Christianisation/MS Christianise/RSZ chromatise/S chromicise/S chromise/DGS chronologise/S Ciceronianise/S cinchonise cinematise circularisation/MS circularise/DGRSZ citizenise/S civilianisation/S civilianise/DGS civilisable/MSU clangour/DGMS classicalise/S classicisation classicise/DGS clericalise/SU climatise/S coalise/RSZ cocainisation/MS cocainise/S coeducationalise/S coenamour/DGS coequalise/S cognisably cognise/DGRSZ collateralise collectivisation/MS collectivise/DS colloquialise/S colonialise/S colonisability/MS colonisable/MS colonisationist/MS colourability/MS colourable/MPSU colourably/SU colourama colourcast/RZ colourfast/P colourific colourisation/MS colourise/S colourism/MS colourist/MS colouristic/S colouristically colourman colourmap/MS colourmen coloury columnisation/MS commercialise/DGS commoditise/DGRS commonise/S communalisation/MS communalise/DGRSZ communisation/MS companionise/S compartmentalisation/MS compartmentise/S complementiser/MS computerisable concentre concertise/RSZ concretisation/S concretise/DGS confederatise/S congenialise/S congregationalise/S connexion conservatise/DGS consonantise/S constitutionalisation/MS constitutionalise/S containerisation containerise/DGS contemporisation contemporise/DGS Continentalise/S controversialise/S conundrumise/S conventionalisation/MS conventionalise/GS conventionalises/U conventionise/S conversationise/S conveyorise/DGS convivialise/S copolymerisation/MS copolymerise/DGS copperisation/MS copperise/S coralled corbelled corbelling/S cordialise/S Corinthianise/S corporatise/DGRS corporealisation/MS corporealise/S cosmopolitanisation/MS cosmopolitanise/S cottonisation/MS cottonise/S counsellee/MS counsellorship crawlerise/S creaturise/S Creolisation Creolise/DGS cretinisation/MS cretinise/S criminalisation/M criticisable/MSU crofterisation/MS crofterise/S cruelise/S crystallisability/MSU crystallisable/MSU Cubanise/S cudgelled cudgeller/S cudgelling/S culturisation/MS culturise/S cupellation cupelled cupeller/S cupelling curarise/DGS curatise/S curricularisation/MS curricularise/S cutinise/DGS cutisation/MS cyclisation/MS cyclise/DGS Czechisation/MS dandyise/S Danisation/MS Danise/S Darwinise/S dastardise/S deaconise/S deaminise decagramme/MS decalitre/S decametre/MS decarbonisation decarbonise/DGRS decarburisation decarburise/DGS decasualisation decentralisationist decentralise/S decigramme/MS decilitre/S decimalisation/MS decimalise/DGS decimetre/MS decolonisation decolonised decolonises decolonising decolour/DGS decolourisation decolourise/DRS decriminalisation/M decriminalise deemphasisation/M deenergise/DGRS defeminise/DGS defenceman definitisation/MS definitise/DGS deflectionisation/MS deflectionise/S deformalise defunctionalisation/MS defunctionalise/S degenderise/DGRS deglamourise/DGRS dehumanisation/MS dehypnotisation dehypnotise/DGS deindustrialisation/M deindustrialise deinstitutionalisation/M deionisation deionise/S delegitimise/DGRS delimitise/S delocalisation delocalise delustre/DGS demagnetisable/MSU demagnetisation/MS demagnetise/DGRSZ dematerialisation dematerialise/DGS demilitarisation demilitarise/DGS demineralise/DGRS demobilisation demobilise/DGS demonetisation demonetise/DGS demonisation denationalisation denationalise/DGS denaturalisation denaturalise/DGS denaturisation/MS denaturise/RSZ denicotinise denizenise/S denominationalise/SU denormalise dentalisation/MS dentalise/S denuclearisation denuclearise/DGS deodorise/DGS deoxidiser departmentalisation/MS departmentalise/S departmentisation/MS departmentise/S depersonalise/GS depolarisation/MS depolarise/DGRSZ depoliticisation depoliticise/DGS depolymerisation depolymerise/DGS depressurisation depressurise/DGS deputationise/S deputisation deputise/GS derationalisation/MS derationalise/S deratisation/MS derealisation/M deregulationise/S desalinisation desalinise desensitisation/MS desensitise/DGRSZ desexualisation desexualise/DGS despiritualisation despiritualise despotise/S destabilisation destalinise/DGS desterilise desulphurisation desulphurise/DGS desynchronisation detribalisation/MS develled develling devilise/S devilled devilling devitalisation devitalise/DGS devocalise devolatilisation devolatilise/DGS diabolisation diabolise/DGS diagonalisation diagonalise/DGRS dialecticise/S diallist/S dialysability/MS dialysable/S dialyse/RSZ dialyser/MS diamondise/S diarrhoeic diarrhoetic dieselisation/MS dieselise/DGS differentialise/S digitalise/DGS dimensionalisation dimensionalise/DGS dimerisation/MS dimerise/DGS dimethylsulphoxide diminutivise/S diphthongisation/MS diphthongise/SU diplomatise/S disangularise/S disauthorise/S disbowelled disbowelling discanonisation/MS discanonise/S discolour/GM discolourisation/MS discolourment/MS discretisation discretise/DGS disdenominationalise/S disdiplomatise/S disembowelled disembowelling disenamour/MS disenthral/S disequalise/RSZ disharmonise/S disheveller dishevelling dishonourable/MPS dishonourably/S dishumanise/S dishumour/DS disillusionise/RSZ disindividualise/S disinsectisation dismalise/S disnaturalisation/MS disnaturalise/S disorganise/GRSZ disozonise/S dispapalise/S dispauperise/S dispersonalise/S dispopularise/S disrealise/S dissceptre/MS dissensualise/S dissocialise dissympathise/S disulphate disulphiram disulphuric disutilise/S divinisation/MS divinise/DGS dockisation/MS dockise/S doctorisation/MS doctorise/S doctrinisation/MS doctrinise/S documentise/S dogmatisation dogmatise/R dognapped dognapping dolomitisation/MS dolomitise/S dolour domesticise/S Doricise/S dowelled doweller dragonise/S dramatisable/MSU draughtboard/MS draughtsmanship/M drivelled driveller/S drivelling dualisation/MS dualise/SU ductilise/S easternise ebonisation ebonise/DGS ecclesiasticise/S echoise/S eclecticise/S economisation/MS ecstaticise/S Edenisation/MS Edenise/S editorialisation effectualise/S effeminatise/S egoise/RSZ Egyptianisation/MS Egyptianise/S Egyptise/S elasticisation elasticise/DGRSZ electricalise/S electricise/S electroanaesthesia/MS electrocauterisation/MS electrodialyse/RSZ electrodialyser/MS electrogalvanise/S electrohomoeopathy/MS electrolyse/DGS electromagnetisable/MS electrotonise/S elegise/DGS elementalise/S Elizabethanise/S emblematicise/S emblematisation emblematise/DGS emblemise/S embolisation embowelled embowelling emotionalisation/MS emotionalise/DGS emotionise/S empanelled empanelling empathise/DGS emphasisation/AM emulsionise/S enamellist/S enamour/DGMS enamoured/MPS enamourment/MS enarbour/MS encarnalisation encarnalise/DGS encolour/DGMS encyclopaedic encyclopaedically encyclopaedism encyclopaedist energisation energise/GRZ Englishise/S engramme/MS engrandise/S engrandisement/MS enhypostatise/S enolisation/MS enolise/S ensepulchre/MS ensorcelled ensorcells enthralment/MS enthronisation/MS enthronise/S entomologise/DGS envapour/MS envenomisation/M Epicurise/S epigrammatisation epigrammatise/DGRS Episcopalianise/S epitaphise/S epithetise/S epitomisation/MS epoxidise/DGRS equestrianise/S ergotised ergotises eroticisation eroticise/DGRS Eskimoised/MS Essenise/S essentialise/S esterisation/MS esterise/S eternalisation/MS eternalise/DGS eternise/DGS etherealisation/MS etherealise/DGS etherisation/MS etherise/DGRSZ ethicisation ethicise/DGS ethnicise/S etymologisation etymologise/DGS euhemerise eulogisation/MS euphemise/DGRS euphonisation euphonise/DGS Europeanise/GS evangelisation/MS evangelise/DGRSZ eventualise/S evolutionise/S excursionise/S exhibitionise/S existentialise/S experimentalise/S experimentise/S extemporisation/MS exteriorisation/MS exteriorise/DGS externalise/DGS facsimilise/S factorise/DGS fanaticise/DGS faradisation/MS faradise/DGRSZ fascisticisation/MS fascisticise/S fascistisation/MS fascistise/DGS fashionise/S fatalise/S favourless/S fecundise/S federalisation/MS femalise/S feminisation/MS feminise/DGS femtometre/MS ferrelled ferrelling ferritisation/MS fertilisable/MSU fertilisational/MS fervourless/S fetishisation/MS fetishise/DGS feudalisable/MS feudalisation/MS feudalise/DGS fiberisation/M fiberise/DGS fibreless/S fibrisation fibrise/DGRSZ fictionalisation fictionalise/DGS fictionisation/MS fictionise/S figurise/S filmise/S fiscalisation/MS fiscalise/S flamboyantise/S flannelled flannelling flavourful/Y flavourless/S flavoursome flavoury Fletcherise/S floralise/S fluidisation/MS fluidise/DGRS fluoridisation/MS fluoridise/S fluorosulphuric focalisation/MS focalise/DGS foetalisation/MS foreignisation/MS foreignise/S forejudgement/MS formalisable formularisation/S formularise/DGRS formulisation/S formulise/DGS forumise/S fossilisable/MS fossilisation/MS fossilise/GS fossilled fractionalisation/M fractionalise/DGS fractionisation/MS fractionise/S fragmentise/DGRS Francise/S Franklinisation/MS fraternisation/MS Frenchise/S frictionise/S frivolled frivoller frivolling fueliser/MS functionalise/S functionise/S funeralise/S funneller futilise/S futurise/S Gaelicisation/MS Gaelicise/S gallantise/S Gallicisation Gallicise/DGS gambolled gambolling gangplough gardenise/S gavelled gaveller gavelling gelatinisability/MS gelatinisable/MSU gelatinisation/MS gelatinise/DGRSZ generalisability generalisational genialise/S genteelise/S gentilisation/MS gentilise/SU gentlemanise/SU geologise/DGS geometricise/S geometrise/DGS germanisation/MS germanise/GRSZ ghettoisation/MS ghettoise/DGS giantise/S gimballing glacialise/S glamorisation/S globalisation/S globalise/DGS glottalise/S gluttonise/S glycerinise/S glycerolise/S glycogenise/S gnosticise/RSZ goddise/S goitre/S gonorrhoea gonorrhoeal gorgonise/DGS gospelise/S Gothicise/DGRSZ gourmandise/DGRS governmentalise/DGS grammaticise/S grangerise/DGRS granitisation/MS granitise/S granulise/S graphitisable graphitisation/MS graphitise/S Grecianise/S grecise/DG Greekise/S gruelled grueller/S gutturalisation/MS gutturalise/DGS gynaecocrat gynaecocratic gynaecologic/S gynaecology/MS gyrostabiliser/MS habitualise/S hamletisation/MS hamletise/S handselled handselling Hanoverianise/S Hanoverise/S hanselled hanselling harbourage/S harbourful harbourless/S harmonisable/MS Harvardise/S Harveyise/S hatchelled hatchelling Hattise/S hazardise/S heathenisation heathenise/DGS heavenise/S Hebraicise/S hebraisation/S hebraise/DGS hectogramme/MS hectolitre hectometre/MS Hegelianise/S Hellenisation/S Hellenise/DGS heparinise hepatise/DGS heraldise/S hereticise/S heroinise/S heroisation/MS heroise/DGS heroises/U hiccough/DGMS hirselled hirselling Hispanicisation Hispanicise/DGS historicise/DGS Hollywoodise/S hominisation/M hominised homoeopathic homoeopathically homoeopathy/MS homoeostasis homoeostatic homoeotypic homologisation homologise/DGRS honourability/MS honourableship/MS honourless/S hoodlumise/S hooliganise/S Hoosierise/S Hooverise/S horizontalisation/MS horizontalise/S hormonise/S horrorise/S hostilise/S hotelisation/MS hotelise/S houselled/U houselling/S hovelled hoveller/S hovelling hucksterise/S humanisation/MS humanitarianise/S humorise/S humoural humourless/PS humoursome hurricanise/S hyalinisation/MS hyalinise/S hybridisable/MS hybridisation/MS hybridise/DGRSZ hybridises/A hydrogenisation/MS hydrogenise/DGS hydrolyse/MS hydrosulphate hydrosulphide hydrosulphite hydrosulphurous hydroxylisation/MS hydroxylise/S hygienisation/MS hygienise/S hyperaesthesia hyperaesthetic hyperbolise/DGS hypercivilisation/MS hypercivilised/MS hypercriticise/S hyperemphasise/S hyperimmunisation/MS hyperimmunise/S hyperinsulinisation/MS hyperinsulinise/S hyperoxygenise/S hyperparasitise/S hyperpolarisation hyperpolarise/DGS hyperrealise/S hypersensitisation/MS hypersensitise/DGS hyperspiritualising/MS hyperthyroidisation/MS hyperthyroidise/S hypervitalisation/MS hypervitalise/S hyphenisation/MS hyphenise/S hypnotisability/MS hypnotisable/MSU hypnotisation/MS hypocentre hyposensitisation/M hyposensitise hypostatisation/MS hypostatise/S hyposulphite hyposulphurous hysterectomise/DGS ichneumonised/MS idiotise/S idolatrise/DGS idolisation/MS Iliadise/S illegalisation illegalise/DGS illegitimatise/S Illuminise/S immaterialisation immaterialise/DGS immobilisation/MS immoralise/S immortalisable/MS immortalisation/MS immortalise/GRSZ immortalises/U immunise/DGS impactionise/S impanelled impanelling imperialisation/MS imperialise/S imperilling impersonalisation/MS impersonalise/GS improvisatorise/S indigenisation indigenise/DGS individualisation/MS indraught industrialise/AS inferiorise/S infernalise/S infidelise/S infinitise/S informalise inhumanise initialisable/U insolubilise institutionise/S instrumentalise/S insularise/S insurrectionise/S integralisation/MS integralise/S intellectualisation/MS intellectualise/DGRSZ intercivilisation/MS intercolonisation/MS intercrystallisation/MS intercrystallise/S interhybridise/S interiorisation interiorise/DGS interjectionalise/S interjectionise/S interjudgement/MS internationalise/GS interorganisational intraorganisation/MS iodisation iodise/DGRSZ Ionicisation/MS Ionicise/S ionisable/MS ionisation/MS ionisation's/U ionisations/U Iranise/S Irishise/S ironise/S irrationalise/S irregularise/S Islamisation/MS Islamise/DGS isochronisation isochronise/DGS isoimmunisation/MS isoimmunise/S isomerisation/MS isomerise/DGS Israelitise/S Italianisation/MS Italianise/DGRSZ italicisation/MS Jacobinise Japanisation/MS Japanise/DGS jargonisation/MS jargonise/DGS jasperise/S jeopardisation Jesuitise/DGS jewellery/S jobcentre/S Jonathanisation/MS journalisation/MS jovialise/S judgemental judgementalism judicialise/S juvenilise/S kaolinisation/MS kaolinise/S kennelled/U kennelling/U keratinisation keratinise/DGS kernelled kernelling ketonisation/MS ketonise/S kilolitre/MS kinaesthesia kyanise/DGS labellable labialisation/MS labialise/DGS labialises/U labilisation/MS labilise/S labourability/MS labourable/MSU labourhood/MS labourism/MS labourist/MS labourite/MS labourless/S laconise/DGS lactonised laicisation/S laicise/DGS lapelled latentise/S lateralisation/MS lateralise/S laterisation/MS Latinisation/MS Latinise/DGRSZ laurelling leatherise/S legitimatise/DGS legitimisation/MS legitimisation's/A lethalise/S leukaemia lexiconise/S libellant/S libelled libellee/S libelling libellist licenceless/S lichenisation/MS lichenise/S lignitise/S Lilliputianise/S linearisation/MS linenise/RSZ lingualise/S lionisable/MS lionisation/MS liquidisation liquidise/DGRSZ Listerise/S literalisation/MS literalise/DRSZ lithographise/S localisable/MSU logicalisation/MS logicalise/S logicise/DGS logorrhoea/MS Londonisation/MS Londonise/S louvre/DS loyalise/S lumbarisation/MS lunatise/S lustreless lustreware luteinisation/M luteinise/DGS Lutheranise/RSZ lyophilisation lyophilise/DGRS lyricise/DGS lysogenisation lysogenise/DGS macadamisation macadamise/DGS macarise/DGS machinisation/MS machinise/S magicalise/S magnetisability/MS magnetisable/MS magnetise/GRSZ magnetises/A mahoganise/DGS majorise/S Malayise/S malleablise/S malodour mandarinise/S Manhattanise/S mannerise/S marbleise/S marginalisation marginalise/DGS marketise/DGRS marsupialisation/MS marsupialise/S martialisation/MS martialise/S martyrisation/MS martyrise/DGRSZ marveller masculinisation/MS masculinise/DGS materialisation/MS maternalise/S mathematicise/S mathematisation matronise/DGS maudlinise/S mechanicalisation/MS mechanicalise/S mechanisable medalise/S medallist/S mediaevalise/S mediaevalism/MS mediaevalistic/S medialisation/MS medialise/S mediatisation/MS mediatise/DGS medicalisation/M medicalise/DGS Mediterraneanisation/MS Mediterraneanise/S mediumisation/MS mediumise/S melanisation/M melanise/DGS melodisation melodise/DGRS melodramatisation melodramatise/DGS memorialisation/MS memorialise/GRSZ memorisable/MS Mendelise/S mentalisation/MS mentalise/S mercerisation/MS mercerise/DGRSZ mercurialisation/MS mercurialise/S mesmerisability/MS mesmerisable/MS mesmerisation/MS mesmerise/GRSZ mesmerises/U metabolisable/MS metabolise/GS metacentre/S metallicise/S metallise/DGS metamerisation/MS metamerised/MS metaphonise/S metaphorise/S metaphysicise/S metastasise/DGS meteorisation/MS meteorise/S methodisation/MS methodise/DGRSZ metrestick/MS metricise/DGS metropolitanise/S Mexicanise/S miaow/DGS microgramme/MS microlitre/MS micrometre/MS micromillimetre/MS microminiaturisation/M microminiaturise/DGRSZ micronisation/MS micronise/DGS micropolarisation/MS microscopise/S Midlandise/S militarisation/S militarise/DGS millionise/S Miltonise/DGS mineralisable/MS mineralisation/AMS mineralise/GRSZ mineralises/A miraculise/DGS mirrorise/S misalphabetise/S misanthropise/DGS misauthorisation/MS misauthorise/S misbaptise/S miscanonise/S miscolour/DGMS misemphasisation misemphasise/DGS misendeavour/MS mislabelled mislabelling mislabour/DGMS misorganisation/MS misorganise/S misprise/DGS misrealise/S misrecognise/S missionarise/S missionisation missionise/DGRSZ mobilisable/MS modalise/S modernisable/MS Mohammedanisation/MS Mohammedanise/DGS moisturisation moisturise/DGRSZ molarisation/S Molochise/S monarchise/RSZ monasticise/S mongrelisation/S mongrelise/DGRS monochordise/S monologise/DGS monometallism monometallist monopolisable/MS monotonise/S monumentalisation/MS monumentalise/DGS moralisation/MS moralise/DGRSZ moralising/Y moralisingly/S Moravianised/S morbidise/S morphinisation/MS morphinise/S morselisation/MS morselise/S morselled morselling mortalise/S mortarise/S Moslemise/S motorisation/MS multifibred/MS municipalisation/MS municipalise/DGRSZ muscularise/S museumise/S musicalisation/MS musicalise/S mutualisation/MS mutualise/DGS myelinisation/MS mysticise/SU mythicisation mythicise/DGRSZ mythise/S mythologisation/A mythologise/DGRS nakedise/S nanogramme/MS nanometre/MS Napoleonise/S narcotisation narcotise/DG nasalise/GS naturalise/GRSZ naturalises/U naturise/S nebularisation/MS nebularise/S nebulisation/S nebulise/DGRS necrotise/DGS nectarise/S Negroisation/MS Negroise/S neighbourless/S neighbourlike/MSU neighbourship/MS neologisation neologise/DGS neuroticise/S Newmanise/S newspaperised/MS nickelisation/MS nickelise/S nicotinise/S nightingalise/S Nipponise/S nitre nitridisation/MS nitridise/S nitrogenisation/MS nitrogenise/DGS nodulise/S nomadisation/MS nomadise/DGS nominalise/GS nonacknowledgement/MS nonanaesthetised nonapostatising/MS noncanonisation/MS noncartelised/MS noncatechisable/MS noncivilised/MS noncolouring/MS noncomputerised noncrystallisable/MS noncrystallised/MS noncrystallising/MS nondefence/MS nondemobilisation/MS nondialysing/MS nondimensionalise/D nonfavourite/MS nonfulfilment/MS nongalvanised/MS nongelatinising/MS nonhydrolysable/S nonimmunised/MS nonionised/MS nonionising/MS nonlocalised/MS nonmagnetisable/MS nonnitrogenised/MS nonorganisation/MS nonoxidisable/MS nonoxidising/MS nonparlour/MS nonpenalised/MS nonphosphorised/MS nonpolarisable/MS nonpolarised nonpolarising/MS nonrationalised/MS nonrealisation/MS nonrecognised/MS nonschematised/MS nonsensitised/MS nonspecialised/MS nonstandardised/MS nonstylised/MS nonsympathiser/MS nonsynthesised/MS nontemporising/MS nonutilised/MS nonvisualised/MS nonvolatilised/MS nonvulcanisable/MS normalisable Normanisation/MS Normanise/DGRSZ northernise/S nosise notarisation/S nothingise/S nounise/S novelisation/MS novelise/GRSZ nuptialise/S obelise/DGS objectisation/MS objectise/S objectivise/AS oblivionise/S Occidentalisation/MS Occidentalise/DGS ochreous odorise/DGRS odourful odourless/S oesophagus offenceless/SY officialisation/MS officialise/S Olympianise/S onionised/MS opalise/S opalled operatise/S optionalise/S oralisation/MS oralise/S orangise/S oratorise/S organisability/MS organisationist/AMS orientalisation/MS orientalise/DGS orientisation/MS orientise/S ornamentalise/S orphanise/S orthocentre orthogonalise/GS orthopaedically orthopaedist ostracisable/MS ostracisation/MS ostracise/GRSZ Ottomanisation/MS Ottomanise/S outcavilled outcavilling outclamour/MS outhumour/DGMS outhyperbolise/S outlabour/MS outrivalled outrivalling outsavour/GMS outsplendour/MS outtyrannise/S ovalisation/MS ovalise/S ovariectomised overagonise/S overbrutalise/S overcapitalisation/MS overcapitalise/DGS overcentralisation/MS overcentralise/S overcivilisation/MS overcivilise/S overclamour/MS overcolour/MS overcriticise/S overdoctrinise/S overemotionalise/S overemphasisation/MS overfavour/MS overfavourable/MS overfavourably/S overfertilisation overgeneralise/DGS overglamourise/DGS overhonour/MS overhumanise/S overindustrialisation/MS overindustrialise/S overjudgement/MS overlabour/MS overnationalisation/MS overrapturise/S overrationalise/S oversentimentalise/S overspecialisation/MS overspecialise/DS oversystematise/S overunionised/MS overurbanisation/MS overwomanise/S oxidisability/MS oxidisable/MSU oxidisation/MS oxidisement/MS oxygenisable/MS oxygenise/RSZ oxygenisement/MS oxygenises/A oxysulphide ozonisation/MS ozonise/DGRSZ paeanise/S paganisation/AMS paganise/DGRSZ paganiser/AS paganises/AU palatisation/MS palatise/S palladiumise/S palletisation/S palletise/GRS pamperise/S pamphletise/S panderise/S pantheonisation/MS pantheonise/S papalisation/MS papalise/RSZ parabolisation parabolise/DGS paraffinise/S paragraphise/S paralysation parasitisation parasitise/DGS parathyroidectomise/DGS parceller parchmentise/S parenthesisation parfocalisation parfocalise Parisianisation/MS Parisianise/S parochialisation/MS parochialise/S parrotise/S parsonise/S partialise/S particularisation/MS partisanise/S pasteurise/DGRS Pasteurisers pastoralise/S pastorise/S paternalise/S patronisable/MSU patronisation/MS patternise/S Paulinise/S pauperisation/MS pauperise/DGRSZ paviour Paynise/S pearlisation pearlise/DGS peasantise/S pectisation pectise/DGS peculiarise/S pedaller/S pedantise/S pedestalled pedestalling pedestrianisation pedestrianise/DGS pelletisation/S pelletise/DGRS pemmicanisation/MS pemmicanise/S penalisable/MS penalisation/MS penciller/S peptisable/MS peptisation/MS peptise/DRSZ peptonisation peptonise/DGS percussionise/S perennialise/S perfectivise/S perilled perilling periodicalise/S periodisation/S periodise/DGS peroxidise/S peroxidisement/MS peroxysulphuric Persianisation/MS Persianise/S personisation/MS personise/S persulphate persulphuric Peruvianise/S petrolisation/MS petrolise/S phagocytise/S phantomise/RSZ phenolisation/MS phenolise/S phenomenalisation/MS phenomenalise/S philanthropise/S Philistinise/S philosophisation/MS phlebotomisation phlebotomise/DGS phoneticisation/MS phoneticise/S phosphatisation/MS phosphatise/DGS phosphorise/AS photocatalyser/MS photographise/S photoionisation/MS photoisomerisation/MS photolabelled photolabeller photolabelling photolysable photolyse/DGS photopolymerisation/MS photosensitisation/MS photosensitise/DGRSZ photosynthesise/DGS piastre picogramme/MS picometre/MS pictorialisation/MS pictorialise/DGS picturisation/MS picturise/DGS pidginisation pidginise/DGS pigmentise/S pilgrimise/S pillarise/S piratise/S pistolled pistolling plagiarisation/MS plasmolyse plasticisation/MS plasticise/DGRSZ plasticiser/MS platinisation/MS platitudinisation platitudinise/DGS platonisation platonise/DGS plebeianise/S ploughable ploughboy/S ploughhead ploughmen/M ploughstaff poeticisation poeticise/DGS poetisation/MS poetise/DGRSZ pogromise/S polarisability/MS polarisable/MSU polemicise/DGS polemise/DGS policise/RSZ politicalise/S politicisation politicise/GRSZ politise/S polleniser pollinise/DGRS polychromatise/S polychromise/S polygamise/S polymerisation/AM polymerise/AS polysulphide polysulphurisation/MS pommelled pommelling porcelainisation/MS porcelainise/DGS portionise/S positivise/S posterise/S postsynchronisation posturise/S potentialisation/MS potentialise/S potentise/S powderisation/MS powderise/RSZ practicalisation/MS practicalise/RSZ preacherise/S preacknowledgement/MS preanaesthetic/MS prebaptise/S precancellation precisionise/S precivilisation/MS precolour/GJMS precolourable/MS preconisation/MS preconise/RSZ precriticise/S predefence/MS preemphasisation/M preemphasise/DGRSZ prefavour/MS prefavourable/MS prefavourably/S prefavourite/MS prefertilisation/MS prefertilise/S preflavour/GJMS pregalvanise/S prehumour/MS prejudgement/MS prelabour/MS prelatise/S prelocalisation/MS preludise/S premediaeval/MS premediaevalism/MS premonopolise/S preoffence/MS preorganisation/MS preorganise/S preoxidise/DGS prerealisation/MS prerealise/S prerecognise/S Presbyterianise/S prespecialise/S presplendour/MS pressurisation/A prestandardisation/MS prestandardise/S presympathise/S preutilisable/MS preutilisation/MS preutilise/S priorisation/S priorise/DGS privatisation/A privatise/ADG problemise/S processionise/S Procrusteanise/S proctorisation/MS proctorise/S prodigalise/S profanise/S professionalisation/MS professionalise/DGS professionise/S programmist/MS programmistic/S proletarianise/GS prologise prologuise/RSZ prolusionise/S propagandise/DGS prophetise/S propositionise/S propraetor proselytisation/MS protectionise/S Protestantise/S protocolisation/MS protocolise/S protocolled protocolling proverbialise/S proverbise/S provincialisation/MS provincialise/S Prussianisation/MS Prussianise/DGRSZ pseudoanaemia/MS pseudoanaemic/S pseudographise/S pseudomediaeval/MS pseudooedema/MS psychoanalyse/RZ psychoanalyser/MS psychologisation psychologise/DGS puebloisation/MS puebloise/S Pullmanise/S pulpitise/S pulverisable/MS pulverisation/MS pummeller pummelling pupilise/S puppetise/S Puritanise/RSZ pyorrhoeal pyramidise/S pyridinise/S pyritisation/MS pyritise/S pyrolysable pyrosulphate pyrosulphuric Pythagoreanise/S pythonise/S Quakerisation/MS Quakerise/S quarrellous quarterisation/MS quininise/S racemisation racemise/DGS racialisation/MS racialise/S radialisation/MS radialise/S radicalisation/MS radicalise/DGS radicalises/U radiosterilise/GS radiumisation/MS radiumise/S rapturise/S rascalise/S rationalisable/MS ravelled raveller/SU ravelling/S reacclimatise reactualise realisticise/S reanimalise/S reapologise reauthorise rebaptisation/MS rebrutalise recapitalise recarbonise recausticise/S recentralise reciprocalise/S recivilise recognisee recolonise recolour/GM reconnoitre/DGMRSZ reconnoitrer/MS recontextualisation recontextualise/DGS recriticise refavour/M refertilise reflectorise/DGS reforestisation/M reforestise/S regalise/S regalvanise regionalisation/MS regionalise/DGS regularisation/MS regularise/DRSZ reharmonise rehonour/M rehumanisation rehumanise rehybridise/S reindustrialisation reindustrialise/GS reinitialisation reinstitutionalisation reinstitutionalise reitemise relativisation/MS relativise/DGS relegitimisation/M relegitimise/DGS religionise/S remagnetise/S rematerialise rememorise remilitarisation remilitarise remineralise/S remobilise remythologisation/M remythologise/DGS rencontre renormalisation renormalise/G reobjectivisation/MS reorganisational reoxidise reoxygenise/S repaganise/RSZ repatronise repersonalise rephosphorisation/MS repolarisation repolarise/GS repolymerisation/MS repressurisation/M repressurise/DGS reprivatisation/MS reprivatise/DGS republicanisation/MS republicanise/DGRSZ repulverise resensitise/S resepulchre resinise/S resolemnise/S restabilisation/M restabilise/DGS restandardise resterilise restigmatise/S resurrectionise/S resymbolise resynchronisation resynchronise/G resynthesise retheorise/DGS retinise/S reutilise revaporise/S revelationise/SU revisualise revivalise/S revolatilise/S revolutionisement/MS rhapsodise/DGS rhythmicise/S rhythmisable/MS rhythmisation/MS rhythmise/S ridiculise/S ritualisation ritualise/GS rivalise/S rivalless/S robotisation/MS robotise/DGRS roentgenise Romanisation/MS Romanise/DGRSZ romanticisation routinisation/MS routinise/S rowelled rowelling royalisation/MS royalise/AS rubberisation rubberise/GS rubricise/S ruffianise/S ruggedisation/M ruggedise/DGS rumourmonger/MS ruralisation/MS ruralise/DGS russianisation Russianisation's Russianisations russianise Russianised Russianises Russianising rusticise/S Sabbathise/S sabrelike/MS sabretooth sacralisation/MS sacralise/DGS sacramentise/S sailorising/MS salinisation/M salinise/DGS saltpetre/MS sandalled sandalling Sanforised sapientise/S satanise/S satinise/S satirisable/MS savagise/S saviourhood/MS saviourship/MS savourless/S savourous Saxonisation/MS Saxonise/S scandalisation/MS scandalise/RSZ scandalises/U scandalled scandalling scenarioisation/MS scenarioise/S scenarisation/MS scenarise/S sceptreless/S schedulise/S schematisation/MS schematise/DGRSZ schismatise/DGS sclerotisation sclerotised scripturalise/S scrutinisation/MS seborrhoea seborrhoeic sectarianisation sectarianise/DGS sectarianises/U sectionalisation/MS sectionalise/GS sectionise/S secularise/GRSZ secularises/U securitisation securitise/DGS semicarbonise/S semicivilisation/MS semicivilised/MS semifossilised/MS semihonour/MS semihumanised/MS semimercerised/MS semimineralised/MS seminarise/S seminationalisation/MS semiorganised/MS semioxidised/MS semioxygenised/MS semiprofessionalised/MS Semiticise/S Semitisation/MS Semitise/S semivulcanised/MS senilise/S sensise/S sensitisation/AMS sensitise/GRSZ sensitises/AU sensualisation/MS sensualise/DGS sentimentalisation/MS sentinelled sentinelling sepalled septicisation/MS sepulchralise/S serenise/S sermonise/DGRSZ serpentinisation/MS serpentinise/S serpentise/S servilise/S severalise/S severisation/MS severise/S sexualisation/MS sexualise/S Shakespearise/S shepherdise/S Shintoise/S siderealise/S signalisation signalise/DG silicatisation/MS silicidise/S siliconisation siliconise/DGS silverise/RSZ similarise/S similise/S simonise singularisation/MS singularise/S sinicise/DGS sirenise/S sisterise/S skeletonisation/MS skeletonise/DGRSZ skepticise/S Slavicise/S Slavisation/MS Slavise/S Slavonicise/S slenderise/DGS sloganise/DGS snobsnivelling soberise/DGS sockdologising solarisation/MS solarise/DGS soldierise/S solecise/DGS solemnisation/MS solemnise/DGRSZ solemnises/AU soliloquisation soliloquise/DGJRSZ soliloquising/MSY solmisation solubilisation/I solubilise/DGS solutise/RSZ sonantised/MS sonnetise/S southernise/S sovietisation/MS sovietise/S Sovietised Sovietising Spaniardisation/MS Spaniardise/S Spanishise/S Spartanise/S spatialisation/MS spatialise/S specificise/S specimenise/S spectrelike/MSU spheroidise/S spiralisation/MS spiralise/S spiritise/S spiritualisation/MS spiritualise/DGRSZ spirochaetal spirochaete/MS spirochaetosis splenectomised stabilisable stallionise/S stalwartise/S standardisable/MS stapedectomised statisticise/S stencilise sterilisability/MS sterilisable/MS stigmatise/GRSZ stigmatises/A strobilisation structuralisation/MS structuralise/S strychninisation/MS strychninise/S stylise/GRSZ subarmour/MS subcentre suberisation/MS suberise/DGS subflavour/MS subjectivisation subjectivise/S sublimise/S submillimetre subminiaturisation subminiaturise/DGS subpulveriser/MS subsidisable/MS subspecialise/S subspeciality/MS substandardise/S substantialise/SU substantivise/S subterraneanise/S subtilisation/MS subtilise/RSZ subtotalled subtotalling suburbanise/S subvitalised/MS succourable/SU succourless/S suggestionise/S sulpha sulphadiazine/M sulphamethoxazole sulphanilamide sulphatase sulphathiazole sulphatide/S sulphatise/S sulphhydryl sulphinpyrazone sulphinyl sulphisoxazole sulphitic sulphonate/DN sulphone sulphonic sulphonium sulphonmethane sulphonyl sulphonylurea sulphoraphane sulphoxide sulphurate sulphureous/PY sulphuret sulphuretted sulphurisation/MS sulphurise/S sulphuryl sultanise/S summerise/S superacknowledgement/MS supercanonisation/MS supercarbonisation/MS supercarbonise/S supercivilisation/MS supercivilised/MS superemphasise/S superficialise/S superhumanise/S supernaturalise/SU superorganisation/MS superorganise/S supersensitisation/MS superspecialise/S supersubtilised/MS supersulphurise/S surgerise/S sycophantise/S syllogise sylvanise/S symmetrisation/MS symmetrise/DGS symptomise/S synaesthesia/M synaesthete/MS synaesthetic synchronisable/MS syncretise/DGS syndicalise/S synonymise/S synopsise synthesisation/MS syphonless/S syphonlike/MS syphonophore syphonostele syphonostelic syphonostely Syrianise/S systemisable/MSU systemise/RSZ tabouret/S tabularisation/MS tabularise/S taffetise/DGS tailorisation/MS tailorise/S Talmudisation/MS Talmudise/S tamboura Tammanyise/S tandemise/S tantalisation/MS tariffise/S tartarisation/MS tartarise/DS tasselled tasselling tassells tavernise/S Taylorise/S teaseller/S teazelled teazelling technicalisation technicalise/SU technologise/DGS teetotalled teetotalling telaesthesia telaesthetic tellurise/DGS templise/S temporalise/DGS temporisation/MS tenderisation tenderise/DGRS tendrilled tenementisation/MS tenementise/S terminalisation/MS terminalised/MS ternise/S terrestrialise/S territorialisation/MS territorialise/S terrorisation/MS testimonialisation/MS testimonialise/RSZ tetanisation tetanise/DGS teutonise textualisation/M textualise/DGS texturisation/AM texturise/ADGS theatreless/S theatrelike/MS theatricalisation/MS theatricalise/DGS theatricise/S theologisation theologise/DGRS thermalisation/M thermalise/DGS thermoanaesthesia/MS thermometerise/S thermopolymerisation/MS thermosyphon/MS thiosulphate thiosulphuric thronise/S thymectomise thyroidectomised thyroidisation/MS Timonise/S tined tinsellier tinselliest tonicise/S torporise/S Toryise/S totalisation/MS totalisator totalise/DGRSZ totalitarianise totemisation/MS tourise/S tractorisation/MS tractorise/S traditionalise/S traditionise/S tragicise/S traitorise/S trammelled trammeller/S trammelling tranquillisation/AMS transcendentalise/S transistorisation transparentise/DGS traumatisation traumatise/DGS triangularise/DGS trichinise trillionise/S trimerisation/MS trisulphide trivialisation tropicalisation/MS tropicalise/DGS trowelled trowelling trypsinise/S tuberculinisation/MS tuberculinise/S tuberisation/MS tuberise/S tubulisation/MS Turkise/S Tuscanise/S tutorisation/MS tutorise/S Tylerise/S ultracentraliser/MS ultrahonourable/MS ultraspecialisation/MS ultrastandardisation/MS unagonise unalcoholised/MS unanimalised/MS unantagonisable/MS unapostatised/MS unauthorise unbaptise unbrutalise unbrutise/S uncanonise/S uncantonised/MS uncatechised/MPS uncatholicise/S uncelestialised/MS unchloridised/MS unchristianise/DS uncircularised/MS uncivilise uncolonise unconventionalise/S uncurricularised/MS undefence/M undemocratise undercapitalisation/MS undercapitalise/DGS undercolour/DGJMS underemphasisation/M underemphasise/DGS underlabourer/MS underorganisation/MS underoxidise/S underpublicise/DGS underrealise/S undersaviour/MS underutilise/GS undervitalised/MS undiscoloured/M unenamoured/MS unequalise unevangelised/MS unfavouring/M unfeudalise/DS ungalvanised/MS ungelatinised/MS ungospelised/MS ungraphitised/MS unharbour/DM unharmonise unheroise/S unhonourable/M unhypnotise uniformisation/MS uniformise/S unilateralisation/MS unilateralise/S unimmortalise/S unindividualise Unitarianise/S unitisation unitise/GS universalisation/MS unlabialise/S unlabouring/M unlocalise unmechanise unmediatised/MS unmercerised/MS unmesmerise/S unmetallised/MS unmethodised/MS unmethodising/MS unmissionised/MS unmodernise unmonopolise/GJ unmoralise/DGJS unmunicipalised/MS unmutualised/MS unnaturalisable/MS unnaturalise/S unnitrogenised/MS unnormalise/G unoptimise/G unoxygenised/MS unpaganise/S unparagonised/MS unparalysed/MS unparticularised/MS unparticularising/MS unpauperised/MS unphilosophise unphosphatised/MS unplagiarised/MS unpoeticised/MS unpoetise/DS unpolymerised/MS unpopularise unprotestantise/S unpulverise unradicalise/S unrancoured/MS unrealisable/M unrealise/GJ unreconnoitred/MS unromanticised/MS unroyalised/MS unsatirise/D unscandalise/S unsceptre unschematised/MS unsectarianise/S unsecularise/S unsensitise/S unsensualise/DS unsentimentalise unsepulchre unsignalised/MS unsolemnise/DS unspiritualise/DS unstoicise/S unsulphurised/MS unsupernaturalise/DS unsymmetrised/MS unsympathisability/MS unsympathisable/MS unsyphon/M untantalising/MS untartarised/MS untemporising/M untheorisable/MS unvaporised/MS unvitalised/MS unvitriolised/MS unvolatilise/DS unvulgarise/DS unwesternised/MS unwomanise urbanise/GS utilisability/S utilisable/MSU utilitarianise/S Utopianise/S utopianiser/MS vaccinisation/MS vacuumise/DGS vagabondise/RSZ vagrantise/S valorisation/AMS valorise/ADGS vampirise/S vandalisation/MS vaporisable/S vaporise/DGRSZ vaporises/A vapourish/P vapourless vapourlike vapoury/RT vascularisation/MS vascularise/DGS vassalisation vassalise/DGS Vaticanisation/MS Vaticanise/S vectorisable/U vectorise/DRSZ vegetablise/S velarisation venalisation/MS venalise/S venomisation/MS venomise/S ventriloquise/DGS verbalisation/MS vermeilled vermeilles vermeilling vermilionise/S vernacularisation/MS vernacularise/S vernalisation/MS vernalise/DGS versicolour/D versionise/S vestryise/S veteranise/S vialled vialling victimisable/MS victimisation/MS Victorianise/S victuallage victualled victualless victualling Vietnamisation Vietnamise/DGS vigourless visionise/S vitalisation/MS vitalisation's/A vitalisations/A vitalise/DGJRSZ vitalising/MSY vitaminisation vitaminise/S vitriolisable/MS vitriolisation/MS vitriolise/RSZ vocationalisation/MS vocationalise/S volatilisable/MS volatilise/GRSZ volatilises/AU voltise/S volumisation/M volumise/DGS vowelisation/MS vowelise/DGS vulcanisable/MS vulcanisate/NX vulcanisation/MS vulcanise/GRSZ vulgarisation/MS vulgarise/DGRSZ waggonette Wagnerise/S weevilled westernisation/MS westernise/DGS Whitmanise/S winterisation/MS winterise/DGS womanisation/MS woodcockise/S woollenisation/MS woollenise/S woollie woollybutt zeroise/DGS ispell-3.4.02/languages/english/PaxHeaders.22185/english.20000644000000000000000000000013213776175723017763 xustar0030 mtime=1610152915.414090509 30 atime=1610226764.417065334 30 ctime=1610226764.421065341 ispell-3.4.02/languages/english/english.20000444003214100001440000127166013776175723021051 0ustar00geofffaculty00000000000000AAA/S Aarhus ab abacterial/MS abacus/S abandonee/MS abashment/MS abatis/S abattoir/MS abaxial abbacy abbas abberation/MS Abbott/M abbreviator/MS abdicable abdicator/MS abduce/DG abducent abeam abecedarian Abel Abelian Abelson/M Aberdeen/M Abernathy/M aberrance aberrancy aberrated aberrational abetment abhorrence abidance Abidjan abiogenesis abiogenetic abiogenetical/Y abiogenist abiological/Y abiotic abiotically abjuration ablaut abloom abluted ablutionary abnegate/NS abnegator/MS ABO aboil abolishable abolitionary abolitionism abomasal abominably abominator/MS aboral/Y abortifacient abortionist/MS Abos abovementioned abracadabra abradable abradant Abram/M abreact abrin abroach abruption abscise/DG abscisic abscisin abscission absinth absolutism absolutist absolutistic absorbability absorbable absorbance absorbancy absorbant absorbtions absorptance absorptiometry/M absorptional abstemious abstentious abstractable abstractional abstrict abstriction/S abstrusity absurdism/M absurdist absurdum abubble abuilding abutilon abuttals abuzz abyssal Abyssinia Abyssinians AC/S academe academical academicism academism Acadia acalculous acanthocephalan acanthopterygian acanthus/S acarpellous acarpelous acatalectic acaulescence acaulescent accelerando accentless acceptation accessary accessibleness accessional accessorial acciaccatura accidence accidentalism accidentalist accipiter acclivity accommodational accommodator/S accompanyist/S accomplishable accordionist/S accostable accountantship Accra accreditable accrete/DGV accretionary accruable accruement acculturational acculturationist accumbency accumbent accumulable accurses accursing accurst accusatory accusor accustomation acedia acellular acentric acephalgic acephalous acerb acerbate acerbic acerbically acerbity acervate/NY acesulfame acetal acetaldehyde acetamide acetaminophen acetazolamide acetify/NR acetonic acetonide acetous acetyl acetylate/NV acetylcholinesterase acetylenic acey Achaean achiral achromat achromatically achromaticity achromatism achy/PRT acidiferous acidifiable acidify/NR acidimeter/MS acidimetric acidimetry acidulant acidulate/N acidulent acinus ack Ackley ACL ACL's ACLs acock acold acquaintanceship acquiree/M acquirement acquisitional acquisitionist acquisititious acquitment acquittance acridity acritarch acrobacy acrobatically acrocentric acrodont acrolect acronymic acronymically acropetal/Y acrophobia acrophobic acrostic acrostical/Y acrylonitrile actability actable Actaeon actinolite actinomycin actionable actionably actionless activewear/M activistic actomyosin Acton/M actorish actuary aculeate acuminate/N acupuncture acyl acylate/DS Adair/M adamance adamancy adamantine adaptaplex adaptational/Y adaptationist adaptitude adaptogen adaxial addable addible Addis addlepated addressor adducible Adelaide/M Adele/M adelgid Adelia/M Aden/M adenine adenoid/S adenoidal adenoma adenomatous adenosine adenovirus adenyl adenylate adherend adhesional adieux adipic adipogenesis adipose adiposity adject adjudicator adjudicatory adjunction adjuration adjuratory adjustability adjustmental adjutancy adjuvant Adkins adle Adler/M Adlerian adman admass admeasure admeasurement administrant administrational administrationist admirability admissive admitter/S admonitory/Y adobo Adolph/M Adolphus adoptability adoptable adoptee/S adoptianism adoptianist adoptionism adoptionist adorability adorably adorbs adoze adposition adrenalin adrenalized adrenergic adrenochrome adrenocortical adrenocorticosteroid adrenocorticotropic adrenocorticotropin adrenoleukodystrophy Adrian/M Adrienne/M adscititious adsorbability adsorbable adsorbent adulator adulatory adulterant adulterator adulteress/S adulterine adultlike adust advection/S advective adventuresome/P adventuress/S adventurism adventurist/S adventuristic adversative/Y advertence advertency/I advertent/Y advocator adynamic adz adze Aeneas aeolotropic aeolotropy Aeolus aerialist aerie/R aero Aerobacter aeroballistic/S aerobatic/S aerobe aerobically aerobicize/DGS aerobiological/Y aerobiology/M aerobiosis aerobiotic aerobiotically aerodonetics aerodrome aerodynamical/Y aerodynamicist/MS aerodyne aeroelasticity aeroembolism aerogel/M aerogene/S aerogram/MS aerographer/M aerography aerolite aerolith aerolitic aerological aerologist aerology aeromagnetic aeromechanic/S aeromedical aeromedicine aerometeorograph aerometer/MS aerometry aeronaut aeroneurosis aeronomer aeronomic/S aeronomical aeronomist aeronomy aeropause aerophagia aerophobia aerophyte aeropropulsion aerosphere aerostat aerostatics aerostation aerothermodynamics aery/RY Aeschylus aesthesiometer/MS afeard afeared affability affably affaire/S affectability affectable affectate affectional/Y affectionless affectivity affectless/P affiance affiant affine/DY affirmable affirmance affixable affixal affixation affixial affixment affluency affluenza/M afflux affray affusion afghani aficionada/MS aflatoxin aflutter afreet Africanism/M Afrikaner Afrobeat/MS Afropop/M aftercare afterclap afterdamp afterdeck afterimage afterpiece aftertaste aftertax aftertime afterword afterworld Agamemnon agamete agamic agamically agammaglobulinemia agamospermy agapeic agapeically agarose agarwood agave agaze Agee/M ageing/U agelong agendaless agender agendum agene agenesis agentry aggie/S aggiornamento agglutinability agglutinogen agglutinogenic aggradation aggrade aggregational aggregator/MS aggress aggressivity agio/S agita agitational agitato agitprop aglare aglitter agnate/N agnatic agnatically Agnean Agnew/M agnomen agnosticism agon agone agonic agonist/S agonistic agonistical/Y agoraphobia agoraphobic agouti agranulocytosis agrarianism agreeability agribusinessman/MS Agricola agriculturalist agriculturist agrimony agriology agritourism/MS agrobiological/Y agrobiology agrochemical/MS agroecology/MS agroforestry/MS agrologic agrological/Y agrologist agrology agronomic/S agronomical/Y agronomist agronomy aground aguish/Y Agway agyria ahistoric ahistorical Ahmedabad ahold Aida/M aidman aigrette Aiken/M aikido ailanthus aile Ainu airball/MS airbrush airburst airbus aircrew airdate airdrome airfreight airglow airmanship airmobile airpost airscrew airsick/P airstream airwave/S airworthy/P aitch Aitken/M AK Akers AL alabastrine alachlor alack alacritous Aladdin alai alamogordo alarmism alary Alastair alate/DN alb albedo Alberich albinic albinism albino albinotic Albrecht/M Albright/M albuminoid albuminous albuterol/M alcaic alcazar Alcestis alchemic alchemical/Y alchemist alchemistic alchemistical Alcmena alcoholically alcoholometer/MS alcoholometry alcopop Alcott/M Aldebaran aldermanic aldicarb aldolase aldosterone/M aldosteronism/M Aldrich/M aldrin aleatoric aleatory alehouse alembic Aleutian alexandrine alexandrite Alexei/M alexia Alexis alfa Alfonso/M Alfred/M Alfredo/M algal algebraist Algenib Alger/M algicidal algicide algid algidity algin Algonquian Algonquin/M algophobia Ali alia alicyclic alidade alienability/I alienable alienage alienator alienee alienism alienist alienor aliform alightment alimentary alimentation alimentative aline alinement aliphatic aliquot/MS Alison/M aliteracy/M alizarin alk alkahest alkahestic alkalescence alkalescent alkalify alkalimeter/MS alkalimetry alkalinity alkaloidal alkalosis alkie alla allan allegate allegorist Allegra allelic allelism allelomorph allelopathy alleluia allemand allergen allergenic allergist allery allethrin alleviatory allheal alliaceous allicin Allis allium alloantibody alloantigen allocatable allocution allodynia allogamous allogamy allogeneic allograft allograph allographic allomerism allomerous allometric allometry allomorph allomorphic allomorphism allonge allons allopath allopathic allopathically allopathy allopatric allopatrically allopatry allophane allopolyploid allopurinol allosaur allosteric allosterically allotee allotetraploid allotransplant allotransplantation allotrope allotropically allotropy allottee/S allotype allotypic allotypically allotypy allover allseed alluvion allyl allylic Allyn/M almandine almandite almsgiver almsgiving almshouse alogical/Y aloin alongshore alpaca alpenglow alpenstock Alpert/M alpestrine alphameric/S alphamerical alphanumerical/Y Alpheratz Alphonse/M alpinism alpinist alprazolam alprostadil alright Alsop/M Altair/M altarpiece altazimuth alterability/IU alterably/I alterate/V alterman altern althea altimetry altitudinal altitudinous altocumulus Alton/M altricial alumina aluminate aluminosilicate aluminous alunite Alva/M Alvarado/M alveolate/N alyssum alytical amah amalgamator amandine amanita amantadine amanuenses amaranth amarone amassment amative/PY amaurosis amaurotic amazonite ambage/S ambagious ambassadorial ambassadorship ambassadress ambergris ambidexterity ambience/S ambit ambitionless ambiversion ambiversive ambivert ambrotype ambsace ambulacral ambulacrum ambulate/N ambulette ambushment Amelang ameliorator amelioratory amenability/S amenably amendable amendatory amende ament amentia Amerada amerce/G amercement amerciable Americanist Americano ametropia ametropic Amharic ami/SX amiability amiably amicability amidships amine aminoaciduria aminopeptidase aminophylline aminopterin aminosalicylic aminotransferase amitosis amitotic amitotically amitriptyline amitrole Amman Ammerman/M ammino ammoniacal ammoniate/N ammonify/NR ammonite/S ammonitic ammonoid amnesia amnesiac amnesic amnestic amnia amnio amniocentesis amnion amniote amniotic amobarbital amoeban amoebiasis amoebic amoebocyte amoeboid Amontillado amoralism amoretto amorphism amort ampacity amperometric amphibia amphibole amphibolite amphibolitic amphidiploid amphioxis amphioxus amphipathic amphiphilic amphiploid amphipod amphitheatric amphitheatrical/Y amphitropous amphotericin amplexicaul amplexus amplidyne ampul ampule amputator amputee amra amtrac amuck amur amygdaloid amylolytic ana anabaptism anabasis anabatic Anabel/M anabiosis anabiotic anabolic anabolism anachronic anachronous/Y anaclitic anacoluthic anacoluthically Anacreon anaculture anadama anadiplosis anaerobe anaerobically anaerobiosis anagen anaglyphic anagrammatic anagrammatical/Y Analects analemma/MS analeptic analgesia analgetic anality analogic analogism/MS analogist analphabet analphabetic analphabetism analysand analyte anandamide anaphase anaphasic anaphylaxis anaplasia anaplastic anarch anarchism anarchistic anarcho anastasia anastigmat anastrophe Anatole/M Anatolian anatomist anatoxin anatropous ancestress anchoress anchoret anchoritic anchoritically anchorless anchorman anchoveta ancientry Andalusia andalusite andante andantino andesine andesite andesitic andiron andradite Andrea/M Andrei/M andro/S androgen androgenic androgyny android Andromache andromeda andropause androstenedione androsterone anecdotage anecdotalist/S anecdotic anecdotical/Y anecdotist anelastic anemograph anemographic anemometric anemometrical anent aneroid anestrus aneuploid aneurism aneurysm aneurysmal ANFO anfractuosity anfractuous angary Angelica/M angelical/Y angerless angina anginal anginose angiocardiographic angiocardiography/M angiofollicular angiotensin anglaise anglesite angleworm anglia anglice anglicism Anglophile Anglophiliac Anglophilic Anglophilism Anglophily Anglophobe Anglophobic Anglosphere/M angsty angularity angulation anhydrase ani anile anima animalcular animalcule animalculum animalism animalist animalistic animality animallike animatronic/S animist animistic animus aniseed aniseikonia anisette anisotropically anisotropism ankerite ankh anklebone/S anklet Annale Annalen Annalist Annalistic annelid Annette annexational annexationist annexe annihilator annihilatory annuary annuitant annularity annulate/DNY annulet annuli annunciatory annunicates anodal/Y anodically anodyne anodynic anointment anole anomalistic anomalistical anomer anomeric anonym anorectic anoretic anorexigenic anorthic anorthite anorthitic anorthosite anosmia anosmic anovulant anovulatory anoxemia anoxemic anoxia anoxic ansatz Anselm/M Anselmo/M anserine Antaeus antecede antecedence antecessor antechamber/S antechoir antediluvian antefix antefixal anteing antemortem antenatal antennal antennule anteroom/S anthelion anthesis anthill anthologist anthracitic anthracnose anthrax anthrop anthropic anthropical anthropocentric anthropocentrically anthropocentricity anthropogenesis anthropogenetic anthropography anthropoid anthropometrical/Y anthropomorphism anthropomorphist anthropopathism anthropophagous anthropophagus anthropophagy anthroposophy antiabortion antiaging antiaircraft antiandrogen/MS antianxiety antiballistic antibias antibiosis antibiotically antiblack antiblackism antibonding antibusing antically anticancer anticancerous anticarcinogen anticarcinogenic anticariogenic anticatalyst anticavity antichlamydial antichoice anticholesterol anticholinergic anticholinesterase anticipant/S anticipatable anticipator anticlerical anticlericalism anticlimactical/Y anticlimax/S anticlinal anticline anticling anticlockwise anticoagulant anticoagulate anticodon anticonvulsant anticonvulsive antidepressant antiderivative antidesertification antidesiccant/MS antidiuretic antidotal/Y antielectron antienvironmental antienzyme antiestablishment antiestrogen antifertility antifluoridationist antiform antifouling antifriction antifungal antigay antigenic antigenically antigenicity antiglobulin antigorite antigravity antihemophilic antihistamine antihistaminic antihypertensive antiknock antileukemic antilife antilitter Antilles antilock antilog antilogarithm/S antimacassar/S antimagnetic antimalarial/S antimedieval/MS antimetabolite antimetastatic antimitotic antimonial antimonic antimonide antimonious antimycin antineoplastic antineutrino antineutron antinodal antinode antinovel antinovelist antinucleon antinuke antioxidant antiozonant antiparasitic antiparticle antipathetic antipathetically antiperiodic antiperiplanar antipersonnel antiphlogistic antiphon antiphonary antiphony antiphrasis antiplatelet antipodal antipodean antipoetic antipollution antipope antipredator antiproton antipsychotic antipyretic antipyrine antiquarianism antiquark antireflective antirejection antiresorptive antiretroviral antirheumatic antirrhinum antischizophrenic antisemite/MS antisepsis antiseptically antisiphon/MS antispasmodic antistrophe antistrophic antistrophically antistyle antitank antithrombotic antitoxic antitrades antitubercular antituberculous antitumor antitumoral antitussive antivaxxer antivenin antiviral antivitamin Anton/M Antonio/M antonymic antonymous antonymy antrorse/Y Antwerp anxiolytic anywise aortal aortic aortographic aortography apalachicola apartmental apathetically apatite apeak apelike aperient aperiodically aperitif Apetalous Apgar aphaeresis aphaeretic aphanite aphanitic aphantasia aphasiac aphelion apheresis aphetic aphetically aphides aphorist aphoristic aphoristically aphotic aphrodisiac aphrodisiacal aphyllous aphylly apian apiarian apiarist apices apiculate apicultural apiculture apiculturist APL APL's aplacental aplanatic aplasia aplastic apnea/M apo apocalyptical/Y apocalypticism apocalyptism apocalyptist apocarpous apocarpy apochromatic apocope apocrine apodal apodeictic apodictic apodictically apodosis apodous apoenzyme apogamic apogamous apogean apolipoprotein apolitical/Y apollinaire apologie apologue apolune apomict apomixis apomorphine aponeurosis aponeurotic apophenia apoplectic apoplectically apoplexy aport aposematic aposematically apostasy apostleship apostolate apostolicity apostrophic apothecial apothecium apothegm apothegmatic apothegmatical/Y apothem apotropaic apotropaically appaloosas apparat apparitional appealability appeasable appellee appendant appendectomy appendicular apperceive apperception apperceptive appestat appetence/I appetency appetent applaudable applaudably Appleby/M applicatory appointe appomattox apport appose/DG appositional/Y appraisement appreciator appreciatory apprehensibly appressed approbatory approvable approvably approx approximable approximant appurtenant Apr apractic apraxia apraxic apriority aprotic après apsidal apsides apso apterous apteryx aptitudinal/Y apyrase aquacade aquaculture aquafaba aquafortis aqualunger aquamarine aquanaut aquaplane/R aquaponics aquarelle aquarellist aquarist aquascape aquatically aquatint/R aquatintist aquavit aquicultural aquiculture aquidneck aquiferous Aquila/M aquilegia aquiline aquilinity aquiver AR arability Arachne/M arachnoid aramid arancini Arapaho arb arbitrable arbitrageur arbitral arbitrament arbitrational arboreous arborescence arborescent/Y arboriculture arboriculturist arborio arborist/MS arborvitae arbovirus arbutus Arcadian arcanum arccos arccosine archae archaea archaebacterium/M archaist archaistic archangelic archbishopric archdeacon archdeaconate archdeaconry archdiocesan archducal archduchess archduchy archduke archdukedom archegonial archetypal/Y archfiend archipelagic architectonically architrave archivolt archon archosaur archpriest arclength arco arcsin arctan arctically arcuate/NY Arden/M areal/Y areaway arenavirus arene areole Arequipa argent argentic argentiferous argentine Argentinian argentite argentous arger argillaceous arginine Argive argos argosy argufy/R argumentum argyle argyll arhat arianist/S ariary ariboflavinosis arithmetician Arlen armamentarium Armata Armco Armenia armentieres armillaria armless armlet armlike armoire armorial/Y armorist/MS armrest armsful aro aromantic aromatase aromatically aromaticity arpanet Arragon arras arrearage arrestant arrestment Arrhenius arrhythmia arrhythmic arrhythmical/Y arris/S arriviste arrondissement arrowwood arrowworm arrowy arsenical arsenious arsenite arsis arsonous arte artefact/S Artemia artemisia arteriogram/MS arteriographic arteriography arteriolosclerosis arteritis arthritic arthritically arthropathy arthrosis arthrospore arthrosporic articular Artie/M artilleryman artiodactyl artiste artmobile Arturo/M arum aryl asada asap asbestosis asbestus ascendable ascendance ascendence ascendible ascensional ascensive ascertainment ascesis ascetical/Y ascidian ascidium ascites ascitic ascomycetes ascorbate ascorbic ascospore ascosporic ascosporous ascus asdic asepsis aseptically Ashby/M ashcan/S ashless ashmen Ashmolean ashram Asilomar/M asininity askant askesis aslant aslope asparaginase asparagine aspartate aspartic aspartokinase aspectual aspencade/S asperges asperse/DG asphaltic asphaltite asphaltum aspheric aspherical asphodel asphyxiator aspiate aspidistra assagai assai assailable Assam assassinator assegai assemblagist assemblyman assemblywoman assentation assentor assessable asseverate/NV assignability assignat assignational assignor assimilability assimilable assimilationism assimilator assimilatory assize/RSZ associateship assoil assoilment assortative assuagement assuasive assumable assumably assumpsit assumptive assurgent assuror astaires astarboard Astarte astatic astatically astaticism astaxanthin asteriated asteriskless asterism/S astern asthenia asthenic asthenosphere asthmatic asthmatically astigmat astigmatically astir ASTM Aston/M astonied astrachan astragal astragalus astrakhan astrobiological astrobiology astrocyte astrocytic astrocytoma astrodome astrol astrolabe astrologer/MS astrological/Y astrology astron astronautical/Y astronavigation astrophotography astrosphere Asuncion aswarm aswirl aswoon asymptomatic asynapsis async asyndetic asyndetically asyndeton atabrine atactic ataractic ataraxic atari atavism atavist atavistically ataxia ataxic Atchison/M atelectasis atelier atenolol Athabascan atheistical/Y athenaeum atheneum atherogenesis atherogenic athirst athletically athwartship/S atilt atinate atingle atlantes Atlantica Atlanticism atman atment atmometer/MS atmospherically atmospherium atomism atomist atomistic/S atomistically atonalism atonalist atonalistic atonality atonic atonicity atony atopic atopy atorvastatin atrazine atremble atresia atrial atrioventricular atrip atrium/S atropine Atropos attachable attackman attainability attainder attaint attar attemptable atticism attis Attlee attorn attorneyship attornment attractable attractant attractivity attrited attritional attunement atune Atwater/M atwitter Atwood/M atypic atypicality au/R Auberge/M Aubrey/M auctorial aud/GN audibilize audient audile audiobook/MS audiocassette/MS audiofrequency/S audiogenic audiophile audism audivi Audrey/M Auerbach/M Aug augend augite augitic augmentable augmentative augmentor augury auk auld aunthood auntlike aurar aureate aureola auricle auricula auricular auriculate Auriga aurochs aurorae auroral aurorean aurous auscultatory auslander auspicate austenite austral australite australopithecine autarkic authoress authorial autist autoantibody autobahn autobiographer autobus autocade autocatalysis autocatalytic autocephalous autochthonous autoclave/D autocoder autocorrect autocratical autocrine autocross autocueing autodidact autodidactic autodyne autoecious/Y autoecism autoerotic autoerotically autoeroticism autoerotism autoexposure autogamous autogamy autogenesis autogenetic autogenetically autogenic/S autogenous/Y autogiro autograft autographic autographically autography autogyro autohypnosis autohypnotic autoimmune autoimmunity autoinfection autoinoculation autointoxication autoloading autologous autolysate autolysin autolysis autolytic automaker automanipulation automanipulative automat automatable automaticity automatism automatist automobil automobilist automorphism autonomically autonomist autoparagraph autophyte autophytic autophytically autoplastic autoplastically autoplasty autopolyploid autoradiogram/MS autoradiograph/S autoradiographic autoradiography autorotate/N autorotation/M autorotational autoroute/MS autosave autosexing autosomal/Y autosome autostrada autosuggest autosuggestible autosuggestion autotable autotelic autotetraploid autotetraploidy autotomic autotomous autotomy autotransplant autotransplantation autotroph autotrophic autotrophically autotrophy autunite aux auxesis auxetic auxetically auxil auxin auxinic auxinically auxotroph auxotrophic auxotrophy avaliable avascular avast avatar avaunt avec avellan avellane aventail aventine aventino aventurine averment Avernus Avery/M avesta avgas avgolemono aviarist aviatress aviculture aviculturist avidin avifauna avifaunal/Y avifaunistic avigation Avignon aviophobia avirulent avitaminosis avitaminotic avocate avocational/Y avocet avoirdupois avouchment avowal avulse/GN avuncular awardable aweary aweather aweigh aweless awestricken awestruck awhirl awless awn awnless awoken Awwal axal axel axenic axenically axiality axil axile axilla axillar axillary axisymmetric axisymmetrical/Y axisymmetry axletree axman axoplasm ayin Aylesbury AZ azathioprine azeotropic Azerbaijan/M azide azido azidothymidine azine azonal Azores azote azurite azusa Baathism baba Babbage/M babblement baboonish babushka babymoon babysat baccate bacchanal bacchanalia bacchanalian bacchant bacchante/S bacchantic bacchic bacciferous bachelorette baci bacillar bacillary bacitracin backbeat/MS backbite/R backcountry backcourt backcourtman backcross backfield backfit backgammon/M backhoe backhouse backless backlist/MS backpedal backrest backsaw backseat backset backslap/MS backslapper backslide/R backspin backstay backstretch backstroke backswept backswing backsword backwash backwoodsman backwrap baclofen bactericidal/Y bactericide bacterin bacteriochlorophyll bacteriocin bacteriorhodopsin bacteriostat/MS badinage bae Baffin bafflegab bafflement bagful bagley bagman baguette Bahasa Bahrein/M bailable bailee baileefe bailie bailiffship bailiwick bailment bailor bailsman bainite Baird/M bairn baiza baize Baja bakeshop bakeware/MS Bakhtiari Baku BAL Balboa balderdash baldhead/D baldish baldpate balefire balenciaga Balfour balkline ballade balladeer balladic balladist balladry ballcarrier balletic balletomane balletomania ballfield/M ballgown/M ballista balloonist ballottement ballyhooey baloney balsamic Baltimorean baluster bam Bamako bambino Banach banality banausic Banbury/M bancroft bandana bandanna bandbox bandeau bandeaux bandgap banditry banditti bandleader bandmaster bandoleer bandolier bandsman baneberry bangish bangtail Bangui banjax banjoes banjoist bankable bankbook/S bankroll/R bankside banneret bannerette bannister/S bannock banns banquette bantamweight bantling Bantustan banyan banzai baobab barbarianism barbarically barbarism barbate barbe barberry barbershop barbitone Barbour/M barbudo/S barbwire bareback/D bareboat/MS barehand/DS bareheaded/P bareknuckle/D bargeboard bargello bargeman Barhop bariatric/S bariatrician baric baritonal barkless barky/R barleycorn Barlow/M barmaid barman barmy/R Barnes Barnet Barnett/M Barnhard/M Barnum barny barogram/MS barograph barographic barometrical/Y barometry baronage baronetage baronetcy baroreceptor barotrauma Barr/M barramunda barramundi barranca barranco barrater barrator barratry barre barrelful barrelhouse barrelsful Barrington/M barrio barrister/S barron barroom/S Barré Barton/M barware barycentric baryogenesis baryon/MS baryonic basaltic bascom bascule baseborn Basel baselevel basementless basenji basepoint baserunning bashaw basicity basidial basidiomycete/S basidiomycetous basidiospore basidiosporous basidium basie basify/N basilary basileis basilica basilican basinal basinet basipetal/Y basketful basketlike basketry basketwork basler baslot basophil basophile basophilia Basque/M bassi/S bassoonist/MS bast bastardy bastile bastille batboy Batchelder/M bate bateau Bateman/M batfish batfowl bathhouse/S bathometer/MS bathtubful Bathurst/M bathwater bathythermograph/MS batista batiste batman Bator batrachian batrachotoxin batsman batt battailous battalia batteau Battelle/M battement battlewagon battu battue batty/PR batwing baubee baudrons baulk/DGS baum Bausch bauxitic bawcock bawd/N bawdry bayadere bayaderka bayanihan Bayda Bayport/M Bayreuth bazon bazooka/S BCC BCG bea beachboy/MS beachcomb beachfront beachside beachwear beachy beadroll beadwork beale beall beame beamish/Y beamy beanball beanie bearability bearbaiting bearberry beardown Beardsley/M bearskin beastie beatbox/DGMS beatdown/MS beatie beatifically beatless beauchamps beauclerk beaverboard beaverton bebopper bechance Bechdel becket beckett Beckman/M becloud bedabble bedaub/G bedchamber bedclothes bede bedeck bedevilment bedew bedfellow bedim bedimmed bedimming bedlamite bedouin bedplate bedrid bedroll bedsore beduin/S Beeb Beebe/M beebread Beecham/M beefalo/MS beefcake beefeater beefwood beekeeper beekeeping beelike beeline beery/R beestings beeswax beeves befoh befool beforehandedness beforetime begat begetter begone begrime/DG beguilement beguine behaviorist/MS behavioristically behemoth behemothic behindhand behoof beigy Beijing bel/V Bela/M belaud beldam beldame beleaguer belge belike belittlement Belize Bellamy/M bellbird belligerency Bellingham/M Bellini/M bellpull bellum bellwood bellwort bellyband belowground Belshazzar/M beltless belton beltway beluga/M BEMA bemadden/G bemire bemock bemusement Benares benchmar benchtop/MS benday benedictory benefaction benefactress benefic beneficiate/N benefitted benefitting Benelux/M benight benignancy benignant/Y benignity benny benomyl benthal benthic benthonic benthos Benton/M bentonite bentonitic benumb benzodiazepine benzopyrene Beograd bepaint beplaster bequeathal berberine berceuse/S Berea/M Berenices Beresford/M bergamot Bergen/M Bergland/M Berglund/M Bergman/M Bergstrom/M beringer Berman/M bernardine Bernardino/M Bernardo/M berne Bernet/M Bernhard Berniece Bernini berrylike berteros Bertie berto Bertram/M Berwick/M beseem besetment beshrew besmear besom besot besotter bespatter bespoken besprent besprinkle bestead/DG bestiality bestiary bestie/MS bestrew bestride/GS bestsellerdom besuited betaine betake betel bethink betimes betony Betsey/M Bette/M betted betweenbrain betweentimes betweenwhiles beurre bewigged bewitchery bewitchment bewray bey BHA Bhagavadgita bhangra BHC BHT bhut bialy Bialystok biassed biassin biassing biathlete/MS biathlon bibb/R Bibb's bibbery bibcock bibelot/S bibimbap/M bibless biblicism biblicist bibliographer bibliolater bibliolatrous bibliolatry bibliology bibliomania bibliomaniac bibliomaniacal bibliopegic bibliopegically bibliopegist bibliopegistic bibliopegy bibliophilic bibliophilism bibliophilist bibliophily bibliopole bibliopolic bibliopolist bibliotheca bibliothecal bibliotic/S bibliotist bibulous/PY bicameralism bicapsular bicentenary bicentric bicentricity bichloride bichon bichrome bicipital bicoastal bicomponent biconcavity biconditional biconvexity bicorne bicornuate bicultural biculturalism bicuspid bicuspidate bicyclic biddability biddably bidet bidialectal bidialectalism bidonville bierce bietnar biface bifacial biff bifid/Y bifidity bifilar/Y biflagellate biform bigamist bigamous/Y bigamy bigeminal bigeminy bigeneric bigeye Bigfoot/MS biggety biggin bigging biggish biggity Biggs bighead/D bighearted/PY bighorn/MS bigmouthed bignonia bigwig bijou bijouterie bikeway bikie bilabiate bilateralism Bilbao bilbo bilboa bilevel bilgy/R bilharziasis biliary bilious/PY billable billfold/MS billhead billhook billi Billiken/S billon billowy billposter billposting billycock biloba bilobal bilobed bilocular biloculate Biltmore/M bimah bimanual/Y bimester bimestrial bimetal bimillenary bimillenial bimodality bimorphemic binarism binational bindweed bine bingle Bini binnacle binned binning binocularity bint binucleate/D bio bioabsorbable bioaccumulation bioacoustics bioactive bioassay bioastronautical bioastronautics bioavailability biobehavioral biocatalyst biocatalytic biocenology biocenosis biocenotic biochemic Biochimica biochip/MS biocidal biocide/MS bioclean bioclimatic biocoenosis biocoenotic biocompatibility biocontainment biocontrol/MS bioconversion biodefense/MS biodegradability biodegradable biodegradation biodegrade biodeterioration biodigester biodynamic/S bioecological bioecologist bioecology bioelectric bioelectrical bioelectricity bioenergy bioengineer/DGMS bioenvironmental bioequivalence/MS bioethanol/MS biofilm/MS bioflavonoid biofouling biofuel/MS biog/N biogas/MS biogenesis biogenetic biogenetically biogenic biogeochemical/MS biogeochemistry biogeographic biogeographical biogeography biographee biohazard/MS bioidentical bioinstrumentation biologism biologistic bioluminescence bioluminescent biomacromolecule/S biomarker/MS biomaterial/MS biomathematics biome biometeorology/M biometrical/Y Biometrika biomimetics biomineralization/MS biomolecular bionic/S bionomic/S bionomical/Y biopesticide/MS biopharmaceutical/MS biophilia Biophysica bioplastic/MS biopolymer/MS bioprospect/MS biorefinery/MS bioregion/MS bioregionalism/MS bioremediation/MS biosafety/MS biosatellite bioscientific bioscientist biosecurity/MS biosolid/MS biostratigraphy/MS biosynthesis biosynthetic biosynthetically biosystematic/S biosystematist biosystematy biota biotechnological biotechnology biotelemetric biotelemetry/MS bioterror/MS bioterrorism/MS biotin biotite biotitic biotope/MS biotransformation/MS biotron bioturbation/MS biotype biotypic biovular biowarfare/MS biowaste/MS bioweapon/MS bipack biparental/Y bipartisanism bipartisanship bipedal biphenyl/MS bipinnate/Y bipod bipolarity bipropellant/MS biquadratic biracialism biradial biradical/MS biramous birchbark Bircher/MS birdbrain/D birdcage/MS birdcall birdhouse birdieback birdieing birdlime birdman birdyback bireme biretta Birgit birgitta birk birkhead birkie birl/R Birman/M Birmingham birr birse birthmark birthroot birthstone birthwort BIS biscayne biscotto/MS bisectional/Y bisexuality Bismark/M bisphenol/MS bisphosphonate/MS Bissau bistort bistro/S bistroic bitartrate bitchery bitchin bitchy/PRY BitCoin bitewing/MS bitmapped bitmapping BITNET bitstock bitstream/MS bitsy bitt/DG bitted/U bitterish bitterweed bittock bitty bituminoid biturbo biunique bivalent biyearly biz Bizet/M bizjet/MS bizonal blabber/DG blabby blackamoor/S blackcap blackcock blackdamp blackface blackfin blackfish blackfly Blackfoot/MS blackguard/MSY blackguardism blackhander blackhead blackheart blackish blackland blackleg blacklight/MS blackmer blackpoll blacksnake blacktail blackthorn blacktop/MS blackwash blackwater bladderlike Blaine/M blakey blamably blameful/Y Blanchard/M blancmange blandish/R blandishment/S blanketflower blanketlike blankie/MS blanton blarney blasingame blastema blastematic blastemic blastie blastment blastula/MS blastular blastulation blat blate blatted blatter blaxploitation/M blazonry bleachable bleakish Bleeker blench blende Blenheim blether bleu blevins blimpishly blimpishness blindfish blindworm Blinn/M blintz blintze blipping blique blistery blithesome/Y blizzardy blobbing blockbuster/S blockbusting blockhead/S blockish/Y blogosphere/MS Blomberg/M Blomquist/M blondish bloodcurdling/Y bloodfin bloodguilt bloodguilty/P bloodletting bloodline/MS bloodmobile bloodred bloodstock bloodstone bloodsucker bloodsucking bloodthirsty/PY bloodworm bloodwort bloomy bloop/RS blossomy blotchy/Y blotter blotty blouson bloviate/DGNRS bloviator/MS blowback/MS blowfly blowgun blowhard blowout blowpipe blowsy blowtube blowy blowzy blubbery blucher bluebeard bluebell bluebottle bluecoat bluefin blueing bluejack blueliner bluenose bluepoint blueshift/MS bluesman/M bluesmen bluestem bluestone bluesy bluet bluetongue blueweed bluey Blum blume Blumenthal/M blunderbuss blushful blusterous blutwurst blyth Blythe/M BMW BMX BMX's boardlike boardman boardmanship boardsailing/MS boardsmanship boardwalk Boarsh boart boatel/S boatmanship boatneck/MS boatsmanship boaz bobber bobbery bobbinet bobblehead/MS bobbsey bobeche bobrow bobsledder bobstay bobtail/D Boca/M bocaccio bocci boccie bod bodacious/Y bodega bodement bodenheim bodhran bodiless bodkin Bodleian bodyboard/DGMRS bodysurf/R bodywork boehmer boehmite Boeotia Boeotian boer boff boffin boffo/S boffola Bofors bogartian bogeyman/M boggs bogie bogle BOGO boheme Bohemianism bohlen boho bohrium boies boilersuit Bois boite/S bola/S boland bolas/S bole bolero bolet boletus boliou bollard bollix bollworm bolometric bolometrically boloney boltrope bolus bombardier/S bombardon bombastically bombazine bombe bombinate/N bombsight bombus bon bonbon bondable bondholder bondmaid bondman bondstone bondwoman bonefish bonehead/D boneset bonesetter boney boneyard bonfiglio bongoes bongoist bonham bonheur bonhomie bonkers bonne/R bonnor bonsai bonspiel bontempo bonytongue bonze/R boobify boobird/MS booboisie boodle booger boogerman boogeyman boojum/MS bookbindery bookful booklist bookmaker/S bookmaking bookman bookmobile/S bookselling bookstall bookworm/MS booky boomlet/MS boomy/R boondocks boondoggle/GR boonies Boonton bootee Bootes bootie bootjack bootlace bootle bootless/PY bootlick/R bootprint bootylicious boozy/Y bopper bora borage borak borane borazon bordel bordereau boreal borescope boresight/S borglum Boricua boride Boris bork/DGS borland borneol borohydride boronic bort Bosch bosomy bosonic bosphorus Bosporus bosque bosquet bossa bossdom bossism bostitch bot/S botan botanica botchwork botchy botel botheration bottlecap/MS bottleful bottomland bottomry botulinal botulinum boubou bouche Boucher boucle boudoir bouffe bougainvillaea bougainvillea bougie bouillabaisse bouldery boule boulevardier bouleversement boulez boulle bounderish/Y Bourbaki bourbonism bourdon bourg bourgeoise bourgeoisify bourgeon bourguiba bourn bourse bouse/G boustrophedon bouton boutonniere bouvardier bouvier Bouvier's bouzouki bovinity bowan Bowditch/M Bowdoin bowelless Bowen/M bowerbird/MS bowery bowes bowfin bowfront bowhead bowknot bowlder bowleg bowlegged bowlful bowmen bowse bowsprit bowwow bowyer Boxford/M boxful boxhaul boxlike boxthorn boyar/S boyard boychick/MS Boyd/M Boyle/M Boylston/M Bozeman/M bozo/S BP brabble/DG brachial brachiate brachytherapy/MS bract bradded bradding bradykinin Bragg braggart braggest braggy brahma Brahmaputra Brahmsian brail braillewriter braincase brainiac/MS brainish brainless/PY brainpan brainpower brainsick/Y brainstem/MS brainteaser braise/DGRS brakeless braky bralette branchia branchial branchiate branchless branchlet branchy brandel brandin brandling Brandt/M brank/S brannon brant/S branum braque/S brassard brassbound brasserie brassica Brasstown brattice brattish/G brattle/DG bratty/P brava bravoes braw/Y braweling brawle brawly/R brawny/PRY brazos Brazzaville BRCA breadbasket/S breadroot breadstuff breadthways breadthwise breadwinning breakbeat/MS breakeven/MS breakfront breakoff breakout bream/S breastbone breaststroke/R breathability breccia/S brecciate/N breechblock breechcloth breechclout breechloader breeks breezeless breezeway bregma bregmatic Bremen/M Brendan/M Brennan/M Brenner/M Brent Brest/M Breton Brett/M breviary/S brewage brewski/MS Brewster/M briard bribable bricating Brice brickbat brickle bricktop brickwork bricolage bricoleur bridewell bridgeboard bridgeless Bridget/M Brie briefless brien briery brigadoon brigand/MS brigandage brigandine brigandism Briggs/M Brighton/M brightwork brill brilliantine Brillouin brimless brimmer brinded Brindisi bringdown brinkley brinksmanship brio brioche briolette briquet briquette bris brisance brisant brisket brisling brist bristlecone/MS bristlelike bristletail brit broadax broadcloth broadleaf broadminded broadsheet broadsword broadtail broadwife brocatelle brochette brockage brocket brockle brocoli Broglie/M broider broidery brokenhearted brolly/S bromance bromate/DG bromegrass bromeliad bromelin Bromfield/M bromic bromidic brominate/N bromism Bromley/M bromo/S bromocriptine bromouracil bromthymol bronchialy broncobuster brontosaur brontosaurus bronzy brookie Brookline/M Brooklynese broomball/R broomcorn broome broomrape Brotherism/MS brougham/S broun brownnose/R brownout brownshirt/MS brownstone/S browny browsability broxodent brucella Bruckner/M Bruegel/M bruit Brumidi/M brunet Brunswick/M bruschetta/M brushability brushback/MS brushcut brushland brushstroke/MS brushup brushwood brusk brusquerie brut bruxelles bruxism bryophyta bryophyte bryozoa bs/A Bt bubby bubke/S buccal buccaneer/MS buccaneerish bucer Buchenwald/M buckbean buckeroo bucketsful buckhead Buckley/M buckman buckminsterfullerene/M Bucknell/M bucko buckoes bucksaw buckshee bucktail buckthorn bucktooth bucky buckytube/MS bucolically budder buddle budgeteer budgie budlong budtender Buena Buenos bufferred buffi buffo/S buffoonery buffoonish bugatti bugbear bugeye buggery bughouse bugleweed bugloss bugseed builtin Bujumbura bulba bulbaceous bulbar bulbil bulbous/Y bulbul bulemia/M bulgur/MS bulgy/P bulla bullace bullae bullbaiting bullbat bulldogger bullfight/GR bullhorn bullnecked bulloch bullock bullocky bullous bullpout bullring bullshot/MS bullterrier bullwhack bullwhip bullyrag bumbershoot bumboat bumbry bumkin bumpkin/MSY bumpkinish bumpy/PRY buna bunchy/Y bunco bund bundist bundoora bundy bung/R bunghole bunglesome bunko/S bunkum Bunraku buntline bunyavirus buoyance buppie/MS buprenorphine burb/MSY burbank burdock bureaucratese/MS bureaucratically bureaux buret burette/S burgage burgee burglarious/Y burgonet burgoo/S burin Burke/S burking Burkitt/M burladero burle burlingame Burlington/M burnable burne/S Burnham burnoose burnous burnout burrstone burry/R bursae bursal bursar bursary burse burseed bursty burthen Burtt/M burweed busby/S bushbuck/S bushelage bushelman bushfire bushland/M bushman businesswomen busk/R buskin busload/MS busty busulfan busybody busywork butadiene butanol bute buteo butoxide butterfingered butterfingers butterfish butterflyer butterless butterscotch butterweed butterwort buttinski buttinsky buttonball buttonbush buttonhook buttonless buttonwood buttony Buttrick buttstock butty/S butut butylate/DN butylene butyraceous butyral butyraldehyde butyric butyrophenone/MS butyrylcholinesterase/MS Buxtehude/M Buxton bwana bycatch byelaw/S Byelorussian/MS byinge bylot byname bypast byplay Byrd byre bystreet CA cabala cabalism cabalist cabalistic caballed caballero caballing cabbala cabby cabinetmaking cabinetwork cablegram/MS cablet cableway cabman caboodle caboose Cabot/M cabotage cabriole cabriolet cabstand cachalot cachectic cachepot cachet cachou cacodemon cacodemonic cacogenesis cacogenic/S cacographical cacography cacophonous/Y cacuminal cadastral/Y cadastre cadaveric cadaverine caddie caddis caddish/PY cade cadency cadential cadetship caducean caduceus caducity caducous Cady Caesarian/M cafetorium/MS caffeinate/MS caffeinic CAFO caftan cageling cagy/PRY cahier Cahill caiman caipirinha caisson caitiff cajolement cajolery Cajun/MS cakewalk/R calabash calaboose Calais calamansi calamine calamint calamite calamus calash calcaneal calcaneum calcaneus calcic calciferol calcific calcifuge calcifugous calcimine calcination calcine/DG calcinosis calcipotriene calcipotriol calcitic calcitonin calcomp calculably/I calculatingly/U calculous caldera caldron Caldwell/M Caleb/M caleche calender/R calendric calendrical calends calendula calenture calflike Calhoun/M calif caliginous caliphal calk/R Calkins calla Callaghan/M Callahan/M Callan/M callant callboy Callery calligraphic calligraphically calligraphist callose callosity callus/S calmative calmodulin calomel calorically calorific calorimetrically calory calotte calque caltech calthrop caltrop/S calumniator calumnious/Y calutron Calvert/M Calvin/M calypsonian calyx calzone/MS camarilla cambial cambium Cambrian cambric Camden/M camelback cameleer camelia camellia camelopard Camembert cameralism cameralist Cameron/M Cameroon Cameroun/M cami Camilla camise camisole caml camlet camo camomile camorra camorrista camouflageable camouflagic Campagnolo/M campanile campanologist campanology campanula campanulate campcraft campership camphene camphine camphor camphoraceous camphorate/D camphoric campion campobello camporee campos campstool campy/PY campylobacter/MS campylobacteriosis/M camshaft/S Canaan/M canalboat canaliculate canard canasta Canavan cancan cancroid candela/MS candelabra candelabrum candent candescence/I candescent candida candidature candidiasis candleholder candlepin/S candlepower/S candlesnuffer candlewick canebrake canescent caneware Canfield/M canful canicular cankerous cankerworm cankle canna cannabidiol/MS cannabinoid/MS cannel cannellini cannibalic cannoli/MS cannonade cannoneer cannonry canoeing canoeist/MS canoness canonicity Canopus canorous/PY canst cantabile Cantabrigian cantata/S canterelle canthaxanthin/MS canthi canthus cantillate/N cantle/S cantonal cantonment cantus canty canute canvaslike canyoneer/DGS CAPCOM CAPCOM's capelet capella capellini/MS capeskin capet capework/MS capful capias capillarity capitalistically capitan capitate/DGNRS Capitoline capitular capitulary capitulum capnograph/MS capnometer/MS capo capoeira/M capon caponata caporal cappelletti capper/S cappy caprese/MS capri capriccio caprification caprine capriole caprolactam/MS capsid/MS capsular capsulate/D capt captainship captan captionless captivator captopril capuchin Caputo capybara carabao carabid carabineer carabinero carabinier carabiniere caracole carafe carangid carapace/MS carat caravanner caravansary caravel carb/MS carbachol carbamazepine carbamino carbanion carbapenem carbarn carbaryl carbazole carbidopa carbo carbofuran carbolated carboline Carboloy carbonara Carbone carboniferous carbonium carbonless carbonous carbonylation carbonylic carboxy carboxyl carboxylate/N carboxylic carboxymethylcellulose carboxypeptidase carbuncular carburet/D carburetion carburetor/S carcase carcinoembryonic carcinogenesis carcinogenicity carcinoid cardamom cardiacum cardialgia Cardiff/M cardigan/MS cardinalship cardiogenic cardiogram/MS cardiograph/RS cardiographic cardiography cardioid/MS cardiological cardiologist cardiopathy cardioprotective/MS cardiopulmonary cardiorespiratory cardiothoracic cardiotonic cardiovasculatory cardioversion cardioverter cardplayer cardsharp/R careerist/S carefuller carefullest Carey/M carfare carful Cargill/M carhop Carib caribe caricatural carinii carioca cariogenic cariole carious carle/G Carlin/M Carlisle/M Carlo carmaker Carmela Carmen/M carnallite carne carnelian carney carnitine carnivoran carnivore carnosaur caroche Carolingian carom carotene carousal carpaccio/MS carpal Carpathia Carpathians carpellary carpetbag/MS carpetbagged carpetbagger/MS carpetbaggery carpetbagging carpi carpospore carposporic carpus Carr/M Carrara carrefour carriageway/S carriole Carroll/M carronade carroty carrousel Carruthers carryall carryback/MS carryout carsick cartage cartilaginous cartload/S cartogram/MS cartographical cartomancy cartop carty caruncular carunculate/D casa casaba/MS Casanova/M cascara caseate/N casebearer casemate caseous casern caserne cashable cashbook cashless casque cassaba cassava cassino cassite cassoulet/MS castaway casteism castigator/S Castillo/M Castleman castoff/S castrato castrator/S castratory Castroism casuistic casuistical casuistry catabolic catabolically catabolism catabolite catachresis catachresti catachrestic catachrestical cataclysm cataclysmal catacomb catacombic catadioptric catadromous catafalque catagen catalatic catalectic catalepsy cataleptic cataleptically Catalonia catalpa catamaran catamount cataphora cataphoric cataplasm cataplastic cataplexy cataractal catarrh catarrhal/Y catastasis catawba catboat catchall catchee catchment catchpenny catchpole catchpoll catchup cate/NSX catechesis catechetical catechin catechismal catechist catechistic catecholaminergic catena catenary catenulate cateran catercorner cateress caterwaul catface/G catgut cath catharses cathartic cathead cathect cathectic cathedra cathepsin Catherwood/M catheti/MS cathexes cathexis cathodically catholically catholicate catholicity cathouse cationic cationically catkin catnap/S catnapped catnapper/MS catnapping catoptric/S catoptrically catted catting caudal/Y caudate/DN caudillismo caudillo caudle caul cauldron/S caulescent caulicle/S caulifloweret cauline causeless causerie causey/S caustically causticity cautery cava cavalierism cavalletti cavalryman caveola cavernicolous caviare cavies Caviness cavitary cavitate/N cay Cayley/M cayman Cayuga/M CBD CBD's CBer/MS CBN CBS cc CCD CDR ceasefire/M Cecropia cedarn cedarwood cedi Cedric ceftriaxone ceil ceilometer/MS ceinture cel celandine Celebes celebrator/S celebutante/MS celeriac Celia/M celiac celibacy cellarage/S cellaret/S cellarette/S cellularity cellule celluloid/M cellulolytic cellulosic Celt cementation cementite cementitious cenobite cenobitic cenobitical cenogenetic cenogenetically cenospecies cenotaph cense/GR censorious/PY censurable cental centare centas centaurea centaury centavo centenarian centesimal centesimo centiare centigram/MS centillion centime centimo centner cento centones centra centrale centralism centralist/S centralistic Centrex centric centrically centricity centriole centrism centroidal centromere centromeric centrosome centrosomic centrosphere centrosymmetric centrum centum centurion cephalad cephalexin cephalic cephalically cephalometric cephalometry cephaloridine/MS cephalosporin/MS cephalothin Cepheus cepstrum ceraceous ceramicist ceramide/MS ceramist ceramium cere/GS cerebellar cerebroside/S cerebrovascular cerebrum cerement ceremonialism ceremonialist/S cereus CERN cernuous certes certifiably certificatory ceruloplasmin/MS cerumen ceruminous ceruse cerveza cervices cervine cervix/S Cesare/M cesarean cesarian cesspit cesspool cesta cesti cetacean/MS cetane cetirizine ceviche/MS cf cha Chadic Chadwick/M chaebol chaffey chaffy Chaga Chah chai/MS chainomatic chalcedonic chalcedony chalcid chalcocite chalcogen chalcogenide chaldron chalet chalkboard chalkbrood chalone chambray/S chameleon/S chameleonic chamfron/S chamisa chammy chamoix chamomile champak champertous champerty champlainian chanceful chancel/S chancellery chancellorship/S chancellory chancre/S chancroid chancroidal chancrous chandelle Chandigarh chandler chandlery changeful/PY changeless/PY changeling changeup/MS channelopathy channing chanson chanteuse/S chanty/RS Chao/M chaotically chapati chapbook chape chapeau/S chapeaux chapelles chaperonage chapfallen chapiter chaplaincy/S chaplet/DS chaplinesque charabanc characin characterful characterless characterological/Y charactery charade/S charcuterie chard chare charioteer/S charism/S charismata charlatanism charlatanry Charlemagne/MS charmless charnel charnock Charon/M charring Charta Chartres chartulary/S charwoman chary/PRY chassepot chasseur chasten/DGR chateaubriand chatelain/S chatelaine/S Chatham/M chatoyance chatoyancy chatoyant Chatsworth/M chattahoochee chatterbox/S chauffers Chauncey/M chaussure/S chauvinistically cheapie cheapish/Y cheapskate/S checkerberry checkless checkmark/S checkmate/DGS checkoff checkrein checkroom/S checkrow cheddar cheekful cheep/S cheerio cheesecake/MS cheesemaker/S cheesemaking cheeseparer cheeseparing/S cheesesteak/MS chefdom chekhov chelatable chelator chelonian Chelsea/M chemiluminescence chemiluminescent chemiosmotic chemische chemism chemisorb chemisorption chemoautotrophic chemoautotrophically chemoautotrophy chemokine chemometrics chemoprevention/MS chemoprophylaxis chemoreception chemoreceptive chemoreceptivity chemoreceptor/S chemosurgery/MS chemotaxonomy/MS cheng chenille cheongsam/MS Cherie/M cherishable cheroot cherrylike cherrystone chert cherubic cherubically cherublike chervil/S chessboard/S chessman chessmen chestful chesty/R chetrum cheveron cheviot chevrotain chewy chi Chiang/M chiaroscurist chiaroscuro chiasma chiasmatic chiasmus chiaus chicalote chicaning chichi chickasaws chickenhearted chickpea/MS chickweed/S chicle chicos chidden chieftaincy/S chieftainship chiffonier chignon chikungunya childbed chile/MS chilies chillax/GS chiltepin chimaera chimere chimerical/Y chimerism chimichanga/MS Chimique chimneypiece Chinatown/M chinaware chinbone chinch chine/S chinoiserie chinos chinquapin chintzy/R chipmaker/MS chipotle/MS chipset/MS chiral chirographer chirographic chirographical chirography chiromancer chiromancy chiropodist/S chiropody chiropractic chiropter chiropteran chirpy/Y chirrup/DGS chit/S chitchat chitin chitinous chitlings chiton chitterlings chivalric chivvy/DG chivy/D chiweenie chloracne chloral chloramphenicol chlordane chlordiazepoxide chlorhexidine chloric chlorinity chlorite chloritic chlorobenzene chlorofluoromethane chlorohydrin chlorophyllose chlorophyllous chloroplatinate chloroprene chloroquine chlorothiazide chlorpheniramine chlorpromazine chlorpropamide chlorpyrifos chlortetracycline chockablock chocolaty choky cholangiography cholecalciferol cholecystokinin choler choleraic choleric cholesteric cholestyramine choline cholinergic chon/I chondrite choosey chopfallen chophouse chordamesoderm choreman choreographically choric chorically chorine chorioallantois choriomeningitis chorionic chorizo chorographic chorography choryza Chou/M chowderhead/D chowhound chowtime chrestomathy Christensen/M Christiana/M Christianson/M Christina/M Christmastime Christoffel Christoph/M christsake chroma chromatically chromaticism chromaticity/M chromatid chromatin chromatographically chromatolytic chromide chrominance/MS chromo chromocenter/MS chromodynamics chromonema chromoprotein/MS chromosomal chromosome/MS chromosomic chromospheric chronaxie chronical chronicity chronobiology/M chronogram/MS chronogrammatic chronogrammatical chronographic chronologer/S chronologic chronologist/S chronometric chronometrical/Y chronometry chronoscope/S chronotherapy/M chrysolite chrysophyte/MS chuckhole chucklehead/DS chucklesome chuckwalla chuff/DG chuffy/R chugalug chugger chumship Chungking Chunnel/M churchgoer churchianity churchless churchmanship churchy churlish/PY churro/MS chutist/MS chutzpa chutzpah chylomicron chymotrypsin chymotrypsinogen chyron/MS chytridiomycosis cigarillo/S ciliary cimetidine Cinco cincture cindery Cindy/M cineast/MS cinemagoer/S cinematheque/MS cinematically cinematograph/RS cinematographic cinematographical/Y cinematography cinephile/MS cinquefoil ciphertext/MS ciphony ciprofloxacin circadian circinate/Y circuital circuity circulatable circulator/MS circumambient/Y circumambulate/S circumcircle circumfluent circumfluous circumfuse/DGNSX circumjacent circumlocutory circumlunar circumnavigator/S circumscissile circumscription circumstantiality circumstantiate/DGS circumstellar circumvallate/DGNSX circumvolution/S circusy cirque/S cirrhoses cirrhosis cirrhotic cirrous cirrus cis cisgender cislunar cisplatin cist cistron cit citable citational citify/D citizeness citral citrinin citronella citrovorum citrulline civically civie/S civilists Civitan civvy clabber clack/RSZ Clactonian cladistics cladogenesis cladogram/MS cladophora clafouti clamant/Y clambake/S clamorist/MS clampdown clangorous/Y clansman clansmen clapback/MS Clapeyron clapper/S claptrap claque/S Clarendon/M clarinettist clarridge classicalism classicalist classicality classicism classicistic classico clast clausal Clausius claustral clavichord clavichordist clavicular clavier clavierist clavieristic clawhammer/MS claybank clayey clayish Claymore/MS Clayton/M clayware cleanable cleanhanded cleantech/MS clearable clef/MS cleidoic clemens clemente clepe/DGS clergyperson/MS clericalism clericalist clerihew clerkship cleverish clevis clickbait/MS clientage cliental cliffy Clifton/M climacteric climactically climatologist/S climbable/U cline/S clingy clinometric clinometry clipsheet/MS cliquey cliquish/PY clitic clitoral clitoric clitoris cloaca cloacal clochard cloche clocklike cloddy clodhopping clofibrate cloistral cloistress clomiphene clomipramine clonal/Y clonazepam clonic clonicity clonidine clonk/DGS clop/S clopidogrel clopped clopping cloque closable/A closeable closefisted closemouthed closeout closetful clotheshorse clothespin clothespress Clotho clotrimazole cloudland cloudlet/S cloven cloverleaf cloverleaves clownery clownish/PY cloxacillin clozapine cloze clubable clubbable clubber clubby/PR clubfoot/D clueing clumpy clunk/DGRS clupeid clustery clutchy CMYK CMYK's Co CoA coacervate coact/V coaction coadapted coadjutrices coadjutrix coadministration coadminster/DGS coadunate/DGNS coagulability coagulant/S coagulase coalify/N coalitionist coanchor/MS coapt/DGS coaptation/M coarctate/N coarticulation coarticulatory coastguard coastguardman coastguardsman coastland coastward/S coastwise coatrack coatroom cob/MS cobalamin cobaltic Cobb/M cobby cobelligerent cobia cobwebbed cobwebby coca cocainism cocaptain cocarboxylase cocarcinogen/MS cocatalyst cocci coccidioidomycosis coccidiosis cochair/MS cochairman cochairmen cochairperson/MS cochairwoman/MS cochise Cochran/M Cochrane/M cockade/D cockamamie cockapoo/MS cockatrice cockerel cockfight/GMS cockhorse cockney/S cockneyish cockneyism cockshy coco/S coconscious/P coconspirator/MS cocoyam cocultivation/M coculture/MS cocurricular codable Coddington/M codeclination codefendant codeine codeless codependence/MS codeposit codesign/MS codetermination/MS codex codger codices codicillary codicology codifiability codiscover/DGRS codling codomain codominant codon codpiece/S codriver/MS Cody/M coeducational/Y coenzyme coequality coercivity coeternal/Y coeternity coeval coevality coevolution/MS cofavorite/MS cofeature coffeehouse Coffey/M coffle/S cofinance/DGS cofunction cogency cogeneration/MS cogged cogging cogitable/I cogito cognitional cognitivity cognomen cognoscenti cogwheel/S cohabitant/S coheir coheiress cohesionless coho cohomology cohosh cohousing/M coidentity coif coiffeur coiffeuse coiffing coign coilability coinfection/MS coinsurance coinsure/R coinvest/DGRS coition coitional cojones col/Y colada/MS colasanto coldblood coldhearted/PY coldish Cole/M colead coleslaw Colette/M coli colic colicin colinear coliphage/MS colistin colitis coll collaborationism/M collaborationist/S collage/S collagenase collagist/S collarless collaterality colleagueship colleaguesmanship collectable collectivism collectivist/S collectivistic collectivistically collectivity collectorate/S collectorship collegium collet colliery/S colligate/NV collimator Collins collisional/Y collocational collodion collogue/DG colloq colloquiality colloquist colloquoy colloquy collusive/Y colluvial colluvium/M colog cologarithm Colombo/M colonelcy colonialistic colonic colonography/MS colonoscope/MS colonoscopy/MS colophon colophony colorant/S colorate/DS colorbred colorimetric colorimetrically colorpoint/MS colossi colossus/S colostomy colostral colostrum colposcope/MS coltan coltsfoot columbine columniation columnistic colza com comae comaker combinability combinate/V combinatory comblike combustibility/I combustibly combustor/S comedie comedienne/S comedown cometic comfit/S comfortless comfy/R comicality Cominform comique comity comix commandable commandership commandery commemorator/S commendably commensal/Y commensalism commensurably/I commentariat/MS commentate/S commer commercialist commercialistic commie commination comminatory comminute/DN commissar commissariat commissionaire commissionership commissural commissure commix commixture commode/S commodify/DGS commonage commonalty commonsense commonsensible commonsensibly commonsensical commonweal commove/DGS communalism communalist/S communality/S communard/S communese communicability/I communicableness communicably/I communicatee communicatory communistically communitarian communitarianism commutator/S comonomer comorbid comorbidity comoving compactible compactify Compagnie companionably companionate companionway/S comparatist/MS comparativist compart compartmental compartmentation/MS compassable compassionless compatability compatriotic compeer compellation compeller compend compendious/PY compensability compensational compensator/S compere/DG competitory complacence compleat complected complemental comples completist/MS complexation complexional complexometric complexometry compliancy complicacy complice compline complot compo/S componential componentry compositionist/MS compoundable comprehendible comprehensibly compressional comprisable comprisal/S Compton/M comptrollership compunctious compurgation/S compurgator computerist/MS computerite computerlike computernik/MS computerphobe/MS comradery comsat Comstockian comsummatively Conakry Conant/M concavity concealable conceivability/I conceivableness concelebrant/MS concentrically concentricity conceptacle conceptional conceptualism conceptualist conceptualistic conceptualistically conceptus concernment concertante concerti concertmeister concessional concessionary concessive/Y conciliar/Y concinnity/I conclusionary conclusory concoction concomitance concordat concorde concours concrescence/S concrescent concretionary concretism concretist concretistic concubinage concupiscence concupiscent concupiscible concuss/DGSV concussive/Y condemnable condemnor condensable condensational condescendence condign/Y condimental conditionable conditionality condolatory condole/DG condom condominial condonable condonation conductibility conductible conductimetric conductometric conductorial conductress conduplicate/N confab confabbed confabbing confabulator confabulatory confection/RSZ confectionary confederal confederalist/S conferential conferment/S conferral/S confessable confessionalism confessionalist confetti confidante/S configural configurate/DGSV configurational/Y confirmability confirmable confirmational confiscable confiscatable confiscator/S confit conflagrant conflagrate/DS conflagrator/S conflagratory conflate/DGNSX conflatrate/G conflictful confliction/S conflictless conflictual confluence/S conflux/S confocal conformable/U conformably/U conformism confraternity/S confrere/S confrontal confrontationism confrontationist confusional confutation/S confutative confutator/S cong/R conga congealment congee congelation/S congener congeries conglomerateur conglomeratic conglomerator conglutinate/DGNS Congolese congratulator congregant congregational congregator congretants congruency conicity conjugacy conjugality conjugant/S conjugational/Y conjunctional/Y conjunctiva conjunctival conjunctivitis conjunto conjuration/S conjuror Conklin/M conlang Conley/M Connally/M connate/Y connatural/Y connaturality connectable connectible connectional connectionism/M connelly conniption connivent connivery connoisseurship Connors connotational connubialism connubiality conscienceless conscribe/DGS consecrator consecratory consecution consentaneous/Y consequentialism/M conservancy conservational conservatorial consigliere/MS consignable consignation consignee consignment consignor consistorial consistory consociate/N consociational consol/S consolatory consolette consolidator/S consonancy conspecific conspectus/S conspicuity conspiracist/MS conspiration/S conspirational constabulary Constantine/M constellate constellatory constipate/DGNS constitutionalism constitutionalist constitutionless constringe/DGS constringent construable construal constructionist/A constructivism/M constructivist consubstantial consubstantiate/N consuetude consuetudinary consulship consultancy/S consultantship consultor consumerism consumerist consumership consummator consummatory contagium containerboard/MS contaminator contemplator contempo contemporaneity contemptibly contendere conterminous/Y contestation contexture contingence continua continuate/DGSV continuative/Y continuator continuo contortionist/S contortionistic contrabandist contrabassist contractibility contractible contractile contractility contractional contracture contradictable contradictious contradictor contradistinct/V contradistinctive/Y contradistinguish contralateral contralto contraoctave contraposition contrapuntal/Y contrapuntist contrariety/S contrarious contrariwise contrastable contrasty contravariant contretemps controllership/S controlment/S controversialism controversialist controvert/DGRS contumacious/Y contumelious/Y contuse/DGS conurbation/S Convair/M convect/DGSV convectional convector/S conveniency/I conventicle/R conventionalism conventionalist conventioneer conventual/Y convergency conversable conversance conversancy conversional convertibly/I convertiplane convertor conviviality convocate convocational convulsant convulsionary Conway/M cony cooch Cooke/M cookout/S cookshack cookshop cooktop/MS cookware cooldown Cooley/M coolish coomb/S coonskin cooperage cooperationist coot cootie copacetic coparcenary coparcener copartner copartnership copeck copemate Copernican copernicium/MS copesetic copesmate copestone copilot coplanarity copliots copperas copperplate coppice copping copra coprinus coprocessing/M coprocessor/MS coproduct/MS coprolite coprolitic coprophilia/M coprosperity/M copublish/DGRS copula/S copulate/DGNSV copulative/Y copulatory copyboy copycat/S copycatted copycatting copydesk/MS copyhold/R copyreader coq/M coquet coquetry coquettish/PY coquina coquito coralberry coralline corbel Corbett/M Corcoran/M cordate/Y cordiality cordiform cordwain/R cordwainery cordwood corecipient corelate/N coreligionist corepressor/MS corequisite/MS corespondent Corey/M Corinth Coriolanus corkboard/S corky/R cornball corncob corncrib corneal Cornelia/M Cornelian Cornelius corneous cornerback/MS cornerman/MS cornerways cornerwise cornetist cornettist cornhole/MS Cornhusker/MS cornhusking cornice/DGS corniche cornification cornpone/MS cornstalk cornucopian cornwallis corolla corollate coromandel/MS Coronado coronagraph coronograph corotate corpocracy/S corpora corporality corporatism corporatist corporativism/M corporator/I corporeity/I corporis corposant corpulency/S corpuscle/MS corpusculated corpuscule/S corrade/DG corrasion/S corrasive correctional correctitude correlatable correlational correspondency corresponsive corrigenda corrigibility/I corrigibly/I corroborant corroborator/S corroboratory corroboree corruptibility corruptibly/I corruptionist corsair corse cortege/S Cortez corticate/D cortices corticoid/MS corticosterone/M corticotropin/MS corvallis Corvus Corydoras coryneform cos coscenarist/MS coscript cosec coset Cosgrove/M cosh/R cosigner cosmeceutical cosmetician/S cosmetologist/S cosmetology cosmo cosmochemical cosmochemistry/M cosmogenic cosmogonic cosmogonical cosmogonist cosmogony cosmographer cosmographic cosmographical/Y cosmography cosmologic cosmonaut cosmopolite cosmopolitism cosponsorship cosset/DGS costa costal costless/Y costmary costumery costumey costumier cosurfactant/MS cote coterie/S cotija cotillon cotman cotoneaster cotransduction/MS cotransfer cotransport/R cotta cottagey cottontail/MS Cottrell/M cotty couldst coulrophobia/M Coulter/M councillorship councilmanic countability countdown/MS counteraction counterblow counterchallenge counterchange countercheck counterconditioning/M countercountermeasure/MS countercurrent/Y counterdeployment/MS counterespionage counterfoil counterinflation counterinflationary counterintelligence counterion counterirritant countermarch countermove countermovement countermyth/MS counteroffensive counteroffer counterpane counterparty/MS counterpicket/MS counterplan counterplea counterplot counterploy/MS counterpose/DGS counterprogramming/M counterpunch/MRS counterreformation counterrevolutionary/MS counterrevolutionist countershaft/S countersign countersignature countersniper/MS counterspy counterstatement countersurveillance/M countertenor/S counterterror/M counterterrorism counterterrorist counterthreat/MS countertrade/M countertransference/M countertrend countervalue/MS counterview countryfied countryish countryseat countrywoman countywide coupal couplement courseware/MS courtmartial Courtney/M courtside couscous cousinage cousinhood cousinship couth couture couturier couturiere covalence covalency covenantal covenantee covenantor covent coventry coverless coverture/S covetable covey/S cowage Cowan/M cowbane cowcatcher cowman cowmen cowpea cowry cox Coxsackievirus/MS coydog/MS coypu cpr CQ crabber crabby/R crabwise crackajack crackback/MS crackdown crackerjack craftsmanlike craftsperson/M craftswoman craftswomen cragged cragsman crammer crampon/MS craneman cranemen cranial/Y craniate craniosacral craniosynostosis crape crapper crapping crappy crapshoot/R crapulous crashworthy/P crassitude craterlet craton crayonist creaseless creatine/M creatural creaturehood creche/S credentialism/M creditability cree creepage creese creighton crematorium cremini crenate/DNY crenellate/DNS crenelle/DG Crenshaw/M crenulate/DN creosol creosote crepey crepitant crepitate/N crepuscle crepuscular crepuscule crepy crescentic crescive/Y cresol cresset crestal crestless cretinism cretonne Creutzfeldt/M crevalle crevasse crewelwork crewless crewmate/MS crewmember/S cria cribbage/M cribber cribriform cricetid crick crimeware/MS criminalist/MS criminate/GN criminological/Y criminologist criminology criminous crimpy/R cringeworthy cringey crinoid crinoline crisphead Crispin/M CRISPR CRISPR's crispy/PR crista crit criterium/MS criticaster croaky Croatia croatian crocket/D crocodilian Crohn's croissant/S cronyism crookback/D crookery cropland/MS croquet croquette croquignole crore crossability crossbearer crossbill crossbones crossbow crossbowman crossbred/I crossbreed crosscurrent/S crosscut crosslet crosslinguistic crosslink/MS crosspatch crosspiece crosstown crosstree crosswind crostini crotchet/DGS croton croup croupous croupy crouse crouton crowberry crowfeet crowkeeper crownet Croydon/M cruciate/Y crucifer cruciferous cruciform/Y crudded crudding crudo crueller cruellest cruet Cruickshank/M cruiserweight cruller crumby/R crumpet crunk crupper cruris crustacea crustaceous crustal crustification crustose crusty/PRY Cruz cruzado Cruzan cruzeiro crybaby crymotherapy cryobiological/Y cryobiologist/S cryobiology/M cryogen cryogenically cryogeny cryolite cryonic/S cryophilic cryopreservation/M cryoprobe/MS cryoprotective cryoscope cryoscopic cryoscopy cryosurgery cryotherapy/M cryotron crypsis cryptal cryptarithm cryptical/Y cryptid/MS crypto/S cryptogenic cryptogrammic cryptograph cryptosporidiosis cryptozoology cryst crystallographical/Y crème/S CSNET CT cubage cubature cubby/S cubical/Y cubicle cubiform cubistic cubit cuboid cuboidal cuckold cuckoldry cucullate/DS cucurbit cuddleback cuddlesome cuddy cueing cuffless Cuisenaire cuke culation Culbertson/M culinarian/MS cullender culminant culotte/S culpably cultch cultic cultigen cultism cultivability cultivar/S cultivatable cumbrous/PY Cummings Cummins cumulous cunctation cunctative cuneate/Y cuneiform cunner cunnilinctus cunnilingus CUNY cupbearer cupcake cuplike cupola cuppy/R cupreous cupriferous cuprite cupsful cupular cupulate cupule curability/I curatorial curatorship curbstone cureless curet curettage curette/DG curettement curite curium curlew curmudgeon/Y Curran/M curricle currie curriery currish/Y cursorial curst curtailment curtal curtesy curtilage Curtis curule curvacious curveball/MS CURVET curvilineal Cushing/M cushionless cushiony cuspate/D cuspid cuspidate/DN cuspidor cussword/S Custer/M custodianship/S customshouse cutability cutaround cutaway cutch cutesy cutey/S cuticle/S cuticular cutie cutler cutlery cutline cutover cutpurse cutset cuttable cutup/S cutwater cutwork Cuvier Cuzco cyano cyanoacrylate cyanobacteria/M cyanobacterium/M cyanocobalamin cyanohydrin cyberattack/MS cyberbullying/M cybercitizen/MS cybercrime/MS cybernated cybernation/MS cybernaut/MS cybernetical/Y cybernetician/MS cyberneticist/MS cyberporn/MS cybersafety/M cyberspeak/M cybersurfer/MS cyberterrorism/M cyborg cybrarian cycad cycasin Cyclades cyclamate cyclase cyclazocine cyclin cyclitol cyclo/S cycloaddition cycloaliphatic cyclodextrin cyclodiene cyclogenesis cycloheximide cyclohexylamine cyclometer/MS cyclonic cyclonically cycloolefin cyclooxygenase cyclophosphamide cyclorama cycloserine cyclospora cyclosporine cyclothymic cyclotomic cyclotron cygnet/MS cymbalist/S cynomolgus cynosure cypher/S cyproheptadine cyproterone Cyrillic cystamine cysteamine cysteine cystic cytaster cytochalasin cytochrome cytogenetics cytokinin cytologic cytological/Y cytologist cytolysin cytolytic cytomegalic cytomegalovirus cytomembrane cytometry cytopathogenic cytopathogenicity cytophilic cytophotometry cytoplasmic cytoplasmically cytosine cytoskeleton/MS cytosol cytostatic cytostatically cytotaxonomy cytotechnologist/MS cytotoxic cytotoxicity cytotoxin cytotropic CZ Czerniak/M d'elegance d'oh dabber/S Dacca/M dachshunde dactylus Dada Dadaistic daedal daff daft/PRTY daggerboard/MS daggerman daguerreotype/MS daguerreotypic daguerreotypy dah Dahl/M dahlia/S Dahomey/M daidzein Dailey/M daimon/S daimones daimonic daiquiri/S Dairylea dairymaid daishiki dalasi Daley/M Dalhousie dali dalliance dalloway dallyes dalmatian/S dalmatic Dalzell/M damnable/P damnably damnatory damndest damnify Damocles Damon/M dampish damselfly/S Dana/M danazol danceability danceable dander dandiacal/Y dandify/N dandle/DG dandruff dandruffy dandyish/Y dandyism dandys danseur Danubian daphnia dapsone daredevil/S daredevilry daredeviltry dareful daresay Darius darkish darkle darkroom/S darksome darlington darmstadtium darrow darry Darwinistic dashcam/MS dashi datable Datamation datamedia dataswitch/S datcap dateable dateless datetime datura Daugherty/M daughterless daunomycin daunorubicin dauphin dauphine daven Davison/M davit daybook daydreamlike dayglow daylong daymare dayroom/S daystar Daytona/M db DBCP DC ddC DDD DDE ddI DDVP de/N deaccession/G deacidify/N deactivator deadbeat deadeye deadfall deadlight deadman/M deadname deadpan deadpanner deaerate/NS dealate/DNS dealership deaminase deaminate/N Deane/M deanery Deanna/M deanship deathblow deathcare/M deathless/PY deathsman deathwatch debark/S debarkation debarment debasement debatement debator/S debauchee debeak/DGRS debeard/DGRS debone/DGRS debouch debouchment debouchure debtless debutant decadency decagon/U decagram/MS decahedron decalcify/N decalcomania decalescence decalogue/S decamethonium/M decametric decamp/S decampment decanol decantation decapitate/GNS decapitator decapod/MS decarbonate/DGNS decarbonator decarboxylase/M decarboxylation/M decasyllabic decasyllable Decatur/M deceivable/P decelerator decennium deceptional decerebrate/DGNS deciare decidua decidual deciduate decigram/MS decillion/U decipherable decipherment decistere deckhand deckhouse deckle declarable declarant declass declasse declensional/Y declinable/I declinate declinational declinist declivitous deco decoct/DGS decoction/S decollate/DGNSX decolonise decolorant/S decolorate/DS decompensate/N decompensatory deconcentrate deconcentrator decondition/DGRS decongest/V decongestant decongestion deconsecrate/N deconstructivism/M decontaminate/GNSX deconvolution deconvolve decorticator/S decoupage/S decremental decrepid decrepit/Y decrepitate/N decrepitude decrescendo decrescent decretal/S decretive decretory decrial/S decryptograph decsystem dectape decubitus decumbent decuple decurved decussate/NY decwriter dedicator dedicatory dedifferentiate/DN Dee/M deedless deejay DEET deets defalcate/N defalcator defamation defamatory defamiliarize/DGS defat DEFCON defeasance defeasibility/I defeasible/I defeature/DGS defector/MS defendable defensibility/I defensibly/I deferential/Y deferral defervescence/S defervescent defial defibrillation defibrillator defilement definably/I definement definitude deflagrate/DGNS deflationary deflator deflexed defloration/S deflower defoamer/S defoe defoliant defoliate/DGNS defoliator deforce deforcement deforciant deformative defrag defragger defragment/DGRS defraudation defrayable defrayal/S defriend/DGS defrock defund/DGS defuse/DG defyed defys degas degassing degauss/DGRS degeneracy degorge/DGS degranulation/M degressive/Y dehydrase dehydrator dehydrochlorination/M dehydroepiandrosterone/M Deimos deinonychus Deirdre/MS deism deist deistic deistical/Y deixis dejeuner/S dekametric DeKastere deke Del delaminate/N Delaney/M Delano/M delate/DGNS delator delectability delectably delectate delegacy delegitimate delft Delia/M delict delightsome/Y delimitate/V delineament/S delineator deliquesce deliquescent delish delist/DGS deliverability Della/M dellwood Delmarva delocutive Delphically delphine delphinium Delphinus delt/M deltaic delusional delusionary delusory demagogic demagogical/Y demagogism demagoguery demagogy demandable demandant demantoid demark demarkation dementia demential Demeter demethylate demi demigoddess demijohn demission demitasse demiurge democratique demographiques demolishment demolitionist demoniacal/Y demonian demonical/Y demonology demonstrability demonstrational demonstrationist demotic demount/DGS demulcent demure/PY demurrage demurral demyelinating demystify/DGS denaturant denaturation denaturational denazify/N dendriform dendrite/MS dendritic dendrochronology/M dendrogram/MS dendroid dendrologic dendrological dendrologist dendrology Deneb/M Denebola deneen denegation denervate/DGNS deni denigrator denigratory denitrify/N denominal denominational denominationalism denominationalist denotement denouncement densify/N densimeter/MS densimetric dentate/DNY dente denticle denticulate/DNY dentiform dentifrice dentigerous dentil dentin dentinal dentine dentition Denton/M dentulous denturist/MS denudation denudational denudement denumerably denunciatory denys deontic deontological deontologist deontology deoxidation deoxy deoxycholate deoxygenation deoxyribonuclease deoxyribonucleotide/MS deoxyribose departee/MS Dependance dephosphorylation depigmentation depilate/DGNS depilatory deplane/DGS depletable depone/DGS deponent depopulate/N depopulator deportable depositional depravation/S depravement depreciator/S depreciatory depredate/DGNS depredator/S depredatory deprenyl depressily depressor depthless derailment derate/DGNS Derek/M derepress derisory derivational derivatization/M derma dermabrasion/M dermal dermatoglyphics dermatoid dermatologic dermatological dermatologist dermatology dermatosis derrickman derrickmen desalination desalting desanctify/DGS descendible descension descramble/DGRS descrating desecrator desertic desex deshabille desiccant desiccate/DNSV desiccator desiderate/NV designatory designee designment desipramine desistance deskbound deskman desmosome desolator desorb/D desorbable desoxyribonucleic despisement despiteful/PY despiteous/Y despoilment despondence/S despotically destain destigmatize destructibility/I destructible destructionist destructivity detab detachability detachably detainee detainment detectability/U detectaphone detectorist/M detent determent/S determinably/I determinantal determinator determinist/I deterrer detestably dethrone dethronement detick/DGS detinue detonability/S detonatable detonational detoxicant/S detoxicate/DGNS detoxicator detoxify/DGNS detraction/S detrain/DGS detrainment detritivore detritus detumescence/S detumescent deucey/M deuterate/DGNSX deuteron/MS deuterostome deutsche devaluate/X devastator/S devein developable deverbal deverbative devest deviancy/S deviationism deviationist deviator/S devilkin devilment/S devilry deviltry devisability devisable devisal devisee devisor devitrify/N devo devoir/S devolution devolutionary devolutionist devotement dewar dewater/DGRS deworm/DGRS dex dexamethasone/M dexedrine dexfenfluramine/M dexies dexterous/PY dextral/Y dextrality dextranase dextrine dextro dextroamphetamine/M dextromethorphan/M dextrose/M dey DFL Dhabi dharma DHCP diabetologist/MS diabolism diabolist diachronically diachrony diaconal diaconate diacritic/MS diadromous diagnoseable diagnostical/Y diagrammatical diakinesis diakinetic dialectician/S dialectological/Y dialectologist dialectology dialogic dialogical/Y dialogist dialogistic dialup/MS dialytic diamagnet/S diamagnetism diametral diametrical diammonium/M dianne diapason diapause/G diaphaneity diaphone diaphorase diaphragmatic diaphragmatically diaphragmic diapositive diarchy diarist diaspora diaspore diastereomer diastole diastolic diastrophic diastrophically diastrophism diathermic diathetic diation diatomaceous diatomite diatonically diatropic diatropism/S diazepam/M diazinon dibble dibenzofuran dibs dibutyl dicalcium/M dicamba dicarboxylic dicentric dicey dichlorodifluoromethane dichloroethane dichlorvos dichondra dichotic dichotically dichotomist dichroic dichroism dichroitic dichromat/S dichromate dichromatic dichromatism dicier dickcissel Dickerson/M dicta dictionally dicumarol dicyclic didact didactical/Y didacticism didanosine Dido/M didymo Diebold/M diegesis diegetic dieing diel dieldrin dieresis diestrus dietetically diether diethyl diethylamide diethylcarbamazine diety Dietz dieu dieux diffeomorphic diffeomorphism differentia diffusional diffusionist/M difluoride difunctional digamma digenesis digenetic digestibility/I digestif digitalin digitate/DNY digitigrade digitonin diglossia dignleberries digoxin digressional digressionary dihybrid dihydroergotamine dihydrotestosterone dihydroxy dijon dilapidator dilatability dilatable dilatational dilatometer/MS dilatometric dilatometry dildo/S dilemmatic dilemmatical dilettanti dilettantish dilettantism dilettantist dillydally diltiazem diluent dilutor diluvial dimaggio dimenhydrinate dimercaprol dimeric dimerism dimerous dimeter/MS dimethoate dimethoxymethane dimethylhydrazine/M dimethylnitrosamine dimethyltryptamine diminishable diminishment diminuendo/MS diminutional dimmable dimorphic dimorphism dimorphous dimout dimply dimwit/S dimyristoyl dingbat/S dingdong dingle dingleberry/M dinkey dinnerless dinning dino dinosaurian dinosauric dinucleotide/MS Diocletian diogenes diol dioptometer/MS dioptometry dioptric/S dioramic diorite dipeptidase diphase diphasic diphenhydramine/MS diphenyl diphenylhydantoin diphosphate/MS diphosphoglyceric diphosphopyridine diphtherial diphtherian diphtheritic diphtheroid diphthongal diplex diploid/MS diploidy diplomate diplomatically/U diplomatist diplophase diplotene dipod dipolar dipperful dipropellant dipsomania dipsomaniac dipsomaniacal dipstick diptych diquat diram directionless directorial Dirichlet dirigible/S dirigisme dirtbag/MS disaccharidase disaccharide/S disaccord disaccustom disadvantageous/PY disaffect disaffirm disaffirmance disaffirmation disagreeability disagreeably disallowance disannul disapprovative disarrange/S disarrangement disarticulate/N disassociate/DGNS disavowable disbandment disbarment disbenefit/S disburden disburdenment discardable discernable dischargeable dischargee disciform disciplinable/I disciplinal disciplinarian disciplinarity disclamation disclimax discographer/MS discographic discographical/Y discography discoid discoidal discoidin discombobulate discomfiture/S discomfortable discomfortably discommend discommendable discommendation discommode/GS discompose/D discomposed/Y discomposure disconfirm disconfirmation disconform disconformable disconformity disconsolate/NPY discontentment discophile/MS discordance/S discordancy discountenance discourageable discourtesy discreditable discreditably discriminability discriminably discriminational discriminator/S discussable discussible/I diseconomy disembark disembarkation disembarrass disembodiment disembody disembowelment disenchant/GR disenchanting/Y disencumber disencumbrance disendow/R disendowment disentanglement disenthralled disenthralling disequilibrate/N disestablish/D disestablishment disestablishmentarian disesteem disestimation disfeature disfeaturement disfigurement/S disfluency/M disfranchise/DGS disfranchisement disfrock disfunction disfurnish disfurnishment disgorgement disgruntlement disguisement dishabille disharmonic disharmonious dishcloth dishdasha disheartenment/S dishrack/S dishy disincentive disincline/DGS disinfection disinfest/DGS disinfestant disinfestation disinflation disinflationary disinhibition/MS disinhibitory disintegrator/S disinter/DGS disintermediate/DGNS disinterment disintoxication disinvest/DGRS disinvestment disjuncture disklike dislicense/DGRS dislikable dislikably dislikeable dislimn dismantlement dismast dismember/G dismission dismutase Disneyesque Disneyfication/M disoblige/R disoblingingly disodium disomic disorient disorientate/DGNS disownment dispart dispassion dispensability dispensable dispensational dispensatory dispeople dispersant dispirit/DGS dispirited/PY dispiteous displaceable displant displode/DGS displosion disport disportment disporves disposability dispossess/GS dispossessor disposure/S dispraise/R dispraisingly dispread disprize disproof disprovable disputation disputatious/PY disquantity disraeli disrate disregardful disrelate/DN disrelish disremember disremembrance disreputability disreputably disrespectability disrespectable disrespectful/PY diss dissatisfactory dissatisfy/GS dissave dissector disseise/DGS disseisin/S disseisor/S disseize/DGS disseizin/S disseizor/S disseminator/S dissensus dissentient dissention dissert dissertate dissertator disserve dissever disseverance disseverment dissidence dissimilate/DGNSV dissimilatory dissimilitude dissimulate dissimulator dissociability dissocial dissociant dissolubility/I dissoluble dissolute/PY dissolvable dissolvent dissuasion dissuasive/PY dissyllable dissymmetric dissymmetry distelfink distemperate distemperature distensibility distensible distent distention distinguishability/I distinguishably/I distortional distractibility distractible distrain/R distrainable distrainor distraint distrait distressful/PY distributary distributee distrustful/PY disubstituted disulfoton disunionist disunite disutility disvalue disyllabic dit dithery dithiocarbamate diuron divagate/N divaricate/N divergency/S diversionist/M divertissement/S divestment dividable divinatory divisibility divisionism divisionist divorcement divot divulgence divulsion divvy dixiecrats Dixon/M DIY DME DMSO DMT DNase Dnieper/M dobbin Dobbs Dobe doberman dobra dobson doc docetic docility/I dockage dockhand/MS dockworker docosahexaenoic doctorless doctorship doctrinairism documental documentale documentalist/MS documentarian/MS documentarist/MS documentational docuseries docusoap/MS DOD Dodd/M dodder/DGRS doddery dodecaphonic dodecyl dodgery dodgy dodington dodo/MS Dodson/M dogbane dogberry dogcart dogcatcher doge dogface dogfight/S dogfish doggerel doggery doggie/RS doggish/PY doggy/RS doglike dogmatical/P dogmatist/MS Dogon dogwatch Doherty/M doily/S doit/D dojo/MS Dolan/M dolce dolcetto dolesome dollarization/M dollhouse dollish/PY dollop/DGMS dolman dolorous/PY domaine Domenico/M domical domicil domiciliary domiciliate/N dominical Dominick/M Dominique/M domoic dona donator Doneck/M donee doneness dong donkeywork donner donnicker donut doo doobie doodad doodlebug doodley doofus doohickey Dooley/M doomful/Y doomsayer doomster doomy doorjamb doorless doormat doornail doorplate doorpost doorsill doorstop dooryard dopaminergic dopester dopey doppelganger dopy/PR Dorcas Doreen/M Doria/M Doric/M dormancy dormice dormie dormouse/M dormy Dorothea/M Dorset/M Dortmund/M dosimetric dosimetrist doss/R dossal dotal dotter dotterel dotty/PRY doublehanded doublethink/M doubletree douce Douceur/M douche doughboy doughface doughlike doughnuttery doughty/PRY doughy/R doula/MS doux dovecot dovecote dovekie dovish/P dowdyish dowitcher Dowling/M downburst/MS downcourt downforce/MS downhaul downhearted/PY downlight/MS downlink/MS downrange downriver downshift downstage downstate/R downstroke downswing downzone/MS dox/A doxorubicin doxxed doxxer doxxes doxxing doxycycline/MS dozy/PR DPN drabber drabbest drabbing drabble/DG Draco/M dracunculiasis drafstpeople/M draftable draggle/DG draggy/R dragline dragonet dragonfish/MS dragonish dragster drainpipe/S Draize Drakopoulos dramalogue dramamine dramaturge dramaturgic dramaturgical/Y dramedy/MS dramshop drapability drapable drapeability drapeable drat dratted dratting Dravidian drawable drawbar drawdown drawee drawerful drawknife drawnwork drawplate drawstring/MS drawtube dray drayage drayman/M draymen/M dreadlock/M dreamful/PY dreamland dreamscape/MS dreamworld drear dressage dressmake driblet driftage driftweed drifty/R drillability drillable drillmaster drinkability dripless dripper Driscoll/M drivable driveable drivel driveline/MS driverless drivetrain/MS drollery/S drolly dropkick/R droplight droppage dropperful dropshot dropsy drossy droughty/P drouth drownd/DG drubber drugget drugmaker druidess druidic druidical druidism drumbeat/GR drumfire drumlike drumlin Drummond/M drumroll drunkometer/MS drupe dryable dryad dryasdust drylot/MS dryopithecine drypoint drys drysalter drysaltery du dualist dualistic dualistically duathlon/MS dubber dubbing Dubhe/M dubiety dubiosity dubitable dubitation dubnium dubstep/S dubuque ducal/Y Duchamp/M Duchenne duckbill/D duckboard duckfooted duckpin ducktail/MS duckwalk/M duckweed/MS ducky/R duclos ductility ductless ductule dudgeon dudish/Y Dudley/M duende duenna duennaship duetted duetting duffle Dugan/M dugong DUI dulcimer dulcimore dulgence dulles dullish/Y dullsville Dullsville's dulness dulse Duma/M dumbstruck dumbwaiter/S dumdum dumka dumpish dumpling/MS dumpo Dunbar/M Dundee/M dunderhead/D Dunedin/M duneland dunelike dungaree dunghill dungy dunkel Dunlop/M Dunn/M dunne duo/S duodecimal duodecimo duodenal duodenum duologue duomo/S duopolistic dupery duple duplicitous/Y dupont/S Duquesne durance Durango/M Durer durian Durkin/M durometer/MS duros Durrell/M Durward/M Dusenbury/M dustcover dustheap dustin dustless dustlike dustman dustpan/S dustup dutchess duteous Dutton/M duverger dwarfishly dwarfishness dwarfism dwarflike Dwyer/M DX dyadically dyarchy dyeability dyeable dyerear dyestuff dyewood dynamist dynamistic dynamitic dynamometer/MS dynamometric dynamometry dynamotor dynapolis dynast/S dynastically dynatron dyne dynein dynode/S dysenteric dysgenesis dysgenic/S dyskinesia/M dyslexic dyslogistic dyslogistically dysmorphic dyspepsia dyspeptically dysphagia dysphagic dysphasia dysphasic dysphonia dysphonic dysphoria dysphoric dysplasia/M dysplastic dystrophic dystrophin Eagan/M eaglet eagre earache eardrop/S earflap earful earldom earlobe earlock earmuff/S earp earpiece earthborn earthbound earthlike earthling Earthman/M Earthmen/M earthrise/M earthshaker earthshaking/Y earthshine earthstar earthward/S earthwork/S earwax earwig earwigged earwigging earwitness easeful/Y easthampton eastwick easure eatery Eaton/M eau EBCDIC's Eben/M Ebenezer/M ebulliency ebullition eccentrically Eccles ecclesial ecclesiasticism ecclesiological ecclesiology eccrine ecdysiast ecdysis ecdysone ecesis ECG ech echelle echidna echinulate/N echocardiography/M echoey echoic echolocation echovirus/MS eclat eclogue eclosion eco ecocatastrophe/MS ecofeminism/M ecol Ecole ecologic ecologist econobox/M econometrically econometrician econometrist ecophysiological ecophysiology/M ecospecies ecospecific ecosphere/MS ecoterrorism/M ecotone ecotoxicology/M ecotype ecotypic ecotypically ecru ecstatically ectoblast ectoblastic ectoderm ectodermal ectodermic ectogenic ectogenous ectomere ectomeric ectomorph/MS ectomorphic ectoparasite ectoparasitic ectopic ectoplasm ectoplasmic ectotherm/MS ectothermic ectotrophic ectotropic ecumenicalism ecumenicism ecumenicity ecumenism eczema eczematous edacious edacity edaphic edaphically edentate edentulous edgeless edgewater edgeways edgewood Ediacaran/M edibility edictal edificatory editable editress Edmonds Edmondson/M Edmonton/M EDT EDTA eduard Eduardo/M educability/I educable/I educationalist/S educationese/M educationist educible eduction eductor/S edulcorate edwardine eeg eellike eely EEOC eery/P EFF EFF's effacement effectivity effectuality/I effeminacy effervesce effervescence effervescent/Y efficacity Effie/M efflorescence efflrescent effluence effortful/Y effrontery effulgence effulgent eft Egan/M egerton egestion egestive eggcup eggnog eglantine egocentrically egocentricity egocentrism egoism egoist/S egoistic egoistical/Y egomania egomaniac/S egomaniacal/Y EGOT EGOT's egression Egyptology Ehrlich/M ehrlichiosis EHz eichmann eicosanoid eicosapentaenoic eiderdown eidetically eidolon eigenfunction/S eigenmode/MS eigenspace eightyfold eightysomething/MS ein eine Eire/M Eisner/M eiswein/MS ejaculatory ejecta ejectable ejectment ekistic/S Ekstrom/M elapid elastase elastin elastomeric elaterite elbowroom elderberry eldership Eldon/M Eleazar/M elecroencephalographic electability electable/U electioneer/R electret electriques electroacoustic/S electroacoustically electroanalysis electroanalytic electroanalytical electrocardiographic electrocardiographically electrocardiography electrochemical/Y electrochemistry electroconvulsive electrocorticogram/MS electrodeposit electrodeposition electrodermal electrodialysis electrodialytic electrodynamometer/MS electroencephalograph electroencephalography electrofishing/MS electroform electrogenesis electrogenic electrogram/MS electrohydraulic electrohydraulically electrojet/MS electrokinetic/S electroless electrologist electroluminescence electroluminescent electrolytically electromagnetically electrometallurgy electrometer/MS electromotive electromyogram/MS electromyographical electronegative electronegativity electronography electrooculogram/MS electrooculography/M electropherogram/MS electrophilic electrophoretic electrophoretically electrophoretogram/MS electrophotographic electrophotography/M electrophysiologic electrophysiological/Y electrophysiologist electrophysiology electroplate/R electroporation/M electropositive electroreceptor/MS electroretinogram/MS electroretinograph/MS electroretinographic electroretinography electroscope electrostatically electrosurgery electrosurgical electrothermal/Y electrothermic electrotonic electrotonically electrotype/R electrovalence electrovalent electrowinning electrum electuary eledoisin elegancy elegiacal/Y elegit elephantiasis elepidote elevenfold elevon elfish/Y Elgin/M elhi elicitation elicitor eligibly eliminable/I Elinor/M Elisha/M elisp elitist/S elixir elkhorn/MS ell elle ellie Ellington/M elliot Ellwood/M elocutionary elocutionist/S elopement elroy Elsevier/M Elton/M eluant elucidator elucubrate/DGNS eluent elutriate elutriator eluvial eluviate/N eluvium elver elvis elvish Ely/M Elysee/M elysium elytron elytrum em/S emanational emancipationist/MS emancipator/MS emarginate/DN emasculator embalmment/MS embarkation embarkment/MS embarrassable embassage embattlement/MS embay embayment embeddable embedment embitter/S embitterment emblaze/DGS emblazonment emblazonry emblematical/Y emblements embolectomy/MS embolic embolism embolismic embosom embossable embossment embouchure embourgeoisement/MS embowed embowel embracement embraceor embracery embranchment embrangle embranglement embrasure embrittlement embrocate/DGNS embroglio embroilment embrown embrue embryogenesis embryogenetic embryogenic embryogeny embryoid/MS embryol embryologic embryological/Y embryologist embryonal/Y embryonated embryonically embryotic emceeing emendate/N emendator emendatory emeriti emersed emerses emersion emetic emetically emic emigre/M emigree Emil/M Emile/M Emilio/M eminency emir emissive Emmett/M emollient/S emote/DGSV emotionalist emotionalistic emotionless/P emotive/Y emotivity empanel/S empathetic empennage emperorship empery/S emplane empoison empoisonment empowerment empressement emprise emptyhanded empurple/DG emu emulous/PY emulsible emulsifiable emulsive emunctory en/S enactor/A enalapril/M enamelware enamine enantiomer encage encapsule/S encasement encash encashment encaustic enceinte encephalic encephalitic encephalitogenic encephalogram/MS encephalograph/MS encephalography/M encephalomyocarditis encephalon encephalopathy/M enchainment enchase/DG enchilada encipherment encirclement enclasp enclitic encomia encompassment encrimson encrustation enculturation/M encyst encystation encystment endamage endangerment endarch endarchy endarterectomy/M endbrain endcap/MS endemically endergonic endermic endermically endexine endite endleaf endlong endmost endobiotic endoblast endoblastic endocannabinoid/MS endocardial endocast endochondral endocranial endocrine endocrinologic endocrinological endocrinologist endocrinology endocytic endocytosis endocytotic endoderm endodermal endodermis endodontia endodontic/S endodontically endodontist endoenzyme endoergic endoerythrocytic endogamic endogen endogenic endogeny endolymph endolymphatic endometrial endometriosis endometrium endomitosis endomorph/MS endomorphic endomorphism endomorphy endonuclease endonucleolytic endoparasite endoparasitism endopeptidase endoperoxide endophyte endophytic endoplasm endoplasmic endopolyploidy endorsable endorsee endoscope endoscopic endoscopically endoscopy endoskeletal endoskeleton endosmosis endosmotic endosmotically endospermic endospermous endospore endosporic endosporous endostatin/MS endosteal/Y endosternite endosteum endostyle endosulfan endosymbiosis endotherm endothermal endothermy endotoxic endotoxin endotracheal endotrophic endotropic endozoic endpaper endrin endue/DG enduro endways endwise enemata enfant/S enfeeblement enfetter enfever enflame/DGS enfold Engels engild engineroom/S enginery engird engirdle englacial Engle/M englut englutted engluttin engorgement engr engraft engrailed engrain engrammic engrossment engulf engulfment enhalo enharmonic enharmonically Enid/M enigmatical/Y enisle enjambement enjambment enkephalin enkindle enlace enlacement enlistee enmeshment ennoblement enoki/M enokidake enol enolase enolic enologist enology enosis enplane enrapt enregister enrobe enroot ensample ensanguine ensconce/GS enscroll enserf enserfment ensheathe enshrine/GS enshrinee enshrinement ensiform ensilage ensile/DG ensional ensnarl ensolite ensoul ensphere enswathe entablature entablement/S ente entente enterable enteral/Y enteric enterobacterium/M enterobiasis enterochromaffin enterococcus enterocyte enterogastrone enteropathogenic enterotoxigenic enterovirus enthronement enticement entoderm entodermal entodermic entoil/D entombment entomofauna entomological entomophagous entomophagy entomophilous entomophily entoproct entorhinal entrail/S entrainment entrancement entreatment entrustment entwinement entwist enucleate/DGN enunciator/S envelopment/S enviro environmentalism environmentalist/S envisionin envoi/S enwheel enwind/G enwrap enwreathe enzymic enzymically enzymologist eon/MS eonism/MS eosine epaulette ephemerality Ephesus epical/Y epicardial epicardium epicarp epicene epicenism epicentral epicureanism epicurism epicurus epicuticle/MS epidemical/Y epidemicity epidemiologic epidermal epigenome/MS epigenomic/S epiglottal epigonus epigrammatical/Y epigrammatism epigrammatist epigraphic epigraphical/Y epigraphist epigraphy epileptically epimerase epimorphism epipelagic epiphanic epiphanous epiphenomenal/Y epiphyseal epiphysis epiphyte epiphytic episcope episiotomy episodical/Y episomal/Y episome epistasy epistatic epistemic epistemically epistemologist epistolary epistoler epistrophe epitaphial epitaphic epithelialization/M epithetic epithetical epitope Epley epode/S eponymous epoxidation/M epoxide EPROM EPROM's EPROMs equability equably equalitarian equalitarianism equational/Y equatorward equerry/S equestrienne equiangular equiangularity equicaloric equilibrator/S equilibratory equilibrist equilibristic equimolal equimolar equinoctial equipage equipoise equipollence equipollent/Y equiponderant equiponderate equipotential equiprobable equitability equitant equitation equivalency equivocality equivocate/DGS equivocator equivoke equivoque eradicably/I eradicator/S eradictions erasability/S Erastus Erato/M ERDA erectable erectile erectility erelong erenow erewhile/S erg ergative ergograph ergometer/MS ergometric ergonomic/S ergonomist ergonovine ergosterol ergot ergotamine ergotic ergotism ergotropic eriophyid Erlenmeyer/M erodibility erogenic erogenous erose/Y erosional/Y erosivity erotical eroticism eroticist erotism erotogenic erratical erraticism errorless Erskine/M eruptible erythema erythematosus erythorbate erythorbic erythroblastosis erythroid erythropoietin ESC escalade/RS escalatory escallop/S escapement/S escapism escapologist escapology escargot escarp eschatological eschatologist/MS escheat escherichia eschewal escot esculent esemplastic esker Esmark/M ESOP esophageal esoterica/M esoterically esotericism esp espadrille espagnol espanol esperance espial Esposito/M espresso/S essayist essayistic Essen/M essentialism/M essentialist essentiality EST establishable establishmentarian establishmentarianism esteemable Estella/M ester Estes Estonia/M estop estopped estopping estradiol estral estray estriol estrogen estrogenic estrogenically estrone estrous estrum estrus estuarial esurience esuriency esurient/Y etagere etatism/M etatist etch/GRS ethacrynic ethambutol ethephon ether/MS ethereality etheric etherish etherlike ethicality ethician/S ethidium ethinyl ethion ethionamide ethionine ethnical ethnobiological ethnobiology/M ethnocentric ethnocentrically ethnocentricity ethnocentrism ethnographer/M ethnographical/Y ethnohistory/M ethnol ethnologic ethnological/Y ethnologist/MS ethnomusicology/M ethnoscience/M ethological ethologist/MS ethoxy ethylate/N ethylenediaminetetraacetate/M ethylenediaminetetraacetic ethylenic ethylenically ethylic ethynyl etic etidronate Etna Etruria etude/S etui etymologist/S eucaryotic eucharistic euchre euchromatin euclidian eucre eugenically eugenicist eugeosyncline euglena euglenoid euhemerism euhemerist euhemeristic euhemeristically eukaryote eukaryotic eulogist eulogistic eulogistically eulogium Eumenides eumorphic eunuchism euphemistic euphenics euphonically euphonious/PY euphonium euphorbia euphoriant/MS euphorically euphotic euphuism euphuist euphuistic euphuistically euplastic euploid/MS eurhythmic/S Euridyce/M Eurobond/MS Eurocentric Eurocommunism/M Eurocrat/MS Eurocurrency/MS europeanish Europeanist/MS eurozone/M eurythermous eurythmic/S eurythmy eurytopic eurytopicity eusocial eustatic eustress eutectic Euterpe/M euthanasic euthenics euthenist eutherian euthyroid eutrophic eutrophy/N eux eV evacuator evacuee/S evadable evagination evaluable evanesce/DGS evanescence evangel evangeline evangelistically evanishment evaporativity evaporator/S evaporite evaporitic evapotranspiration/M evection evenfall Evensen eventless everblooming Everglade Everhart/M eversible eversion/S evert everyplace evictee/S evictor/S evildoing evincible eviscerate/DGNS evitable evo evocator/S evolutionism evolutionist evolvable evolvement EVOO evulsion/S evzone ew/N exacta exactable exactor/S exaflop/MS exaggerator/S exagitates exahertz examinant/S examinational examinatorial examinee/S exanimate/DGS exaptation/M exbibit/MS exbibyte/MS excavational excavator/S exceedance exceptionability exceptionable/U exceptionably/U exceptionality excerption/S excerptor/S exchangeability exchangee/S Exchangite excide/DGS excimer excipient exciseman excitant/S excitative exciton excitor exclave/S exclosure/S excludability excludable excludible exclusionist/S excogitate/NV excommunicator excrement/MS excremental excrementitious excrescency excrescent/Y excreta excretal exculpate/DGNSX excurrent excursionist/S excursive/PY excusatory execrably execrator/S executant executorial executory executrices exegetic/S exegetical/Y exegetist exemplarity exenterate/DGNSX exercitation exergonic exertional exeunt exfoliant/MS exfoliate/DGNSV exfoliative/MS exfoliator/MS exhalant/S exhalation/S exhalent/S exhaustibility/I exhaustivity exhaustless/PY exhibitionism exhibitionist exhibitionistic exhibitory exhilarant exhortative exhortatory EXIF exigence exiguity exiguous/PY exilic existentialistic existentialistically exobiological exobiologist exobiology exocrine exocyclic exocytosis exodermis exodontia exodontist exoergic exoerythrocytic exogamic exogen exome exoneree exonuclease exonumia exopeptidase exorbitance/S exorcistic exorcistical exordial exordium exoskeleta exoskeletal exosmosis exosmotic exosphere exospheric exospore exostosis exoteric exotericaly exothermal exothermically exotically exoticism exotism exotoxin expansibility expansile expansional expansionary expansionistic expansivity expatiate/DGNS expatriate/DGNS expatriatism/M expecially expectably expectance expectative expedience/I expediential expeditionary expeditor expellee expeller/S expendability expertism expiator expiatory expiratory expiry explanative/Y explant/S explantation expletory explicably explicator explicatory explodent exploitative/Y explorational explosibility explosible expo/S exportability exportable expositional expositor expostulate/N expostulatory expressage expressional expressionistically expressivity/M expropriator/S expulsive expurgator expurgatorial expurgatory exsanguinate/N exscind exsert/D exsertile exsertion/S exsiccate/N exsolution/M exstipulate ext extemporal/Y extemporaneity/M extemporary/Y extendable extensile extensionality extensity extensometer/MS extenuator extenuatory exteriority exterminatory extermine externalism externality externship exteroceptive exteroceptor exterritorial exterritoriality extinguishable extinguishment extoll extolment extrachromosomal extracorporeal/Y extracranial extractability extractable extractible extradite/NS extradoses extragalactic extrahepatic extrajudicial/Y extralimital extralinguistic extralinguistically extraliterary extrality extramundane extramural/Y extramusical extranet extranuclear extraocular extrapolator extrasensory extrasystole extrasystolic extraterritorial extraterritoriality extratextual extratropical extrauterine extravagancy extravagate extravasate/N extravascular extravehicular extraversion extraversive extravert/D extremis extremophile extremum extrinsically extrorse/Y extrudability extrudable exuberate exudate/V exultance exultancy exurban exurbanite exurbia exuviation ey eyebolt eyebright eyecup eyedropper eyedropperful eyehole eyelike eyeliner eyepatch eyepoint eyepopper/MS eyeshade eyeshot eyespot eyestalk eyestrain eyestrings eyetooth eyewash eyewink eyre eyrie eyrir FAA Faber/M Fabian/M fabricant fabricator/S fabular fabulist facedown facement facepiece/S facetted faceup facies facilitator facticity factional/Y factionalism factitious/PY factitive/Y factorable factorage factorship factotum factualism/M factualist/S facture/S facula facultative/Y faddish/P faddism faddist/S fadeaway fadeless/Y faena Fafnir/M fagging faggot/GS Fahey/M faience failsoft fainthearted/PY faintish/P fairground fairish/Y fairlead/R fairview fairylike faitour fakir Falangist falcate/D falciform falciparum falconet falderal falk Falkland/S fallaway fallibly Fallopian Falmouth/M falsetto/S fam/M familism famishment fanboy/MS fancywork fandango fane/N fanfic/M fangirl/MS fanlight fanlike fanner fantabulous fantastical/P fantasticality fantasticate/DGNS fantasyland/MS fantod fanwise farad farceur farcicality farfalle/M Farkas farmhand/S farmstead/G Farnsworth/M faro farrow farseeing farthermost fasces fascia fascial fasciated fasciation fascicular/Y fascicule fasciculus fasciitis fascinator/S Fascista/MS fascistic fascistically fashionability/S fashionmonger fastuous/Y fatalism fatalist fatalistically fatback fatberg/MS fathead/D fatheaded/P fatherlike fathomable fathomless/PY fatigability fatigable fatling fatshedera fatted fatting fattish faulknerian faultfinder faultfinding faunal/Y faunistic faunistically fauntleroy Fauve/M fauvism fauvist faux favela/M favism/M favonian fawkes fawny fay Fayette/M featherbedded featherbedder featherhead/D featherless featherman featurette/MS febrific fecal feckless/PY feckly feculence feculent fecundate/DGNSX fedayee federalese/M feebleminded/PY feedlot feedstock/MS feedstuff feeing Feeney/M feetfirst feist feisty/R feldspathic felicific felicitate/DGNS felicitator felinity felinophobia/MS fellable fellah fellate/DGNSX fellatio fellini fellowman felones felonry felsite felsitic felspar feministic feminity femoral fenceless/P fenestral fenestrate/DNS fenfluramine/M fennec fenny Fenton/M fenugreek feral Ferber/M ferdinando Ferguson/M ferial ferine fering ferity Fermat/M fermentable fermentative fernlike ferny FERPA/M ferrate ferredoxin/M Ferreira Ferrer/M ferrety ferriage ferriferous ferrimagnet ferrimagnetic ferrimagnetically ferrimagnetism ferritic ferritin ferrocene ferromagnetism ferrotype ferruginous ferrule ferryboat ferryman fervency fescue fess festinate/NY festoon/S festoonery feta fetalis fetation feterita fetishism fetishist fetishistic fetlock/S fetologist fetology/M fetoprotein/MS fetor fetoscope/MS fettuccine feudalist feudality feudist Feulgen/M feverous/Y fey/P Feynman/M fez/S fezzes fi fianchetto/M fibber fiberscope/MS fibranne fibrate/DGNS fibriallating fibril/S fibrillar fibrillate/DNS fibrilliform fibrillose fibrinopeptide/MS fibroblast/MS fibromyalgia/M fibronectin/M fibrovascular fibula fibular fichu ficin fictile fictioneer/GMS fictionist fiddleback fiddlehead fideism fideist fideistic fidel Fidelista/MS fidgety/P fidging Fido/M fie fieldfare fieldstrip/S fieldstripped fieldstripping fiftyfold fiftysomething/MS figaro figurable figurate/NX figurehead Fiji/M Fijian/MS filamentous filar filaria filarial filature filiation filiform filigreeing filippo fille/S fillip/S fillment filmcard filmic filmically filmmake/G filmography filmsetting/M filovirus fils filterability filterable filtrable filum fimbria fimbrial fimbriate/DNS finasteride/MS finback finery finespun fingerboard fingerlike fingerling fingerpicker fingerpicking fingerpost finical/PY finicking finis finitude Finlandization/M Finley/M finlike finning finocchio/M fiord fiori firebase/MS firebird firebox firebrick fireclay firedamp firee fireguard fireless firelock fireplug/S fireroom firetrap firma firmamental firstborn firstfruits firstling/S fisc Fischbein/M fishability fishable fishbowl fishhook fishkill fishnet fishplate/S fishtail fishway fishwife fishyback Fiske/M fissility fissionability fissionable fissional fissiparous/PY fistfight fistful fistic fistnote/MS fitment fixable/U fixity fixups Fizeau/M fizzy FL flabellate flaccid/Y flaccidity flack flacon flagellant/S flagellantism flagellar flagellin/M flageolet flagger flagitious/PY Flagler/M flagon flagrance flagrancy/S flamb flamboyance flamboyancy flamenco flameout/MS flameproof flammability/I flan/M Flandres Flanken/M flapdoodle flapjack flappable/U flappy flareback flashboard flashgun/S flashover/S flashtube/MS flatboat flatcap flatcar flatfeet flatfoot/DS Flathead/S flatline/DGS flatted flatting flattish flattop flatulency flatus flatware flatwise flatwork/MS flaunty flauta/MS flavanone flavin flavivirus flavonoid/M flavoprotein/MS flavorist/MS flaxy/R flay fleabag fleabane flection flective fledermaus fleeringly flehmen fleischman fleisher flerovium/M fleshment fleshpot/S fleuve flexile flexion/AI flexitarian/MS flexographic flexographically flexography/M flexor flexuous/Y flibbertigibbet flibbertigibbety flickery flightless flighty/PRY flimflam flimflammed flimflammer flimflamming flintlike flippancy flipper flirty flitted flitter flivver Flo/M floatage floatation floatplane/MS floaty floc/MS flogger flokati floodlit floodplain floodwall floodwater/MS floodway/MS flooey floorage floorwalker floozie/S floozy/S flophouse flopover/S flopper/S florescence/AI florescent/AI floret floriate/DNX florican floricultural/Y floriculture floriculturist floridity floriferous/PY florigen florigenic floristic/S floristically floristry floruit flossy/R flotage FLOTUS FLOTUS's flouncy flowage flowback/M flowerage floweret flowerlike fluconazole fluctuant fluegelhorn fluidal/Y fluidextract fluidic/S fluidounce fluidram flukey flume/DGS flummery flummox flump/DGS flunkeys flunky fluocinolone/M fluor fluorescein fluorimeter/MS fluorimetry fluorinate/GNSX fluorination/MS fluoroacetate/MS fluorochrome/MS fluorography/M fluoroquinolone/M fluoroscopic fluorosis fluorouracil fluorspar fluoxetine fluphenazine flutelike flutterboard fluttery fluvial fluviatile fluxgate fluxion fluxional flyblown flyboat/S flyboy/MS flybridge/MS flyby flybys flyleaf flyman flyover/S flypaper flypast/S flyspeck flyswatter flytier flyting flyway flyweight FM FMC FMN foamflower foamless fobbing focusless fodgel foeman Fogarty fogbound fogey/S fogger/MS foggest foghorn/S fogless fogy/S fogyish fogyism foilsman/M foilsmen folacin folate foldable foldaway foldboat/GMRS folderol Foley/M folia foliaceous folic folkie/MS folkish/P folkloric folklorish folklorist folkloristic folksinger/MS folksinging folktale/MS folkway/S folliculate/D followership followeth Fomalhaut/M fomentation/S fondue/S Fontaine/M fontal fontana fontina foodless/P foodways foolery foolscap/M Foosball/MS footboard/S footboy/S footcandle footcloth footdragger/MS footgear footle/DGRS footless/PY footlike footlocker footmark footpace footrace footrest/S footrope/S footslog/S footslogger footsore/P footstall footwall footway/S footy foozle/D fopping fora foram/N foraminifera forb forbiddance forbidder forbode forborne forbye forceless forceps forcepslike fordable fordo forebear forebode/DRS forebrain forecheck/DGS foreclose/S foreclosure forefeel forefoot foregather forehand/D forehanded/PY foreignism forejudge forejudgment/MS foreknow forelady foreland forelimb forelock foremanship foremast/S foremother forename/DS forensical/Y foreordain/DGS foreordination forepassed forepast forepaw forepeak foreplay forequarter/S forereach forerun foresaid foresail foreshank/MS foresheet foreshore foreshorten/S foreshow foreside foresightful foreskin forespeak forestage forestal forestation forestay forestial foreswear foresworn foretaste foretellable forethoughtfully forethoughtfulness forethougtful foretime foretoken forevermore forewoman foreworn foreyard forfeitable forgather forgeability forgeable forgetter forgiveable/U forgiveably/U forgoes forgone forint/MS forjudge forkball/MS forkful forklike forky/R forma formable formalin formalist formalistic formalistically formational/A formfitting formful formidability formulaically formulary formyl fornicate/DGSX fornicator/S forrader forrarder forsooth forspent forswore forsworn Forsythe/M fortalice Fortescue/M fortin fortman fortuity fortyfold fortysomething/MS forwent forworn foscarnet Foss fossate fossorial fosterage fosterite fosterling/S fou Foucauldian/MS foudroyant foundational/Y foundationless founderous foundress foundrous fourdrinier fourplex/MS foxtrot/MS FPC fracas fracted fractionate/GSX fractionator/S fragmental/Y fragmentate/DGSX fragrancy framable frambesia framboise frameable frameshift/MS franca francaise francesca francesco franchisee franchisor/MS francie Francine/M francois Francoise/M frangibility/AI frangible/AI frangipani Franglais Frankel/M Frankenfood/MS frankincense frankpledge franny frap frappe/G Fraser/M frat/R fraternalism fratricidal fratricide fraudulence frayne fraîche freaky/R freckly Fredericksburg/M Fredericton/M Fredholm/M fredrick freeboard freedwoman freehearted/Y freeload/R Freemason freemasonry freestanding freestyle freethink/GR Freetown/M freewill freewriting freida freightage frenchify/N frenetically frequence/I frequentation/S frequentative/S freshet fretwork Freya/M friability friary fribble/DGS fricassee fridge/MS Friedrich/M Friesian Friesland/M frig frigging frigidity frigorific frillery fringy/R frippery frise Frisian frisson/S frisée frit fritillary frito fritted fritting frivol frizz/Y frizzly/R frizzy/PRSY frogman frogmen frolick/DS frolicsome/PY frond/DMS frondeur frondose/Y frontality frontcourt/M frontispiece/S frontless frontogenesis frontolysis fronton frostnip frostwork frottage froufrou froward/PY frowsty/R frowsy/R fructify/NX fructose/MS fructuous/Y Fruehauf/M fruitage fruitcake fruitlet fruitwood/MS fruity/R frump/S frumpish frumpy/R Frye/M fryer FSF/M FTC Fu/M fucose fucus fuddle/DGS fugacious/PY fugacity fugal/Y fuguist Fuissé Fujitsu/M fulbright Fulbright's Fulbrights fulcra fulgent/Y fulgurant fulgurate/DGNSX fulgurous fuliginous/Y Fullerene fullmouthed fulminant fulminator/S fulness Fulton/M fum fumarase fumarate fumarole fumigator/S fumy Fumé funambulist functionalistic functionless functorial fundament fundamentalistic fundraise/DS funerary fungibility fungicidal/Y fungicide fungiform fungistatic fungo fungoes fungous funicular funiculus funigating funky/PR funnelform funning funnyman furanose furanoside furazolidone furbearer furbelow furcate/DGNSXY furcula furcular furfural furless Furman/M furmity furore/MS furosemide furriery furtherance furuncle furuncular furunculosis furunculous furze fusee/MS fusibility/I fusil fusile fusileer fusilier fusilli/M fusionist fussbudget fussbudgety fusspot fustian/S fustigate/DGNSX fusulinid futilitarian futilitarianism futureless futurism futuristic/S futuristically futurity fynbos Führer/MS GA gabber gabble/DGRS gabbro gabby/R gaberdine Gaberones gabfest/S Gabon/M gaboon Gabriola/M gadabout/S gadded gadder gadding gadgeteer/MS gadgety gadolinium gadwall gadzookery gadzooks gaff/S gaga gagaku gage/S gagger gagman/MS gagmen gagster/MS gaijin gaillardia Gaines gaingiving gainless/P gainsay/R galactopyranose galactopyranoside/S galactopyranosyl galactose galactosemia galactosyl galahad Galatia/M galavant Galen/M Galilean Galileo's Gallagher/M gallamine gallberry gallbladder galleon/S gallet gallied gallinule gallopade gallow gallus/DS galore galosh/DGS Galt/M galumph galvanically galvanometric Galway/M gam Gambia/M gamekeeper/S gamesman/MS gamesmanship gamesome/PY gamester gamete/MS gametic gametically gamey gamic gamin gamine gamming gammon gamy/PRY ganache ganciclovir Ganda/M Gandhi/M Gandhian gangbanger/MS gangbuster/MS ganglioside/S gangrenous gangsterism gank/DGS gannet Gannett/M gantlet GAO gapping gappy gar/H garageman garagemen garam Garand/M garbology/M garda/M garde gardenful garlicked garlicky garnett garnishable garnishee/S garnishment/S garniture/S garotte Garrisonian garrots garrulity Garth's gasbag gasholder gashouse gaslit gasogene gasolene gasolier gasolinic gasometer/MS Gaspee/M gasses gasset gast/P gastight/P gastral gastrectomy gastrin gastritis gastroesophageal gastrogenic gastrogenous gastronomic gastronomical/Y gastronomist gastropub/MS gastrotrich gastrulate/N gasworker gasworks gat gatefold/MS gateleg/MS gatepost gatsby Gatsbyesque gaucherie/S gaud/DGS gaudery gaugeably gauleiter/MS Gaulle/M Gaullism/M gaum/S gauntley gaur Gautama gauzelike gauzy/PY gavotte/S gawkish/PY gaydar/M gayety gazar gazebo/MS gazillionaire/MS gazoo gazpacho/M GCD GE gearbox gearchange gearhead/MS gearless gearshift geary gecko gedankenexperiment/MS geegaw geekdom/MS Gegenschein gehrig Geigy/M gelant gelate/DGNS gelation/A gelato/MS gelid/Y gelidity gelin gellant geländesprung gelée gemeinschaft gemfibrozil geminal/Y geminate/NY Geminid Gemma gemmate/DGNS gemming gemsbok gemstone/MS gendarme gendarmerie genderqueer genealogical/Y genealogist generable/A generale generalship/S generatrix Genesco genetical geniality genic genically geniculate/DY genii genitalia genitalic gennaker/MS genoa/MS genocidal genocide/S genogram/MS genome/MS genotypic genotypical/Y genotypicity gentamicin/MS genteelism/M gentilesse gentlefolk/S gentlemanlike/P gentleperson/MS gentrice genuflect/DGS genuflection genuflectory geo geocentrically geochemist geochronologic geochronological/Y geochronologist geochronometric geochronometry geode/MS geodesist geodesy geodetical/Y geoduck geohydrologic geohydrology geomagnetic geomagnetically geomagnetism geomancy geomantic geomorphic geophyte geopolitician/MS geoponic/S geopressured georgic geoscience/MS geosmin geostrategic geostrategist geostrategy/MS geostrophic geostrophically geotechnical geothermal/Y geothermic geotropic geotropically geotropism gepik geriatrician/S geriatrist germania germfree germinability germproof germy/R gerome gerontic gerontocracy gerrymander/D gerundial gesellschaft/M gestaltist gestational gesticulator/S gesticulatory gestural getatable getup/S gewgaw Gewürztraminer/MS Ghanian ghanoush ghastful/Y ghazal/S GHB ghee ghostwrite/R ghosty ghoulie/MS gianthood/S giantism/S giantlike gib gibberellic gibberellin gibbing gibbosity gibby gibibit/MS giddings gigabuck/MS gigaflop/MS gigantesque gigantically gigantism/S gigapixelsGPL/M giggly gigolo gigot/S Gil/M Gilchrist/M gildas Gilead/M gillnet/MS Gilmore/M gimcrackery gimlet/MS gimmal gimmickry gimmicky/U gimp Gina/M gingersnap gingery gingivectomy/MS gingko Gino/M Ginsberg/M gioconda giraffish girlhood/S girly girn giro gismo/S Giuliano/M Giuseppe/M givable gizzard/MS glaciologic glaciological glaciologist glaciology glacis gladded gladding gladiatorial gladiola gladsome/PY glady glamazon/MS glamourless glandered glandless glans glary/R glassblower glassblowing glassful glasshouse glassine glassmaker glassmaking glasswork/RS Glaswegian glatt glazier glaziery gleamy gleanable gleesome gleization/M gley/G glibber glibbest Glidden/M glioblastoma/MS glioma glissade glittery gloam/DGS globalism globalist/S glogg glom/S glomerular glomerulate glomming Gloriana/M gloriosa glossarial glossarist glossographer glossolalia glossophobia/M glottochronology/MS glucan glucocorticoid/MS glucokinase gluconyl glucopyranosyl glucosamine glucuronidase glucuronide glueing gluily glumaceous glummer glummest glutamate glutamic glutaminase glutamine glutaraldehyde glutathione glute/MS gluteal glutethimide gluttonous/PY gluttony glycan glycated glycemic glyceryl glycine glycoalkaloid glycocholate/S glycoconjugate/S glycodeoxycholate/S glycogen glycohemoglobin glycolipid/S glycopeptide/S glycoprotein/S glycosaminoglycan glycosidase/S glycosidic glycosphingolipid/S glycosyl glycosylate/DNS glycosylation/M glynn glyphosate GMP GMT gnarly gnatty gneissic gnomic gnomish gnomon gnosticism gnotobiotic/S goalie goalkeeper goalpost goaltender goaltending goatish goatlike gobbledegook Gobi/M gobo/MS godchild Goddard/M goddaughter godded godding godforsaken Godfrey/M godhood godkin godling godot Godwin/M godwit goethite Goff/M gog goggly gogo goitrogen goitrogenic goji golda goldbeater goldbeating goldbrick goldbug goldeneye Goldfield Goldstine/M golem Goleta/M gomez gonad/MS gonadal gonadotropic gonadotropin gondolier/S Gonzalez goo Goode/M goodish goodnight goodnik/MS goodwife goofball googol/M googolplex/M goombah goon gooseflesh gooseneck/D goosey GOP GOPer/M Goren/M gorget gorgonian gorgously gormandise gorse Gorton/M gory/R gossamery gossipry gossipy Gothically Gottfried/M goucher gouda Gouda's goulash Gould/M gourde gourmandism gouty governable/U governessy governmentalism governmentalist governorate/S governorship goyish goys gp GPO Graaff/M grabble/DGRS grabby/R graceless/PY gracie gracileness gracility grackle gradable gradational/Y gradeless gradiometer/MS gradualism graduator Graff/M graftage grafton grainy/PR gramicidin gramophone/MS gramps Granada/M grandad grandaddy grandam grandame granddad grande grandee grandiloquence grandiosity grandioso grandparental grandparenthood grandsire/S grangerism granitic granivorous grantable grantsman/M grantsmanship grantsmen granulator granulite granulitic granulocyte/S granulocytopoiesis granulosa granulosis grapeshot graphemic/S graphemically graphene/M graphicacy graphitic grapholect graphological graphologist graphology graphophone grapnel grapy/R gras grasslike grata graticule gratin gratiné gratinée gratulating Graustark graveless gravesend gravida gravidity gravimeter/MS gravimetrically gravimetry gravitino gravitometer/MS graviton/MS gravitropism/M gravure grawlix grayish grayling/S grayout/MS graywacke grazable grazeable grazier/S greaseless greasepaint/S greaseproof greasewood greathearted/PY greave/S grebe greenback/R greenbackism Greene/M greengrocery greenhorn greenlet greenling greenroom greensward greentree greenware greenwash/DGS greenway/MS greeny Greer/M gregarine gregarinian greige gremlin/MS gremmie/S gremmy/S grenadier grenadine grenier grep Gresham/M grewsome greylag gridder/MS gridlock/M griefless grievant grigio grillage grille grillroom Grimaldi/M grimines grimmest Grimsrud/M grimy/R grinch/MS gringo/S grinner grippe grippy gris grise griseofulvin gristle Griswold/M grith gritted gritting grog grogshop groomsman groot groovy/R groschen/MS grosse grossular grossularite grotesquerie grotesquery grouch/DGMS groundbreaker/MS groundburst/MS groundling groundmass groundnut groundout/MS groundsel groundsheet groundskeep groundwater groupable groupie/MS groupoid groupthink/M groupuscule grubber grubstake/R gruel grumbly grummet grump/DGS grunion gruntle/DGS grusky Gruyere gryphon gtad GTP GU guacamole guadalupe guanethidine guanidine guanine guanosine guar guarantor guardant Guardia guardrail guardroom guardsman guava guayabera/MS guck gudgeon Guelph Guenther/M guerdon Guerin guesstimate guff guggle/DGS guhleman guidable guideway guignol guildship guildsman guileful/PY Guilford/M Guillain guillemot guillotine/DGMS guimet guimpe Guinevere/M guisard Gujarat Gujarati gul gules gullable Gullah gullibly gulosity gumboil gumdrop/MS gummatous gummed gummer guncotton gundog gung gunlock gunmetal gunnar gunnysack gunplay gunpoint gunpowdery gunrunner gunrunning gunsel gunship gunsmith Gunther/M guppy/S Gurkha/M gurney/S gushy/PRY Gustafson/M gustation gustative/P gustatorial/Y gustatory/Y Gustav/M Gustave/M Gustavus gustoes gutbucket gutless/P guttate/N guttersnipe guttersnipish gutturalism gutty/R guyot Gwyn/M gymkhana gymnastically gymnosophist gyn gynogenesis gypseous gyral gyrase gyrational gyrator/S gyratory gyre gyrene gyrfalcon gyrofrequency gyromagnetic gyron gyroplane gyroscopically gyrostat Haag/M Haas habanero/M haberdasher Haberman/M Habib/M habiles habiliment habilitate/DGNSX habitability habitably habitude/S habitus hac hackberry hackmatack hackstaff hacktivism/M hadal Hadamard Haddad/M haddix hade/S Hadean Hadley/M Hadrian hadst Haemophilus hafiz haft Hagen/M Hager/M haggadic haggadist haggadistic haggis haggish hagiography/MS Hagstrom/M hah Hahn/M Haines hairbreadth hairbrush haircloth haircutter haircutting hairlike hairpiece hairsbreadth hairsplitter hairsplitting hairspring/MS hairstreak halal halala halberdier Haley/M halfpenny/S halftone halidom halier halitosis Halley/M halliard/S hallinan hallo halloo/S Halloumi halluces hallucinational hallucinatory hallucinogen/S hallucinogenic hallucinosis halma halocline haloes halogenate/N halogenous halogeton halomorphic halomorphism haloperidol halophile halothane halpern Halsey/M Halstead/M haltere halvah Halverson/M Hamal/M hamantasch hamate Hamburg hamey Hamlin/M hammerlock hammertoe hammett hammy/PRY hamstring hamstrung handball handbill handbreadth handcar handcart handcraft handcraftman handcraftsman handcrank/S Handel/M handfast/G handleless handline handlist handmaid handpick/D handpress handprint/MS handsaw handsbreadth handsful handshook handspring/S handsy handwaving handwheel/S handwork/R handwoven handwrought Haney/M Hanford/M hangdog hangnail/MS hangtag/MS Hangtown/M hangul haniwa Hankel/M hankie/S hanky/S Hanley/M Hanlon/M Hanna/M hant/R hantavirus/S haole hapchance hapgood haphazardry hapkido/M haploid haploidy haplology haplont haplotype/MS happenchance happing Hapsburg/M hapten haptoglobinhao Harbin/M harborside hardback hardbake hardball hardboot hardbound hardcase hardcopy/S hardcover/S hardfisted/P hardhanded/P hardhead/D hardheaded/PY hardhearted/PY hardihood hardiment hardmouthed hardnose/D hardpan hardscape/MS hardstand/G harebrain/D harelipped harijan harina Harlan/M harlequin harlequinade Harley/M harlotry Harmon/M harmonica/MS harmonical/PY Harmonist Harmonistic Harmonistically harmonium harridan Harriman/M Harrington/M harvestable harvesttime haskell Haskell's haskins hassium hassock/S hast hastate/Y hatband hatbox hatchability hatchable hatcheck hatchling hatchment/S hatchure Hathaway/M hatter Hatteras Hattiesburg/M hatting Haugen/M haulageway haulaway haulier Hausa/M Hausdorff/M hauser hausfrau hautboy/S haute hauteur Havanese haversack/MS Havilland/M havocked havocking hawkish/PY haycock Hayden/M hayfork haylage haymaker haymaking haymow hayrack hayrick hayride hayseed/S haywire haywood HbA HDD HDD's HDDs HDL headachy headband headcount headend/MS headfirst headforemost headgroup/MS headhunter headlock headman/M headmastership headmen/M headmistress headmost headnote headpiece headpin headrest headsail headshot/MS headshrinker headspring headstall headstock headstream headstrong headwaiter headwind/MS headword headwork Healey/M Healy/M heartbroken hearthstone heartrending/Y heartsease heartsick/P heartsome/Y heartsore heartstring/S heartwarming heartwood heathendom heathenism heathenry heathery heathless heathlike heathman heatless heatstroke heavyhearted/PY heavyset hebdomad hebdomadal/Y Hebe hebetation hebetude hebetudinous Hebrides/M Hecate/M Heckman/M hectically hectogram/MS hectograph hectographic hedda heddle/R hedgehop hedgehopper hedgepig hedgerow hedonic/S hedonically hedonistically hee heebie heelball heelless heelpiece heeltap hegel heidegger Heidegger's heigh Heine/M heinie/MS Heinrich/M heinze heirless heirloom heirship heiser HeLa heldentenor Helga/M heli heliacal/Y helicoid helicoidal helicopt/DG heliochrome heliogram/MS heliograph/R heliographic heliography heliogravure heliolatrous heliolatry heliometer/MS heliometric heliometrically heliophyte heliopolis heliosphere/MS heliostat heliotaxis heliotropic heliotropically heliotropism heliozoan heliozoic helipad heliport helistop hellacious hellbox hellbroth hellcat hellebore Hellespont hellgrammite hellhole hellhound hellion helmetlike helmsmanship helmsperson/MS helo helot helotism helotry helpmeet helve/DGS Helvetica hemacytometer/MS hemal hematic hematin hematinic hematoblast hematoblastic hematocrit hematogenous hematologic hematological hematologist hematology hematoma hematophagous hemihedral/Y hemihydrate/D hemimetabolic hemimetabolism hemimetabolous hemimorphic hemimorphism hemimorphite hemiola/MS hemiparasite hemiparasitic hemiplegia hemiplegic hemispheral hemispherectomy/MS hemizygous hemline hemmer hemoblast hemodialysis/M hemodilution/M hemodynamically hemodynamics hemoflagellate hemoglobinic hemoglobinopathy hemoglobinous hemolymph hemolysin hemophilia hemophiliac hemophilic hemoprotein/MS hemoptysis hemorrhagic hemorrhoid hemorrhoidal hemosiderin hemostasis hemostatic hempel Hempstead/M hemus henae henbane henceforward hendecasyllabic hendecasyllable hendiadys hendrix henequen Henley/M henna hennery Hennessy henotheism henotheist henotheistic Henri/M hent hep HEPA heparin hepatic hepatica hepatocellular hepatocyte/MS hepatoma hepatotoxic hepatotoxicity/M hepcat/MS hepped heptachlor heptagon heptagonal heptameter/MS heptathlete/MS heraldic heraldically heraldry herbaceous herbage herbalist herbarium herbicidal/Y herbicide/MS herblike herdic herdlike herdsmen hereaway/S hereditament hereditarian hereditarianism hereinabove hereinbefore hereinbelow hereon heretical/PY hereto hereunder hereupon Herez heritability/I Hermann/M hermaphrodite/MS hermaphroditic hermaphroditically hermaphroditism hermatypic hermeneutic hermeneutical/Y hermetical/Y hermeticism hermetism hermetist hermitage/MS hermitism hern hernandez Hernandez's hernia/MS hernial herniate/DGNSX heroical heroicomic heroicomical heroinism heronry herpesvirus/S herpetic herpetologic herpetological/Y herrenvolk herrington hersey herstory herty Hertzog/M hesiometer/MS Hesse/M Hester/M het heterarchy heterecious hetero heteroatom heteroautotrophic heterochromatin/S heterocycle heterocyclic heterocyst heterodox heterodoxy heteroduplex heteroecious heteroecism heterogamete heterogametic heterogenesis heterogenetic heterogeny heteroglossia heterogonic heterogony heterograft/MS heterokaryon heterologously heterology heterolysis heterolytic heteromorphic heteromorphism heteromorphous heteronomous/Y heteronomy heteronormative heterophil heterophile/MS heterophony heterophyllous heterophylly heterophyte heterophytic heteroploid/MS heteroploidy heteropolar heteropolarity heteropterous heteroscedasticity heterosexism/M heterosexuality heterosis heterosocial heterotic heterotopic heterotroph heterotrophic heterotrophically heterotypic heterotypical heterozygosis heterozygosity heterozygote Hetman/M Hettie/M Hetty/M Heusen/M Heuser/M Hewett/M Hewitt/M hexachlorophene hexad hexade hexadic hexagram hexahedron hexahydrate/D hexahydrite hexamethonium hexane hexanoic hexaploid hexaploidy hexapod hexobarbital hexokinase hexosaminidase hexylresorcinol heywood hiatal Hiatt/M Hib Hibbard/M hibernal hibernator hibiscus Hickman/M hickok hidalgo hidebound hidrosis hidrotic hie hieing hierarch hieratically hieroglyph hieroglyphical/Y Higgins higgle/DGRS Higgs highbinder highborn highbred highbrow/D highbrowism highflier/MS highlife/M highline/S Hildebrand/M hilding hillary hillocky hillyer hilum Himalaya/M himation himbo hindbrain hindquarter Hindustan/M Hines hingism hinkle hinky Hinman/M hipbone hipped hipper hippest hippie hippocampal hippocampus hippocras Hippocrates Hippocratic hippogriff hipsterism/M hirey Hiroshi/M Hirsch hirsute/P hirsutism/M hirsutulous hispanidad hispanism/M Hispano hissy hist histaminase histamine histaminergic histaminic histidine histiocyte/MS histocompatibility histologic histological/Y histologist histolysis histolytic histopathologic histopathological/Y histopathologist histopathology histophysiologic histophysiological histophysiology histoplasmosis Historicism/M historicist historiographer historiographic historiographical/Y histrionically hithermost hitherward Hitlerian Hitlerism/M Hitlerite/S hiveless HLA HMC's hmm Hoagland/M hoarsen/DG Hobart/M hobbledehoy hobday hobnail/D hobnob/S hobnobbed hobnobber hobnobbing hockaday hocus/DG hocussed hocussing hod hodad hodaddy Hodge/M Hodgkin/M hodoscope hoecake hoedown hoeing Hoff/M Hogan/M hogback hoggish/PY hogsbane/MS hogshead hogwash hoi hoisin hoising hoistman hoistmen hokan hoke/G hokeypokey hokum holabird holandric holandry Holcomb/M Hold'em/M holdall/S holdback holdfast holdout/S holeable holey holidaymaker holism holistically hollas Hollingsworth/M hollo holloa holloware Holloway/M Holm/M Holman/M Holmdel/M Holmesian holoblastic holoblastically holoenzyme hologamous hologamy holograph holographic holographically hologynic hologyny holohedral holometabolism holometabolous holomyarian holophrastic holophytic holotype holotypic holozoic holt holzman hombre homburg homebody homebred homegirl/MS homegrown homelike homeobox homeport/MS homeroom homeschool/DGRS homesite homestay/MS homestretch hometown homey/P homiletic/S homiletical/Y hominid hominin hominoid hominy homocercal homochromatic homocysteine homoerotic homoeroticism homogametic homogamic homogamous homogeny homograft/MS homograph homographic homoiotherm homoiothermal homoiothermic homologate/N homological/Y homolographic homolysis homolytic homomorphy homonuclear homonymic homonymous/Y homonymy homoousian homophile homophobe/MS homophone homophonic homophonous homophony homophyly homoplastic homoplastically homoplasy homopolar homopolymer homopteran homopterous homorganic homoscedastic homoscedasticity homosocial homosporous homospory homothallic homothallism homotopy homotransplant/M homotransplantation homozygosis homozygosity homozygote homozygotic homunculi homunculus homy/PR honcho/S hondo honeybell/MS honied honkeys honkie honoraria honorarium honorific/MS honorifically Honshu/M hoo hoochie hoodlike hoodlumish hoodlumism hoodoo/S hoodooism hoody/MS hooey hoofbeat hoofprint/MS hookah hookey/S hooklet hooky hoopster/MS hootch hootenanny Hooverville/M hophead hopi Hopi's hoplite hopple hora horary hord horehound horizonal hormonal/Y hormonelike hornbeam/S hornbill/S hornblende horndog/MS hornless/P hornlike hornmouth hornpipe/MS hornswoggle/DGS horntail hornworm/MS hornwort horologer horologic horological horologist/S horology horrent horrific horrifically horsecar horsefeathers horsehide horselaugh horsemint horseradish/S horseshit horsewhip horsewomen horsey horsy/PRY hortative/Y hortatory horticultural/Y horticulturist Horus hosanna hospitalist/M hosta hostel/RS hostler hotblood hotchpot hotchpotch hotelier hotelmen hotfeet hotfoot/MS hotshot Hottentot/M hottish Houdaille/M Houghton/M houndstooth houri housebound houseboy/S houseclean/GR housecoat housedress housefather/S housefront houseful houseguest houseless/P houselights housemaid/S houseman housemate/MS housemother/S housepeople/M houseperson/M houseplant houseroom houseward housewarming housewifery howbeit howsoever howsomever hoyden hoydenish hoyle Hoyle's Hoyt/M Hrothgar/M hryvnia HTLV Huang/M Hubbard/M Hubbell/M Huber/M hubristic hubristically huck huckaback hucksterism hud huey huff huffish Huffman/M huffy/PR hugeous/Y huggable hugger/MS Huggins hullabaloo/DGS hullo humanistically humanitarianism humanlike humanoid humblebrag/S humblebraggart humblebragged humblebragging humbug humbugged humbuggery humbugging humdinger humdrum humectant humeral humeri humerus humic humidor humification/S humified hummable Hummel/M hummer hummocky humoresque humorism/MS humoristic/S humoristical/MS humph humpty humpy/R Hun hunchback/DMS hundo hundredweight/S Huntington/M Huntley/M hup Hurd/M Hurdies hurley hurly hurtless hurty Hurwitz hussar hussy/S hustings hutzpah Huxtable/M huzzah hyacinthine Hyades hyaena/S hyalin hyaline hyalite hyaloid hyaloplasm hyaluronic hyaluronidase hybridism hybridity hybridoma hybris Hyde/M hydra hydralazine hydrangea hydranth hydrase hydrator hydraulical hydrazide hydrazine hydric hydrically hydrobiological hydrobiologist hydrobiology/M hydrocarbonaceous hydrocarbonic hydrocarbonous hydrocaryaceous/S hydrocephalic hydrocephalus hydrocephaly hydrochlorofluorocarbon/MS hydrochlorothiazide hydrocortisone/M hydrocracking/M hydrocyanic hydrodynamical/Y hydrodynamicist hydroelectrically hydroelectricity hydrofluorocarbon/MS hydrofoil hydroformer hydroforming hydrographer hydrographic hydrographically hydrography hydroid hydrokinetic/S hydrolase hydrologic hydrologist hydrolysate hydrolytic hydrolytically hydromagnetic/S hydromancy hydromassage/MS hydromechanical hydromechanics hydrometric hydrometrical hydrometry hydromorphic hydronic hydronically hydronium hydropathic hydropathically hydropathy hydroperoxide hydrophane hydrophile hydrophobicity hydrophone hydrophyte hydrophytic hydroplane/R hydroponic/S hydroponically hydropower/M hydroscope hydroseed/M hydrosere hydrosol hydrosolic hydrospace/MS hydrospheric hydrostatical/Y hydrotactic hydrotherapy hydrothorax hydrotropic hydrotropically hydrotropism hydroxyanisole hydroxylase hydroxylic hydroxyproline hydroxytoluene hydroxytryptamine hydroxyurea hydrozoan hyenic hyenoid hygienically hygienist/S hygrograph hygrometric hygrometry hygrophyte hygrophytic hygroscope hygroscopically hygroscopicity hyla Hyman hymenal hymeneal/Y hymenial hymenium hymnary hymnbook hymnody hymnology hyperacid hyperacidity hyperactive hyperactivity hyperaggressive hyperalert hyperalimentation/M hyperarid hyperarousal/MS hyperaware/P hyperawareness/M hyperbaric hyperbarically hyperbolical hyperbolist hyperborean hypercalcemia hypercatabolism hypercatharses hypercharge/DGS hypercholesterolemia hypercoagulability hypercorrect hypercritic hypercritical/Y hypercriticism hyperdrive/MS hypereutectic hypergeometric hyperglycemia hyperglycemic hypergolic hyperinsulinism/M hyperirritability hyperirritable hyperkeratosis hyperkeratotic hyperkinesis hyperkinetic hyperlipidemia/M hypermeter/MS hypermetric hypermetrical hypermetropia hypermetropic hypermetropical hypermetropy hypermiling hypermnesia hypermnesic hypermorph hypermorphic hypermorphism hypermutable hypernationalistic hyperon hyperope hyperopia hyperopic hyperostosis hyperostotic hyperparasite hyperparasitic hyperparasitism hyperphagia hyperphysical/Y hyperpituitarism hyperpituitary hyperplane/S hyperplastic hyperploid/MS hyperploidy hyperproductive hyperpure hyperreactive hyperreactor/MS hyperrealism/M hypersaline hypersensitive/P hypersensitivity hypersonic hypersonically hypersurface hypertension hyperthermia hyperthermic hyperthermophile hyperthyroid hyperthyroidism hypertonic hypertonicity hypertrophic hyperurbanism/M hypervariable/MS hyperventilation hypervirulent hyperviscosity/M hypervitaminosis hypha hyphal hyphenless hypnagogic hypnoanalysis hypnogenesis hypnogenetic hypnogenetically hypnogogic hypnoid hypnoidal hypnoses hypnotherapy hypnotism hypo/S hypocalcemia hypocaust hypocentral hypochlorite hypochlorous hypochondria hypochondriac hypochondriacal/Y hypochromic hypocoristic hypocoristical/Y hypocritic hypocycloid hypodermically hypodermis hypodiploid/MS hypoglycemia hypoglycemic hypoiodite hypokalemia hypomagnesemia hypomorphic hyponatremia hypoploid/MS hypotension hypotensive hypothalmus hypothecate/N hypothecator hypothenuse hypothermal hypothermic hypotonic hypotonically hypotonicity hypotrophy hypovolemia hypoxemia hypoxemic hypoxia/M hypoxic hypsography hypsometer/MS hypsometric hypsometry hysteretic hysteron hysterosalpingogram/MS hysterosalpingography/M hysteroscopy IA iambus/S iatrogenic ibero ibidem Ibizan Ibn IC iceblink icebound icebreaker icecap/MS icefall icehouse iceless iceman/MS ichneumon ichorous ick icky/R ICL ICO iconically iconicity iconoclastically iconographer iconographic iconographical/Y iconography iconolatry iconological iconology iconoscope/MS icosahedra Ida/M idealess idealistically ideality idealless idealogy ideational/Y idem identic ideogram/MS ideogramic ideogrammatic ideogrammic ideograph ideographic ideographically ideography ideolect ideologic ideologize ideologue/S ideomotor ides idetic idiographic idiolectal idiomatically idiomorphic idiomorphically idiopathic idiopathically idioplasm idioplasmatic idioplasmic idiotical/P idiotism idiotproof/DGS idiotype idolater idolatrous/PY idyllically idyllist ie IEE iff Ifni IgA IgE IgG IgM IGN ignescent ignimbrite ignitable ignitible ignitor ignitron ignobility ignobly ignominiosness ignominy ignorable/U iguana ikat Ike/M ikon IL ilial illation illative/Y illaudable illaudably illegibility illegibly illiberal/PY illiberalism illiberality illimitability illimitably illiquid illiquidity illite illitic illocutionary illogicality illon illuminable illuminance illuminant illuminati illuminator/S illuminism illuminist illus illusional illusionism illusionist illusionistic illust illustrational illutation/MS illuvial illuviate/N illuviation/M illuvium ilmenite Ilona Ilyushin im iMac/MS Imagen/M imaginal imaginate imagism imagist imagistic imagistically imago imam imamate imaret imbecilic imbecility imbed imbibition imbibitional imbitter imbosom imbricate/NY imbrown imbrue/D imbrute/DG imdtly ime imidacloprid imidazole imide imidic imido imine imino imipenem imipramine imit imitational imitator immaculacy immane immanence immanency immanentism immanentist immanentistic immaterialism immaterialist immateriality immaturel immedicable immedicably immensurable immerge/DG immergence immersible immesh immethodical/Y immigrational imminency immingle immiscibility immiscible immiscibly immiseration/M immitigable/P immitigably immittance immix immixture immobilism/M immoderacy immolate/N immolator immoralist immotile immotility immunoassay/DGMS immunoblot immunochemical/Y immunochemistry immunocompetence/MS immunocompromise/DGS immunocytochemistry/M immunodiffusion/M immunoelectrophoresis/M immunofluorescence/M immunofluorescent immunogen immunogenesis immunogenetic/S immunogenetically immunogenic immunogenically immunogenicity immunohematological immunohematology/M immunohistochemical immunologic immunologist immunomodulator/M immunopathologic immunopathological immunopathologist immunopathology/M immunoprecipitation/M immunoreactive immunoregulatory immunosorbent/MS immunosuppression/M immunosuppressive immunotherapy/MS immunotoxin/S immure/DGS immurement immutability immutably impala impalement impalpability impalpably impanel imparadised imparity impartable impartible impartibly impartment impassability impassably impassibility impassible impassibly impassivity impeachable impeachment impeccability impecuniosity impecunious/PY impellor impendent impenitence impenitent/Y imperate imperator imperatorial imperceptibility imperceptive/P imperceptivity imperfectivity imperforate/DS imperialistic imperialistically imperilment imperishability imperishably impermanency impermeability impermeably impermissibility impermissibly impersonality impersonator impertinence impertinency imperturbably impetrate/DGNSX impetuosity impingement implacability implantable implausibility implead implemental implosion/S implosive/Y impolitical/Y imponderability imponderably importable importancy importunity imposthume imposture impoundment impracticability impracticably imprecatory impregnability impregnably impregnator/S impressibility impressibly impressionability impressionably impressional impressionistically imprimis imprisonable improbability improv/M improvability improvable improvably improvidence improvisator improvisatorial improvisatory improvisor imprudence impudicity impugnable impuissance impuissant imputability imputable imputative/Y inadmissibly inalienably inamorata inanition inapparent inapplicably inapposite/PY inaptitude inaugurator/S inbreathe incalescence/S incalescent incandesce/DGS incantational incantatory incapability incapacitator incardination incarnadine incase incaution incendiarism incertitude incessancy inchoate/PVY inchoative/Y inchworm/MS incitant/S incitation inclinable inclinational inclip includable includible inclusivity/M incog incogitant incognita incognito incommode incommodity incommunicative incommutably incompliant incompressibly incomputably incondite inconscient inconsecutive inconsequence inconsequent inconsequentiality inconsolably inconsonant inconsumable inconsumably incontestability incontestably incontinency incontinent incontrovertibly inconvincible incoordinate/N incorporeal incorrupt/DPY increate incrementalism incrementalist/S increscent incriminate/DNS incriminatory incross incrust incrustation incubational incubatory incudes inculcator inculpate/NV inculpatory incult incumbency incumber incunabulum incuriosity incurious/PY incurrence incurrent incurrer incurvate/DGNS incurvature incurve incus incuse indagate/N indagator indamine indecency indecorum indefatigability indefatigably indefeasibly indefectibility indefectible indefectibly indefinability indefinity indehiscence indehiscent indelibility indelicacy indemonstrable indention independency indescribably indestructibly indexical indican indicational indicatory indicia indictable indiction indictor indifferency indifferentism indifferentist indigen indigence indigene/S indign indigotin indinavir indiscrete indissociably indissolubly indite/DGR indivertible indivertibly individualistically indivisibly Indo Indochinese indocile indoctrinator Indoeuropean indole indoleacetic indolebutyric indomethacin indomitability indomitably indrawn indubitability indubitably inducibility indue indult indurate/NV Indus indwell/GR inebriant inebriety inedible ineffability ineffably ineffaceability ineffaceably inelasticity inelegance ineluctability ineluctably ineludible inenarrable ineptitude inequivalve/D ineradicability inerrancy inerrant inertance inestimably inexhaustibly inexistence inexorability inexpiably inexplicability inexpugnable/P inexpugnably inexpungible inextinguishably inextricability infall/G infanta infantilism infantility infantum infarct/D infarction infatuate/DX infaunal infectivity infector infecundibility inferrer inferrible infestant infiltrator/S Infiniband'M infinitival inflammably inflationism inflationist inflator inflictor inflorescence/S Informatica informatics informatory infotech/MS infract infractor infrahuman infrangible/P infrangibly infraorder infrasonic infraspecific infrastructural infrequency infundibular infundibulate infusoria infusorial infusorian ingather/G ingenue ingle ingratiatory ingress/V ingression ingressive/P ingrowing inguinal inguinale ingurgitate/N inhabitancy inhalational inhalator inharmonic inharmony inherence inhibin inhumanity inhumation inhume/DGS inimitably initialism initiatory initio injectant/MS injector/S injunct inkhorn inkle inkstand inkwell inky/P Inman/M inmost innard innersole innerspring innervate/DGNS innervational innerve innie/MS innkeeper/MS innocency innominate innovational innovatory innumerous inobservance inobservant inoculant inoculativity inoculator inoculum inoffensive/PY inoperculate inosculate/DGNS inositol inotrope inotropic inpatient inphase inpour inquisitional inquisitorial/Y inrun inrush insalubrious insanitation insatiability insatiably insatiate/PY inscriptional inscriptive/Y inscroll inscrutably insculp inseam insectan insecticidal/Y insectifuge insectivore/MS insectivorous insectivory inseminator/MS insentient insertional insessorial insetted inshore insinuator insipidity insistency insolate/N insole insolvably insoul insource/DGS inspan inspectorate inspectorship insphere inspirator inspiratory inspirit inspissate/DN inspissator inspo instalment/S instancy instantaneity instar instate/G instauration instil/S instillment institutionalism institutor instructorship instructress instrumentalism instrumentality insufficience insufflate/DGNS insufflator insugently insulant/MS insularism insuppressibly insurability insurable insurgency insurmountably insuror insurrectional insurrectionary insurrectionist insusceptibly intaglio integrability integrality integrationist/MS integrator integrin intel/M intellection intellectualism intellectualist intellectualistic intellectus intelligential intendment intenerate/N intentionality intepupillary interactant interactional INTERAMA interanimation/M interatomic interbrain interbreed intercalary intercellular/Y intercession intercessional intercessor intercessory interclavicle interclavicular intercluster intercolumniation intercommunion intercomputer interconversion interconvert interconvertibility interconvertible intercooler intercostal/Y intercrisis intercrop intercross intercultural/Y intercurrent/Y intercut/S intercutting interdenominationalism interdental/Y interdepend interdialectal interdiction interdictor interdictory interdiffuse/N interdigitate/N interfacial interfascicular interferential interferogram/MS interferometrically interfertile interfertility interfiber interfile interframe interfuse/N intergeneric intergradation intergradational intergrade intergrowth interhemispheric interionic interiority interjectional/Y interjector interjectory interjudgment/MS interlacement interlaminate/N interlard interleaf interline interlinear/Y interlineation interlocal interlocution interlocutory interlope/DGRS interlunar interlunary intermarry intermeddle/R intermediacy intermediator/MS intermedin intermembrane intermetallic intermezzo intermit intermitotic intermittence intermitter intermixture intermodal intermodulation/M internality interne internecine internee internescine interneuron interneuronal internist internment internodal internode internuclear internucleon internucleotide internuncial/Y internuncio interobserver interoceptive interoceptor interoffice interoperate/DGSV interpandemic interparticle interpellate/N interpellator interpenetrate/N interphase interplant interplead/R interpolator interpolatory interpopulation/M interpretability interpretational interreligious interring interrobang interrogational interrogee/S interscholastic intersectionality intersectoral intersensory interservice intersession intersex intersexual/Y intersexuality interspace interspecific interstadial intersterile intersterility interstimulus interstrain interstrand intersubjective/Y intersubjectivity intertestamental intertextuality intertidal/Y intertie intertill intertillage intertrial intertropical intertwinement intertwist interurban intervale intervalometer/MS interventionism intervertebral/Y interwar interweave/S interzonal interzone inti intima intimidator intimidatory intinction intine intitule intl intnl intonational intraarterial/Y intracardiac intracardial/Y intracellular/Y intracompany intracranial/Y intracutaneous/Y intraday intradermal/Y intrados intraepithelial intrafallopian intragalactic intragenic intramolecular/Y intrans intransigeance intransigeant/Y intrant intraperitoneal/Y intrapersonal intraplate intrapopulation/M intrapreneur intrapsychic intrapsychically intraspecies intraspecific intraspecifically intrauterine intravascular intravital/Y intravitam intrazonal intreat intrench intrepidity intrigant intriguant intrinsical/P introgressant introgression introgressive introit introjection intromission intromit intromittent intromitter intron introrse/Y introspectional introspectionism introspectionist introspectionistic introversive/Y intrvascularly intsv intuit/G intuitionism intumesce intussuscept/V intussusception Inu inulin inundator inundatory Inupiat inurement inurn inutility inv invaginate/DGNS invaginated/U invalidator inveiglement invenit inventorial/Y inventress invercalt invertase investable investigational investiture inveteracy invictus invigorator/A inviible invincibility invincibly inviolacy inviscid invitatory invocational invocatory involucral involucrate involucre/D involucrum involutional involutionary inweave iodic iodin iodoamino iodocompounds iodoform iodophor iodoprotein iodopsin iodothyronines iodotyrosines iodous ione ionicity ionium ionophore ionospherically iOS iosola IOT iotacism IOTTA IOTTA's iPad/M ipecacuanha iPhone/MS iPod/MS iproniazid ipsilateral/Y IQ IR Ira IRAF iraimbilanja Iranian/MS iraqi Iraqi's Iraqis irascibility irascibly ireful irenaeus irenic/S irenically irid iridaceous irides iridescence iridescent/Y iridic iridosmine irina ironbound ironclad ironfisted ironhanded/PY ironhearted ironist ironmaster ironmonger ironmongery ironware ironweed irradiance irradiator irradicable irradicably irrationalism irrationalist irrationalistic Irrawaddy irreal irreality irreclaimable irreclaimably irreconcilability irreconcilably irreconciliable irrecoverably irrecusable irrecusably irred irredenta irreducibility irreformability irreformable irrefragability irrefragable irrefragably irrefrangible irrefutability irrefutably irreg irregardless irrelative/Y irreligion irreligionist irreligious/Y irremeable irremediably irremovability irremovably irrepealability irrepealable irreplaceability irreplaceably irrepressibility irrepressibly irreproachability irreproachably irresoluble irrespirable irresponsive/P irretrievability irretrievably irreversibility irrevocability irrigational irrigationists irrigator/S irrotational/Y irrupt/DGSV irruptive/Y Irvin/M Isaacson/M Isabella/M Isadore/M Isaiah/M isentropic Isis Islamabad/M islandia ism isoagglutination isoagglutinative isoagglutinin isoagglutinogen isoalloxazine isoantibody isoantigen isoantigenic isoantigenicity isobar isobaric isobutylene isocaloric isocarboxazid isochromatic isochromosome isochron isochrone isochronism isoclinal/Y isoclinic isoclinically isodose isoelectric isoelectronic isoenzyme isoflavone isoform isogeneic isogenic isogloss isogonic isograft isogram/MS isolationist isolator Isolde/M isoline isologue isomagnetic isomerase isomeric isomerism isomerous isometrical/Y isometry isomorphous isoniazid isonomy isooctane isophotal isophote isopiestic isoprenaline isoprenoid isoproterenol isospin isotactic isotonically isotonicity isotopically isotopy isotretinoin isozyme isozymic issei issuable issuably issueless isthmic Istvan/M italianate Italianism itchy/P iterance iterant itineracy itinerancy itinerate/DGNS Ito/M itsy itty iud/S ivermectin Iverson/M ixnay izaak jabber/DRS jabberwocky Jablonsky/M jabot jackal/MS jackalope/MS jackanapes jackassery jacketted jacketting jackhammer jackscrew jacksmelt JACM Jacobi/M jacobite Jacobson/M Jacobus jacoby jacquerie jactitation Jaeger/M jagger jaggery jaggy Jah jai jailbait/M jailbreak jailor Jaime/M jake/M Jakob/M jalousie jamb jambalaya jammer janis janitress Janos Jansenist/M japanned japanner japanning jape/GRS japery japonica jardiniere jarful jargonistic jarhead/MS Jarvin/M java javanese jawbreaker jawless jawline jaybird jaygee jayvee jazzman jeanne Jed/M jeebies jeepable jeepney/MS jeeringly jell/DGS jello jellylike Jensen/M jeon Jeres jerkin jerkwater jeroboam jessy jesuitic jesuitical/Y Jesuitism jesuitry jetbead jetport jetsam jettisonable jetty/DGS jeunes Jewell/M Jewett/M jiao jib jibber/S jibbing jibboom jiff jigged jiggly/R jillion/MS Jimenez jimjams jingly jingo jingoes jingoish jingoism jingoist jingoistic jingoistically jink/S jinn jinni jinny jitney/S jiujutsu Jo/M jobbed jobber/S jobrel jocosity jocularity jocundity jodhpur/S joe jogger/S jogging Johanna/M Johannisberg Johnston/M joinable joinder joinery jointress jointure/DGS jointworm Jolla/M jollification/S jolokia jolty jomon jones jongg joual jouncy/R jour journalistically journeywork jow/Y jowly/R joyance joypad joypop jubilarian juco Judaica Judd/MRZ Judder/DGS judgmatic judgmatical/Y judgmentalism judoist judoka Judson/M jugful jugged juggernaut/DGMS jugglery Jugoslavia jugular jugulum juicehead/MS juiceless jujitsu jujutsu Jul julienne Juliett/M Julissa/M Jumada jumpmaster/MS Jun junco junctional junctor junctural Jung/M jungian jungly junkyard junto/S Jura/MS jural/Y jurassic jurat jure jurel juridic jurisconsult/S juristic juristically jussive/S juste justiciability justiciar justifiability justificative justificatory justment Jutland/M jutted jutty/DGS juvenescence/A juvenescent/A juvenilia juvenility juvenocracy juxtapositional kaftan Kahn/M kairomone kaiser Kajar/M kalamata kale kaleidoscope/DGS kaleidoscopic kaleidoscopical/Y kallidin kallikrein kalmia Kalmuk/M Kamchatka Kamikaze/M Kampala/M Kampuchea/M kanamycin kanban Kane/M Kannada kaon kapeyka Kaplan/M kapok kaput Karachi/M Karamazov/M karateist karma karmic Karp/M Karplus/M karyatid karyotype/MS Kashmir Kaskaskia kata Katharevousa/M Katharine/M Katowice/M katsura Kauffman/M Kaufman/M kava kayak/S kayo/DG kazillion/MS kebab/S Keck/M ked keddah keegan keelboat keelhaul keelless keelson keepsake/S keeshond Keeshond's Keeshonds Kegel/M kegful kegger/MS kegler/MS kegling/MS kegsful keiretsu keister/MS kelly Kelsey/M kelts Kemp kempt Ken/M Kendall/M kendo/M Kennan/M Kenney/M kente Kenton/M Kenyon/M keratectomy/MS keratomileusis keratotomy/MS kerchieves kerne kernite/MS kerosine Kerouac/M Kerr/M kerry kerygma Kessler/M kestrel ketamine/MS ketch/S ketene keto ketoconazole ketogenesis ketogenic ketonic ketose ketosteroid/MS ketotic kettlebell/MS kettledrum kewaskum kewaunee keybutton/MS Keyes keyless keylogger/MS Keynesianism/M keyway/S khapra Khartoum/M khoum khrush ki/H kibble/DGS kibbutz kibbutznik/MS kibe kibibit/MS kibibyte/MS kibosh kickapoo kickboard/MS kickshaw/S kickstand kickup/S Kidde/M kiddish kiddush kiddy kidskin Kieffer/M kiel kielbasa Kiewit/M Kigali/M Kikuyu/M Kilgore/M Kilimanjaro/M killdeer killebrew kiln kilo/S kilobar/MS kilobase kilocalorie/S kilocurie kilocycle/S kilooersted kiloparsec/MS kilopascal/MS kilorad/MS kilt/R Kimball/M Kimberly/M kina kinara kindergartner kindless/Y kine kinematical/Y kinescope/DMS kineses kinesic kinesiology kinesis kineticist/MS kinetin kinetochore kinetonucleus kinetoplast/MS kinetoplastic kinetoscope kinetosome kinfolk/S kingfish kingmaker kingship kingside kingwood kinin kinkajou/M Kinney/M kinnikinnic kinsey kinsfolk Kinshasha/M kinswoman Kiowa kip/S kipper/DGS Kirchner/M kirk kirkwood Kirlian Kirov/M kirsch kishke kismet kissable Kistler/M Kitakyushu/M kitchenware/S kiteboard/DGRS kiteboarding/M kitesurf/DGRS kitesurfing/M kith/G kithe/G kitschy kittle/DGRS kiva kivu Kiwanian kiwi/MS kiz kizzie Klamath klatch/M klatsch klauber klavern Klawe/M klebsiella klepto kleptomania kleptomaniac kline Klinefelter's klister Klux knackery Knapp/M Knauer/M knavery knavish/Y kneadable kneehole/S knickknack knifelike Knightsbridge/M knish knitter knitwear knobbed knobeloch knockabout/S Knossos Knott/M knotter knotweed knout knoweth knowily knowledgeability knowledgeably Knowlton/M knucklebone/S knucklehead/D Kobayashi kobo Kochab/M koine koinonia kok kokanee kola kolkhoz kolkhoznik kombu Komodo komondor Komsomol/M konga konrad Konrad's kook kookaburra kookie/R kooky/PR kooning kopeck kopek kopiyka Koppers Koran/M Korat kore Korintje koruna kouprey kouros Kovacs Kovic/M Kowalewski/M Kowalski/M Kowloon kowtow kpc kraemer kraken Krebs kremlinologist kremlinology Kremlinology's kretchmer Krieger/M Krio Kristin/M Kronecker/M kroon krummholz Kruse/M KS Kuchean kudo kudu kufi Kuhn/M Kuiper/M kulak kultur Kumar/M kuna kung Kung's kurdish kuru kvell kwacha kwanza/MS Kwanzaa/M kwashiorkor KWIC kwon/M KY kyat L'vov laari/M Laban/M labanotation/M labdanum labellate labellum labelmate/M labia labiate lability labium laborsaving labradoodle/MS labradorite labyrinthian labyrinthine laceless lacelike lacemaker Lacerta/M lacewing lacework lacey laches Lachesis lachrymal lachrymator lachrymose/Y laciniate/DN lackaday laconic/S laconically laconism/S lacrimal lacrimation lacrimator lactamase lactase lacteal lactic lactiferousness lacto lactobacillus lactobionamide/S lactobionic lactobionyl lactogenic lactoglobulin lactone lactonic lacunal lacunar lacunaria lacunary lacunate lacustrine lacy/R ladanum laddie lade/U ladino ladybird/MS ladybug/MS ladyfern ladyfinger ladykin ladylove ladyship lage lagger lagniappe lagomorph lagomorphic lagomorphous lagoonal Lagos Laguerre laguna lahar Lahore/M laic laical/Y laicism Laidlaw/M laird/Y lait laitance/S lakefront Lakeland/M lakeshore lakewood lakh laky lally lallygag lallygagged lam lama Lamar/M Lamarck lamasery lambast lambaste lambency lambent/Y lambert lambertian lambeth lambkill lambskin lamebrain/D lamella/S lamellae lamellar/Y lamellate/NY lamelliform lametedly lamia laminal laminaria laminarian laminarin laminator laminin lampoonery lamster lamé Lana/M lanai lancelet Lancelot/M lanceolate/Y lancet/D lancinate/DGNSX landaulet landes landform landlocked landlordism landmass/S landowning Landrace landside landslip/S landsman landward/S lanesmanship Lang/M langeland langlauf langley Langmuir/M langoustine languishment languorous/Y langur Lanka/M lanolin lanuginous/P lanyard Lao laodicean laogai laparoscope/MS laparotomy lapboard lapdog lapful lapidarian lapper lappet lapstrake lapstreak lapwing larcener larcenist larcenous/Y lardy lares largehearted largess larghetto largo/S lari Larkin/M larkspur larky/R larvicidal larvicide laryngectomee larynges laryngitis laryngology laryngoscope laryngoscopic lasagna lasagne lascar lase LASIK LASIK's lassie/S lassitude/S lassoes Laszlo/M latchet latchkey latchstring lateen/R lateiner latened latening latensification/MS latensify/DNSX latera Lateran/M laterite latewood lathery latices laticifer laticiferous latifundio Latina Latine Latinity Latinx latish latitudinarian latitudinarianism latke/MS latosol Latrobe/M latten latticework lattimer latus Latvia/M laudability laudable/P laudation/S laudative Laue/M Laughlin/M laughterful launderability launderette/S laundress laundryman laundrywoman laurate laureateship Laurent/M lauryl Lausanne/M lavabo lavage/D lavalava lavalier lavaliere lavalike lavallade lavalliere lavation lavational lavato lave/GR laveer laverock Lavoisier/M lawmaker lawny laxation layabout/S layaway layerage layette layin layover/S laypeople Layton/M laywoman laywomen laze/S lazyish LD LDL lea leachable leaderboard/MS leadeth leadless leadman/M leadmen leadoff leadwork leady/R leafage leaflike leafstalk/S Leaguer/MS Leander/M leant leapfrogged leapfrogging Lear learnable leary leastways leastwise leasure leatherback leatherlike leatherwork lecherous/PY lecithin lecithinase lectin/MS lection/A lectionary lectureship lede lederhosen/M ledgy leeboard leeds Leeuwenhoek/M leftism legalese legalism legalist legalistic legalistically legateship legatine legator Legendre/M legendry legerity leges leghold/MS legionary legionnaire/S legis legislatorial legislatorship legislatress legislatrix legist legit legitimism legitimist legless legman legroom legwork Lehman/M lei/H Leibniz Leipzig/M lekvar lemke lemony lempira Lemuel lemur lemures Len/M Lena/M lengthways lenience lenis lenitive/Y lenity Lennox/M Lenore/M lense lensless lensman/M lensmen lentic lenticulate/N lenticule lentissimo lentivirus lento leone/MS Leonid/M leopardess leotard/S lepidolite leprechaun/S leprotic leprous/PY leptin/M lepton/MS leptospiral leptospire/MS leptospirosis les lesbianism Lesotho/M lessee letch lethargic lethargically Lethe/M Letitia/M letted letterbox/DGS letterpress letup leu leucine leucite leucitic leucoma leukemogenesis leukemoid leukocyte leukocytic leukodystrophy/M leukosis leukotomy/M leukotriene lev/N Levalloisian levamisole levanter levator/S levatores leveeing levelheaded/P leveret Leviable leviathan/M levigate/DGNS levirate leviratic levitational Levitt/M levodopa levonorgestrel levorotation levorotatory levulose Lew/M lewellyn lewisite lexeme/MS lexica lexicality lexicalization/M lexicographer/MS lexicography lexicostatistic/S ley liaise/DGS liana lib/R libationary liberace liberalist liberalistic liberationist/S libertarianism libertie libertinage libertinism libidinal/Y libra librae librarianship librate/N libration/M librational libratory libre/MS Libreville/M libriform licating licensure licentiate licentiateship lichee lichenous licht/R lichtenstein lickerish/PY lickspittle lictor lidar lidded lido/S lidocaine/MS lieberman Lieberman's lief lierne lieutenancy lieve lifeful lifeline/S lifemanship lifesaver lifeway lifework liftable liftgate/MS liftman ligamentary ligamentous ligase ligate/DGNSX liger Ligget/M Liggett/M lighterage lightface/D lightfast lightfooted/PY lightful lighthanded/P lightheaded lightish lightless lightplane/MS lightship lightsome/PY lightyear/S lignan ligneous lignify/DGNS lignin lignitic lignocellulose ligulate ligule ligure likability likable/P likuta Lila/M lilangeni Lilian/M Lillian/M lilliput lilliputian Lilly Liman limba limbless limbus limeade limekiln limen limey liminal limitable limitary limitational limitative limitrophe limmer limn/GR limnetic limnic limnological/Y limnology limonene limonite limonitic limpa limpet limpidity limpkin limpsy limulus limy/R Lin/M linac linage linate/DN linchpin/MS Lincolniana lincomycin Lind/M lindane Lindbergh/M Lindholm/M Lindquist/M Lindsay/M Lindsey/M Lindstrom/M lindy lineality lineament lineamental lineation linebacking linebreed linecaster/M linecasting lineolate/D lineprinter/MS linerboard linerless linesman linga Lingala lingcod/MS lingoes lingonberry/MS linguae linguica linguine linguistical linguistician lingulate linin linkboy linkman linksland/MS linksman/M linksmen/M linkup Linnaeus linoleate linoleic linolenate linos lintel Linton linty linum lionhearted lionlike lipa lipide lipidic Lipizzan/M lipless liplike lipo lipoic lipolysis lipolytic lipophilic lipopolysaccharide/MS lipoprotein/MS liposome/MS lipotropin lipped lippen Lippes/M Lippincott/M lipping lippy/R lipread/G Lipschitz Lipscomb/M liquate/DGNSX liquefactive/MS liquefiability liquefiable liquescent liquidator liquorice lira/S lire liriope Lise/M lisle liss Lissajous lissom lissome/PY liste listel listenable listenership listeriosis listicle/MS liston litas literalist literalistic literality literati literatim literator literatus litharge lithesome lithia lithiasis lithic lithically litho/S lithographic lithographically lithologic lithological/Y lithophane lithophyte lithophytic lithopone lithosol lithotomy Lithuania lithuanian litigable litotes litterateur litterbag/MS littermate/MS littery liturgiologist liturgiology liturgist litz liveability liveable livelong liverish/P livermorium Liverpudlian liveryman livestream/DGS livetrap lividity livlihood lixiviate/DGNS lizzy llama/MS llano/S lo/HS loach/S loadmaster/MS loanable loanword/MS lobar lobate/DNY lobbing lobbyer lobbyism lobbyist lobectomy lobelia lobeline loblolly lobo/S lobscouse lobsterman lobstermen lobulate/DN lobulose localism localite locatable loch Loch's Loches lockable lockage lockbox locket lockies lockjaw lockstep lockstitch loco locoes locofoco locoism locomote/DGS locular loculate/DN locule/D loculus locution locutor lode loden lodestar Lodowick/M Loeb/M loess logbook loggets loggia loggie loggy logia logicality logistician/MS lognormal/Y lognormality logocentrism/M logogram/MS logogrammatic logograph logographic logographically logogriph logomachy logophile/MS logorrheic logotype logroll/GR logwood logy Loire Loki/M lollipop lollop lollygag lollypop Lomb/M Lombardy/M Lome londonderry longanimity longanimous longboat/S longbow longbowman longeron longevous longhair/D longhead/D longheaded/P longhouse longlegs longline longneck longshoreman longshoring longsome/PY longspur longstreet longue longwinded loo looby/S loogie lookism/M Loomis looney loony/PR loosestrife loosey lopper loppy/R lopseed loquat loran/S LORAN's lorazepam lorca lordling lordosis lordotic loreal Loren/M lorgnette/S lorgnon/S loricate/D Lorinda/M loris lorn/P lory losable/P losel lotharios loti lotos lotte/DG Lotte's lotto Lou/M loudmouth/D lough loungewear/M Lounsbury/M loup/G loupe/G Lourdes lout/S loutish/PY Louvre lovastatin loveable lovebug/M lovejoy lovelock/S lovemaking lovesick/P lovesome lowball/DGRS lowballer/M lowborn lowbred lowbrow Lowe/M lowermost lowery lowlihead lown lowrider/MS Lowry/M lox/S loxodrome loxodromic/S loxodromically loy loyola LSI LTV lubber/SY lubberland/Z lubberly/P lube Lubell/M lubric lubrical lubricator lubricous lubritorium Lucayo lucency lucien luciferous lucubrate/DGNSX lucubrator luculent/Y lude ludic Ludlow/M ludmilla lues luetic luetically luggageless lugger lugubrious/PY Luis lukemia lum/X luma lumbago lumberjack/MS lumbian lumenal lumina luminaire/MS luminal luminance luminaria/MS luminesce/DG luminiferous luminism/M luminist lumière/MS lummus Lumpur luncheonette Lund/M Lundberg/M Lundquist/M lune/S lunette lungfish lunisolar lunitidal lunker lunkhead/D lunt lunule luny lupanar lupulin lupus Lura lurdane Lusaka/M lusion lustihood lustra lustral lustrate/DGNSX lustrum luteal lutefisk/M lutenist luteotropic luteotropin/MS luteous lutetium lutihaw lutz/MS Luwian/M lux luxate/DGNSX Luzon/M lwei/MS lyase lycanthropic lycanthropy lycee lyceum lychee lychnis lycidas lycopene lygus Lykes Lyman/M lymphadenitis lymphadenopathy/M lymphangiography/M lymphatic lymphatically lymphoblast lymphoblastic lymphocytic lymphocytosis lymphogranuloma lymphography/M lymphoid lymphokine lymphomatoid lymphomatosis lymphomatous lymphopoiesis lyndon lyonnaise lyophile/MS lyophilic lyophobic lyotropic lyra/M lyrate/DY lyrebird/MS lyrism lyrist lysate lyse/GS Lysenko/M Lysenkoism lysergic lysimeter/MS lysimetric lysin lysine lysis lysogen lysogenic lysogenicity lysogeny lysolecithin lysosomal/Y lysosome/MS lysozyme/MS lytically mabe Mabel/M macadam Macadamia macaque macaron/MS macaronic macaronically macaronies macaroon Macassar Macaulayan Macaulayism/S macaw/MS macchiato MacDougall/M Macdougall/M macerate/DGNSX macerator/S MacGuffin/MS machete machicolate/N machinability machinate/DGS machinator machineable mackerel/S Mackey/M mackle/DGS macklin macle/D MacMahon/M MacPherson/MS macrame macroaggregate/DMS macrobiotic/S macrocephalic macrocephalous macrocephaly macrocosm macrocosmic macrocosmically macrocyclic macrocyte macrocytic macrocytosis macroeconomic macroevolution/M macroevolutionary macrofossil/MS macrogamete macroglobulin macroglobulinemia macroinstruction/M macron macronucleus macronutrient/MS macropathological macropathology macrophagic macrophyte macrophytic macroscale macroscopical macrostructural macrostructure/M macular maculate/DGNSX macule macumba madded maddish Maddox Madeira Madhya madrigalian madrigalist madrilene madrona madrone Madsen/M madstone/S madwoman madwomen Mae/M maelstrom/MS maenadic maeterlinck mafia Mafiosi mafioso magazinism magazinist/S mage/MS Magellanic maggotry/S magicked magicking magill magisterium magistracy magistral/Y magistrateship magistratical/Y magistrature maglev magma magmatic magna magnesian magnetitic magnetodynamo magnetoelectric magnetoelectrical magnetoelectricity magnetoencephalography/M magnetofluiddynamics magnetofluidmechanic/S magnetogasdynamic/S magnetogram/MS magnetograph magnetohydrodynamic/MS magnetometer/MS magnetometric magnetometry magnetomotive magneton magnetooptic/S magnetooptical magnetopause/M magnetoresistance/M magnetoscope magnetosphere magnetospheric magnetostatic magnetostriction magnetostrictive/Y magnetron/MS magnific magnifical/Y magnifico magniloquence magniloquent/Y Magnuson/M Magog/M magstripe/MS magtape/S maguire/S magus mah maharaja/M maharanee maharani Maharashtra maharishi mahatma mahatmaism Mahayana Mahayanist mahler mahlstick Mahoney/M mahout mai maidenhead maidenhood maidhood maidish maieutic/S maieutical mailability mailbag/S mailboat/S Maillard/M maillot mailplane/S mailsack/S mainsail mainsheet maintop maisonette/S maitre/S maize/RSZ majestical majolica Majorca/M majordomo/S majorette/S majuscular majuscule makeable makebate makefast makepeace makeshifty makeweight mako/S mal Malabar/M malabsorption/M malachite malacologic malacological malacologist malacology malacostracan maladaptation maladminister maladministration Malagasy/M malamud malamute malapert/PY malapportion/DGS malapportionment malappropriate/DGS malapropian malapropos malar malarian malariated malariologist malariology malarkey malate malathion Malawi/M malaxate/DGS malconduct malconformation Malden/M maldevelopment maldistribute/N Maldive/MS maledictory malefaction malefic maleficence maleficent maleic malemute malentendu malfeasance malgovernment Mali/M malic maliferous malignance malignity malinger/DR Malinois malism malleability mallemuck malleus mallow malmsey malolactic Maloney/M malposition malpractitioner Malraux maltase Malthus Maltipoo/M maltobionic Malton/M maltose maltreatment maltster malty malvasia malvasian malversation malvoisie mammalogist mammalogy mammary mammer mammillar mammillary mammillate/D mammock mammography mammon mammonism mammonist mammonite mammy/S mana manacle/DGS manageability manageably managemental manageress managership manat manchet Manchuria mancipation mancipatory manciple/S mandala mandamus mandarinate/S mandarinic mandarinism mandatary/S mandator mandatorial mandibular mandibulate Mandinka mandola mandolinist/S mandorla mandragora mandrel mandril mandrill manducate/DGS manege manful/PY manganate manganesian manganic manganite manganous mange mangel mango/MS mangrove mangy/PRY manhandle/DGS manhunt/S mani manically manicotti/MS manifestant manifesto/DGMS manifestoes manioc manipular manitowoc mankowski manless Manley/M manlike Mann/M mannerist manneristic mannerless mannikin mannish/PY mannitic mannitol mannopyranosyl mannosyl mano manometric manometrical/Y manometry manorialism manpack/MS manque manrope/S mansard/D manscaping/M manse manship manslayer mansplain/DGRS manspreader manspreading mansuete mansuetude mantelet mantelpiece mantelshelf mantic mantis/S Mantoux mantua manubrium manuduction manuductory Manuel/M manufactory manumission manumit manumitted manumitting manurial manuscriptal manward/S manwise manyfold manzanita mao maplecrest mapmaker/S mapmaking mapper mappery mappist/S maquiladora/MS maquillage maquis Mar marabou maraging maraschino marasmic marasmus maraud/GS marbly Marburg/M Marbury Marc/M Marceau/M Marcel marcelled marcelling Marcello/M marchesa marchese marchioness marchpane Marcia/M Marco/M marconigram/MS marcotte Marek's marengo Marfan/M marg margarita Margery/M marginate/DGNSX mariachi marimba marionberry/MS marish marjoram Marjory/M marka markdown marketwise Markham/M Markism/M markovitz markswoman markswomen markup/S marl marline marmoreal/Y marmorean marmoset/MS marmot marocain marplot marque/A marquet marquisate marquise marquisette marrowfat marrowless marrowy marse marshalcy marshalship marshmallowy marshy/PR marsupial/MS marsupium martensite martensitic martensitically martinet martlet Martonosi martyrologist/S martyrology/S martyry Marxian Maryknoller marzipam marzipan masa masala/MS mascarpone mascon maskable masochism masochistic masochistically massbus masseter masseteric masseur/S masseuse massicot massif/S massy mastectomy/S mastership mastersinger/S masterstroke/S masterwork masthead mastic masticate/DGNSX masticator/S masticatory mastitic mastodonic mastodont mastoid mastoidectomy mastoideus mastoiditis masturbational masturbatory matador matchboard/G matchlock matchup/MS matchwood matelote Mateo/M materfamilias materialist materialistically materiality materiel/M matey matinal matins matriarchate matriarchy matric matricidal matricide matriculant matrilineal/Y matroid matronymic Matson/M Matsumoto/M matt matte mattei mattery mattie mattock Mattson/M matutinal/Y matzo/S mau maude maudlinism/S maugre mauricio Maurine/M Mavis maxi maxilla/S maxillae maxillary maxilliped maxillipede maxillofacial maximin May Mayanist/M mayapple mayflower mayfly Mayo/M mayoralty mayoress maypole mayst mazy mazzard maître/M mbaqanga Mcadams Mcallister/M Mcbride/M Mccabe/M Mccall/M McCallum/M Mccallum/M McCann/M Mccann/M Mccarthy/M McCarty/M Mccarty/M Mccauley/M Mcclain/M Mcclellan/M Mcclure/M Mccluskey/M McConnel/M Mcconnel/M Mcconnell/M McCormick/M Mccormick/M Mccoy/M Mccracken/M McCullough/M Mccullough/M Mcdaniel/M Mcdermott/M Mcdonald/M Mcdonnell/M Mcdougall/M Mcdowell/M McElroy/M Mcelroy/M Mcfadden/M Mcfarland/M Mcgee/M Mcgill/M McGinnis Mcginnis Mcgovern/M McGowan/M Mcgowan/M Mcgrath/M Mcgraw/M Mcgregor/M Mcguire/M McHugh/M Mchugh/M Mcintosh/M Mcintyre/M McJob/MS Mckay/M Mckee/M McKenna/M Mckenna/M Mckenzie/M McKeon/M Mckeon/M Mckesson/M Mckinley/M Mckinney/M Mcknight/M McKusick/M MCL Mclaughlin/M Mclean/M Mcleod/M McMahon/M Mcmahon/M McMansion/MS Mcmillan/M McMullen/M Mcmullen/M McNally/M Mcnally/M Mcnaughton/M Mcneil/M McNulty/M Mcnulty/M Mcpherson/M MDMA MDs mea/H meadery meadowlark/MS meagre mealie mealymouth/D mealymouthed/PY mealymouthedness/S meandrous measurability measureless meatball/S meatman meatmen mebibit/MS mebibyte/MS mecamylamine mech mechanician mechanistically mechanochemistry/M mechanoreceptor/MS mecholyl meclizine mecum medallic medevac medfly/MS Medford/M mediacy mediad mediae mediagenic medial/Y mediant mediascape/MS mediational mediatorial mediatorship mediatory mediatress/S mediatrice mediatrix medicable medicably medicaid medicament/DGS medicamentous medicare medicinable medicolegal medievalise/S medievalism/MS medievalistic/S Medigap/M meditator mediumship medlar/S medroxyprogesterone/M medulla medullary medullated medulloblastoma/MS medusae Medusan medusoid meemies meerschaum mefenamic mefloquine megabuck/MS megacity/MS megacorporation/MS megacycle megadeal/MS megadose/MS megafauna/MS megagamete megagametophyte megahit/MS megakaryocyte megakaryocytic megalith megalithic megaloblast megaloblastic megalomaniacal/Y megalomanic megalopolis megalopolistic megalopolitan megalopolitanism megalopteran megalopterous megamerger/MS megaparsec/MS megaphonic megaplex/MS megapolis megapolitan megaproject/MS megarians megascopic megascopically megasporangium megaspore megasporic megasporogenesis megasporophyll megatonnage/M megavitamin/MS megillah megrim/S Meier/M Meiji mein meiosis meiotic meiotically meister/M meitnerium Melampus melancholia melancholiac melancholic melancholically melanic melanism/M melanist melanistic melanite melanitic melanoblast melanoblastic melanoblastoma melanochroic melanocyte/MS melanogenesis melanoid melanophore melanosis melanosome/MS melanotic melatonin/M melba Melcher/M melic melies meliorator meliorism meliorist melioristic mell melliferous mellifluent/Y mellifluous/PY mellitin mellitus mellophone mellotron/MS melodist melodramatically melodramatist melphalan Melpomene/M meltability meltable meltdown/M meltwater/MS membranal membraneless membranous/Y meme memorably/U memorialist memoriter menadione menarcheal mencken menckenese mendable Mendel/M Mendelian mendicancy/S mendicant/S mendicity/S mendoza menhaden menhir meningeal meninges meningioma meningitic meningococcal meningococcic meninx menisci meniscus/S menominee menopausal menorah Menorca menorrhagia menorrhagic mensal mensch mense menseful menseless menservants menstruous menstruum mensurability mensural mensurational menswear mentalist mentation/S mentee/MS menthol mentholated mentorship mentum Menzies meow/DGMS meperidine mephitic mephitis meprobamate merbromin merc Mercalli/M mercantilism mercantilist mercantilistic mercaptopurine mercery merch merchantable merchantman merchantmen Merck/M mercurate/DGNSX mercurous merganser mergence/S meridional/Y merino meristem meristically meritocrat/MS meriwether merlot/MS meroblastic meroblastically merocrine meromorphic meromyosin merrick merrimac Merritt/M merrymaker merryman merrythought MERS Mersenne/M Mervin/M mescal mesclun mesdames mesdemoiselles meseems mesenteric mesenteron meshwork meshy mesial/Y mesic mesically mesmerically mesmerism/S mesmerist/S mesne mesoblast mesoblastic mesocarp mesocyclone/MS mesoderm mesodermal mesodermic mesomerism mesomorph mesomorphic mesomorphism mesomorphy mesonephric mesonephros mesonic mesopause/MS mesopelagic mesophase/S Mesopotamia mesoscale mesosome/MS mesosphere mesospheric mesothoracic mesothorax mesothorium mesotron mesotronic mesotrophic messaline messiahship messianic messianism messuage/S mestizo mestranol metabole metabolically metabolomics metacarpal metacarpus metacentric metacercaria metachromatic metacognition/M metaethical metaethics metafiction/M metagalactic metagalaxy/MS metagenesis metagenetic metagenetically metagram/MS metalhead/MS metalicity/MS metalinguistic/S metallically metallike metallist/S metallographer metallographic metallographically metallographist metalloidal metallurgist metalware metamathematician metamathematics metamere metameric metamerically metamerism metamorphically metanephric metanephros metaph metaphase/MS metaphysician metaplasia metaplasm metaplasmic metaplastic metaprotein metapsychological metapsychology metasequoia/MS metasilicate/MS metasomatic metasomatically metasomatism metastability metastable metastably metastasis metastatic metastatically metatarsal/Y metatarsus metate metathesis metathetic metathetical/Y metathoracic metazoa metazoal metazoan Metcalf/M metempsychosis metencephalic metencephalon meteorically meteoritical meteorograph meteorographic meteoroidal meteorol meteorologic meteorologicaly metformin methacrylate methadon methadone methamphetamine methanation/M methanolic methaqualone methedrine metheglin methenamine methicillin methinks methionine methodic methodistic methodologist methought methoxychlor methoxyflurane Methuen/M methylal methylamine methylase methylate/DN methylation/M methylator methylcellulose/M methylcholanthrene methyldopa methylic methylnaphthalene methylphenidate methylprednisolone methylxanthine methysergide metical meticulosity metier metis metonym metonymic metonymical/Y metonymy metope metopon metoprolol/M metrazol Metrecal metrication metrist metrological/Y metrologist metrology metronidazole metronomic metronomical/Y metrosexual/MS Mets Metzler/M mewl mezuza mezuzah mezzanine/S mezzotint miasmatic miasmic micaceous micellar micelle/MS Michaelis Michel/M Michele/M miconazole micra microagression/MS microagressor/MS microampere/S microanalyst microanalytical microanatomical microanatomy microarray/MS microbarograph/S microbe/MS microbeam/MS microbeless microbic microbiologic microbiological/Y microbiologist microbiology microbiome/MS microblog/MS microblogger/M microblogging microbrew/MS microburst/MS microbus/MS microcalorimetric microcapsule/MS microcassette/MS microcephalic microcephaly microcircuit/S microcircuitry microcirculation/M microcirculatory microclimate/MS microclimatic microclimatological microclimatologist microclimatology microcline/S micrococcal micrococcus microconsumer microcontroller/MS microcopy/R microcosmic microcosmically microcrystal microcrystalline microcrystallinity microcystin microcyte microcytic microdensitometer/MS microdensitometric microdensitometry microdermabrasion/M microdissection microdomain/S microearthquake/MS microelectrode microelectromechanical microelectronic/S microelectronically microelectrophoresis microelectrophoretic microelectrophoretical/Y microelement/MS microencapsulate/DGNS microenterprise/MS microenvironment/MS microenvironmental microevolution microevolutionary microfarad/S microfauna microfaunal microfibril/MS microfibrillar microfiche/S microfilament/MS microfilaria microfilarial microfine microflash microflora microfloral microform/MS microfossil/M microfungal microfungus microgamete microgametocyte microgram/MS micrograph/MRSZ micrographics microgravity/M microgreen microgroove microhabitat/MS microhardness microimage/MS microinch/MS microinjection/MS microlith microlithic micromachine/MS micromania micromanipulation/MS micromanipulator/MS micromere micrometeorite micrometeoroid/MS micrometeorological micrometeorologist micrometeorology/M micromethod micrometric micrometry micromicrofarad/S micromicron micromini/M microminiature/MS micromole/MS micronuclear micronucleate micronucleus micronutrient/MS microorganic micropaleontologic micropaleontological micropaleontologist micropaleontology microparasite/S microparasitic microparticle/MS microphage microphonic/S microphotograph/R microphotographic microphotography microphotometer/MS microphotometric microphotometrically microphotometry microphyll microphyllous microphysical/Y micropipet micropipette microplankton microplastic/MS micropolitan micropore microporosity microporous microprint microprism/MS microprobe/MS microprogrammable microprogrammer/M microprojection microprojector/MS micropublishing/MS micropulsation/M micropump micropuncture/MS micropylar micropyle microquake/MS microradiograph microradiographic microradiography microreader microrelief microreproduction microRNA microRNA's microsatellite/MS microscale microscopist microsection microseism microseismic microseismicity microsensor/MS microsome/S microspectrophotometer/MS microspectrophotometric microspectrophotometrical/Y microspectrophotometry microsphere microspheric microsporangium microspore microsporic microstate/MS microstructural/Y microstructure/S microsurgery microsurgical microswitch/MS microtechnic microtechnique microtechnology/MS microtiter microtome/S microtonal/Y microtonality microtone/S microtubular microtubule/MS microvascular microvillus microworld/MS micturate/DGS micturition/S midafternoon midbrain midcapacity midcourse midden/S middlebrow/S middlebrowism middorsal middy/S midfield/R midget midgut midline midmost midplane midportion midrash midrashic midrashim midrib midribbed midsemester midsole/MS midsummery midtown midwatch/S midwifery midwing midwintry midwived midwiving mifepristone mig/S mightless mignonette migraine/S migraineur migrainous migrancy migrans migratetic/S migrational migrationist/S migrator migratorial mikado mikhail mikoyan mila milacre milady milanese milch mildewcide/MS mildewproof mildewy mildhearted mildish milepost milesian milfoil/S milia miliaria/S miliarial miliary milieux milinch militance/MS militancy/S militaria militaristic militaristically militaryism/S militiaman milium milkless milklike milkman milkmen milksop milksopping milksoppy milkstone millable millage millboard millcourse milldam millenary/S millennial millerite millesimal/Y millhouse milliammeter/MS milliard milliary millibar millibarn millicron millicurie millicycle millidarcy millieme/S milliequivalent millifarad milligal milligauss millihenry millihertz millihg Millikan millilambert millilux millime millimetric millimicrofarad/S millimicron millimicrosecond millimolar millimolarity millimole milline/R Millington millionairedom millionairess millionary millionfold milliosmol milliphot millipoise millirad milliradian/MS millirem/MS milliroentgen/MS millman millmen millowner millpond/S millrace/S millsite millstream/S Milne milord milquetoast/S milt/R Miltonian Miltonism Miltonist mim MIME mimetism mimical mimicry mimosa min minable minaret/DS minatory minaudière mincy Mindanao/M mineable mineralocorticoid minestrone minesweeping Ming's mingy miniaturist/S miniaturistic minibus/S minicam minicamera minicamp minicar/MS minicartridge minicourse minidisc/MS minikin minilab/MS minim minimalism minimill minipark/MS minipill/MS minischool/MS ministate/MS ministrable ministrant ministration ministroke/MS minitower/MS minitrack minium minke Minneola Minos minot Minot's Minotaur/M minous Minsk/M Minsky/M minster minstrelsy mintage minuscular minutia minutial minx/S miocrystalline mioses miosis miotic MIPS mirabilite miracular miraculism/S miraculist/S mirate/DGNSX mirex Mirfak/M mirky miRNA mirrorlike mirrory mirthful/PY miry misaddress/D misadjustment misadventurous misadvise misaim misalliance misallocate/DGNS misally misanthropically misanthropism misanthropist/S misanthropy misappreciate/N misapprehend/DGS misapprehending/Y misapprehensive/PY misappropriate/NS misarranged misarrangement misarray misarticulate/DGNS misascription misassemble/DGS misassignment misattribution misbecome/G misbeget misbehadden misbeholden misbelief misbelieve/GR misbelieving/Y misbeseem misbestow misbirth misbutton misc miscalculate/GS miscalculator miscall/R miscaption/DGS miscast/GS miscegenational miscellanea miscellaneity miscellanist/S mischance mischannel/DGS mischiefful miscibility miscible misclassify/X miscomprehend miscomprehension misconceit misconceive/DGRS miscontent miscontentment miscook miscopy miscorrect/D miscorrelation/MS miscounsel/D miscreance/S miscreate/NV miscreator misdate misdeal/G misdeem/S misdeliver/D misdelivery misdemean misdescribe misdescription misdescriptive misdial/DGS misdo/GR misdoubt miseducated miseducation misemphases misemphasis misemploy misemployment misericorde mises misesteem misevaluate/DGNS misevaluation/M misfeasance misfeasor misfeed misfile/DGS misfold/DGS misgive/S misgovern misgovernment misguidance mishear mishmash misimpression misimprove misinformative misintelligence misinterpretable misjoinder misknow/S misknowledge mislabel mislay/GS misleared mislike mismachine mismanagement mismarriage mismate misogamic misogamist/S misogamy misogynic misogynistic misologist misology misoneism misophonia misoprostol misorder misorient/DGS mispackage/DGS misperception/S misplay mispleading mispoint misposition/DGS mispraise misprision/S misprize/DGS misprogram/DGS mispunctuate/N misquotation misreckon misrecollect misrecollection misregister misregistration misreport misrepresentative misrule/DGRS missalette missend missense/DGS misshape/S missileer/S missileman/M missilemen/M missilery missilry missiology missionate missort missout misspeak misspend/DGRS misstrike misterm mistful misthink mistime/D mistrain mistranslate/N mistrustful/PY misusage misvalue misventure misvocalization/MS miswrite/GS mitch miterwort miticide/MS mitigator/S mitigatory mitochondria mitochondrion mitogen mitogenesis mitogenetic mitogenic mitoinhibitory mitomycin/MS mitosis mitotic mitotically mitral mitt/DS mittimus mixable mixologist/S mixology mixtape/MS Mizar/M mizuna mizzenmast mizzle/DGS mizzly mlea MN MO moanful/Y mobbish/PY mobbism mobe mobocracy mobocrat mobocratic mocha mochi mockernut mockumentary/MS modacrylic moderationist moderatism moderato moderatorship modicity modificative modiste modulability modulatory moduli Moe/M Moen/M mofongo/M Mogadiscio Moghul mogul mohair Mohammedanism mohm Mohr moil/GR moiling/Y Moiseyev/M moistureless mojito/MS molality molarity moldable molecularity moleskin/S molestation/S molluscan molluscicide/MS molluskan Moloch molotov molto molucca Moluccas moly molybdate molybdic molybdous momental momentaneous Mona/M monachal monachism monadism monandrous monandry monarchal monarchial monarchical/Y monarchism monarchist/S monarchistic Monash monasterial monastical/Y monatomic monde mondegreen/MS mondo mondrian monel moner monestrous monet moneybags moneylender moneylending moneyless moneymake/R moneywort monger/DGS mongo Mongolianism mongolism mongoloid mongrel/PY mongrelism monic monicker moniker monilia moniliasis monish monism monist monistic monistical monition/S monitorial/Y monitorship monitory monitress monkery/S monkeyflower monkeypox/M monkeyshine monkhood Monmouth/M monoacid monoacidic monoamine monoaminergic Monoceros monochasial monochromat monochromatically monochromaticity monochromatism monochromic monochromist monocline monocoque monocracy monocrat monocratic monocrystal/MS monocultural monoculture monocycle monocyclic monocycly monocyte monocytic monodisperse monodist monodrama monodramatic monoecious/Y monoecism monoenergetic monoester monofilament monofuel monogamic monogamist/S monogastric monogenean monogenesis monogenetic monogenic monogenically monogerm/MS monogram/MS monogrammatic monographic monographical monography monogynous monogyny monohull/MS monohybrid monoid monolayer/MS monologuist monomania monomaniac monometallic monometer/MS monomolecular/Y monomorphemic monomorphic monomorphism monomorphous Monongahela/M mononucleotide/MS monophonically monophony monophosphate/MS monophthong monophthongal monophyletic monophyletism monoplane monoploid/MS monopodial/Y monopole/MS monopolist monopolistically monopropellant/MS monopsony monopulse monosaccharide/S monosodium/M monosomic monospecific monostat monostatic monosyllabically monosyllabicity monosymmetric monosymmetry monosynaptic monosynaptically monoterpene monotheist monotheistical/Y monotint monotrematous monotreme monotrichous monotype monotypic monovalent monovular monoxide monozygotic monsoonal monstrance/S montadale montaigne monte Montenegrin/M Monteverdi/M monticule Montmartre/M Montmorency Montrachet/M monumentless monuron mooch/GRS mook moola moolah moonbeam/MS moonbow mooncalf mooneye Moonie/MS moonish/Y moonless moonlet moonquake/MS moonrise moonroof/MS moonscape moonseed moonset moonstone moonstruck moonward moony moorage mopper moppet mor/S morainal morainic moralism moralistically Moran/M morassy moray morbillivirus mordacious/Y mordacity mordancy mordent morehouse morel Moresby/M moresque morganatic morganatically morganite moribundity Morley/M Mornay/M moron moronically moronism moronity morosity morph morphactin morphinic morphinism morpho morphogen/MS Morrill/M Morris Morrissey/M mort mortarboard mortem mortgagor/S mortimer mortise/G mortmain mortuary/MS mosaically mosaicism/M mosaicist moscone moscovium/M Moser/M mosey/DG moshav mosquitoey mossback/D mosslike mot/S motet mothball motherhouse motherless/P mothproof/R motile motility motivic motivity motoneuron motorbike motorboat/GR motorcade/MS motorcyclist motordrome motoric motorically motorless motortruck motorway moulage moulin/S moult Moulton/M mountaintop/MS mountainy mountebank mountebankery mousetrap mousey moussaka mousse mouthbreather/MS mouthbreeder/MS mouthlike mouthpart mouthy/R Mouton movability/A movably/A moveless/PY moviedom moviegoer moviemaker mown moxie Moyer/M Mozillian/MS mozzarella MPAA MPAA's Mpc MRI MRSA Mt MTU mu muciferous mucilaginous/Y muckrake/GR mucolytic mucopeptide mucopolysaccharide mucoprotein/MS mucosa mucous mudbug/MS mudded mudhole/MS mudsill mudstone/S Mueller/M Muenster muezzin muffuletta mufti/S mugged mugger mugho mugwump muhammad Mukden/M mukluk muley muliebrity mullein mullet/S mullion mullite multiage multiagency multiaperture multiatom multiauthor/D multicampus multicarbon multicausal multicavity multicellularity multicenter multichain multichip multiclient multicoated multicollector multicompletion multicountry multicoupler multiculti multicurrency multicycle multiday multideck multidialectal multidisc multidiscipline multielectrode multiemployer multiengine multienzyme multiethnic multifactorial multifactrially multifarious/PY multifilament multiflash multifold multiform multiformity multifront multigenerational multigenic multigerm multigrade multigrid multihit multihomer multihospital multihued multihull/MS multilane/D multilayer/DS multilingualist multilocation multimegawatt multimeter/MS multination multinucleate/D multiorgasmic multipack multipactor multiparameter multiparous multiparticle multipartite multiphase multiphasic multiphastic multiphoton multipicture multiplatinum multiplicable multiplicate/S multipolar multipolarity multipronged multiracial multiracialism multiscreen multisectoral multisegment multisense multisite multiskilled multisource multispecies multispectral multistate multistatic multistemmed multistory multistrand multisystem multitask/DRSZ multitasker/MS multithread/DGS multiton multitowered multiunion multivalence multivalued multivolume/D multiwall multiwarhead multiwavelength mumblecore mummer mummery mumming mump/RS Munchausen/M mundt mung muni munificence munist munroe Muong/M muonic muonium muralist muramic murderee murderess murein muriate murmurous/Y murrain murre murrey murrow muscadine muscarinic muscatel muscly muscularity musculoskeletal musee musette/S museumgoer/MS musicale musique musketeer musketry muskie/RS musky/PRS mussy/PRY mutably mutafacient mutagen mutagenesis mutagenic mutagenically mutagenicity mutandis mutase mutatis muticous mutilator mutine/DG mutinous/PY muttonchops muttony mutualism mutualist mutualistic mutuel muumuu Muzo/M muzzy/PRY Mx mycobacteria mycoflora mycoplasma mycorrhiza mycosis mycotic mycotoxin myel myeline myelofibrosis myeloid myeloma myeloproliferative Mynheer myocarditis myofibril myofilament myoglobin myoinositol myopically myosin myosotis myotic myotome myotonia myotonic Myra/M myriameter/MS myriapod myriopod myristate myrmecological myrrh Mysore mystagogy mythmaker mythmaking mythologer mythologic mythologist mythomania mythomaniac mythopoeic mythopoetic mythopoetical mythos myxovirus mâche Müller/M nabe nacelle nacreous NAD NADH Nadine/M NADP NADPH nagger Nagoya/M Nagy/M naiad Nair/M naira naivety nakamura Nakayama nakfa nakoma naled nalidixic nalorphine naloxone/MS naltrexone namable nandrolone nanny/S nanocomposite nanocrystal nanogram/MS nanomachine/MS nanook nanoparticle/MS nanoscale nanostructure/MS nanotech/MS nanotechnology/MS nanotesla Nantua/M napa napalm nape/S napery naphthalene naphthalenic naphthene naphthenic naphthol napless napper nappy/RS naproxen Narbonne/M narc narcism narcissi narcissism narcist narco/S narcolepsy narcoleptic narcotically Narragansett/M narrational narratology/M narrowband narrowcast/GS narrowminded narwal narwhal/MS nascence/A nascency nasogastric nastic natant natation/S natatorial natatorium natatory nationalistically nativism nativist nativistic natriuresis natriuretic naturalistically naturam naturopath nauseant nauseous/PY nauseum naut navaho navaid nave/S navicular navigability navigably navona navtas naw nawab nazify/DGNSX naïf NC NCO NDA NE neath neatnik/MS nebbish Nebuchadnezzar/M nebulosity necessitarian necessitarianism necessitous/PY neckerchief necrological necrologist/S necrology necromantically necrophagia necrophagous necrophagy necrophilia necrophilic necrophilism necropolis necroses nectareous nectarine Ned/M needlelike needlestick/MS needlewoman needlewomen nefarious/PY Neff/M negational negativist/S negativistic negaton negatron neglectful/PY negligibility negligibly negotiability negotiator/S negotiatory negrophile negrophilism Nehru/M Neil/M Nell/M Nellie/M nelly/MS Nelsen/M nematicidal nematicide nematocyst nemeses nemophila neo neoanthropic neoclassicism neoclassicist neocosmic neofascism neogenesis neogenetic neoglycolipid/S neoliberal/MS neoliberalism neolith neological neologistic neology neonate neonatology/M neonic neonicotinoid/MS neoorthodox neoorthodoxy neoplasia neoplasm neoplastic neoplasticism/M neoplasticist/S neorealism/M neostigmine neotenic neoteny neoteric neotropics neotype nepenthe nepenthean nephanalysis nepheline nephelinic nephelinite nephelinitic nephelite nephelometer/MS nephelometric nephelometry nephometer/MS nephoscope nephrectomy nephron nephrotic nepotism nepotist/S nepotistic nereid nerts nervation/S nervosity nescience/S nescient Ness nethermost netkeeper netless netlike netminder/MS netroots netter netty neumatic neuralgic neuraminidase neuritic neuroactive neuroanatomic neuroanotomy neuroblastoma neurochemistry neurocirculatory neuroendocrine neuroendocrinology neuroepithelial neurofibril neurofibrillary neurogenic neurogenically neuroglia neuroglial neurohormonal neurohormone/MS neurohumor neuroimage/DGS neuroimaging/M neuroleptic neuronic neuropathic neuropathically neuropathy/MS neuropeptide/MS neuropharmacology/M neuroplasticity/M neuroradiology/M neuroscience/M neurosecretion/MS neurosensory neurospora neurosurgeon neurosurgery neurosurgical neurotically neuroticism neurotoxic neurotoxicity neurotoxin neurotransmission/MS neurotropic neurotypical neuston neutercane neutralistic neutronium neutrophil/S neutrophile neutrophilic neutrophilis Neva/M neve/Z nevermore Nevins nevirapine nevus newb/MS Newbold/M newbury newfangled/P newish newsagent/S newsbreak/MS newsie/MRS newsless newsmagazine newsmonger newspeople/M newsperson/M newsprint newsroom newsy/PRS ngultrum/MS Nguyen/M ngwee/MS NH niacin niacinamide/MS nialamide/MS Niamey/M nib/S Nibelung nibelungenlied nicad/MS niccolo Nicholls nickelic nickeliferous nickelodeon nickelous nicklaus nicknameless Nicosia/M nicotinamide nicotinic nidification nidifugous nietzschean nifedipine Niger/M nigger nightclothes nightclubber nightglow nightie/S nightlong nightscope/MS nightshade nightside nightstand nightstick nighttide nightwalker nighty/S NIH nihilianism nihilistically nihility nihonium/M nijinsky Nikko/M Nikolai/M nill nilmanifold nimbostratus NIMH nimiety nimming nincompoop nincompoopery ninebark ninepin/S ninetyfold ninetysomething/MS Nineveh ninny/S ninnyhammer niobate nipper/S nippy/PRY niqab nisei/S nite nitery nitid nitinol nitrator nitrify/GNX nitro/S nitrobenzene nitrocellulose nitrocellulosic nitrofuran nitrogenase nitroglycerin nitroparaffin nitrosamine nitrosoamine nitwit nitwitted nitwittery niña NJ NK NM NMDA NMR NNE NNW nobble/DG nobby/R noblewoman nocebo nocent noces nociceptive nock/G noctambulation noctambulism noctambulist noctilucent nocturn nocuous/Y nodality nodder noddle noddy/S nodi nodical nodose nodosity nodulation nodus noes Noetherian noetic nog noggin nogging nohow noir noisome/PY nol Nolan/M Noll/M nolo noma nomadism nomenclator nomenclatorial nomenclatural nomic nomina nominalism nominalist nominalistic nominator/S nomogram/MS nomograph/R nomographic nomographically nomography/S nomological nomology nomothetic nonaccrual nonacknowledgment/MS nonactor/MS nonaerosol/MS nonage nonagenarian nonagon nonallelic nonallergenic nonambiguous nonantibiotic nonantigenic nonarchitect/MS nonart nonaspirin nonautomated nonautomatic nonbank/G nonbarbiturate nonbaryonic nonbehavioral nonbiodegradable nonblack nonbonded nonbonding nonbook nonbroadcast nonbuilding noncalcareous noncarcinogen/MS noncareer/MS nonce noncellulosic nonchalance noncharismatic noncharitable noncoding noncoital noncola noncolorfast noncom noncomedogenic noncomputer nonconcern nonconclusion/MS nonconcurrence nonconcurrency noncondensing nonconducting nonconductor/S nonconfidence nonconform/GR nonconformable nonconformably nonconformance nonconformism nonconformity nonconfrontational nonconstruction noncontraceptive noncooperation noncooperationist noncooperative noncooperator noncore noncount noncountry/MS noncrossing noncurrent nondance nondeductibility nondeductible nondeforming nondegenerate nondemocratic nondepletable nondestructive nondeviant nondiapausing nondirectional nondirective nondisjunction nondisjunctional nondistinctive nondivided nondominant nondormant nondramatic nondriver/MS nondrying noneconomist nonelectrolyte nonelectronic nonentity/S nonesuch noneuclidean nonevidence nonexecutive/MS nonfat nonfeasance nonfictional nonfigurative nonfinancial nonfissionable nonflammable nonflowering nonfluency nonfossil/MS nonfragmenting nongay nonglamorous nongonococcal nongovernment nongovernmental nonheme nonhero nonheterosexual nonhistone nonhomologous nonhomosexual nonhormonal nonideological nonillion nonimage nonimpact nonimpinging noninductive nonindustrialized nonindustry noninjury noninsecticidal noninteractive noninterlaced nonintersecting nonintervention noninterventionist noninverting noninvolvement nonjoinder nonjoiner nonjuring nonjuror nonkin nonlabor nonleaded nonlinguist nonliterate nonloaded nonmainstream nonmajor nonmanagement nonmatching nonmetal nonmetaphorical nonmetro nonminority nonmonetarist nonmoral nonmultiple nonnetwork nonnovel nonnucleated nonobjective nonobjectivism nonobjectivist nonobjectivity nonobservance nonoccurrence nonohmic nonoptimal nonorgasmic nonoxynol nonparallel nonparametric/S nonpareil nonparticipant nonparticipating nonparticipation nonpartisanship nonpast nonpaternity nonpathogenic nonpermanent nonpermissive nonpersonal nonphonemic nonplus/S nonpoint nonpolar nonporous nonpositive nonpossession nonpossessor nonprint/G nonproblem nonproducer nonproductive/PY nonprofessional/Y nonprofessorial nonprofitable nonprogressive nonpros nonprossed nonprossing nonprotein nonpsychiatrist/MS nonpsychoactive nonquantifiable nonreactive nonreader nonrealistic nonreclosing nonrecombinant nonrecording nonrecyclable nonredundant nonregulation nonreimbursable nonrelativistic nonreligious nonremovable nonrenewable nonrepresentational nonrepresentationalism nonrepresentative nonresidence nonresidency nonresistant nonresponder/MS nonrestraint nonrestricted nonrestrictive nonretractable nonreturnable nonrigid nonscheduled nonschizophrenic nonscientific nonseasonal nonsecretor nonsecure nonsegregated nonsegregation nonself nonsentence/MS nonshrink nonsignificant/Y nonskid nonskier/MS nonslip nonsocial nonspecific nonspeech nonsporting nonsteady nonsteroidal nonstory nonsupport nonsyllabic nonsynchronous nonsystem nontarget nontemporal nontenure nonthermal nontitle nontonal nontotalitarian nonunion nonuse/R nonvascular nonvector nonviable nonviewer/MS nonvintage nonviolence nonviral nonvolatile nonword nonworker nonwoven noob/MS noogie noosphere nootropic Nora/M noradrenergic Nordhoff/M Nordic Nordstrom/M Noreen/M norepinephrine norethindrone Norgay/M normotensive norovirus northeasternmost northeastward/S Northridge/M Northrop/M Northrup/M northwestward/S nortriptyline nosebag/MS nosegay noseguard/MS nosepiece nosewheel/MS nosey/G nosh/R nosologic nosological/Y nosology Nostrand/M nostrum nota notability notarial/Y notarius notchback/MS notecase noteless notepaper notional/Y notionality notocord nougat nouncing nous Nov novaculite novae Novak/M novelette novelettish novelistic novella novelle novemdecillion novena novobiocin novocaine Novosibirsk/M nowaday noway/S nowhither nowise noyes NRC NSAID NTIS nu nub nubber/MS nubbin nubble/S nubbly Nubia/M nubility nucellar nucelli nucellus nuchal nucleant nuclease nucleator nuclein nucleocapsid nucleoid nucleolar nucleon/MS nucleonic/S nucleophile nucleophilic nucleophilically nucleophilicity nucleoplasm nucleoplasmatic nucleoplasmic nucleoprotein nucleoside nucleosome nucleosynthesis nucleotidase nuclidic nudibranch nugent nullificationist nulliparous Nulth numberable numbskull numero numia numis numismatically nummular numskull nunchaku nunchuck/MS nunciation nunciature nuncupate/NV nunes nunnery nuovo nuptiality Nuristani nursemaid nurserymaid nurseryman nursling nurtural nurturance nurturant nutational nuthatch nutlike nutraceutical nutria nutriment nutso nutted nutting Nuu nux Nuyorican NV NVRAM NW NY NYC nymphal nymphalid nymphet nymphette nympholepsy nympholept nymphomaniacal Nynorsk Nyquist/M nystagmic nystagmus nystatin NYT NYU o'er O'Neill/M O'odham oafish/PY oakmoss oarsman oarsmanship oatcake/MS obbligato obcordate obeah obeisance obesogenic obi objectionably objectivism objectivist objectivistic objectless/P objet objurgate/DGNSX objurgatory oblast obligator obligee obligor/S obliquity obliterator obliviated obliviates obliviating oblongatal oblongated oblongish obloquious obloquy obnubilate/DGNSX obovate obovoid obscurant obscurantic obscurantism obscurantist obscuration/S obsessional/Y obsolesce obstetric/S obstetrical/Y obstetrician/MS obstreperous/PY obstructionism obstructionistic obstructor obstruent obtainability obtainment obtect/D obtest obtestation obtrusion obtund obturate/DGNS obturator obvert occas occiput Occitan occludent occlusal occultation/S occultism occultist occurrent oceana oceanarium oceanfront oceangoing Oceania oceanographer/MS oceanographical/Y oceanologic oceanological/Y oceanologist oceanology ocellar ocellate/DN ocelli ocellus och oche ochlocracy ochlocrat ochlocratic ochlocratical ocicat oconomowoc ocotillo Oct octadecyl octahedra octahedral/Y octameter/MS octandrious octant/MS octapeptide octodecillion octodecimo octoploid octoploidy octopod octopodan octopodous octosyllabic octosyllable/MS octothorp/MS octroi oculomotor odalisque oddball/MS oddment/MS oddsmaker/MS odea odeum odic odilo Odin/M odograph odontologist odontology odorant oeillade oenology oenomel oersted oeuvre/S offcast officialese officialism/MS officiant/MS officiary offish/PY offprint/S offsaddle offscour/G offscreen offside ofttimes oganesson ogeographically ogle/GRS ogre ogreish ogress ohmage ohmically oilcan oilskin oilstone oink Ojibwa okamoto okapi okeydoke okra olallieberry olasticism Olav/M oldfangled oldie oldish Olduvai oleaginous/PY oleandomycin oleaster oleate olefin oleg oleophilic oleophobic olestra olfaction/S olfactive olfactology olfactometer/MS olfactory/Y oligarch oligarchical Oligocene oligochaete oligoclase oligodendrocyte oligodendroglia oligomer/MS oligophagous oligopsony oligosaccharide/MS Olin/M olingo Olivier/M olivine ollie/MS olympiad om/R ombudsman/M ombudsperson/MS omelette omental omentum omeprazole omissible ommatidial ommission omnicide omnidirectional omnifarious/PY omnificence/S omnificent omnify omnipotency omnipresence omnirange omnisciency omnisexual omnist omnivorous/PY omphaloskepsis onanistic onboard/DGS oncogene/MS oncogenesis oncogenic onefold oneiric oneirocritic oneirocritical/Y oneiromancy onesie/MS onionskin onium onload onlooking onomastic/S onomatology onomatopoeia/M onomatopoeic Onondaga/M onsetting onshore onside onstream ontically ontogenesis ontogenetic ontogenetically ontologist oocyte oomph oop oozy/R op/GS opalescence/S opaline openability openable/U openendedness openhanded/PY openhearted/PY openmouthed/PY openwork operability operably operatically operationalism/M operationalist operationalistic operationism/M operationist opercular operculate/D operculum operettist operon ophidian ophiology ophiophagous ophite ophitic Ophiucus ophthalmologically ophthalmoscope ophthalmoscopic ophthalmoscopical ophthalmoscopy opinionate/V opinionative/PY opportunist opposability opposeless opprobrious/PY oppugn/R opsin opsonic opsonin optation/MS optative/Y optician optima optimistical optimo optoacoustic optoelectronics optoisolate optokinetic optometrical opuntia opuscule opusculum ora orach orache oracular/Y oracularity oracy orality orangeade orangeroot orangery orangewood orangey orangish orangoutan orangy oratio oratoric orbicular/Y orbicularity orbiculate/Y orca/MS orch orchardist orchardman orchesis orchestrational orchestrator orchestre orchis ordainment orderless ordinand ordines ordure orecchiette Oresteia/M Orestes organdie organelle organicism organicist organismal organismically organochlorine/M organophosphate/M organophosphorus orgasmic orgastic orgiastically orgone orgulous orientable orientalism orientalist orientate/DGS orientational/Y orienteer/DGS orificial oriflamme origanum originalism/M Orin Orinoco Orion/M orismological orismology orison Orkney/M Orly orney ornith ornithic ornithine ornithology/M ornithosis orogenic orogeny orographical/Y Orono/M orotund orotundity Orphically Orr/M ort/S orthant orthicon ortho orthocephalic orthocephalous orthocephaly orthochromatic orthoclase orthoclastic orthodontia orthoepic orthoepical/Y orthoepist orthoepy orthogenesis orthogenetic orthogenetically orthogenic orthognathism orthognathous orthognathy orthograde orthographical/Y orthomolecular orthomyxovirus orthopsychiatric orthopsychiatrist orthopsychiatry/M orthopteran orthopterist orthopteroid orthopteron orthorhombic orthoscope/S orthoscopic orthosis orthotic/S orthotist orthotropic orthotropically orthotropism orthotropous ortolan Orville/M oryx/S orzae oscillational oscillogram/MS oscillograph oscillographic oscillographically oscillography oscilloscopic oscilloscopically oscine osculate/DGNSX osculatory osculum OSF/M Osgood/M osier Osiris osmatic osmeterium osmic osmiridium osmol osmolal osmolality/M osmolar osmolarity/M osmometer/MS osmometric osmometry osmoregulation/M osmoregulatory osmose/DG osmotically osmous osmunda oso osram osric ossicle ossicular ossiculate/D ossificatory ossifrage ossuary osteitis ostensive/Y ostensorium ostentation/S osteoarthritic osteoarthritis osteoblast osteoblastic osteoclast osteoclastic osteocyte osteogenic osteoid osteological/Y osteologist osteoma osteopathically osteophyte osteophytic osteoplastic osteoplasty ostinati/M ostinato/M ostomy ostracod otherguess otherwhere otherwhile/S otiose Otis ototoxic Ott/M ouabain Ouagadougou ouan oubliette ough ouguiya oui Ouroboros outachieve/DGS outbalance outbid outbound outbrave outbreed/G outby outbye outcaste outcross outdazzle outdeliver/DGS outdistance outdoorsman outdoorsmanship outdoorsy outdrag/DGS outdraw outercoat/MS outfall outfight/G outfitter outfitting outflank/R outfoot outgas outgeneral outgiving outgo outgoes outgross/DGS outguess outgun outhaul outhustle/DGS outie/MS outmatch outmode/G outmost outpace/D outplay outpoint outport/R outpull/DGS outpunch/DGS outputted outrace outrance outrange outrank outrebound/DGS outreproduce/DGS outride/R outrival outro outscore outsell outsert outshoot outshout outsight outsit outsize outskirt outsleep outslick outsmell outsoar outsole outsource/DGS outspeak outspeed outspend outspent outspin outsprint/DGS outstand outstare outstart outstay outstretch outtalk outthink outturn outwear outwork ouvre ouzel ovarial ovarian ovariectomy ovariole ovariotomy ovaritis ovenbird/S overabundant overact overaction overactivity overarm overarousal/MS overarrange/DGS overarticulate/DGS overawe overbalance overbear overbearance overbeat overbid overbill/DGS overbite overblew overblouse/MS overblow/GS overbought overbreed/DGS overbuild overbuy overcall/DGS overcapacity overcareful/Y overcautious overcharge overclass overcommit/DGS overcommunicate/DGS overcompensate/N overcompensatory overconfidence overcurrent/S overdemanding overdesign/DGS overdetermination overdetermined overdevelop overdevelopment overdiagnosis overdominance overdominant overdramatic/S overdress overdrive overengineer/DGS overet overexcite overexcitement overexposure overextrapolate/DGS overfastidious overfed overfish overfleshed overflight overflown overfly overfulfill/DGS overfund/DGS overgarment overglaze overgraze overgrow/H overharvest/DGS overhomogenize/DGS overhype/DGS overidentify/DGS overily overindulge overindulgence overindulgent overinform/DGS overissue/DGS overjudgment/MS overleap overlearn overlength overlie overlong overlord overlordship overman overmaster overmatch overmuch overmuscled overoptimism overoptimist overoptimistic overoptimistically overpackage/DGS overpay overpersuade overpersuasion overplaid overplay overplus overpopulate overpraise overpredict/DGS overprescribe/DGS overprescription/M overprize overproduce/DGS overpronounce overproof overproportion overprotect overrate overreact overreaction overrefine overrefinement overreport/DGS overrepresent overripe oversanguine overscale/DGS overschedule/DGS oversea overseen oversell/GS oversensitive/P overserve/DGS oversexed overshoe oversimplistic overskirt overslaugh overslip oversold oversoul overspeculate/N overspeed overspend/GRS overspread oversteepen oversteer/DGS overstep/S overstock overstore/DGS overstory overstrain overstrew overstride overstructure/DGS overstrung overstuff/DGS oversubscribe/GS oversubscription oversubtle oversubtlety overtaxation overthrust overtop overtrade overtrain overtrick overtrump overvalue overvoltage/S overwatch overwear overweary overween/G overweigh overwind overwinter overwithhold/DGS overword overwrought ovicidal ovicide oviduct oviductal ovine oviparous/PY oviposit oviposition ovipositional ovipositor oviraptor/MS ovo ovoid ovoidal ovonic ovotestis ovoviviparous/PY ovular ovulate/DGNSX ovule ow owerless owie/MS owlet oxacillin/M oxalacetate oxalacetic oxalis oxaloacetate oxalosuccinic oxazepam oxazine oxblood oxbow Oxbridge/M oxeye oxheart oxidase oxidasic oxidic oxidoreductase oximeter/MS oxo oxonian oxtail oxycodone/M Oxycontin/M oxygenator oxygenic oxygenicity oxygenless oxyhemoglobin oxyhydrogen oxyphenbutazone/M oxyphil oxyphile oxyphilic oxysome oxytetracycline/M oxytocin/MS oystchers oysterman oystermen oz ozagen ozagenians ozocerite ozokerite ozonic ozonide ozoniferous ozonosphere/MS ozonous ozzie pa'anga PABA PABA's PABAs pacem pacemaking pacesetter pachuco pachyderm pachydermal pachydermatous/Y pachygyria/M pachysandra pachytene pacifiable pacifically pacificator/S pacificatory pacificist pacifistically packability packable packboard/MS packhorse packinghouse packman packsack packsaddle packthread packwood paclitaxel paddleball/MS paddleboard/MS padrone paedomorphosis paella paeon paestum paganini paganish pageboy paginal pailful paillard painfuller painfullest paisley paix paladin palaeoanthropic palaeontology/M palaestra palanquin palasts palatably palatial/PY palatinate palaver/DG palazzo/S paleface Paleo paleoanthropology/M paleoconservative/MS paleoecologic paleoecological paleoecologist paleoecology paleogeographic paleogeographical/Y paleogeography paleographer paleographic paleographical/Y paleography paleolith/S paleologist/S paleomagnetics paleontologic paleontological paleontology paleozoological paleozoology palingenesis palingenetic palinode palish palladia Palladian pallbearer pallette pallial palliasse palliator pallidotomy pallium pallor/MS palmar palmary palmate/DNY palmistry palmitate palmlike palmy/R Palo palomino palooka/MS palp palpability palpal palpate/DGNSX palpebral palpi palpitant palpitate/DGS palter/DGR paludal paludism palynologic palynological/Y palynologist palynology pampa/S pamphleteer/S panacean panache Panamanian panatela panchax panchromatic pancratium pancreozymin pancytopenia Pandanus pandect/S pandied pandit panegyric panegyrical/Y panegyrist panencephalitis panetela panetella panful Pangaea pangenesis pangenetic pangola pangolin panhandle/DGRS panhuman panicking panicle panleukopenia panmictic pannier panoramically panpipe/S pansexual pantalets pantalettes pantaloon/S pantas pantheistic pantheistical/Y pantie pantile/D pantisocracy/S pantisocratic pantisocratical pantisocratist pantograph pantographic pantomimic pantomimist pantothenate pantothenic pantropic pantryman pantrymen pantsuit pantywaist panza panzer/MS pao Paoli/M papacy Papanicolaou papasan papaw paperbound paperboy/S paperhanger paperhanging papermaker/S papermaking papiers papilla papillae papillate/D papilloma papillomatous papillomavirus papillon papillose papillote papist papistry papovavirus pappose Papua/M para parabiosis parabiotic parabiotically parabolically parachutic parachutist paracrine paradigmatical paradisaic paradisaical/Y paradisal paradisiac paradisiacal/Y paraffinic paragenesis paragenetic paragenetically paraginase paraglider/MS paragonite paragraphic Paraguayan/MS parainfluenza/MS parajournalism/M paralanguage/M paralinguistic/S parallactic paralogism paralytic paramagnetically paramagnetism paramecium paramedic parament parametrical paramnesia paramountcy paramour Paramus paramyxovirus paranormality paranymph paraoxon paraph paraphilia paraphrasable paraphrastic paraphrastically paraphysis paraplegia parapodial parapodium paraquat pararescue/DGMS pararosaniline parasang paraselene paraselenic parasexual/MS parasexuality parasitical/Y parasiticidal parasiticide parasitism parasympathomimetic parasynthesis parasynthetic paratactic paratactical/Y parataxis parathion parathormone/MS parathyroid parathyroidectomy paratransit/MS paratyphoid paravane paraxial parbuckle/DG parcenary parcener pard pardner/S paregoric pareidolia parella parenchyma parenchymal parenteral/Y Pareto/M pareve parfait parfum pargyline parian paries parietal parietes parioli parisina parisology Parke/M Parkinsonian parkinsonism parkour/M parlante parle/G parlous/Y Parmesan parmigiana parmigiano parodic parodist parodistic parol paronomasia paronomastic paronym paronymous parotid parotitis parous paroxetine paroxysm paroxysmal paroxytone parquetry Parr/MS parrakeet parricidal parricide parrillo parring parris Parsi Parsifal/M partan parterre parthenocarpic parthenocarpically parthenocarpy parthenogenesis parthenogenetic parthenogenetically Parthia parti partible participational participator particularism particularist partisanship partite/V partitionist partitive/Y partizan Parton/M parturient parturition partway parure paruresis parve parvenue parvis parvise parvo parvovirus paschal pase pasha Paso passably passarine passavant passbook/MS passel passementerie passerine passible passim passional passionless passivate/DGNSX passivism passivist/S passkey pastelist pastellist pastern/S pasternak pastil pastilles pastis pastitsio pastlle pastorale pastoralism pastoralist pastorate pastorium pastorship pastrami pasturage pastureland pataca patagonians patchboard/MS patchouli patchouly pate patella/S patellae patellar patelliform patency patentability patentor paterfamilias paternalist Paterson/M pathbreaking pathetical/Y pathfinder pathfinding pathogenetic pathogenically pathogenicity pathognomonic pathol pathometer/MS pathomorphologic pathomorphological pathomorphology pathophysiologic pathophysiological pathophysiology patible patil patinae patine/DG patisseries patois patresfamilias patriarchate patriciate/S patricidal patricide patrilineage patrilineal patriotically patristical patroller patronal patronne patronymic patroon patten Patti/M pattie patulous/PY patzer Paulo/M paulownia Paulus pauperism pavanne pavese pavid Pavlovian pawl pawnbroker/MS pawnbroking pawnor pawpaw pax paxam paxton payee paygrade/S payola payor Paz PBB peaceably peacekeeper peacekeeping peacemake peacenik/MS peachy/R peacockish peafowl peahen Peale/M pealike pearlescence pearlescent pearlite pearlitic pearlstone peascod Pease peasecod peashooter peaty pebbly pebibit/MS pebibyte/MS pec/MS peccable peccadillo peccancy peccant/Y peccavi pecky pectate pectic pectin pectinaceous pectinate/DN pectines pectinesterase pectoralis peculator ped/MNS pedalfer pedalferic pedantically peddlery pederast/S pederastic pederasty pedestrianism pedi/MS pediatrist pedicab pedicel pedicellate pedicle/D pediculate pediculosis pediculous pedicure pedicurist pedimental pedipalp pedlar pedlary pedocal pedocalic pedogenesis pedogenetic pedogenic pedologic pedological pedologist pedology pedometer/MS pedophile pedophilia pedophiliac pedophilic pedorthics pee peekaboo peelable peeress peeter peewee pei peignoir Peiping pekoe pelage pelagic pellagrin pellagrous pelletal pellitory pellucid/PY pellucidity Peloponnese peloria peloric pelorus pelota/S peloton/MS peltate/Y peltry/S pemberton Pembroke/M pemican pemoline penates pendency pendent/VY pendleton pendular pendulous/PY Penelope/M penetrability penetrable/P penetrably penetralia penetrance/S penetrant/S penetrometer/MS pengally pengö Penh penholder penicillamine penicillate/NY penicillinase penicillium penile peninsular penitence/S penitency penlight penmanship penna pennaceous pennae pennate pennis pennyroyal penological penologist penology Penrose pensile pensionable pensionary pensionless pentacle/S pentad pentadactyl pentadactylism pentaerythritol Pentagonese/M pentagram/MS pentagraph pentahedral pentahedron pentamerous pentameter pentamidine pentane pentangle/S pentapeptide pentaploid/MS pentaploidy pentaquin pentaquine pentarchy Pentateuch pentathlete pentathlon pentatonic pentavalent pentazocine pentobarbital pentobarbitone pentode/S pentomic pentosan pentylenetetrazol penuche penult penultima penumbra penumbral peonage peones peoplehood peopleless peperoncino pepita pepperminty peppertree pepsico pepsin pepsinogen peptic peptidoglycan peptone peradventure perambulate/DGNSX perambulator perambulatory percale percaline perceptibility perceptional perceptivity perchlorate percipience percipient Percival/M percoidean percptibly percuss perdurability perdurable perdurably pere peregrinate/DGNSX peregrine perennate/DGNSX perfecta perfectivity perfecto perfervid perfluorocarbon/M perfoliate/N perforator performable performative performatory perfuse/DGV perfusionist/MS pergola pericardial pericarditis pericardium pericarp perichondral perichondrial perichondrium Periclean pericranial pericranium pericycle pericyclic pericynthion periderm peridermal peridermic peridia peridium peridot peridotic peridotite peridotitic perigean perigee/M perigynous perigyny perihelial perikaryal perikaryon Perilla perilune perilymph perimenopause perimorph perimysium perinatal perinatology perineum periodontics periodontist perioneum perioperative periotic peripatecically peripatetically peripateticism peripatus peripety peripherad periphrasis periphrastically periphytic periphyton periplasm periplast periscopic perishability peritectic peritonitis peritrichous/Y perjurious/Y Perle/M perlite perlitic perlocutionary perm permaculture permafrost permeability permeably permeance permease permethrin Permian permissable permitter permittivity permutational peroneal peroral/Y perorate/N perorational peroxidase peroxidic peroxisomal peroxisome peroxyacetyl perp/MS perpend perpendicularity perpetuator perphenazine Perseid Persephone/M perseverant perseveration/S persistency persnickety personalism personalist personalistic personate/DGNSV personator personhood perspicacity perspiratory persuasible pertinacity pertinency perturbable perturbational perturbative perversity pervious/P pescatarian pesewa peso/S pessary pessimal pessimistically pessimum peste pestiferous/PY petaflop/M petahertz petallike petaloid petalous petard petasos petasus Peters petiolate/D petiole/D petiolule petit petitionary PETN petrale petrarchan petrel petrichor petrifaction petrochemistry petrogenesis petrogenetic petrographer petrographic petrographical/Y petrography petrolatum petrologic petrological/Y petrologist petronel petrosal petrous pettibone pettifog pettifogger pettifoggery petulancy pewaukee pewee PFD's PFDs ph/N phaeton phage phagocytosis phalanges phalanstery phalarope phalli phallic phallically phallicism phallocratic phallus/S phanerogam phanerogamic phanerogamous phantasm phantasma phantasmagoria phantasmagoric phantasmal phantasmic phantomlike pharaoh pharaonic pharisaic pharisaical/PY pharisaism pharisee pharmacodynamic/S pharmacodynamically pharmacogenetic/S pharmacogenomics pharmacognostic pharmacognostical pharmacognosy pharmacokinetic/S pharmacologic pharmacologist pharmacopoeia pharnges pharos pharyngitis phasedown phasic phasmid phatic PHB/M PHBs phd Phelps phencyclidine phenetic/S phenetidine phenetole phenmetrazine phenobarbital phenobarbitone phenocain phenocopy/M phenocryst phenolate/D phenological/Y phenology phenomenalism phenomenalist phenomenalistic phenomenalistically phenomenologist phenothiazine phenotypic phenotypical/Y phenoxide phentermine phentolamine phenylalanine phenylbutazone phenylene phenylephrine phenylic phenylketonuria phenylpropanolamine phenytoin pheo pheochromocytoma pheresis pheromone/MS phial philanthropical/Y philanthropoid philatelic philatelically philatelist philately philco philippe philippians Phillip/M phillumenist philogyny philol philologist philoprogenitive/P philter philtre Phipps phlebitis phlebotomist/MS phlebotomy phlegmatic phlegmatically phlegmy phloem phlogistic phlogiston phobia Phobos Phoenicia/M phon phonate/DGNS phonematic phonemically phonestheme phonetical phonetician phoney/S phonically phonocardiogram/MS phonocardiograph phonocardiographic phonocardiography phonogram/MS phonogramic phonogramically phonogrammic phonogrammically phonographic phonographically phonography phonolite phonolitic phonologial phonologist phonon/MS phonoreception phonoreceptor phonorecord phonos phonotactics phorate phosgene phosphatase phosphatic phosphatide phosphatidic phosphatidyl phosphatidylcholine phosphatidylethanolamine phosphene phosphite phosphocreatine phosphoenolpyruvate phosphoenolpyruvic phosphofructokinase phosphoglucomutase phosphoglyceraldehyde phosphokinase phospholipase phospholipid/S phosphomonoesterase phosphore phosphorescence phosphoreted phosphoretted phosphorism phosphorite phosphoritic phosphorolysis phosphorolytic phosphorous phosphoryl phosphorylase phosphorylate/NV photic photically photoaging/M photoautotrophic photoautotrophically photobiologic photobiological photobiologist photobiology/M photobiotic photobomb/DGRS photocathode/MS photocell photochemist photochemistry photochromic photochromism photocoagulation/M photocompose/DGRS photocomposition/M photoconductive photoconductivity photocurrent photodecomposition photodegradable photodetector photodiode/MS photodisintegrate/N photodisintegration/M photodissociation photodissociative photodrama photoduplicate/N photodynamic/S photodynamically photoelectric photoelectrically photoelectron photoemission photoemissive photoengrave/GR photoflash/MS photoflood/MS photofluorogram/MS photofluorographic photofluorography photogene photogenically photogeologic photogeological photogeology/M photogram/MS photogrammetric photogrammetrist photogrammetry photogravure photoheliograph photoinduced photoinduction photoinductive photointerpretation/M photojournalism photojournalistic photokinesis photokinetic photolithograph/R photolithographic photolithographically photolithography photolytically photomap photomask/MS photomechanical/Y photometer/MS photometrically photomicrgraphical photomicrogram/MS photomicrographic photomicroscope photomicroscopic photomontage/MS photomorphogenesis photomorphogenic photomosaic/MS photomultiplier/MS photomural/MS photonegative photonic/S photonuclear photooxidation photooxidative photoperiod/MS photoperiodic photoperiodically photoperiodism photophase/MS photophilic photophilous photophily photophobia photophobic photophore photophosphorylation/M photopia photoplay photopolymer photopositive photoprint photoproduct/MS photoproduction photoreaction photoreactivation/M photoreception photoreceptive photoreceptor photoreconnaissance/MS photorecord/R photoreduction photorefractive photoresist/M photoresistance photorespiration/M photosensitivity/M photoset/MS photosetter photosphere photospheric photostat photostatic photosynthesis photosynthetic photosynthetically photosystem/MS phototactic phototactically phototaxis phototelegraphy phototoxic phototransistor/MS phototropic phototropically phototropism phototube/MS phototypesetter phototypesetting phototypographic phototypography photovoltaic PHP/M phrasally phrasemaker phrasemonger/G phraseogram/MS phraseograph phraseological/Y phraseologist phratry/S phreak/DGRS phreaker/M phreatic phreatophyte phreatophytic phrenetic phrenic phrenological/Y phrenologist phrenology phrensy phthalate phthalocyanine phycologist phycology phycomycete/S Phyfe phylactery phylae phylar phyle phylesis phyletic phyllary phylloclade phyllode phyllodium phylloid phyllome phyllomic phyllophagous phyllopod phylogenetic physiatrics physiatrist/M physiatry physicalism/M physicalist physicalistic physicality physicalize physicked physicking physicochemically physiocratic physiognomic physiognomical/Y physiographer physiographic physiographical physiography physiol physiopathologic physiopathological physiopathology physostigmine phytane phytoalexin phytochemical/Y phytochemist phytochemistry phytochrome/MS phytoestrogen phytoflagellate phytogenic phytogeographic phytogeographical/Y phytogeography phytography phytohemagglutinin phytohormone/MS phytolith/S phytological/Y phytology phyton phytonic phytonutrient/MS phytopathogen phytopathogenic phytopathologic phytopathological phytopathology phytophagous phytophagy phytoplankter phytoplanktonic phytoplasma/MS phytoremediation/M phytosociological/Y phytosociologist phytosociology phytosterol phytotoxic phytotoxicity PHz pial pianistically pianoforte/MS pias piassava piazze pibroch pic picador picadores picaninny picara picaresque picaro picaroon picayunish piccalilli piccata piccoloist pice piceous picholine pickaback pickaninny pickaroon pickax pickeer picketboat Pickett/M pickleball/M pickleweed/MS picklock pickproof pickthank picloram picnicky picogram/MS picolinate picoline picomole picon picornavirus Pict pictograph pictographic pictography pictorialism picturegoer picturephone/MS piebald piecework/R piecrust Piedfort Piedmont piefort piehole/MS pieing pieta pietism pietist pietistic pietistical/Y pietro piezoelectrically piezometer/MS piezometric piezometry piffle/DGS pigboat/MS pigeonberry pigeonfoot pigeonhearted pigeonwing pigged piggery/S piggyback/DG pigheaded/P piglet/S pigmentary pigmy pigstick/GR pikake pikeman pikeminnow pikestaff pilaf pilaff pilaster Pilate pilchard pilea pileate/D pilei pileum pileup pileus pilewort pilgarlic Pilipino/MS pillbox/S pillion/S piloerection/M pilotage/S pilothouse pilotless pilsener pilsner pilular pilule pilus pima pimpmobile/MS pinar pinaster pinata pinbone pincer/MS pincerlike pinchbeck pinchcock pindling pineal pinecone pinedrops pinene pinery pinesap pineta pinetum pinewood piney pinfold pingo pinkeye pinko/S pinkoes pinkroot pinky pinna/S pinnace pinnae pinnal pinnate/Y pinner pinniped/MS pinnula pinnular pinnulate/D pinnule pinot/MS pinprick/S pinscher/MS pinsetter Pinsky/M pinspotter pinstripe pinta pintle pintoes pinup pinwale pinxter pionic Piotr/M pipage pipal pipeage pipefish pipeful pipeless pipelike piperazine piperidine piperine piperonal piperonyl pipestone pipgras pipit pipkin pippin pipping pipsissewa piquancy piquet piracetam Piraeus piranha piraro piratical/Y pirogue piroplasm piroplasma piroplasmata Piscataway/M Piscean/M piscicultural pisciculture pisciculturist piscina piscine piscivore/MS piscivorous pisiform Pisin pismire piso pisolite pisolitic pissoir pistillate pistoleer pistolero pita pitchman/M pitchmen/M pitchout pitchwoman/M pitchwomen/M pitchy pithead pitiably pitot Pitzer/M pivotable pivotman pixie pixieish pixilated pixilates pixilation Pizarro pizazz pizz pizzaiola pizzaiolo pizzazz pizzeria piña PKI/M Pl placability placable placably placatory placebo placeman placemat/MS placency placent placentation/S placentia placket plagal plage plagiaristic plagiary plagioclase plaguesome plaguey plaguy/Y plaice plainclothesman plainsman plainspoken/P plaint plaintext plaintful plainview plaister planarian planation planchet planetoidal planetological planetologist planetology planetwide plangency plangent/Y planimeter/MS planimetric planish/R planisphere planispheric plankter planktonic planless/PY planogram/MS planograph planographic planography planosol plantable plantar plantlike planula planular planuloid plasmagel plasmagene plasmagenic plasmalemma plasmapheresis plasmasol plasmatic plasmid/MS plasmin plasminogen plasmodesm plasmodium plasmogamy plasmolysis plasmolytic plasmolytically plasmon plasodesma plasterboard plasterwork plastery plasticware/MS plastid plastidial plastination/M plastisol/S plastocyanin plastogene plastoquinone plastral plastron plat plateaux plateful plateglass platelike platemaker/MS platemaking plateresque platies platina platinic platinous platipi/M platitudinal platitudinarian platonically platterful platting platypus/MS plauded plauding plaudit plause/V playa playability playact playbill/S playbook playdate/MS playgirl playgoer/S playland playmaker/MS playpen/MS playsuit pleadable pleasantry pleasurability pleasurably pleasureless pleather/MS pleatless plebe/S plebeianism plebian plebiscitary plebs plectrum/MS pledgee pledget pledgor pleiotropic pleiotropy plenipotent plenish plenitudinous plentitude plethoric pleurae pleuritic pleurodont pleuropneumonia plex plexiform plexiglass plexus pliability pliably Plimmerton plimsoll plinth/MS plodder ploidy plosion plotless/P plotline/MS plottage plotty/R plotz ploughman's plugboard/MS plugger plugola plumbaginous plumbago plumbate plumbeous plumbic plumbiferous plumbism plumbous plumelet plumlike plummy/R plumose/Y plumpish plumulate plumule plumulose plumy/R plunderable plunderage plunderous pluperfect pluralistically pluriaxial pluripotency pluripotent plussage plusses plutocracy plutocrat plutocratic plutocratically pluton plutonian plutonic pluvial plyometrics plyscore pneumatically pneumaticity pneumatology pneumatolysis pneumatolytic pneumatometer/MS pneumatophore pneumatophoric pneumectomy pneumococcus Pneumocystis pneumonic po/Y po'boy poblano pocahontas pockmark pocky poco podagra podagral podded podding podgy/R podiatric podiatrist podiatry podite poditic poetaster poetess poeticism/M pogonophoran pogromist poi poikilotherm poikilothermic poikilothermism poilu poinciana poindexter/MS pointe pointillism pointillist pointilliste pointillistic pointwise poirot poisha poitrine pokey/S poky/PRY polarimetric polariscopic polariton polarographic polarographically polaron polder poleax poleless polemicism/M polemicist polemist polemonium polestar poleward policewoman/M policewomen policyholder/S poliomyelitic poliomyelitis poliovirus politesse politick/R polity polkadot/S Pollard/M pollee pollenate/DGNS pollenosis pollex pollical pollices pollinate/DGNS pollinator pollinic polliniferous pollinium polloi pollster pollywog/MS poloist Polonia poltroon poltroonery poltroonish/Y polyacrylonitrile polyadenylic polyamide polyamorous polyandrous polyandry polyanka polyantha polyanthus polybasite polybrominated polybutadiene polycarbonate polycarpellary polycarpic polycarpous polycarpy polycentrism/M polychaete polychaetous polychasium polychlorinated polychotomous polychotomy polychromatic polychrome polychromy polycistronic polyclinic polycondensation/M polycot polycotyl polycotyledon polycotyledonous polycrystal polycyclic polycystic polycythemia polycythemic polydactyl polydactylous polydactyly polydipsi polyelectrolyte polyene polygala polygamic polygamical/Y polygamist polygene polygenesis polygenesist polygenetic polygenetically polygenic polyglandular polyglot polyglotism polyglottism polygonum polygram/MS polygraph/RZ polygrapher/MS polygraphic polygraphist/MS polygynoecial polygyny polyhedrosis polyhistor polyhistoric polyhydroxy Polyhymnia polyisoprene polyketide polylysine polymath polymathic polymathy polymerically polymerism polymethyl polymorphically polymorphism polymorphonuclear polymorphous/Y polymyxin polyneuritis polynuclear polynucleotide polynya polyolefin polyomavirus polyonymous polyp polypary polypeptide polypeptidic polypetalous polyphagia polyphagous polyphagy polyphase polyphasic polyphenol polyphenolic polyphone polyphonically polyphonous/Y polyphyletic polyphyletically polyphyleticism polypide polyploid polyploidy polypnea polypneic polypody polypoid polyposis polypous polyptych polyrhythm polyrhythmic polyrhythmically polyribonucleotide polyribosomal polyribosome/MS Polys polysaccharide/S polysaprobic polysemous polysemy polysepalous polysilicon polysiloxanes polysome/MS polysomic polysorbate polystichous polysyllabic polysyllabically polysyllable polysynaptic polysynaptically polysyndeton polytene polyteny polytheism polytheist polytheistic polytheistical polythene polytocous polytonality polytope polytrophic polytype polytypic polytypism polytypy polyurethane polyuria polyvalence polyvalent polyvinyl polywater polyzoan polyzoarium polyzoic pomace pomaceous pomade/DS pomander pomatum pome pomelo pomerania pomeranian pomiferous pommel pomological/Y pomologist pomology pompey pompon pon Ponce Ponchartrain/M ponderable ponderosa/MS pong pongid pont pontific pontificaly pontificator pontifices pontine pontius ponton pontonier ponytail Ponzi/M ponzu pood Poole/M poolroom poorhouse poorish popery popgun popinjay popish/Y popliteal popover poppa poppet popple poppycock poppyhead populaire/S populism populist populistic porcelainlike porcelaneous porcellaneous porcini porcino poriferal poriferan porky/S pornographically porny porphyria porphyrin porphyritic porphyroid porphyropsin porphyry porrect porringer portance portative portcullis Porte/M porterage Portia portico portiere portionless Porto portobello/M portraitist portress portulaca posable posada posey positivistic positronium Posner/M posole posseman possemen possessory posset/S postabortion postapartheid postapocalyptic postarrest postatomic postattack postaxial/Y postbag/S postbellum postbourgeois postbox/S postboy/S postbreeding postburn postcapitalist postclassic postclassical postcolonial postcommunist postconsumer postcopulatory postcoronary postcoup postcrash postdeadline postdental postdepression postdevaluation postdiluvian postdivestiture postdoctorate postediting/M postelection postembryonal postembryonic postemergence postencephalitic posteriad posteriority postern posteruptive postexilic postexperience postface postfeminist postflight postform postfreeze postglacial postgrad/MS posthaste posthole posthypnotic postiche postilion postillion postimpact postindependence postinjection postirradiation postlanding postliterate postmastectomy postmastership postmating postmenopausal postmillenarian postmillenarianism postmillennial postmillennialism postmillennialist postmistress postmodern postmultiply postnasal postnatal/Y postneonatal postnuclear postnuptial/Y postorbital postorgasmic postpaid postpituitary postponable postposition postpositional/Y postpositive/Y postprandial/Y postprocess postprocessor/S postproduction postrecession postriot postschool poststrike postsurgical postsynaptic postsynaptically posttax postteen posttension posttest posttranscriptional posttransfusion posttranslational posttraumatic posttreatment postulancy postulant postulational postulator postural postvasectomy postworkshop posy/S potability potassic potation potboy poteen potemkin potence potentiate/N potentiation/M potentiator potentiometric potful pothead potheen pother/DG pothook pothouse pothunter pothunting potline potpie potsdam potsherd potshot potshotting potstone pottage pottawatomie potteringly pottle potto/S potty/RS pouchy/R pouf pouff/D Pouilly/M poulard poularde poult poulterer poultryman poundage poundal pourable pourboire pourparler pourpoint poussette/DG poussin/S pouty Powassan/M powderman powdermen powerboat powwow poxvirus Poynting/M poza ppm PPO PR practicum Prader/M Pradesh Prado praecox praedial pragmatical pragmaticism pragmaticist pragmatistic praline prandial prase pratfall pratincole pratique pravastatin/M prawn/RS praxeological praxeology pre/T preachify/S preachment preachy/PRY preacknowledgment/MS preadapt/DV preadaptation preadmission preadolescence preadolescent preamp/MS preamplifier/MS preapproved prearrangement preassembled preatomic preaxial/Y prebend prebendal prebendary prebind prebiologic prebiological prebiotic precalculus precancel precancerous precast precautious precedency preceeded preceeding precensor precentor precentorial precentorship preceptor preceptorial preceptorship preceptory preceptress precessional preciosity precipitance precipitancy precipitant/PY precipitator/MS precipitin precipitinogen precipitinogenic precisian precisianism precisionist preclear preclinical preclusion preclusive/Y precoat/G precocial precognition precognitive precoital precombustion precompact precompose precomputation preconceptual preconcert/D preconcerted/PY preconsonantal precook precrash precrease precritical precursory predaceous/P predacious predacity predawn predecease predesignate/N predestinarian predestinarianism predestinate/N predestinator predestine predevaluation prediabetes predicable predicatable predicatory predigest predigestion predive prednisolone prednisone predominancy predrill/D preeclampsia preelectronic preemergence/M preemergent preemie preexchange/D preexist preexistence prefade/D prefascist prefatorial/Y prefectural prefeminist preferability preferrer prefigurative/PY prefigure/DGS prefigurement prefile prefinance prefixal/Y prefocus/DGS preform/DS preformat preformation prefrontal prefrozen preggers pregnability pregnable pregnenolone preheadache preheat/DR prehensile prehensility prehension/A prehire prehistorian prehistorical/Y prehistory prehominid preignition preimplantation/M preinduction preinvasion prejudgment/MS prejudicious/Y prelature prelaunch prelection prelibation prelicense/DGRS prelife prelunch prelusion prelusive/Y prelusory premalignant preman premanufacture premeasure premed premedial premedian premedical premedieval/MS premedievalism/MS premeditator premeiotic premenopause premenstrual/Y premership premie premillenarian premillenarianism premillennial/Y premillennialism premillennialist premiss premodification/M premodify/DGNS premolar premolt premonish premorse premune premunition prename prenatal/Y preneed prenominate/N prenotion preoccupancy preoperational preoperative/Y preorbital preordain/DGS preorder/DGS preordination preoviposition preovulatory prepackage preparator prepausal prepense/Y prepill preplan preplant preponderancy prepositive/Y prepossess/G prepossessing/PY prepossession prepotency prepotent/Y preppie preprandial prepreg prepress preprice preprocess/DS preprofessional prepsychedelic prepuberal/Y prepubertal/Y prepuberty prepubescence prepuce prepunch prepupal preputial prerecession preretirement prerevisionist prerinse/DGS prerock presageful presanctified presbyope presbyopia presbyopic presbyter presbyterate presbyterial/Y presbytery prescientific prescind prescore/DGS prescreen/DGS prese preselection presell presentability presentably presentative presentee presentence/DGS presentient presentiment presentimental presentism presentment preservable presettable presetting preshow preshrunk presidentship presidial presidiary presidio presidium presignify preslaughter presleep presley presoak presong pressboard pressmark pressor/A pressroom pressrun presswork prest/R presternum prestigeful prestissimo prestore/DGS prestress/D prestructure presummit presumptive/Y presweeten presymptomatic presynaptic presynaptically pretape/DGS pretax pretechnological preteen preteenager/MS pretelevision pretensioner pretensionless preterit/V preterite/NV preterminal pretermission pretermit preternatural/PY pretextual Pretorian pretrain pretreat pretreatment prettify/N prettyish pretubercular pretuberculous pretype pretzel preunification/M prevaricate/DGS prevaricator prevenient/Y preventability preventative preventible preverbal previsional previsionary prevocalic prevocational prevue prework prewrap/S prewrapped prewrapping prewrite/DGS prexy Priam priapic pricey pricket pricky/R pricy/R prideful/PY priesthood prieur priggery priggism prill prima primality primateship primatial primatological primatologist primatology/M primavera primero primipara primiparity primiparous primitivist primitivistic primitivity primmer primmest primming primo/S primogenitor primogeniture primrdium primula primus princedom princekin princelet princeling princeship princesse principalship principial principium princox prink/R printability printemps printery printhead/MS printless priorate prioress/S priorship pripet prise prisere prismatically prismatoid prismatoidal prismoid prismoidal pristane Pritchard/M prithee privatdocent privatdozent privatism privet privity prix prizefight/GR prizewinner proa proabortion proach/G proactive probabilism proband probang probational/Y probationary probatory/A probenecid probiotic probit probosces proboscidean proboscidian proboscis procambial procambium procarbazine procaryote procaryotic procathedral procephalic procercoid processability processable/A processibility processible proclimax proclitic proconsul proconsular proconsulate proconsulship procreant procreator procryptic Procter/M proctodaeum proctologic proctological proctologist proctology proctorial proctorship procumbent procurable procurance procuration procurator procuratorial procuress prodder prodigality prodromal prodromata prodrome/S prodromic productional proemial proenzyme proestrus profanation profanatory professeur professorate professoriat professoriate profili profitless profitted profitting profligacy profluent prog progamete progestational progesterone progestin progestogen progging proglottid proglottidean proglottis prognathic prognathism prognathous prognostic prograde programmatic programmatically progressional progressionist progressist progressivist progressivistic prohibitionist projectable projectional projet/S prokaryote prokaryotic prolactin prolamin prolamine prolan prolapse/DG prole proleptic proletarian proliferous/Y prolificacy prolificity proline prolocutor prolotherapy prolusion/S prolusory prom promazine promisee promisor promissory promotability promotable promptbook/S promulgator pronatalism pronatalist pronate/DGN pronator pronephric pronephros pronghorn/S pronominal/Y pronuclear pronucleus pronunciamento pronunciational prooflike proofroom propaedeutic propagable propagandism propagandistically propagational propagator propagule proparoxytone propellent propellor propend propense properdin propertyless prophage prophase prophasic prophetess prophetical prophylactic prophylactically prophylaxis propine/DG propionibacteria propitiable propitiator propitiatory proplastid propman/M propmen/M propolis propone/DG proportionable proportionably propos propositus propoxyphene propranolol propria proprietress proprioceptor proptosis propulsive propyl prorogate/N prorogue/DG prosaically prosaism prosaist prosateur prosauropod/MS prosciutto proscriptive/Y prosector prosectorial proselyte proselytism proseminar prosencephalic prosencephalon prosenchyma/S prosenchymata prosenchymatous Proserpine/M prosit proso prosobranch prosodical/Y prosodist prosoma prosomal prosopagnosia prosopographical prosopography prosopopoeia prossed prosser prost prostacyclin prostaglandin prostatectomy prostatic prostatism prostatitis prosthesis prosthetically prosthodontics prosthodontist prostitutor prostomial prostomium prosy/PRY protamine protasis protatic protea protectant protectionism protectoral protectorship protectory proteid proteide proteinaceous proteinase proteinate proteinuria proteinuric protend protensive/Y proteoclastic proteoglycan proteome proteomics proteose proteranthous proteranthy protestor proteus prothalamion prothalamium prothallial prothallium prothallus prothesis prothetelic prothetely prothetic prothonotarial prothonotary prothoracic prothorax prothrombin protist Protista protistan protitch protium proto protoceratops protoderm protodermal protogalaxy/MS protogeometric protohistorian protohistoric protohistory protohuman protolanguage/MS protolithic protomartyr protonate/DN protonema protonemal protonematal protonic protonotary protonymph protonymphal protopathic protophloem protophyta protoplanet/MS protoplast protoplastic protoporphyrin protostar/MS protostele protostelic protostome/MS prototroph prototrophic prototrophy prototypal protoxylem protozoal protozoic protozoological protozoologist protozoology protozoon protractile protraction protractor protreptic protrusible protuberatly proudful proudhearted Proustian provascular provement Provence provender provenience provincialist provinciality proviral provirus provisionary provisons provisory provitamin provolone proxemic/S proximo proxmire prude/MS prudery prudish/PY pruinose prurience pruriency pruriginous prurigo pruritic pruritus prussiate prussic prutah prutot pryer prêt psalmbook psalmody psalter psalterium psaltery psaltry psephological psephologist psephology pseud pseudepigraph pseudepigraphon pseudepigraphy pseudoallele pseudoallelic pseudoallelism pseudocholinesterase pseudoclassic pseudoclassicism pseudocoelomate pseudoenergy pseudomedieval/MS pseudomonad pseudonymity pseudonymous/PY pseudopotential pseudorandom pseudoscience pseudoscientific pseudoscientist pseudoscorpion pseudosophisticated pseudosophistication/M pseudotuberculosis psilocybin psilophyte psoralen psychedelia psychedelically psychiatrically psychoanalytical/Y psychobiographical psychobiography psychobiologic psychobiological psychobiologist psychochemical psychodrama psychodramatic psychodynamic/S psychodynamically psychogenesis psychogenetic psychogenic psychogenically psychognosis psychognosy psychograph psychographics psychohistory/M psychokinesis psychokinetic psycholinguist psychologic psychologism psychometrically psychomotor psychoneuroimmunology psychoneurosis psychoneurotic psychopathically psychopathologic psychopathological/Y psychopathologist psychopathology psychopathy psychopharmaceutical psychopharmacologic psychopharmacological psychopharmacologist psychopharmacology psychophysicist psychophysiologic psychophysiological/Y psychophysiologist psychopomp psychosexual/Y psychosexuality psychosomatically psychosurgery/MS psychosurgical psychotherapeutically psychotherapist psychotically psychotogen psychotogenic psychotomimetic psychotomimetically psychotropic psychrometer/MS psychrometric psychrometry psychrophilic psyllid/MS psyllium psyops psywar PTC pteridine pterin pteroylglutamic ptolemaists ptomaine pube/S puberal pubertal puberulent pubescence pubic pubis publican/S publicist publick publique puccoon puce pucka puckery pud puddingstone pudency pudendal pudendum puerilism puerperal puerperium pug pugaree puggaree pugging puggle Pugh pugilism pugilist pugilistic pugilistica pugmark/MS pugnacious/PY pugnacity puisne puissance pukka pul/GR pula pulchritude pulchritudinous pule/GR puli/S pulicide pulik pullback pullet pullorum pullout pullulate/N pulmonale pulmonate pulmonic pulmonologist/MS pulmotor pulpal/Y pulpwood pulpy/P pulque pulsant pulsator pulsatory pulsimeter/MS pulsometer/MS pulverulent pulvillus pulvinus pumiceous pumicite pumpernickel pumpkinseed/S puna punchball/S punchboard puncheon punchinello punchless punchy/R punctate/N punctilio punctilious/PY punctuator punditocracy/M pung Punic punishability punition Punjab/M Punjabi punkah punkie punkin Punnett/M punning punny/R punty/S pupae puparia puparial puparium pupfish/M pupilage pupilar pupillage pupillary pupiparous puppetry pupping pupu purblind/PY purdah purdew pureblood purebred puree/DMS pureeing purfle/DG purgatorial purificator purificatory purifing purine puristic puritanism purl/DGRZ purlieu purlin puromycin purplish purply purpura purpure purpuric purselike pursewarden purslane pursuance pursuivant pursy/PR purtenance purulence purulent purveyance purvis Pusan/M Pusey/M pushback pushball pushcart pushchair/S pushful/P pushout pushover/MS pushpin/MS pusillanimity pusillanimous/Y pussyfoot/GR pussytoes pustulant pustular pustulate/DN pustule/S putains putas putdown/MS Putnam/M putout putrefaction putrefactive putrescence putrescent putrescible putrescine putridity putsch putschist puttana puttanesca puttee/S puttyroot puzzleheaded/P PVC pya pycnidium pycnogonid pycnometer/MS pyelitis pyelonephritic pyelonephritis pyemia pyemic pygidial pygidium pygmaean pygmean pygmoid pygmyish pygmyism pyknic Pyle/M pylon/S pylori pyloric pylorus pyocanea pyoderma pyodermic pyogenic Pyongyang/M pyracanth pyracantha pyralid pyralidid pyramidical pyramidology/M pyran pyranoid pyranose pyranoside pyrargyrite pyrene pyrenoid pyrethrin pyrethroid pyrethrum pyretic pyrexia pyrexial pyrexic pyrheliometer/MS pyrheliometric pyric pyridostigmine pyridoxal pyridoxamine pyridoxin pyridoxine pyriform pyrimethamine pyrimidine/S pyrite/S pyritic pyrocatechol pyrocellulose pyrochemical/Y pyroclastic pyroelectric pyroelectricity pyrogallol pyrogen pyrogenic pyrogenicity pyrogenous pyrola pyroligneous pyrolusite pyrolysate pyrolytic pyrolytically pyromancy pyromaniacal pyrometallurgical pyrometallurgy pyrometric pyrometrically pyromorphite pyronine pyroninophilic pyrope pyrophoric pyrophosphatic pyrophyllte pyrosis pyrotechnical/Y pyrotechnist pyroxenic pyroxenitic pyroxenoid pyroxylin pyrrhic pyrrhotite pyrrhuloxia pyrrol pyrrole pyrrolic pyruvate pyschiatrist pythoness pythonic pythonine pyuria pyx pyxides pyxidium pyxie pyxis Qatar/M QED Qian/M qigong qindar qiviut QM qua quaalude/MS quackish quadded quadding quadrantal quadraphonic/S quadraphony quadrat/DG quadrate/DGS quadrennium quadricentennial quadricipital quadrifid quadripuntal quadrisect/DGS quadrisyllabic quadrivalent quadrivial quadroon/S quadrumvir quadrumvirate quadruped/S quadrupedal quadruplet/S quadruplicity quadruply quadrupolar quadrupole/MS quaestor quag quai quaich qualmish/PY qualmy quant/MS quantal quantasome quantic quantifiably quantificational/Y quantifys quantitate/DGNSX quarantinable quark/S quartan quarterage quarterdeck/S quarterfinal quarterfinalist quartern quarternary quarterstaff quartette quartic/S quarto/S quartziferous quartzitic quartzose quasicrystal/MS quasimodo quasiparticle/MS quatercentenary quaternion quaternity quatrefoil quattrocento quattuordecillion quavery quayage quayside qubit/MS quean queazy queenship queerish quenchable quenchless querilla querist quern/S queso questionary questionless questor/A quetzal quetzales Quezon/M quib/S Quichua quickset quid/MS quiddity quiescence quietism quietist quietus quiff/DS quillwort quinacrine quince/S quinceañera quincuncial/Y quincunx/S quincunxial quindecillion quinidine quiniela quinoa quinoid quinoidine quinoline quinolone quinquennium quinquevalent quinquivalent quintain quintal quintessence quintette quintic quintuplet/MS quintuplicate/DGS quintus quipped quipster Quirinal quirky/PY quisling quislingism quitch quitclaim Quito/M quitrent quittance quitted quittor quixotical/Y Quixotism quixotry quizmaster/MS quizzer quizzicality quod quodlibet quoin quoit/S quondam quot quotable quotidian Rabat/M rabbet/DGS rabbinate rabbinic rabbinism rabbitry rabbity rabblement rabe rabic rabidity Rabin/M racecourse/S racemate racemic racemose racewalking rachet rachides rachiodont rachis/S rachitic rachitis racialism racialist racialistic racine racino rackle raclette/MS racon raconteur racoon rad/S radarscope/S raddle/DGS radiale radiancy radiational radiationless radic radicand radicate radicle radicular radiculopathy radioallergosorbent radioautograph/MS radioautographic radioautography radiobiologic radiobiological/Y radiobiologist radiobiology radiobroadcast/GR radiocast/R radiochemist radiochlorine radiochromatogram/MS radioecological radioecologist radioecology/M radioelement radiogenic radiogram/MS radiograph radiographically radioimmunoassay/DGS radioisotope radioisotopic radioisotopically radiolabel radiolarian radiolocation radiologist radiolucency radiolucent radiolysis radiolytic radiometeorograph radiometrically radiomimetic radionuclide/MS radiopaque radiopharmaceutical radiophone radiophoto radiophotograph radioprotective radioscopic radioscopy radiosensitive radiosensitivity radiosonde radiostrontium radiosymmetrical radiotelegraph radiotelegraphic radiotelegraphy radiotelemetry/M radiotelephone radiotelephony radiotherapist radiothorium radiotracer/MS radome radula radular radwaste Rae/M raff Rafferty/M raffia raffinose raftsman raga ragamuffin ragbag raggedy raggle ragi raglan ragman ragpicker ragtag ragtime ragtop/MS Ragusan rah railbus rainmaker rainmaking rainproof rainspout rainsquall rainwash rainwear raj raja rale rallye rallyist rallymaster raloxifene Raman/M ramate rambunctious/PY ramekin ramentum ramequin ramet rami ramie ramiform ramillies ramirez rammer Ramo/M ramose/Y ramous rampageous/PY rampancy rampion ramshackle ramus ranchman ranian Ranier/M ranitidine Rankin/M Rankine rantry ranunculus rapacity rapine rapini Rappaport rappee rappen rapporteur rapscallion raptor raptorial rapunzel rarebit rarefaction rarefactional rarefactive rarify Raritan/M ras/G rasa rasbora rascality rasorial raspy Rastus rasure rata ratably ratafia rataplan ratch ratel ratemeter/MS ratemeterparton ratepayer/S Ratfor rathe rathskeller raticide ratificationist ratiocinator rationalistically ratlike ratline Ratner/M raton ratoon rattan ratted ratteen ratter ratting rattlebrain/D rattletrap rattly rattrap Raul/M raunch/M raunchy/PRY ravagement ravel/S ravelment ravioli ravishment rawinsonde rawlings rawlins rayless/P rayon razeed razeeing razorbill razz razzmatazz reabsorb reabsorption reacquaint reacquisition reactance/S reactional/Y reactionaryism reaggregate/N realpolitik reapportion rearhorse rearm/G rearmament rearmost rearview rearward/SY reasonability reasonless/Y reave/GR reb/S rebarbative/Y reboant rebus rebuttable rebutter recalcitrance recalcitrancy recalescence recallability recamier recantation recap recatory receivership recension receptaculum recessional recessionary rechallenge/GS rechannel/DGS rechargeable recheat rechoreograph/GS recidivism recidivist recidivistic Recife/M reciprocator recision recitalist recitativo reck reclinate recoin recombinant recommit recommitment recompence recompose reconcilability reconcilable/P reconcilement reconfirm reconfirmation reconstructionism reconstructor recontaminate reconversion reconvert/D reconvey reconveyance recordable recordation recordist/M recoupable recoupment recreant recreatable recreationist recriminatory recrudesce recrudescence recrudescent rectal/Y rectangularity recti rectifiability rectifiable recting rection rectitudinous rective recto/S rectorate rectorial rectorship rectrices rectrix rectus recumbency recurve recusancy redactional redargue redbelly redbone redcap redded reddy rede redear redecorate redecorator redeemable redemptional redemptory redeploy/D redeployment redescribe redescription redetermine/DG redeye/MS redhook redhorse redia/S rediae redial redintegrate/NV rediscount rediscountable redistributionist/M redistributory redistrict redivivus redleg redline/DGS redolence redolent/Y redondo Redondo's redoubt redoubtably redout redpoll redroot redshank redshift/DGMS redshirt/MS redskin redstart redtop reductant/MS reductase reductio reductional reductionist reductionistic reduplicate/NV reduplicative/Y reduviid redwing ree/TV reedbuck reedify reeducate/V reeky reelable reembroider/DGS reemploy reemployment reenforce reenlist/D reenlistment reentrance reescalate/DGS reestablishment ref reface/G refect refection refeed/DGS referable refit reflation reflationary reflectional reflectometer/MS reflectometry reflexology reflow refluence reforest reforge reformate refoulement refractile refractivity/S refractometric refractometry refractor refrainment refrangible/P refrigerant refringent refugeeism refugium refulgence refulgent refundability refundable refurbishment refusenik/MS refutably regality regardant regardful/PY regeneracy regenerator regental reggaeton regicidal regicide regimental/SY regionalist regionalistic Regis regisseur regius reglet regna regnal regnant regnum regolith regorge/DG regosol regrant regreet regressor regretless regretter regrid regridded regridding regrow regurgitate/DGNSV rehabilitant rehabilitationist rehabilitator rehear rehouse/G rehydratable reichsmark/MS Reid/M reify/DGN Reiki/M reimpression reincarnationist reinfection reinforceable reinfuse reinhard reinhardt reinless reinsman reinsurance reinsure/R reintegrate/V reinvigorate Reiter/M reiterator reive/GR rejectee rejuvenate/DGNS rejuvenator rekeyboard/DGS relandscape/DGS relator relaxant relaxin releasability releasably reliction relievable relievo religionist religiose reline relinquishment reliquary relique reliquiae relishable relleno/M relocatee/MS relucent reluctancy reluctate/DN reluctivity relume/DG relumine remaines reman remanence remanent remanufacture/R remediably remediless/Y rememberability rememberable remigial remindful reminiscential remint remise/DG remissible remissibly remitment remittable remittal remittent/Y remitter remonstrance remonstrant/Y remonstrator remunerator remuneratory remus Remy Rena/M renderable Rene/M renegade/S renege/DGRS renest/DGS renewability reniform renig renigged renigging renin renitency renitent renminbi rennet rennin renogram/MS renographic renography renominate/GN renouncement renovator Rensselaer/M rentability rentable rente rentier renunciatory reoccupy reoccur reoccurrence reoffer/DGS reovirus rep repack/GR repairability repand reparative repass repassage repatriate/DGNS repealable repellant repellency repeller repercussive repetend repetitional replant repleviable replevied replevies replevin replicable replicase/M replicon/M repo/MS reportable reposal reposeful/PY reposit/DG repossession reprehend reprehensibility reprehensibly reprehensive representationalism representationalist repressibility repressible repressionist reprieval repristinate/N repro/S reproachable reprobance reprocess/S reprography repudiationist repudiator repugn repugnancy reputability req requestioner requiescat requin requital reradiate/N reredos reremouse rereward resail rescale rescindment rescissory rescreen/GS rescript researchist resect resectability resectable/U resection reseed resend/G reserpine reservist/S resettable reship reshipment reshipper residua resile/DG resinate resinify resinoid resinous resiny resistable resistibility resistless/PY resitting resmethrin resojet resole resolvent resorb resorcinol respell respirable respirational resplendence resplendency responsory responsum ressentiment/M resses restage restartable restauranteur restitute restoral restrainable restrictionism restrictionist restrike resultful/P resultless resupine resurgam resurge/G resurrectional resurrectionist resuscitator/S resveratrol resvering ret/S retable retake retardate retarget/DGS retentivity retenue retextureDGS retia retiarius reticency reticule reticulocyte reticulocytic reticuloendothelial reticulose retiform retinacular retinaculum retinae retinene retinitis retinoic retinoid/MS retinol retinopathy/M retinoscopy retinospora retinula retinular retirant retool retortion retot retouch/R retractile retractility retrainee retral/Y retread/DG retreatant retrench retrial retribalization/M retributive/Y retributory retrievability retroaction retroactivity retrocede retrocession retrodict retrofire retrofitted retrogradation retrogress retrogression retrolental retrolingual retronym/MS retropack retropackressentiment retroperitoneal/Y retroreflection/M retroreflective retroreflector retrorse/Y retroserrate retroversion retrovirology retsina retted retting returnee/MS retuse REU Reub/M reunify/N reunionist reunionistic rev/RTZ revalidate/G revaluate revalue revanche revanchist/MS revascularization/M revealable revealment revegetate/N revehent reveille/S revelator revenant reverb reverberant/Y reverberatory reverential/Y reversibly reversionary revertant revertible revery revetment revictual revilement revisal revisionism revisor revisory revivable revivalist/S revivalistic revivify/N reviviscence reviviscent revokable revoluable revolute revolutionibus revolutionist revolvable revulsed revulsive rew rewake rewaken rewardable rexroth rey Reye/M Reykjavik/M reynard rezone RGB rhabdom rhabdomancy rhabdome rhabdomere rhabdomyolysis rhabdovirus rhadamanthine rhamnaceous rhamnose rhamnus rhaphe rhapsodical/Y rhapsodist rhatany rhebok rheims rheinholdt rheological/Y rheologist rheometer/MS rheophile rheophilic rheostatic rhesus rhet rhetor rheumatically rheumatiz rheumatoid rheumatological rheumatologist/MS rheumatology/M rheumy rhinal rhinelander rhinencephalic rhinencephalon rhinitis rhinocerotic rhinolaryngology rhinopharyngitis rhinoscopy rhinosporidium rhinovirus rhizanthous rhizobium rhizocarpic rhizocarpous rhizocephalan rhizocephalid rhizoctonia rhizogenesis rhizogenetic rhizogenic rhizoid rhizoidal rhizomatous rhizome rhizomic rhizomorphous rhizoplane rhizopod rhizopodal rhizopodous rhizopus rhizosphere rhizotomy Rhoda/M rhodamine Rhode rhodochrosite rhodomontade rhodoplast rhodopsin rhodora rhomb/S rhombencephalon rhombi rhombohedral rhombohedron rhomboid rhomboidal rhomboideus rhonchi rhonchus rhotic rhumb/S rhumba rhus/S rhymester rhyolite rhyolitic rhythmicity rhythmist rhytidome ri/NR RIAA RIAA's rial rialto riant/Y riata ribaldry riband ribas ribavirin ribband ribber ribbonlike ribby ribgrass riblet ribonuclease ribonucleoprotein ribonucleoside ribonucleotide ribose ribozyme/MS Rica Ricanism ricci ricebird ricercar richert richey richland richment rici ricin ricinus rickards rickenbaugh rickettsia rickey/S rickrack ricksha Rico ricotta rictal rictus ridded ridder rideable riderless ridgeback/MS ridgeling ridgling ridgy ridley/M ridotto ridpath riegger riel Riemannian rifampin rife/Y riff/DGMS riffle/DGRS riffraff rification rifice/R riflebird riflery riflescope rifying Riga rigadoon rigatoni rigaudon Rigel/M rightism righty rigidify/N rigorism/MS rigorist/MS rigoristic/S rile/G rilke rille rillet rilly rimbaud rimland/MS rimose rimous rimrock rimy/R rin rinascimento rinderpest ringbark ringbolt/S ringbone/D ringdove ringel ringent ringette ringleader/S ringlike ringmaster/S ringneck ringolade ringstraked ringtail ringtaw ringtoss ringworm/S Riordan/M ripieno riposte ripper riprap ripsaw ripsnorter ripsnorting ripstop riptide risibility risorgimento risotto risperidone rit ritard ritonavir ritualism ritualist ritualistic ritualistically ritzy/PR rivalrous riverbed riverview riverward/S riverweed Rivest/M riyal RNA RNAi RNase Ro roadability roadholding roadless roadrunner/S roadstead roadwork/S roadworthy/P roan robalo roband robbie roble robustious/PY roc rocambole Rocco rochet Rochford rockabilly rockaway/S rocketeer rocketry rockettes rockfish rocklike rockling rockoon rockrose rockshaft rockskipper rococo rodenticide rodeph rodless rodlike roemer roentgenium/M roentgenogram/MS roentgenograph roentgenographic roentgenographically roentgenography roentgenologic roentgenological/Y roentgenologist roentgenology roentgenoscope roentgenoscopic roentgenoscopy roentgenotherapy roff rogation rogueing roguery roi/Y roic roister/DR roisterous rolamite rolf/DGS rollick rollie rollover rolnick rom romaine Romanesque romanticist romanza romaunt romeldale romulo rondeau rondeaux rondel rondelet rondelle rondure ronnel ronyon roofhouse roofie/MS roofless rooflike roofline rooftree rookery rooky roomette rooney roorback roos roose rootage roothold rootkit/MS rootlet rootlike rootstalk rootstock rootworm/MS rooty ropean ropedancer ropedancing ropery ropewalk/R ropeway ropework ropy/PR roque roquelaure Roquemore rorqual rosabelle rosaceous rosaniline rosarian rosebay rosefish roselike rosella rosemaling Rosenblum/M Rosenzweig/M roseola roseolar rosery roset rosewater rosewood rosie rosin/DG rosinous rosinweed roslev rossi rossoff rostagno/S rostellar rostellate rostellum rostra rostral rostrate rosulate roswell rota/D rotameter/MS rotatable rotatory rotavirus rote rotenone rotgut rothko Rothschild/M rotifer rotini/M rotisserie roto/S rotonda rotorcraft/MS rottenstone rotter rottosei rottweiler roturier rou/HNS roughage roughcast roughhouse/DG roughleg roughrider/S roughy/M rouille roulade rouleau rouleaux roundball/M roundel roundelay roundish roundlet roundsman roundwood roup Rourke rouseabout rousement roust/R routeman routeway roux roven rowdyish rowdyism Rowe/M rowlock Roxbury/M roxy royalism royaux Royce royster rozella rozelle rozzer RPG rpt RPV rRNA RSA Rubaiyat rubasse rubato rubberlike rubberneck/R rubbishy rubblework rubefacient rubel/MS rubellite Ruben/M rubeola rubeolar rubicundity rubiginous Rubin/M rubious rubrical/Y rubricate/N rubricator rubus rubythroat rucellai ruche/G ruck rucksack ruction rudbeckia rudd rudderpost rudderstock ruddle/DG ruddleman ruddock ruderal rudesby/S rudimental Rudolf/M Rudyard/M rufescent ruff/DY ruffe/D ruffianism rufiyaa rufous ruga rugae rugal rugate rugelach rugger ruggiero rugola rugose/Y rugosity rugulose ruh ruidoso ruinate ruleless rulership rumba rumbly rumbustious rumdum rumina ruminal ruminate/NV ruminative/Y ruminator rummel rummer rummest rumrunner runagate runaround runback runcible runcinate rundle rundlet Runge runless runlet runnel/S runneth runny runout/S runover runtm rupiah/S rupicoline rupicolous ruppert ruralist rurban Ruritan/M rushall rushee rushlight rushy russetting russify/N Russo/M russula rustical/Y rusticator rusticity ruthenic ruthenious Ruthful/PY rutilant rutile ruttish/PY Rwanda/M rya Rydberg/M ryegrass s'more saba sabadilla sabbat sabbatic sabermetrics sabin Sabina/M sabol sabot saboteur/S sabra sac sacahuiste sacaton saccade/MS saccadic saccate saccharase saccharate saccharide/S saccharify/N saccharimeter/MS saccharimetry saccharin saccharine saccharinity saccharoidal saccharometer/MS saccharomyces saccharose saccular sacculate/DNS saccule sacculus sacerdotal/Y sacerdotalism sacerdotalist sachem/S sachemic sachet/D sacheverell Sachs/N sackbut sackcloth sackful saclike sacque sacra sacramental/Y sacramentalism sacramentalist sacrarium sacre/G sacrestia sacrilegiousnes sacristan sacristy sacroiliac sacrosanctity sacrum saddhu saddlebow saddlecloth saddleless saddlery saddletree Sadler/M sadomasochism sadomasochist sadomasochistic safecracker safecracking safelight safetyman safflower Safier/M safranin safranine safrole sagami saggar sagger saghyz sagittal/Y Sagittarius sagittate sago/S sahib sailable sailboard sailcloth sailon sailplane/R saimin sain sainfoin saintdom saintlike saintsbury saintship Saipan/M saith saithe saki sako salability salamandrine salariat salaryman/M salarymen/M salchow/MS saleable saledo saleratus saleroom salesclerk Salesian salesroom salic salicin salicylate salida salientian salimeter/MS Salina/M salinity salinometer/MS Salish Salle sallet sallowish salmagundi salmi salmonberry/S salmonella salmonellosis salmonid salmonoid salometer/MS saloonkeep saltarello saltation saltatorial saltatory saltbox saltbush saltcellar saltern saltimbocca saltine saltire saltless saltlike Salton saltonstall saltshaker saltworks saltwort salubrity/I saluki salutaris salutational salutatorian salutatory salutiferous salutogenesis salutory salvable salvageability salvational salvationism salvationist salverform salvific salvoes salvor samar samara Samaritan samarium samarskite samba sambar sambur samisen samite samlet Sammarinese samp sampan samphire samurai/MS San Sana sanatarium sanative sanbenito Sanborn/M Sancerre sancta sanctimony sanctum sandarac sandbagger sandbank sandbar sandbur Sanderling sandglass sandhog sandling sandlot sandlotter sandpapery sandsoap sandstorm/S sandworm/S sangaree sangfroid Sangiovese/M sanguinaria sanguineum sanguinity sanguinolent sanicle sanious sanipractor sanitaire sanitarian sanitarily sanitorium sann sannyasi sans sansei/S sanserif sansevieria sanskritic sansom sansome sant santim/S Santo/S santoku santolina santonica santonin santour saphead/D saphenous sapid sapidity sapience sapiens sapient/Y sapio sapless/P sapodilla sapogenin saponaceous/P saponifiable saponify/NR saponin/S saponite sapor saporous sapota sapper sapphic sapphirine sapphism Sappho/M sapremia sapremic saprobe saprobic saprobically saprogenic saprogenicity saprolite sapropelic saprophagous saprophyte saprophytic saprophytically saprozoic sapsago saquinavir saraband sarabande Saracen/MS Saran sarape sarasate sarcenet sarcoid sarcoidosis sarcolemma sarcolemmal sarcomatosis sarcomatous sarcomere sarcomeric sarcopenia sarcophagic sarcophagous sarcophagy sarcoplasm sarcoplasma sarcoplasmatic sarcoplasmic sarcosomal sarcosome Sardinia/M sardonically sardonicism sardonyx sargasso sargassum sarge sarin/M sarmi sarod sarode sarodist sarong/MS sarpsis sarsaparilla sarsenet sarsparilla sarti sartorial/Y sashimi saskatoon sass sasswood SATA satang/S satanically Satanism Satanist satchelful sateen satem sati satiety satinet satinwood satiny satori saturable saturant saturator saturnali saturnalian/Y saturniid Saturnism satyagraha satyriasis satyric satyrid saucebox saucerlike sauch sauerbraten sauger Saul/M Sault saurel saurian sauries sauropod sauvignon/M savable savagism savanna/MS savant/S savate saveable Savoy Savoyard/S sawbelly sawbones/S sawbuck sawfish sawfly sawlike sawtimber saxhorn saxifrage saxitoxin/MS saxophonic saxton sayable/U SC scabbing scabble/DGS scabby/R scabies scabietic scabiosa scabious scad/MS scag scagliola Scala/M scalade scalado scalage scalare scalariform/Y scalation scalawag scaleless scalelike scalene scalepan scallion scallopini scallywag/S scalogram/MS scaloppine/M scammed scamming scammony scampi scampini scampish scamster/MS scandalmonger scandent scannable scansion scantling scape/G scapegoatism scapegrace scaphoid scapin scapolite scapose scarab scarabaeid scaramouch scaramouche Scarborough scarecrowish scaredy scarehead scaremonger scarey scarfpin scarfskin scarious scarlatinal Scarlatti/M scarless scarp/DGRSZ scarper/DGS scarph scarring scarry Scarsdale/M scatback/MS scathe/DS scatheless scatological scatology scatted scatteration scattergram/MS scattershot scatty/R scaup/RS scc scena scenarist scenester scenical/Y scenographic scenographically scenography scentless sceptibly Schantz schefflera Scheherazade/M schelling schematism scherzi scherzo schismatic schismatical/Y schismatist schistose schistosity schistosomal schistosome schistosomiasis schistous schizo/S schizoaffective schizocarp schizogonic schizogonous schizogony schizomycete schizomycetous schizont schizophrene schizophrenically schizophyte schizophytic schizothymic schizotypal schizy schlemiel schlepp Schlesinger/M schlieren schlieric schlock Schloss schlub/MS schlump schmaltz schmaltzy schmalz schmoozy Schnabel/M schnauzer schneid schnitzel schnoodle Schoenberg/M Schofield/M scholastica scholasticate scholasticism scholiast scholiastic scholium schoolchild schoolfellow schoolman schoolmistress schooltime schopenhauer schorlaceous Schottky/M schuman Schuyler/M Schuylkill Schwab schwada Schweitzer/M sciaenoid sciatic sciential scientifique scientism scientologist scientology scilicet scilla scintigraphic scintigraphy scintilla scintillant/Y scintillator scintillometer/MS sciolism sciolist sciolistic sciomancy sciomantic scirocco scirrhi scirrhous scirrhus scissile scission/A scissortail sclerose/DG sclerotherapy sclerotial sclerotin sclerotium SCM scolecite scolex scolices scoliosis scoliotic scollop scolopendra scombroid sconce scone scoopful scopic scopolamine scopula scopulate scorbutic scorbutically scorekeeper scoria scoriaceous scorpaenid scorpioid scotchgard scotchman scoter scotoma scotomatous scotopic scottie scouse/R scoutcraft scoutmaster scrabbly scrag scragging scraggy/R scrannel scrapie scrapper scrapple scrappy/PR scrawly screak screaky scree screenable screenful screenland/M screvane screwbean screwlike screwworm screwy/PR scrieve scrimpy scrimshaw scrip scriptal scription scriptorium scriptwriter/MS scrod scrofula scrofulous scrollwork scrota scrotal scrotum/MS scrouge/G scrubby/R scrubland scrubwoman scruff scruffy/PR scrum scrummage scrunch scrutator scrutin scrutineer scud/S scudded scudding scullery/S scullion/S sculpin sculpsit sculptress sculpturesque/Y scumble/DGS scumming scummy scungilli scunner scup/S scupper/DGS scuppernong scurf scurfy scurril scurrile scurrility scut scuttlebutt scutum scuzzball SD SE seabag seabeach seabed/M Seabee/MS seabird seaboot seaborgium seaborne seacraft seadog seadrome seafloor seafowl seafront seagirt seagoing Seagram/M sealery sealift/MS sealskin seamanlike seamark seamlike seamount seamster Sean/M seaquarium searchless sease seashell/MS seastrand seatrain/MS seawall seaware seaworthy/P sebaceous sebum sec secateur/S secco secessionism seclusive/PY secobarbital secondo secretaryship secretin secretionary secretor/MS secretory sectarianism sectary/I sectile/I sectility sectionalism sectorial secularistic secund securement seder sedgwick sedgy sedilia sedimentable sedimentologic sedimentological/Y sedimentologist sedimentology seducement seductress sedulity sedulous/P sedum seeable seedcake/S seedlike seedpod seedsman seedtime seel seeley seepy seeress seerey segetal segmentary segno/S Segovia seguidilla segur segura sei seicento seiche Seidel seigneur seigneurial seigneury seignior seigniorage seigniory seignorage seignorial seignory seine/GR seisin/S seism seismicity seismogram/MS seismographic seismologist seismometric seismometry seitan selachian selaginella selden selectee/MS selectman selectmen Selena/M selenic selenide seleniferous selenious selenocentric selenographer selenographic selenographist selenography selenological selenologist/MS selenology selenosis selfadjoint selfdom selfhood Selkirk/M sellable/U selle selvage/D selvedge/D Selwyn/M semasiological semasiologist semasiology sematic semblable semblably semeiology semelparous sement semestral semestrial semiabstract semiabstraction semiaquatic semiarboreal semiaridity semiautobiographical semiautomatically semiautonomous semibasement semibreve semicentenary semicentennial semicircle/S semiclassic semiclassical semicolonial semicolonialism semicolony semicommercial semiconducting semiconscious/PY semiconservative/Y semicrystalline semicylindrical semidarkness semideify semidesert semidetached semidiameter semidiurnal semidivine semidocumentary semidome/D semidomestic semidomesticated semidomestication semidominant semidouble semidry semidwarf/M semidwarves semiellipse semielliptic semielliptical semiempirical semierect semievergreen semifinal semifinalist semifinished semifitted semiflexible semifluid semiformal semifossil semigloss semigovernmental semigroup semilegendary semilethal semiliquid semiliterate semilog semilunar semilustrous semimanufactures semimatte semimetal semimetallic semimicro semimoist semimonastic semimonthly semimystical seminarist seminatural seminiferous seminomad semiofficial/Y semiological semiology semiopaque semiosis semiotic/S semiotical semiotician semipalmated semiparasitic semipermeability semipermeable semiphore semipolitical semiporcelain semipornographic semipostal semiprecious semiprivate semipro semiquaver semiramis semireligious semiretired semiretirement semirigid semisacred semisedentary semishrub semishrubby semiskilled semisoft semisolid semisubmersible semisweet semisynthetic semiterrestrial Semiticist/M semitonal/Y semitone semitonic semitonically semitrailer semitranslucent semitransparent semitropic/S semitruck semivowel semiweekly semiworks semiyearly semmes semolina semper sempervivum sempiternal/Y sempiternity semple semplice sempre sempstress semra sen/S senarii senarius senary senatorian senatorship sendable sene senecio senectitude senega senesac senescence senescent seneschal sengi senhor senhora senhores senhorita senilis senility senioritatis seniti senna sennet sennight sennit senryu sensa sensationalist sensationalistic senseful sensibilia sensillum sensitometer/MS sensitometric sensitometry sensorial/Y sensorimotor sensorineural sensorium sensualism sensualist sensualistic sensum sensuosity sente sententia sententious/PY senti sentience/I sentimentalism sentimentalist sentimo Sep sepal separably separationist separatism separatist separatistic sepiolite Sepoy sepses sepsis septa septal septenarius septendecillion septentrion septentrional septicemia septicemic septicidal septifragal sepuchral sepulture sequacious/Y sequacity sequela sequelae sequency sequent sequestrate sequestrum sequinned sera serac serafin seraglio serai seral seraphic seraphically serbantian Serbia/M serbian sere serfage sergeancy sergeanty Sergei/M serialism/M serialist seriate/Y seriatim sericeous sericin sericultural sericulture sericulturist serieuses serif serigraph/R serigraphy serin serine seriocomic seriocomically serjeants serjeanty SERM sermonic seroconversion/M serodiagnosis serodiagnostic serologic serologist seronegative seropositive seroprevalence seropurulent serosa serosal serotinal serotinous serotonergic serotonin serotype serous serow Serpens serpiginous/Y serra serranid serrano/MS serranoid serrate/DGNS serratus serried/PY serry/DG serting sertive Sertoman/M sertraline sertularian serval servanda servation servatius serviceably serviceberry servility servomotor servosystem/S sesamoid sesh sesquicarbonate sesquicentenary sesquicentennial sesquipedalian sessed sesshu sessile sessility sessional sesterce sestertium sestet sestina seta setaceous/Y setae setal Seth/M setline setnm seto setoff setom Seton setose setout setpoint/S settee/S settlor setz setzb setzm seurat Seussian sevec seventyfold seventysomething/MS Severn/M severna sevigli sewickley sexagenarian sexagesimal sexdecillion sexless/PY sexology sexploit/DGS sexploitation/M sexpot sext Sextans sextic sexto/S sextodecimo sextuor sextuplicate sey Seychelles sferics sforzando shabu shacklebone shad shadberry shadblow shadbush shaddock shadeless shadflower shadoof shadowbox shadowgraph shadowless shadowlike Shafer/M Shaffer/M shagbark shaggymane shagreen shahdom shahn shaitan shako shakoes shakya shalloon shallop shallot shalt shaman shamanism shamanist shamanistic shamefaced/P shamefast shammer shammes shamming shammosim shammy shamus shan shandrydan shandy/S shandygaff shanghaied shanghaier Shangri shankpiece shansi shantey Shantung shantyman shantytown shapable shapeable shapen/U shar shard shareability shareable Shari/M sharkskin Sharpe sharpie/S sharpy/S shashlick shashlik shatilov Shattuck/M shaveling shavetail shavie shawano shawarma shawm shawomet shay/S shayne shayol Shea sheaflike sheahe shearn shearwater sheatfish sheathbill shebang shebeen sheboygan shedded shedder Shedir Sheehan/M sheen sheeny sheepfold sheepherder sheepherding sheeple sheepshank sheepshead sheepshearer sheepshearing sheeran sheesh sheetfed sheetlike sheikdom sheikh sheikhdom shekel shelagh shelfful shelflike shellac shellacked shellacking shellcracker shellfire shellfish shellproof shellwork shelly shelterbelt shelterless sheltie/S shelty/S shend/G shensi shep Shepard shepherdess Sheppard/M sherbert sherd sherif sheriffdom Sherrill/M sherris shevelling shew/S shewe shh Shiba shiel/G shietz shiflett shiftable shigella shigellosis shih shikar shikari shikarred shikarring shiksa shikse shilingi shillalah shillelagh shillong Shimano/M shimmery shindy/S shingly shinleaf/S shinnery shinney shinning shinny/DG shinplaster shinsplints shipborne shipfitter/MS shiplap Shipley shipload shipmaster shipowner shipside shipway shipworm shipwright shirr/G shirtdress/S shirtwaist/R shirty shish shitepoke shiv Shiva/M shivaree shlemiehl shlock Shmuel sho Shoah shoat Shockley/M shockproof shoebill shoeblack shoepac shoepack shogun shogunate shojo sholom shoon shootaround shoplift/DRZ shoppe shoptalk shoran shorebird/MS shorefront shoreside shoreward/S shortbread shortcake shortchange/R shorthair/D shorthorn shortie/S shortliffe shorty/S Shoshone/M shotbush shotline/S shotten shouldst shoup shovelful shovelhead shovelman shovelnose shovelsful showbread showery showrunner/MS showstopper shrievalty shrieve shrike shrimpy shrive/D shriven shroff shrubby/R shtetel shtetl shtetlach shtg shtick Shu/M shuiski shul shulde Shulman/M shunner shunpike/GR shush shute shutterbug shutterless shuz shyer shyes shyest shylockian shyster si/H sialagogue sialic SIAM siamang Sian/M sib/Y sibe sibilate/N Sibley sibyl/S sibylic sibylla sibyllic sibylline siccative siccing siciliana sickbed/MS sicklebill sicklemia sicklewort sid/A siddo siddur siddurim sideburned sidedress sidehill sidekick/S sideling sidency sident sidepiece siderite sideritic siderolite sideslip/S sidespin sidesplitting sidestepped sidestepper sidestream sidestroke sideswipe sideward/S SIDS sie sieben siebern siecle/S Siegel/M Sieglinda/M Siegmund/M siemens Siena siepi sierran sieux sievert Sifford sig SIGABRT SIGALRM SIGBUS SIGCHLD SIGCLD SIGCONT SIGEMT SIGFPE Siggraph sightless/P SIGHUP Sigil SIGILL SIGINT SIGIO SIGIOT SIGKILL sigmoid sigmoidal/Y signalman signalmen signalment signatory/S signifiable significancy/I significative/PY significs signior signiory/S signori signorina signorino signory/S SIGPIPE SIGPROF SIGQUIT SIGSEGV SIGSTOP SIGSYS SIGTERM SIGTRAP SIGTSTP SIGTTIN SIGTTOU SIGURG SIGUSR SIGVTALRM SIGWINCH SIGXCPU SIGXFSZ sike/G silane sild/S sildenafil silenus silesia silex siliceous silicic silicicolous silicify/N silicious silicle silico silicosis silicothermic silicotic silique silkaline silke silkoline silkweed sillabub sillimanite silone siloxane siltstone/MS siluroid silva/S silvan silverback/MS silverfish silvern silverside/S silverweed silvex silvical silvicolous silvics silvicultural/Y silviculture silviculturist simazine simba simca Simla simmel simms simnel simoleon Simonson/M simony simoom simoon simp/RZ simpatico simper/DGRS simplices simplicial/Y simplifiction simplism simplistically Sims simulacre simulacrum simular simvastatin sinan sinapism Sinatra's Sinbad/M sincipita sincipital sinciput sind sindhi sinecure sinfonia sinfonietta Singborg singeing singleminded singlestick singletree singsong singsongy singspiel sinh Sinhala/M siniboia sinistrorse sinistrous sinkable sinkage Sino sinoatrial sinological sinologist sinologue sinology sinopia sinsemilla sinsyne sinterability sinton sinuate/Y sinuatrial sinuosity sinusitis SIP's siphonless/S siphonlike/MS siphonophore siphonostele siphonostelic siphonostely sipper sippet sippy siree sirenian sirloin sirocco sirra sirrah sirree sirupy sirvente/S siskin sissified sissy/S sisterhood sistrum Siswati Sitar Sitarist sitch/MS sitosterol sitzmark/MS SIV siva/S Siwash sixmo/S sixpenny sixteenmo sixtyfold sixtysomething/MS sizably sizar sizeism sizova skag/N skald skaldic skanky sked skedaddle/DGRS skeevy skeezy skeg skeigh skein/MS skeleta skellum skelp/G skelpit skelter/DG skene skep skepsis skerries skers skery skewback skewbald skiable skiagram/MS skiagraph skiagraphy skiascope skiascopy skidder skiddoo skiddy/R skidoo skiffle skilful/Y skilless skimobile/MS skinflint/MS skinful skinhead skink/R skint skintight skipjack/MS skirl skirr skitter skittery skive/GR skivvy/S skiway skiwear/MS skoal Skopje skort/MS skosh/MS skulduggery skunkbrush/MS skyborne skybox/MS skycap skyey skylounge skyphoi skyphos skyros skysail skysurf/DGRS skysurfing/M skywalk/MS skywrite/DGRS slabber/DG slabbing slangy/PY slantways slantwise slapdash slaphappy slapjack slatelike slather/DGS slattern/Y slatternly/P slaty slaughterous/Y slaveholder/S slaveholding slavey/S Slavicist/M slavocracy Slavonic sleazo/MS sledded sledder sleekit sleepaway sleeplessess sleeplike sleepyhead sleeveless sleevelet slesinger sleuth sleuthhound slickrock slickster/MS slidden slideway slimeball/MS slimmest slimming slimnastics slimpsy slimsy slinky/PRY slipcase slipcover slipform slipknot slipover slippy/R slipshod slipslop slipsole slipstick slipup slithery slitless slivovitz slo slobber/DGRS slobbery slobbish slogger slopestyle slopwork/R slotback slotting slouchy/PRY sloughy Slovakia/M Slovenia/M Slovenian/M slowish slowpoke slub slubber/DG slubbing sludgy/R slue/G sluff slugabed slugfest sluggard/PY sluiceway sluicy slumberous slumbery slumbrous slumgullion slumlord slummer slummy/R slumpflation/M slungshot slurb slurve slushy/PR slut sluttish/PY slyboots smackdown/MS Smalley/M smarm smartie/S smartweed smarty/S smashmouth smashup smatter/R smearcase smeary smectic smegma smeltery smidgeon smileless/Y smirch smirky smithery Smithson/M smithsonite smoggy/R smogless smokeable smokechaser smokeless smokelike smokeproof smokey smolt smoochy smoothbore smoothie/S smoothy/S smorgasbord smothery smoulder SMP smsa/MS smugger smuggest smutch smutchy smutted smutting Smyrna/M Smythe snaffle/DG snaggletooth/D snaggy snaillike snakebit snakebite/MS snakemouth snakeskin snakestrike snakeweed snaky/Y snappe snapshoot/R snark/S snarly snash snatchy snath snathe sndmsg snead sneap sneck sneed sneesh sneezeweed sneezewort sneezy snell/G SNIA/M snick snickersnee snickery sniffish/PY sniffy/PY snigger/DGR sniggle/DG sniperscope/MS snippety snit snitty snobbism snobby snodgrass snollygoster snood snooperscope snoot snooty/PRY snooze/GRS snoozle/DGS snopes snot snoutish snouty snowboardcross snowbound snowbrush/MS snowcap snowcapped snowcat/MS snowdrift snowdrop snowfield snowless snowmaker/MS snowmaking/M snowmelt/MS snowpack/MS snowscape snowshed snowshoeing snowslide snowsuit snubber snubby/P snuffbox snuffy snugger snuggery snuggest soakage soapbark soapless soapmaking soapwort soba sobe sobersided sobersides sobf sobibor Soc soca socage/R socal soccage sochi sociableness socialistically socialite Societe socinianism sociobiology/M sociogram/MS sociolinguistic/S sociologese sociologic sociopath sociopathic sociopolitical sociosexual sociosexuality sockdolager sockdologer sockeye socko socky socle socola soconoco sodalist sodalite sodality sodbuster sodded Soddy sodic sodomite soeren soever sofar softback softbound softcover softhead/D softheaded/PY softhearted/PY softie/S softish softscape softy/S sohn soign soignee soilborne soilge soilless soilure soir soju soke sokeman sokol sokolev sokolov sokolsky sola solacement solanaceous solanin solanine solanum solarium solate/DG solatium soldan solderability soldi soldiership solecistic solemnify solenoidal soleplate soleprint solesmes solfatara solicitant solicitorship solidago solidarism solidarist solidaristic solidus solifluction soliloquist solipsist solipsistic soliton/MS solitudinarian solitudinem solleret soln Solon solonets solonetz solonetzic solopreneur/MS Soloviev solstitial solubleness solubly/I solum solus solute solvate/DN solventless solvolysis solvolytic som Somalia soman somatically somatization/M somatogenic somatological somatology somatomedin somatoplasm somatoplastic somatopleure somatopleuric somatosensory somatostatin/M somatotrophin somatotropic somatotropin somatotype/MS somatotypic somatotypically sombre sombrous somedeal someway/S somewhen somewhither somite somitic Sommerfeld/M somnambulant somnambular somnambulate/N somnambulator somnambulism somnambulist somnambulistic somnambulistically somnifacient somniferous/Y somnolency somoni sonambula sonance sonant sonarman sonatina sonde sone Sonenberg songau songbird songfest songless/Y songsmith songster songtress songwriting sonically sonicate/DN sonicator/S sonless sonneteer sonnobuoy sonobuoy/MS sonogram/MS sonography/M sonorant sonovox sonship sonsie sonsy soomed soothfast sooty/PRY sopaipilla sophistic sophistical/Y sophy sopite/DG sopor soporiferous/P soppy/R sopranino sopsaisana sora sorb/D sorbability sorbable sorbate sorbent sorceress sorcerous sordino sorehead/D sorgo sori soricine sorites Soroptimist/MS sororal sororate sorption/A sorptive/A sorrentine sorrentino sortable sortilege sortition sorus SOS SOSP's sostenuto sot soteriological soteriology Sotho sotol sottish/PY sotun sou soubise soubrette souchong sough soukhouma soukous soule soulless/PY soundable soundboard soundless/Y soundman/M soundmen/M soundstage/MS soupspoon soupy/R sourberry sourceless sourish sourpuss soursop sourwood sousaphone souse/G sout/R soutache soutane Souter's southeasternmost southeastward/S Southernwood Southey southwesternmost southwestward/S souvlaki sovietism Sovietologist/M sovkhoz/S sovran sovranty sowbug/MS soxhlet spa/S spaceband spacefaring spaceflight spaceless spaceman spaceport spacetime spacewalker spacewalking Spacewar spacial spackle/DGMS spacs spacward spada spadeful spadework spadices spadille spadix spaeing spaetzle/M spaghettini/M spahi spahn spake spalding spall/DG spallable spallation/M spanakopita spandrel spandril spang spanworm SPARC's SPARCs spareable spareribs sparge/GR sparkish sparkplug sparred sparrowgrass sparsity spartan sparteine spasmodic spasmodical/Y spasmolytic spasmolytically spastically spasticity spathe spathic spathulate spatiotemporal/Y spatlum spatted spatting spatulate spavin speakeasy Speakerphone spean spearfish spearman specialism/S specialistic speciate/N speciational speciesism speciosity specsartine spect spectate/DG spectatress spectinomycin spector Spector's spectrality spectrofluorimeter/MS spectrofluorometer/MS spectrofluorometric spectrofluorometry spectrographic spectroheliogram/MS spectroheliograph spectroheliography spectrohelioscope spectrophotometrical/Y spectroscopical spectroscopist speculum speechify speedball speedlight speedo/MS speedster speedway speedwell speel speir speiss speleogenesis speleogenetic spellbind/R spelldown spelt/R spelunker spelunking spendable spendthrift spendy spenglerian spermaceti spermagonium spermary spermatheca spermathecal spermatial spermatic spermatid spermatium spermatocidal spermatocide spermatocyte spermatogenesis spermatogenetic spermatogenic spermatogonial spermatogonium spermatophore spermatophytic spermatozoa spermatozoal spermatozoan spermatozoid spermatozoon spermicidal spermicide spermidine spermiogenesis spermophile sperrylite spessartite sphagnous sphagnum sphalerite sphene sphenodon sphenodont sphenoid sphenoidal sphenopsid spheral sphericity spherometer/MS spheroplast spherulite spherulitic sphery sphincter sphincteral sphinges sphingid sphingosine sphygmograph sphygmographic sphygmography sphygmomanometer/MS sphygmomanometric sphygmomanometrically sphygmomanometry sphynx/MS Spica/S spicae spicate spiccato spiceberry spicery spicula spicular spiculate/N spicule spiculiferous spiculum spiderweb spiegeleisen spiel/R spiffy/R spikelet spikelike spikenard spile/DGS spillable spillikin/S spillway spilosite spilth spinco spindly spindrift spinel spinelle spinescent spinet spinifex spinless spinmeister/MS spinneret spinnerette spinney/S spinodal spinoff spinor spinosely spinosity spinous spinout/MS spinrad spinse spinsterhood spinsterish spinthariscope spinto spinule spinulose spiracle spiracular spiraea spirant spirea spireme spirillum spiritism spiritist spiritistic spiritless/PY spiritoso spiritous spiritualism spiritualist spiritualistic spiritualty spirituel spirituelle spirituous Spiro/M spirograph spirographic spirography spirogyra spirometer/AMS spirometric/A spirometry/A spirt spirula spiry spital spitball spitted spitter spittlebug/MS spittoon/S Spitz splashboard splashdown/S splatter splayfoot/D spleenful spleenwort spleeny splendent splendiferous/PY splendorous splendrous splenectomy splenetically splenic splenius splenomegaly splent spleuchan splore spluttery spodumene spoilable spoilsman spoilsport spoilt spokeshave spokesmodel/MS spokespeople spokesperson/M spokeswoman spoliate/N spoliator spondaic spondee spondylitis spongeware spongiform sponson sponsorial spontoon spookish spoondrift spooney spoonsful spoony/R spoor sporangial sporangiophore sporangium sporicidal sporicide sporiferous spork/MS sporocarp sporocyst sporocystic sporogenesis sporogenic sporogenous sporogonic sporogonium sporogonos sporogony sporophore sporophyll sporophyte sporophytic sporopollenin sporotrichosis sporozoan sporozoite sportfisherman/M sportfishermen/M sportful/PY sportif sportsmanlike/U sportswoman sportswriting sporulate/NV Sposato spottable sprat spreadability spreadable sprent sprigging sprightful/PY sprigtail springal springald springbok/S springe springtail/S springtide springwood sprit spritsail Sproul/M sprucy/R spry/RTY spryer spryest spryness spss spudded spudding spumone spumous spumy spunbonded spunkie spurrey/S spurry/R spurtle sputa sputum spuyten SQL's squab/S squadded squadding squalene squally/R squama squamae squamate/N squamosal squamose squamulose squaresville squarish/PY squark squashberry squattest squatty/R squawbush squawroot squeegeeing squeezability squeezable squelchy squib/S squidded squidding squiffed squiffy squiggle/DGS squiggly squilgee squill/S squilla squillae squinch squinny/DG squinty squirarchy squirearchy squirish squoosh squooshy SRAM Sranan/M Sri/M SSE SSRI SST SSW stabat stabber stabile stablemate stablish stablishment staddle stade stadia stadtholder stadtholderate stadtholdership stagestruck stagey staggerbush staggery stagging staggy staghound stagnancy Stahl/M stainability stainable stakeout Stakhanovite/M stalactitic stalagmite/MS stalagmitic Stalinism/M Stalinization/M stalkerazzo stalkless stalky stallard stalworth staminal staminodium staminody stammel standardbred standaway standbys standee standeth standoffish/PY standout standpat standpatter standpattism standpipe stang Stanhope/M stanine Stanislavski stanite stannard stannary/S stanol stanzaic stapedectomy stapedes stapedial stapelia stapes staph staphylinid staphylococcal staphylococcic starbird stardust starets Stargate/M starless starlike starlit starre starveling stases statable statant stateable statecraft statedly statehouse stateside statical statice statin/MS stational statism statist stato statoblast statocyst statolatry statolith stator/S statoscope statusy statutable statz Staunton staurolite staurolitic stavesacre stavropoulos stavudine staycation/M steamroll/R steapsin stearate stearic stearin stearine steatite steatitic steatolysis steatopygia steatopygic Steele/M steelhead steelie/M steelwork/RS steelyard Steen/M steenbok steeplechase/R steeplejack steerable steerage steerageway steersman steeve/G Stefan/M steffens stegosaur stegosaurus steichen steinbecks stela stelae stelar stele stellate stelliform stellify stemless stemma stemmata stemmer stemmy/R stemson stemware Sten stenchful stenchy Stendhal Stendler steno/S stenobathic stenograph stenographic stenographically stenohaline stenophagous stenos/D stenosis/A stenotherm stenothermal stenothermy stenotic stenotopic stenotypist stenotypy stentor stentorian stentorophonic stephan stephanotis stepladder steplike steprelation steradian stercoraceous stere stereobate stereochemical/Y stereochemistry stereogram/MS stereograph stereographic stereographically stereoisomer/S stereoisomeric stereoisomerism stereological/Y stereology stereometric stereomicroscope/MS stereomicroscopic stereomicroscopically stereophonically stereophony stereophotographic stereophotography stereopsis stereopticon stereoregular stereoregularity stereoscope stereoscopic stereoscopically stereospecific stereospecifically stereospecificity stereotactic stereotape stereotaxic stereotaxically stereotropism stereotypy steric/S sterically sterigma sterilant sterios sterlet sterna Sternberg/M sternforemost sternite sternmost sternocostal sternpost sternson sternutation sternutator sternutatory sternward/S sternway steroidal steroidogenesis steroidogenic sterol stertor stertorous/Y stet stethoscopic stethoscopically stetted stettin stetting stevie stewpan stibine stibnite stichomythia stichomythic stichomythy stickball stickful stickhandler stickit stickseed sticktight stickum stickup stickweed stickwork sticle stiction/M sticy stidger stiffish stigmal stigmasterol stigmatic stigmatically stigmatism stigmatist stilbene stilbestrol stilbite stillman stillroom stillwater stillwell stilly stime stimulator/S stingaree stingless stingray/MS stinkard stinkbug/MS stinkhorn stinkpotters stinkstone stinkweed stinkwood stion/G stipe/DS stipel stipellate stipendiary stipitate stipites stipular stipulator stipulatory stipule/D stirabout stirk stirp/S stirpes stitchery stithy/S stoat/MS stockbreeder stockbrokerage stockbroking stockcar stockinet stockinette stockish stockist stockkeeper stockman stockpot stockproof stocktaking stockyard stockynges stodge/G stogie/S stogy/S stoical/Y stoichiometrically stokehold stokehole stokesia stolidity stoll/NX stolon stolonate stoloniferous/Y stolzenbach stoma/S stomachache stomachic stomachically stomachy stomal stomata stomatal stomate stomatitis stomatologic stomatological stomatologist stomatology stomatopod stomodaeal stomodaeum stomodeal stomodeum Stone/M stonecrop stonecutting stonemasonry stonework/R stoney Stonybrook/M stonyhearted/P stoopball stopband stope/S stoplight/S stopple/DG storable/A storax storeria storeship storewide Storey/DS storksbill storybook/S storywriter stotin stouthearted/PY stoutish stovepipe/S stowaway/MS stowe stowey STP STP's strabismic strabismus strafaci straggly/R straightbred straightedge straightish straightjacket straightlaced strainometer/MS straitlaced/PY strake stram stramash stramonium stranahan strandline strangury straphang/R strapless strappado strapper strategical strath strathspey/S strati straticulate stratificational stratiform stratocracy stratocumulus Stratton/M stratus stravage stravinsky strawboard strawman streaky/PR streambed streamlet streamside streek strengthless/P strenuosity strep streptobacillus streptococcal streptococcic streptokinase streptolysin streptomyces streptomycete streptothricin stressless/P stressor/MS stretchability stretta stretti stretto/S strewment stria striae strick Strickland/M strickle/DG stridden stridence stridor stridulate/N stridulatory stridulous/Y strifeless strigil strigose strikebound strikeless strikeout strikeover Strindberg stringboard stringcourse stringency stringendo stringhalt/D stringless stringpiece stripeless stripfilm stripling strippable stript stripy/R strobila strobilar strobilation strobile strobilus stroboscope stroboscopically strobotron Stroganoff/M Strom/M stroma stromal stromata stromatal stromatic stromatolite stromatolitic stromeyerite strongbox strongheart strongish strontia strontianite strontic strophanthin strophic strophoid stroud/G strow/G structuralism structuration/M structureless/P strudel struma/S strumae strummer strumose strumpet strunt struthious strychninism stubblefield/S stubbly stuccoes stuccowork studbook/S studding studentship/S studhorse stuffless stull stum/R stumblebum/MS stumming stunner stunsail stuntman/M stuntmen/M stuntpeople/M stuntperson/M stuntwoman/M stuntwomen/M stupa stupe stupefacient stupefaction stuporous Sturbridge/M sturch sturley Sturm/M sturt stye/GS styka stylar stylebook styleless/P stylet styliform stylite stylitic stylobate stylograph stylographic stylographical/Y stylography styloid stylolite stylopodium stymieing styptic styrax suability suably suasion suasive/PY subacid/PY subacute/Y subadar subadult subaerial/Y subagency subagent subahdar suballocate subalpine subalternate/NY subantarctic subapical Subapically subaquatic subaqueous subarctic subarea subatmospheric subaudible subaudition subaverage subbase subbasement subcabinet subcapsular subcategorization/M subcelestial subcellular subcentral/Y subchaser subchloride subclavian subclimax subclinical/Y subcollegiate subcommunity/MS subcompact subcontinental subcontraoctave subcontrariety subcontrary subcool subcordate subcortex subcortical subcritical subcrustal subcultural subcutaneous/Y subdeacon subdeb subdebutante subdepot subdiaconate subdividable subdominance subdominant subduction/M subdwarf/M subdwarves subeconomy/MS subedit subeditor subeditorial subemployed subemployment/MS subentry/S subepidermal/Y suberect subfamily/S subfix subfolder/MS subfossil subfragment/MS subfreezing subgenus subglacial/Y subglottal subgrade subgrammar subgross subhead/G subhuman subhumanity subi subic subinfeud subinfeudate/N subinfeudatory subinhibitory subirrigate/N subito subj subjacency subjacent/Y subjectivism subjectivistic subjectless subjoin subjugator subjunction subjunctive subkingdom sublanguage/MS sublate/DGN sublet sublethal/Y sublevel sublicense/DGRS sublieutenant sublimable sublimity subline sublingual subliterature sublittoral sublunar subluxation submandibular submarginal/Y submaxilla submaxillary submediant submenu/MS submergence submergible submerse/DGN submetacentric submicrogram/MS submicron submicroscopic submicroscopically subminiature submiss submitochondrial submontane submucosa submucosal/Y submucous submultiple submunition/M subniche/MS subnormality subnotebook/MS subnuclear suboceanic subopposite suboptimization/M suboptimum suborbicular suborbital suborder subornation subovate suboxide/S subpar subparallel subphylum subplot/S subpoenable subpolar subpotency subpotent subprimate/MS subprincipal subprofessional subreption subreptitious/Y subring subrogate subsaline subsatellite subsaturated subsaturation subsectio subserve subserviency subshrub subshrubby subsidence subskill/MS subsonic subsonically subspecific substage substanceless substantiality/IU substantival/Y substellar substituent/S substitutional/Y substorm substratosphere substratospheric substructural subsumption subteen subtemperate subtenancy subtenant subtend subterminal subterraneous subtetanic subthreshold subtile/PRTY subtilis subtilisin subtilty subtonic subtotal subtropic/S subtropical subulate subvention subventionary subversionary subviral subvocal/Y subvocalization/M subwoofer/MS succedaneous succedaneum succedent successional/Y succinate succinyl succinylcholine succory succotash succuba succubi succulence succulent/Y suchlike sucralose sucrase sucre sucrose suctional suctorial suctorian sudanic sudatorium sudatory sudoku sudoriferous sudorific sudsless sudsy/R suede suet suey suff sufferable/P sufferableness/I sufferably/I suffixation suffragan suffragist/S sugarcane sugarcoat sugarhouse sugarloaf sugarplum sugary suint sukarno sukiyaki sulamite sulamith sulcate sulci sulcus sullage sultanate sultaness sulzberger sumach sumatriptan Sumeria summa summability summable summae summated summates summating summational summerhouse summersault summerwood summery summiteer Sumner/M sumptuary sunay sunbath sunbathe sunbird sunbow sunburst/S sunchoke sundae/S sundew sundrops sunfast sunlamp sunless sunn sunna sunroof sunscald sunstroke sunstruck sunsuit sunup sunward/S sunwise SUNY superable/P superably superabound superabundance superabundant/Y superachiever superacknowledgment/MS superadd superaddition superadministrator/MS superagency/MS superalloy/MS superaltern/MS superannuate/DN superbad superbillionaire/MS superbug/MS supercalender supercargo supercarrier/MS supercell supercenter supercharge/R superchurch/M superciliary supercity superclub/MS supercluster/MS supercoil/MS supercollider/MS supercompetitive superconduct/DGSV superconductivity superconductor/S superconglomerate/MS supercontinent/MS supercool supercross supercurrent superdelegate/MS superdominant superelevate/DGNS supereminence supereminent/Y superempirical superencipher superencipherment supererogation supererogatory superexpress superfamily superfecundation superfetation superficies superfine superfirm superfix superflack superfluid superfluidity supergalaxy supergene/MS supergiant/MS supergraphics supergravity supergroup/MS superheat/RS superhelices superhelix/M superheterodyne superhigh superhumanity superhype superieure superimposable superimposition superincumbent/Y superindividual superinduce superinduction superinfection superintendence superintendency superjacent superjet/MS superjock/MS superjumbo superliner superluminal superlunar supermacho superman supermicro superminicomputer/MS supermoon/MS supernal/Y supernaturalist supernaturalistic supernormality supernovae supernumerary superorder superordinate superorganism superorgasm superovulation/M superoxide superparasitism superpatriot superpatriotic superpatriotism superphosphate superphysical superplastic superport superpower/DS superpro superregional supersaturate/DN superscale superschool superscout superscribe superscription supersedeas supersedure supersensible supersensory superserviceable supersession supersessive supersharp supersonically superspreader/MS superstar superstation/MS superstratum superstring superstud supersubstantial supersubtle supersubtlety supersymmetry supersystem supertanker supertax supertonic supervenience supervenient supervention supervisee supinate/AN supinator suppl supplantation supplejack suppletion suppletive suppletory suppliance suppliant/Y supplicatory supportability supportableness supportably/I supposably supposal suppositional/Y suppositious supposititious/PY suppositive/Y suppository/S suppressant suppressibility suppurate/NV supr suprachiasmatic supraglottal supralaryngeal supraliminal/Y supramolecular supranationalist supranationality supraorbital supraprotest suprarational suprarenal supravital/Y suprematism supremum surah surbase/D surcingle surcliffe surcoat/S surefire surefooted/PY suretyship surfable surfboard/RS surfboat/S surficial surfperch surg surimi surjection surjective surmountable surmullet surpassable surplice surplusage surprint surprisal surra surrealistic surrealistically surrebutter surrejoinder surroyal surtout survivalism/M survivance Sus susceptance susceptive/P susceptivity suspenseful suspensoid suspensory suspiration suspire/DG susquehanna sustentacular sustentation sustentative sustention susurrant susurration susurrous susurrus sutra suttee sutural/Y SUV's suzerain suzerainty Suzette Svedberg Svetlana/M SW swabber swabbie/M swadesh swage swagging swagman swainish/P swale swallowable swallowtail swallowwort swang swanherd swannery swanning swansdown Swansea/M swanskin Swarthout/M swartz swashbuckle/GR swayback/D swearword sweatbox sweaterdress/S sweatpants sweatshop/M sweatsocks sweazey sweepback sweepy/R sweetbread/MS sweetbrier sweetgrass sweetmeat sweetshop sweetsop swellhead/D swellheaded/P swelter/D swidden swigger swill/R swimmable swimmeret swimmy/PRY swinburne swineherd swingably swinge swingeing swingletree swingman/M swingmen/M Swink swishingly switchable switcheroo switchgrass switchyard/MS swith/R swivet swole swoopy swoosh swop swordlike swordsman swordsmanship swot/S swotted swotting sybarite sybaritically sybert sycamine syce sycee syconium sycophancy sycophantish/Y sycophantism sycosis syenite syenitic Sykes syli syllabarium syllabary syllabically syllabicate/N syllabub syllepsis sylleptic syllogist syllogistically Sylow sylph sylphid sylphlike sylvanite sylvatic sylviculture sylvie Sylvie's sylvine sylvite sym symbiontic symbiote symbiotically symbolist symbolistic symbology symington symmetallism symonds sympathin sympatholytic sympathomimetic sympatric sympatrically sympatry sympetalous sympetaly symphonically symphonious/Y symphonist symphyseal symphysial symphysis symplectic sympodial/Y symposiarch symposiast symptomatically symptomatologic symptomatological/Y symptomless synaeresis synaesthesis synagogal synalepha synaloepha synapomorphy synapsid synapsis synaptically synaptonemal synaptosomal synaptosome synarthrodial/Y synarthrosis syncarpous syncarpy synch/G synchro/S synchrocyclotron/MS synchroflash synchromesh synchronal synchroneity synchronic synchronical/Y synchronistic synchroscope synclinal syncline syncopal syncopator syncope syncretic syncretism syncretist syncretistic syncytial syncytium syndactylism syndactyly syndesis syndesmosis syndesmotic syndetic syndetically syndical syndicalism syndicalist syndicator syne synecdoche synecdochic synecdochical/Y synecologic synecological/Y synecology synectic/S synectically synephrine syneresis synergetic synergic synergically synergid synergist synergistically synesis syngamy syngas Synge syngeneic synizesis synkaryon synodal synodic synodical synonymic synonymical synonymist synonymity synoptical/Y synostosis synovial synovitis synsepalous syntagma synthesist synthetase synthetical/Y syntonic syntonically syphilis syphilologist syphilology Syrah/M syren syrette syringa syringomyelia syringomyelic syrinx/S syrphid sysgt syst systaltic systat systematical systematism systematist systemically systemless systemwide systole syzygial syzygy Szechuan Szilard tabac tabanid tabard tabbed tabellen tabernacular tabes tabetic tabla tablature tableaux tableful tablespoonsful tableware tabloid tabor/DGRSZ taborin/S tabu tabun/M TACAN tace tacet tach/M tachinid tachism tachist tachiste tachistoscope tachistoscopic tachistosopically tachs tachyarrhythmia/M tachycardia tachygraphic tachygraphical tachygraphy tachylite tachymeter/MS tachyon/MS taciturn taciturnity tackboard/MS tackify/R tacky/RSY tacloban taconite tacrine tactician tactility taction tactless/Y tad tadalafil tadpole tae taeniacide taeniasis tagalong tagboard tagine/S tahini/M tai/MS taiga tailboard tailbone tailcoat/D tailhook/MS taille tailless taillight/MS taillike tailorbird tailoress tailpiece tailrace tailspin/MS tailwater tailwind/MS taintless taipan taiwanese taka takeout talc talcose talcum talebearer talebearing Taleggio/M talentless talesman taleysim tali talipes talipot talisman talismanically talkathon/MS talladega tallage tallahatchie tallahoosa tallboy tallchief talleyrand tallgrass tallish tallith tallithim tallowy tallyman talmudic talmudical Talmudism talus tam tamandua tamarau tamari tamarillo tamarin tamarisk tambala tambour/R tamburitza tameable tameless Tamil tampala tamperproof tampion Tamron/M tanager Tanaka/M Tananarive tanbark tance tanga tangelo tangere tangibility/I tanglement tangram tanh tanka tankage tankful tankini tannage tannate tannenbaum tannest tannic tannish tansy/S tantalate tantalic tantalite tantara tantivy tantra tantric tanuki tanzanite tapa tapeline tapenade tapeta tapetum taphole taphonomy tapioca tapis tapley tappa taproom/S tapster/S taqueria tara/S taraday tarantara tarantism Tarascan taraxacum Tarbell/M tarboosh tarbush tardigrade tardive tardo tare targe targetable targo tarheelia tarlatan tarmac tarmacadam tarn tarnishable taro/S tarok tarot tarpaper tarragon tarrant tarre tarriance tarsal tarsi/R tarsus tartan tartarughe Tartary tarte tartish/Y tartlet/S tartrate/DS tartuffe taruffi tase/DGS Taser/M taskmistress taskwork Tass tasse tassel/M tasso tastemaker tat tatami tate tatian tatin tatler tatras tatsoi tatted tatterdemalion tattersall tattooist taui taupe taurine taurocholate taurocholic taurog Taurus taussig tautog tautologous/Y tautomer tautomeric tautomerism tautonym tautonymic tautonymous tautonymy taverna taw/S tawes tawie tawpie tawse taxa taxability taxeme taxemic taxidermic taxidermist/MS taxidermy taxies taximan taximeter/MS taxon/S taxonomist/MS taxus taxying Taylorism/M tazza TCDD tchaikovsky tchotchke teachability teachably teachership teacupful teak/MS teapoy teardown/MS teargas tearjerker tearle tearless/Y tearlessnss tearoom/S tearstain/D teary/RY teaspoonsful teatime teatro teazel teazle/D tebibit/MS tebibyte/MS technetronic technic/S technion technocracy technocrat technocratic technol technologic technophile/MS technophobe/MS technophobia technopreneur/MS technostructure/MS techy/MS tecta tectal tectonism/M tectum tecum ted/S tedded tedding teenie/R teensploitation/M teentsy/R teeny/R teenybop teenybopper/MS teepee teeter teeterboard teetotal teetotalism teetotalist teetotum tegmen tegmental tegmentum Tegucigalpa/M tegument tegumental/I tegumentary/I teiid Tejano/M tektitic tel/Y telamon telamones telangiectasia telangiectasis telangiectatic telco/MS tele telecamera telecast/R telecine telecom/MS telecourse teledu telefacsimile telefax telefilm teleg telegony telegraphese telegraphically telegraphist telekinetic telekinetically teleman telemann telemark telemedicine/M telemetrically telencephalic telencephalon telenovela/MS teleologic teleologist teleonomy teleost teleostean teleostome telephonically telephonist/S telephotographic teleplay teleportation teleran telescopically telesis telethermoscope telethon teletypesetting teletypewrite/R teletypist teleutospore teleutosporic teleview/R televisionally televisionary televisual telia telial telic telically teliospore teliosporic telium telli tellurian telluric telluride tellurite tellurometer/MS tellurous telocentric telogen teloic telome telomerase telomere telophase telos telotaxis telpher telson temblor temerarious/PY tempeh tempera temperable tempi templeman templet temporality temptable tempura tenability/U tenably tenace tenaculum tenantable tenantless tenantry tench/S tenda tendance/I tendencious tendentious/PY tenderhearted/PY tenderometer/MS tendinopathy tendinosis tendinous tendresse tendril/S tendrilous tenebrific tenebrionid tenebrious tenebrism tenebrist tenementary tenenbaum tenesmus tenex tenge tenia teniacide teniasis tenne/R tennessine tennies tennist tenosynovitis tenour tenpenny tenpin/S tenpounder tenrec tensility tensimeter/MS tensiometer/MS tensiometric tensiometry tensity tensometer/MS tentacular tentage tenterhook/S tentie tentless tentmaker tentpole/MS tenty tenuis tenuity tenurial/Y tenuto teocalli teonanacatl teosinte tepa tepee tephra tepidity TEPP teppanyaki ter/DT terabuck/MS teraflop/MS terahertz terai teraph teraphim teratocarcinoma teratogen teratogenesis teratogenicity teratologic teratological teratologist teratoma teratomatous terawatt/MS terbutaline terce tercentenary tercentennial tercept tercet terebene terebic terebinth terebinthine teredines teredo terephthalate terete terga tergal tergite tergiversate/N tergiversator tergum teriyaki termagant/Y terminably terminational termined termining terminism termitarium termless termtime ternate/Y terneplate terpene terpeneless terpenic terpenoid terpineol terpolymer Terpsichore/M terr terra terrae terram terrane terraqueous terrarium terrazzo Terre/M terrene terreplein terret terricolous terrifically terrigenous territorialism territorialist territoriality terrorless tertre tervalent Tervuren tery tesla/MS tessera Tesseract tessie tessitura testa testacean testaceous testacy/I testae testatrix testcross testee/MS testis teston testoon testosterone testudo tetanal tetanic tetanically tetany tetartohedral tetched tetchy/R tete/R teth tetherball tetra tetrabasic tetrabasicity tetracaine tetrachord tetracid tetrad tetradecyl tetradic tetradrachm tetradymite tetradynamous tetraethyl tetraethyllead tetragonolobus tetragrammaton tetrahedrite tetrahydrate/D tetrahydrocannabinol/M tetrahydrofuran tetrahydroxy tetrahymena tetralogy tetramer/MS tetrameric tetramerous tetrameter tetramethyl tetramethyllead tetranitrate tetraploid tetraploidy tetrapod tetrapyrrole tetrarch tetrarchic tetrarchy tetraspore tetrasporic tetratomic tetrazolium tetri tetrode/S tetrodotoxin tetrxide tetryl tetter tewfik textbookish textuary thalamencephalon thalamic thalamically thalamus thalassemia thalassemic thalassic thalassocracy thalassocrat thaler Thalia/M thalidomide thalli thallic thalloid thallophytic thallous thallus/S thames Thanatos thane thaneship thang Thani thankworthy thar Thatcherism/M thaumaturge thaumaturgic thaumaturgist thaumaturgy Thayer/M Thea/M theanine theast theat theatricalism theatricality thebe theca thecae thecal thecate thecodont thee theelin theelol theist/MS theistical/Y thematically themself thenar thenceforward/S theobromine theocentric theocentricity theocentrism theocrat theocratic theocratical/Y theodicy theodolite theodolitic theodosius theogonic theogony theol theologic theologue theonomous/Y theonomy theophanic theophany theophylline theorematic theosophical/Y theosophist theosophy therapeusis therapeutically therapeutist therapsid thereabout thereat thereinafter thereinto thereunto therewithal theriac theriaca theriacal therian/M theriomorphic therm thermae thermic thermically thermion thermobaric thermochemical thermochemist thermochemistry thermocline thermocoagulation thermoduric thermodynamical thermodynamicist thermoelectron thermoelement Thermofax thermoform thermoformable thermogram/MS thermograph thermographic thermographically thermography thermohaline thermojunction thermolabile thermolability thermoluminescence thermoluminescent thermolysis thermolytic thermomagnetic thermomagnetically thermometrically thermoperiodicity thermoperiodism thermophile thermophilic thermophilous thermoplasticity thermopylae thermoreceptor thermoregulation/M thermoregulator thermoregulatory thermoremanence thermoremanent thermoscope thermoset thermosiphon/MS thermosphere/MS thermospheric thermostability thermostatically thermotactic thermotaxis thermotropic thermotropism theroelectricity thesaural thesp Thessalonian/S Thessaly thetic thetically Thetis theurgic theurgical theurgist theurgy thew thiabendazole thiaminase thiamine thiazide thiazine thiazole thickety thickhead/D thickset thievery thievish/PY thighbone thigmotaxis thigmotropism thill/S thimbleberry thimbleful/M thimblerig thimblerigger thimblesful thimbleweed thimerosal thinclad thingamabob thingumajig thingummy thiocarbamide thiocyanic thioguanine thiol thiolic thionate thionic thiopental thiophene thiophosphate thioridazine thiotepa thiouracid thiourea thir thiram thirdhand thirl thirtyfold thirtysomething/MS thistly thitherto thitherward thixotropic thixotropy tho/H thod tholdy thole/DGRS tholeiite tholeiitic tholepin Thomistic/M thoraces thoracic thoracically thoracotomy thorax/S thoria thorianite thoric thorite thornback thornbush thornless thornlike thoroughpin thoroughwort Thorstein thoughtway thousandfold Thrace/M Thracian thraldom thralldom thrasonical/Y thraw thrawart thrawn/Y threadfin threadless threadlike thready/P threepence/S threepenny thremmatology threnode threnodic threnodist threnody threonine thriftless/PY thrips thriven thro throatlatch throe thrombin thrombocyte thrombocytic thrombocytopenia thrombocytopenic thromboembolic thromboembolism thrombokinase thrombophlebitis thromboplastic thromboplastically thromboplastin thrombosed thrombospondin thrombotic thromboxane throneberry throstle throttleable throttlehold throughither throughother throughway throve throwaway throwster thrustful/P thrustor Thuban/M thudded thumbhole thumbprint/MS thumbscrew thunderbird thundercloud/MS thunderflower thunderhead thunderpeal thundershower/MS thunderstone thunderstrike thunderstroke thurber thurible thurifer Thuringer/M thurl thwap thwartwise thwump thylacine thylakoid thyme/MS thymectomy thymey thymic thymidine thymine thymocyte thymol thymosin thymus thymy thyrglobulin thyristor/MS thyrocalcitonin thyroidectomy thyroiditis thyrotoxicosis thyroxin thyrse thyrsi thyrsus thysanopteran thysanuran ti/N tial tiality tian tiara tiated tibial tiburon tical ticism tickicide ticklebrush tickseed ticktack ticktacktoe ticktock ticky ticonderoga tictac tiddledywinks tiddlywinks tideless tidemark tideway tieback tieck tieing tieless tiemannite Tientsin/M tiepin tierce tiercel tigerish/PY tigerlike tightfisted tightrope tightwad/MS tightwire tighty tiglon tigon tijuana tike tiki tikka til/Y tilapia tilefish tillandsia tillerman/M tillermen/M tillich tillie tiltable tiltmeter/MS tiltyard timbal timbale timberhead timberline timberman timberwork timbrel timbrelled timekeeper timekeeping timeous/Y timepleaser timesaving timeserver/S timeserving timework/R timmy timocracy timocratic timocratical timolol timorous/PY timpani/M timpanist Tina/M tinamou tinc tincal tinct tinctorial/Y tinderbox tinea tineal tineau tinful ting/NY tingeing tinhorn tinkly tinman tinnitus tinstone tintinnabulary tintinnabulation tintless tintoretto tinwork/MS tipcart tipi tippecanoe tippet tipstaff tipstaves tipstock Tirana/M tirewoman tisane tissuey tissular titaness titania Titania's titanically titaniferous titanism titanous titbit titfer tithable tithonia titi titivate/N titlark titleholder/S titlist titmice tito Tito's Titoism titrant titratable titrator titrimetric titrimetrically tittie tittivate tittle tittup/DG tittupy tix tiyin TN toadstool toastmaster/MS toastmistress tobacconist/MS tobies toboggan/GMRS tobogganist Toby/M Tocharian tocher tocopherol tocsin tod toddy/MS tody/S toea TOEFL toehold/MS toeing toeless toepiece toeplate toff toffy/S toft togavirus toggery togue Tohono toile toiletry toilette toilful/Y toilworn Tok toke tokenism tokonoma tola toland tolar tolbooth tolbutamide tole/G tolerator tolidine tollbooth/MS tolley tollman tollway tolu toluate toluic toluidine toluol tolyl tolylene Tom/M tomatoey tombac tombigbee tombless tombolo tomboy tomboyish/P tomcat tomcod tomentose tomentum tomfoolery Tomlinson/M tommyrot tomogram/MS tompion Tompkins tomtit tondi tondo toneme tonemic tonetic/S tonetically tonette tonga tongueless tonguelike tonically tonicity tonio tonn/R tonne/RS tonneau/S tonometer/MS tonometric tonometry tonoplast tonsillar tonsillectomy tonsorial tonsure/DG tontine tonus toolhead toolholder toolhouse toolroom toolshed toom toomey toon toothache/MS toothfish toothless toothlike toothsome/PY toothwort topcross topdressing tope/S topee topflight topful topfull topheavy tophi tophus topi topiary topicality topkick topknot topless toploftical toplofty/PY topmast topminnow topograph/R topoi topoisomerase topologise topologist toponym toponymic toponymical toponymy topos topper topsail topstitch topwork toque tor torchbearer torchlight torchon torchwood torchy/R toreador torero toreutic/S tormentil tormentor tornadic tornillo torpidity torquate torr/X Torrance/M torrential/Y torridity torsade torsi torte/S torticollis tortious/Y tortoni tortricid tortrix tortuosity torturous/Y torula Tory/S tosh tosspot tostada tostone totalism totaquina totaquine totemically totemism totemist totemistic totemite tother totipotency totipotent toto tottery totting toucan touchback touchhole touchline touchmark touchwood toughie/S toughy/S toulouse toupee touraco tourbillion tourbillon Tourette's Touretter touristic touristically tourmaline tournedos tourney/DGS tourniquet/S touse/G tovarich tovarish towage towerlike towhee towie towline towmond townee townhome/MS townlet townley townsfolk townswoman townwear towny/S towpath towplane/MS towrope towsley toxaphene toxemia toxemic toxicant toxicogenic toxicologic toxicological/Y toxicologist toxicology toxicosis toxigenic toxigenicity toxoid toxophilite/S toxophily toxoplasma toxoplasmic toxoplasmosis toylike toynbee toyon TPN trabeate/DN trabecula trabecular trabeculate traceability/U traceably tracheae tracheal tracheary tracheate/D tracheid tracheidal tracheitis tracheobronchial tracheolar tracheole tracheophyte tracheostomy tracheotomy trachoma trachomatous trachyte trachytic tracklayer tracklaying trackman/M trackmen/M trackside trackwalker tractableness tractably tractarians tractate tractional tradeable tradecraft/M tradescantia tradespeople tradevman traditionary traditionless tradtionalist traduce/DGR traducement trafficable tragacanth tragedienne tragi tragical tragicomedy tragicomical tragopan tragus trailblazer/MS trailblazing trailbreaker/MS trailerable trailerist trailerite trailership trailless trainability trainable/A trainband trainbearer traineeship trainferry trainful trainload/MS trainsick traitoress traitress traject trajection Trakehner tral/A tramadol tramcar tramline tramming tramontane trampoline/GR trampolinist tramroad trancelike trangam trank transactinide transactor transamination/M transaxle/MS transcendency transcendentalist transcranial transcriptase transcriptional/Y transcriptionist/M transcutaneous transdermal transdisciplinary transduce/DG transductional transection transeptal transfection/M transferase transferential transferrin transfiguration transfigure transfixion transformant/S transformationalist/M transfusible transfusional transglottal tranship transhumance transhumant transilluminate/N transilluminator Transite/M transitio translatory translocate/N transmarine transmembrane transmigrate/N transmigrator transmigratory transmissibility transmissive transmissivity transmissometer/MS transmontane transmountain transmutable transmutative transnational transnatural transonic transparence transpersonal transphobia/MS transpicuous transpierce transplacental/Y transplantability transpolar transpontine transportational transpositional transposon Transputer transracial transsexual transsexualism transshape transthoracic transthoracically transubstantial transubstantiate/N transudate/N transude/DG transuranic transuranium transurethral Transvaal/M transvaluate/N transvalue transvestism transylvania Transylvania's trapeze trapezist trapezius trapezohedron trapline/MS trapnest traprock trapshooter trapshooting trapunto trashman/M trashmen/M trass trattoria traumata traumatically traumatism trave travois/S trawlerman trayal trayful trazodone treacle treacly treadless treadwell treasonably treasurable treasurership treatability treatable trebly trebucket trecento tred tredecillion treece treehopper treeing treeless treen treenail trehalase trehalose treillage trekker trelliswork trematode tremolant tremolite tremolitic tremolo tremulant trenail trenchancy trendoid trepan/S trepanation trepang trepanned trepanning trephination trephine/DG trepid trepidant treponema treponemal treponematosis treponematous treponeme tressel trestletree trestlework tretinoin Trevelyan trews trey/S tri/S triacetate triacid triadically trialogue triangularity Triangulum triarchy Triassic triaxial triaxiality triazine/S trib tribalism tribasic triboelectric triboelectricity tribological tribologist tribology triboluminescence triboluminescent tribophysics tribrach tribrachic tribromide tribunate tribuneship tributyltin tricarboxylic tricarpellary tricarpellate trice/G tricep/S triceps/S triceratops trichiasis trichina trichinal Trichinella/M trichinosis trichinous trichite trichlorfon trichloride trichocyst trichocystic trichogramma trichogyne trichoid trichome trichomic trichomonacidal trichomonacide trichomonad trichomonadal trichomonal trichomoniasis trichopteran trichothecene trichotomous/Y trichromat trichromatism trichrome trichuriasis trickish/PY tricksy/PR triclad triclinic triclinium triclosan tricolette tricorn tricorne tricornered tricot tricotine tricotyledonous trictrac tricuspid tricycle/S tricyclic tridimensional tridimensionality triduum triene triennium trierarch trierarchy triethiodide triethyl trifacial trifid trifluoperazine trifluralin trifocal trifoliate trifoliolate trifolium triforium triform trifurcate/N trigeminal triggerfish triggerman/M triggermen/M trigging triglyceride/S triglyph triglyphic triglyphical trigon trigonometrical/Y trigonous trigraph trigraphic trihalomethane trihybrid trihydroxy triiodothyronine trijet trilateral/Y trilaterality trilby/S trilinear trilingual/Y triliteral triliteralism trillium trilobate/N trilobed trilocular triloculate trimaran trimble trimeric trimerous trimestral trimestrial trimeter trimethoprim trimetrogon trimonthly trimorph trimorphic trimorphism trimorphous trimotor trinal trinary trindle/DG trine trinitrotoluene trinketry trinkums trinocular trinomial trinucleotide triol triolet triose tripack triphammer/MS triphenylmethane triphibian triphibious triphosphatase triphosphate triphthong triphthongal tripinnate/Y triplane tripletail Triplett/M triplicity triplite triploblastic triploid triploidy tripodal tripos tripper trippet trippy triptan triptane triquetrous triradiate trireme trisaccharide trisect trisection trisector trishaw triskele/N trismus trisoctahedron trisome trisomic trisomy triste tristearin tristeza tristful/PY tristimulus trisubstituted trisyllabic trisyllabicall trit tritheism tritheist tritheistic tritheistical trithing tritiated triticale tritoma tritone triturable triturate/N triturator triumvir triumviral triumvirate trivalve trivet triweekly Trobriand trochaic trochal trochanter trochanteral trochanteric trochar troche trochee trochilus trochlea trochlear trochoid trochoidal trochophore troglodytic trogon trograd troilite troland trolleybus trolly/DS Trombe trombidiasis trommel tromp trona trone troostite trop tropaeolum tropez trophallaxis trophically trophoblast trophoblastic trophozoite tropidoclonion tropistic tropologic tropological/Y tropology tropomyosin troponin tropopause tropophilous troposphere tropotaxis troth trothplight trotline trotsky trotskyism troubleshot troublous/PY troupial trousseau/S trousseaux trouty/R trouvé trove/R trow Troy truantry truckage truckee truckle/DGR truckline truckload/MS truckman truckmaster truculency trueborn truehearted/P trueing truelove truepenny truffle/DMS truistic trujillo Truk trull trumpetlike trumpetweed truncheon/S trunkfish trunkful trunnel trunnion/S trustability trustable trustbuster trusteeing trustless tryout trypanosome trypanosomiasis tryparsamide trypsinogen tryptamine tryptic tryptophan tryptophane trysail tryst trytophan tryworks tset tsetse/S Tshiluba tsk tsunamic tsunematsu TTY tubal tubbable tubbed tubber tubbing tubby/R tubeless tubelike tubercle/D tubercular/Y tuberculate/DN tuberculin tuberculoid tuberculous/Y tuberose tuberosity tuberous tubful tubifex/S tubificid tubocurarine tubularity tubulin tubulous tuchun tuckahoe tucket tude tuebor tuel tufa tufaceous tuff tuffaceous tuffet tufty tugboat tugger tugrik tui tuille tuitional/I tularemic tulation tulatory tule tulipwood tullibee tumblebug tumbledown tumblerful tumbleweed tumbrel tumbril tumefaciens tumefaction tumefactive tumescence/I tumescent/I tumidity tummler tumoral tumorigenic tumorigenicity tumorlike/MS tumorous tump tumpline tumultuary tumulus tunability tunably tundish tuneable tuneless tunesmith/MS tungstic tungstite tunica tunicae tunicate/D tunicle tunnellike tunny tup tuppence tupping tuque tural turbanned turbellarian turbid/PY turbidimeter/MS turbidimetric turbidimetrically turbidimetry turbidite turbidity turbinal turbit turbjet turbo/S turbocar/MS turbocharge/R turboelectric turbomachinery/M turboprop turboshaft/MS turbosupercharged turbosupercharger turbot/S turbulency turd ture/DN tureen turfgrass turfman turfski/DGR turfskies turfy turgescence turgescent turgidity turgor turista turmeric turnbuckle turncoat turndown turnery turnsole turnspit turnstile turnup turnverein turophile/MS turpentinic turpentinous turps turquois turtledove turtlehead turves tusche tush tusklike tussah tussive tussock/S tussocky tussore Tutankhamen tutee/S tutelar tutelary Tutenkhamon tutorage tutoress tutorship tutoyer tutti tux tuyere twae twangy tween/RZ tweener/MS tweep tweetstorm/MS twelvefold twelvemonth twentyfold twentysomething/MS twerp twi twiggy twilit twinberry twinborn twinflower twingeing twinkly twinship twiny twirp twitted twittery twixt twofer twohandedness Twombly/M twopence/S twopenny TWX TX Tyburn/M tyin tyiyn tyke/MS tymbal tympan tympanic tympanites tympanitic tympany typal typeable typecase typecast typefounder typefounding typefoundry typeout typestyle/MS typey typhlosole typic typograph/MS typologist typy/R tyramine tyrannosaur tyrannosaurid/MS tyrannosaurus Tyrannosaurus's tyrannous/Y tyro/S tyrocidin tyrocidine tyrosinase tyrothricin tzaddik tzaddikim tzar Tzeltal tzigane tzimmes tzitzis tzu UAV ubiquinone UCL udall udder Ugaritic uglify/N UK uke/MS ukelele/MS Ukraine/M ukulele ulama Ulan ulcerogenic ulcerous uldered ulema ulexite ullage ulna/M ulnar ulotrichous ulotrichy ultima ultimacy ultimo ultimogeniture ultrabasic ultracentrifugal ultradistance ultrafascism/M ultrafashionable ultrafiche ultrafilter ultrafiltration ultraglamorous ultrahigh ultrahip ultraism ultraist ultraistic ultraleftism/M ultramafic ultramarathon/MS ultramicro ultramicroscope/S ultramicrotome/S ultramicrotomy ultraminiature/MS ultramodernist ultramontane ultramontanism ultranationalism ultranationalist ultraphysical ultraposh ultraprofessional ultrapure/Y ultrarapid ultrarespectable ultrarightism/M ultrasecret ultraslick ultrasonicate/DGS ultrasonography ultrastructural/Y ululant ululate/N ulva umami/M umbel umbellate umbellifer umbelliferous umbilicate/DN umbonate umbones umbos umbrae umbrageous/PY umbral ump umpirage umpteen/H un unaccountability unadult unair unamazed unambivalent unamusing unanchor unanswerably unapologetic unappreciation unapproachably unarm unassailability unassailably unassertive unassuageable unattach unaverage unawesome unballasted unban unbandage unbar unbeautiful unbecome unbeknown unbelief unbeliever unbeseeming unbiblical unbid unblenched unblessed unbolt unbosom unbox unbrace unbraid unbridle unbroke unbuckle unbudgeable unbudgeably unbuild unbundle/GS unburden uncage uncalculated uncandid uncatchy uncategorizable uncelebrated unchain unchallengeable unchancy unchangealeness uncharge unchaste/PY uncheck/S unchivalrous unchoke uncial/Y unciform uncil uncinaria uncinariasis uncinate uncinus uncircumcision unclamp unclasp unclassical unclench unclichéd unclimbable/P unclinch uncloak unclose unclothe unclutter uncock uncoffin/D uncoil uncommercial uncompetitive/P uncomplicated uncompromisable uncomputerized uncongenial unconquerably unconscionability unconscionably unconstraint uncork uncorseted uncouple/R uncross uncrown uncrumple unctuous/PY uncurl uncus uncut uncute undauntable undebatably undeceive underact/V underactivity underage underbid underbidder underbody underboss underbred underbrim underbudgeted undercard/MS undercarriage undercharge underclass undercoat/G undercook undercool underdiagnose/DGS underdo underdrawers underdrawing underdress/D undereducation underexploited underexposure underfeed underfinance/DGS underfund/DGS undergarment undergird underglaze underhand underinsurance underinvestment/M underlaid underlayment/M underlet underlip undermanned undermost undernourished undernourishment undernutrition underpants underpart underpass/S underpin underplot/S underpowered underprepare/DGS underproduction underproductive underproof underreact/GS underreport/S underripe underrun undersaturated undersecretariat undersell undersexed undershorts undershrub underskirt underslung undersong underspin understaffed understeer understory understrapper understrength undersupply undersurface undertenant underthrow/DGS undertone undertrick underused undervaluation undervalue/G underwaist underweight underwing underwool undine undogmatic undouble undramatic undrape undraw undrunk undulant undulatory undynamic une unecological unendearing unequivocably unexceptionable/P unexceptional unexotic unexpressive unfalsifiable unfancy unfasten unfeeling/PY unfetter unfilmable unfix unflamboyant unflappability unfollow/DGS unforgettability unfreeze unfriend/DGS unfrock unfussed unfussy ungenerosity ungenerous ungentrified ungird unglitzy unglue ungrudging ungual unguard unguent ungulate unhair unhandsome unhandy/P unharness unhip unhitch/GS unhood unhorse/D unialgal uniaxial/Y unibrow/MS unibuss unicameral/Y unicellular unicellularity Unicode/M unideological unifactorial unifiable unifoliate unifoliolate uniformitarian uniformitarianism unijugate unilineal unilinear unilingual unillusioned unilocular unintelligence uninucleate unionism unionist/S uniparental/Y uniparous uniplanar uniplex UniPlus/M unipolarity uniramous unisex unisexual/Y unisexuality UniSoft/M unitage unital unitard/MS unitarity unitrust universalist univocal/Y unkenned unkennel unknowledgeable unkosher unlace unlash unlatch unlay unlimber/DG unlive unloose unloosen unman unmate/G unmeaning unmeet unmemorable unmitigatd unmoor unmoral unmorality unmuffle unmuzzle unmyelinated unnail unnewsworthy unnilhexium unnilpentium unnilquadium uno unoaked unpackage/G unpalatable unpeg unpeople unperfect unperson unpick unpile unpin unpolitical unpregnant unprofessed unpronounced unputdownable unquote unreel unreeve unregenerate unreserve unrestraint unrevolutionary unriddle unrig unrip unrobe unroof unroot unrotate unround/D unsaddle unsafety unsaturate/GS unsay unseal/G unseam unsearchably unsel unselective unsell/DGS unserviceable unsettle unsettlement unsew unsex unsexy unshell unshift unship unshockability unshockable unshped unsight/D unsiphon/M unsling/DG unsnarl unspeak unspeakably unsphere unspool/DGS unstate unstep unstick unstop unstoppably unstrap unstring unstudied unsub unsubstantial unsuccess unswathe unswear unsymmetrical unter untether unthaw unthink unthinkability unthought unthread unthrone untimeous untogether untouchability untrack untread untrendy untruss untuck untune untwine untwist unvocal unvoice unweave unweeting/Y unweight unwell unwisdom unwish/D unwreathe unyoke unyoung unzio unzip upas upbuild/R upcast upchuck upcycle updo/MS upgrowth upheave/R uphoster uplink/MS upmanship upmost upperpart upping uppish/PY uppity uppityness uprate/DGS uprear uprush upsell/DGS upsetter upshift/DGS upspring upstage/DGS upstart upstroke upsweep upswept upthrow upthrust uptilt upwell uracil uraei uraemia uraeus uralite uralitic Urania uranic uranide uraninite uranographic uranographical uranography uranological uranology uranometry uranous urate uratic urbanist urbanistic urbanistically urbanity urbanologist urbanology urbiculture urceolate urd Urdu ure urease uredinial uredinium urediospore uredium uredostage ureide uremic ureotelic ureotelism ureter ureteral ureteric urethan urethral urethritis urethroscope Uri/S uric uricosuric uricotelic uricotelism uridine urinalysis urinogenital urinometer/MS urinous urochord urochordal urochordate/M urochrome urodele urogenital urogynecology/M urokinase urol urolith urolithiasis urologic urological urologist urology uronic uropod uropygial uropygium urostyle Urquhart ursine urtext/MS urticaria urticarial urticate/N urus urushiol usableness usance USB USB's useably usernames useway usherette USIA USN usnea usrio usufruct usufructuary UT ute uteca utep uterus/S UTF utilitarianism utiny utopism utopist utopistic Utrecht/M utricle utricular utricularia utriculus utterable/U uttium UV UVA UVA's uvarovite UVB UVB's UVC UVC's uvea uveal uveitis uvula uvular/Y uxorial uxoricide uxorious/PY VA vacationist vacationless vacay/M vaccinal vaccinate/DS vaccinator/S vacua vacuolar VAD Vaduz vagabondage vagabondish vagabondism vagally vagarious/Y vagile vagility vaginosis vagotomy vagotonic vagotropic vagrancy vainglory valediction valerian Valery/M valetudinarian valetudinarianism valetudinary valiance valiancy valine valise/S valle vallecular Valletta/M Valois valorous/Y Valparaiso valuational/Y valvular vamoose/DGS vampirism vampish vampy vanaspati Vancement vancomycin vanda vandalistic vanderburgh Vanderpoel/M vandyked vanguardism vanguardist vanillic vanillin vanner vanpool/MS vanquishable vanquishment vanward vapid/PY vapidity vaporetto/MS vaporous/PY vaquero varia variac variational/Y varices varicose/D varicosity variegator varietal/Y variform variocoupler varioloid variolous variometer/MS variorum varisized Varitype/M varix varlet varletry varnishy varroa varsity varus varve/D vasal vascularity vasculature vasculum vaselike vasiform vasoactive vasoactivity vasoconstriction vasoconstrictive vasoconstrictor vasodilatation vasodilation vasodilator vasomotor vasopressin vasopressor vasospasm vasospastic vasotocin Vasquez/M vassalage Vassar/M vastitude vastity vasty vatic vaticinal vaticinate/N vaticinator vatted vatting vatu vaudevillian Vaughan/M vaulty vauntful vauntingly vaunty vaward VAX vaxxer/MS vealy vectograph vectographic vectorcardiogram/MS vectorcardiographic vectorcardiography Veda/M Veddoid vee veep veery/S Veganism vegetably vegetal vegetarianism vegetational/Y vegete/V veinal veinlet veiny velamen velamentous velamina velarium veld velitation Vella/M velleity veloce velocimeter/MS velocipede velociraptor/MS velodrome velopment velure velutinous velveteen venae venality venatic venation venational vendable vendace/S vendee vendibility vendibly vendition vendue veneeal venenate/N venerability venerably venerator venereological venereologist venereology venereum venerology venery venesection venetian Veneto/M venge/G venin venipuncture venire venireman venisection venography ventage ventail ventilatory ventless ventricose ventricular ventriculus ventriloquial/Y ventriloquism ventriloquist/MS ventriloquistic ventriloquy ventrolateral/Y ventromedial ventura venturous/PY venule vera verapamil veratrine veratrum verbalism verbalist verbalistic verbena/S verbicide verbid verbify verbigeration verbile verdancy Verde/M Verderer verderor verdigris verdin verdurous/P vergil veridic veridicality verisimilar/Y verisimilitudinous verism verismo verist veristic veritably verjuice verklempt vermeil vermian vermicelli vermicide vermicular vermiculate/DN vermiculture vermiform vermifuge vermillion verminosis verminous/Y vern Verna/M vernacle vernacularism/M vernation vernicle vernissage versal Versatec/M verseman verset versicle versicular versify/NR versine versional/A verso/S verticality verticil verticillte vertiginous/Y vesical vesicant vesicate/N vesicularity vesiculate/N vesperal vespertinal vespertine vespiary vespid vespine vesta vestee vestiary vestibular vestibulocochlear vestimentiferan vestlike vestment vestmental vestryman vesuvian vesuvianite Vesuvius vetchling vexillary vexillologic vexillological vexillologist vexillology vexillum VFAT VFAT's viand/S viatical viaticum vibist vibraharp vibraharpist vibrance vibraphone vibraphonist vibratile vibratility vibrational vibrationless vibrator vibratory vibrion vibriosis vibrissa vibrissae viburnum vic vicarage vicarate vicarial vicariance vicariant vicariate vicarship vicegerency vicegerent vicennial viceregal/Y vicereine viceroyalty viceroyship vichyssoise vicinage vicinal vicissitudinous vickers victimology Victoriana victress vicuna vid Vida/M vidal vide videogenic videography/M videoland/M videophile/MS videophone vidette vidicon viduity Vientiane/M viewdata viewshed viewy vig vigesimal vigintillion vignettist vigorish vigorist/MS vigoroso Vikram vilipend villadom villagery villainess villanella villanelle villatic villein villenage villi villiform villosity villus vim/N vin vinaceous vinaigrette vinal vinblastine vinca Vinci/M vincible vincristine vinculum vindicable vindicator/S vindicatory vineal vinedresser/S vinegarish vinegarroon vinegary vinery vineyardist vinic viniculture viniferous vinify/N vino vinosity vinous/Y viny/R vinylic vinylidene viol violability violable/P violableness/I violably/I violaceous/Y viomycin viosterol viperine viperish viperous/Y viraginous virago virelay viremia viremic vireo vires virescence virescent virga virgate Virgil/M virginium virgulate viricidal viricide virid viridescent viridian viridity virilism virilization/M virion viroid virologic virological/Y virologist virology viroses virosis virtuality virtueless virtuosa virucidal virucide virulency viruliferous virustatic Visayan viscacha viscerogenic visceromotor viscidity viscometric viscometry viscose viscosimeter/MS viscosimetric viscountcy viscountess viscounty viscus visional/Y visionless visitable visitant visitational visitatorial visorless visuospatial vitalism vitalist vitalistic vitamer vitameric vitellin vitelline vitellogenesis vitellogenin vitellus vitiator viticultural viticulture viticulturist vitiligo vitiosity vitite Vito/M vitrectomy/M vitrifiable vitrine vittae vittate vittles vituperate/N vituperator vituperatory vitus vivarium vivax viverrid vivific viviparity viviparous/PY vivisect vivisection vivisectional/Y vivisectionist vivisector vixenish/PY vizard vizierate vizierial viziership vizor vizsla VLDL vlog/MS VM VM's VMs vms VO VOC vocabular vocalically vocality vocationalism vocationalist vociferant vociferate/N vociferator vodcast/MS vodun vog/M voguish/P voicedness voiceful/P voiceprint voidable/P voidance voile volant volante volcanically volcanicity volcanoes volcanologic volcanological volcanology vole/S volitive volkslied/R volplane/DG voltameter/MS voltametric Volterra/M volubility volubly volumeter/MS voluminosity voluntarism voluntarist voluntaristic voluntaryism voluntaryist volunteerism voluntourism/M voluptuary volute/DN volutin volva volvement volvox vomerine vomeronasal vomitory vomiturition vomitus von voodooism voodooist voodooistic vored vorlage vortical/Y vorticella vorticism vorticist vorticose vortiginous Voss votaress votarist voteless votress vouchee vouchsafement Vought/M voussoir voxel/MS voyageur/S voyeur/S voyeurism voyeuristic voyeuristically VPOTUS Vreeland/M vroom VRSA VT vulcanian vulcanicity Vulcanism vulcanologist vulcanology vulgarian vulgarism vulgarity vulgate vulgus vulnerably/I vulnerary vulterine vulturine vulturous vulva vulvae vulval vulvar vulviform vulvitis VW VX vérité WA Waals WAC wadable wadder waddie/DS wadding waddy/DGS wadeable wadi Wadsworth/M Waf wafflestomper/MS waftage wafture wageless wageworker wagger waggery waggly Wagnerian wagoneer/MS wagonette/MS wagonload/MS Wagyu wah wahine Wahl/M wahoo/S waif wailful/Y wain/D wainscotting waistband Waite/M waitron wakame wakeboard/MS wakeless wakerobin Waldron/M walkabout walkathon/MS walkaway walkingstick walkout wallaroo wallenstein walleye/D wallflower Wallis walsy Waltham/M wamble/DG wampum wanderlust Wanderwort/MS waney wanner wannest wanning wansee wansley wany/R Wappinger/M warbonnet Warburton wardenship wardership wardress wardship warehousemen wareroom warfarin/M warlock warlord/S warlordism warpage warpath warplane/MS warrantable/P warrantably/U warrantee/S warrantless warrantor/S washability washable washateria washcloth washerman washerwoman washhouse washoe washrag washroom/S washstand/S washtub/S washwoman wasplike wassail/R wast wastage/S wastepaper Watanabe/M watchcase watcheye watchtower watchworks waterborne watercraft watercress waterflood waterfowl/MR waterhole/MS waterish/P waterless/PY waterlog waterlogged watermanship waterpower waterscape waterweed waterwheel waterworks waterworn wattmeter/MS waught waukesha waunona waupaca waupun wausau wauwatosa waveland waveless/Y wavelet/S wavelike wavery waxlike waxwing/MS wayback waybill wayfarer wayfaring waygoing waylay wayless wayworn weakhearted weakish weakling weal weanling wearability weariful/PY weariless/Y weatherability weatherboard/G weatherglass weatherstripping weatherworn weathery Webb/M webbed webber webby Weberian/M webfed webfoot weblike wedder wedel/G wedeln wedgy weedless weeknight/S weepy weet weever weevil/Y weevily weft/S Wehr/M Wei/M weider weidman Weierstrass weighable weightless/Y weimaraner weiner weir weirdie/S Weisenheimer weldable weldment weldor weldwood welfarism/M welfarist welkin wellaway wellborn Weller Welles wellington wellman wellwisher/MS welmers Welton weltschmerz wen wend Wernicke/M wert Werther/M weskit westernmost Westie/MS wetback wettable wettish wff whacky whaleback whaleboat whalebone/MS Whalen/M whang whangee whap wharfage wharfinger wharfmaster Whatley/M wheal wheatear wheatgrass/S wheatland wheaton wheelhorse wheelless wheelman wheelock wheelsman wheelwork wheelwright wheen whelm whencesoever whensoever whereat wherefrom whereinto wheresomever wherethrough whereto whereunto wherewithal wherry/S whetstone whetter whichsoever whicker/DG whidding whiffletree whigmaleerie whilom whilst whimsicality whiney whing whinstone whipcord whiplike whippersnapper whippletree whippoorwill whippy/R whipstitch whipstock whiptail whirlybird whirry/DG whish whisht whiskery whispery whist Whitaker/M whitebait whitebeard whitecap whitefish Whitehorse/M whiteleaf whiteley whiteout whiterock whitesmith whitethroat whitewall whitewater whitewing whithersoever whitherward whitish whity/S whizbang whizz/R whizzbang whizzy whomp whoopee whoopla whopper whoredom whorehouse whoremaster whoremonger whoreson Whorfian whorish whort whortle whosesoever whoso whump whup whys WI wickerwork wickiup wideband widemouthed wideout widgeon/S widish widowerhood widthways wieland wieldy wienerwurst wienie wifebeater/MS wifehood wifeless wifelike wigan wigeon/S wigged wight Wightman/M wiglet wigwag wilco wildcatted wildcatting wildebeest/M wilderment wildflower/MS wildfowl/GR wildish wildling wildwood Wilkie/M Wilkins Willa/M willable Willebrand willemite willet Willis williwaw willowlike willowware willpower willy/GS wilmette Wiltshire/M wimble/DGS wimple/DG winchell Winchester windage windblown windburn/D windflaw windjammer windlass/DGSY windpipe windproof windscreen windsurf/DGS windswept windway wineglass winegrower winehead winepress wineshop winey wingbeat/MS wingding wingless/P winglet winglike wingover wingspread/MS wingsuit/MS wingy winism winnable/U winnebago winned winooski winsett wintergreen winterkill wintertide wintery wintle winze wirable wiredraw/R wiredrawn wirehair/D wirelike wirephoto/MS wiretapper wireway wirework/S wireworm wiseass Wisenheimer wisent wisewoman wisha wispish wistaria wisteria witchery witchlike witchy withdrawable withe witherite witherspoon withindoors withoutdoors withy/S witless witling Witt/M witted Wittgenstein/M witticism wiz wizardry Wolfe/M Wolff/M wolfhound wolflike wolverine/MS wolverton womanish/PY womanism/M womankind womanless womanlike womanpower wombat/MS womenfolk/S womenkind wonderwork Wong/M wonky wonning wonton/MS woodberry woodcraft woodcutter woodcutting woodenhead/D woodenware woodlore woodnote woodpile woodsman Woodstock/M woodsy Woody/M woogie woolpack woolsack woolshed woolskin woozy/PRY wordage/S wordbook wordmonger wordplay workability workbasket workboat workbox workfolk/S workforce/MS workhouse workless/P workpeople workroom/S workweek workwoman worldling wormhole wormlike worriment worrywart worshipless wort worthful Wotan/M wotted wouldst woundless woundwort wowser wrapup wrasse wrathy wreathy wriggly wristlet wristlock/MS wristy writhen wrongheaded/PY Wu/M wunderkind wushu WV WY Wyatt/M Wyeth/M Wylie/M Wynn/M wysiwyg xanthan xanthate xanthene xanthic xanthin xanthine Xenakis xenia xenobiotic xenodiagnosis xenogeneic xenograft/MS xenomania xenophile xenophilous xenophobic xenotransplantation/M xenotropic Xer xerarch xeric xerically xeriscape/MS xerographic xerographically xerophile xerophilous xerophily xeroradiography/M XFS XFS's Xhosa Xray xu xylophonist xylose xylotomic xylotomical xylotomous xylotomy yack/G yada YAG YAG's Yagi yah yak yakitori/M yakking yakuza yalies yam/N Yankton/M Yanomami yanqui Yaounde/M yardarm yardbird/MS yardman yardmaster yare/Y yarmelke Yarmouth/M ycleped yclept ye yearling yearlong yech yeehaw yellerish yellowcake/M Yellowknife/M yellowtail/MS yenta yep yester yeuk yew YHz Yinglish yippie/MS yobibit/MS yobibyte/MS yoctosecond/MS yoghurt/M yogic yogin yoknapatawpha yolky yond yoo Yooper Yorkshire/M Yost/M yottabit/MS yottabyte/MS yottahertz youngberry/MS youngling youthquake/MS yowza yuba yuletide Yupik yuri yuzu za zabaglione zaftig zagged Zagreb/M zaibatsu zaire zalcitabine Zambia/M Zan/M zany/PRSY zapateo zazen zealotry zeatin zeaxanthin zebibit/MS zebibyte/MS zeitgeber Zener zenithal zeolite zeolitic zephyr zeppelin zeptosecond/MS zerk zettabit/MS zettabyte/MS zettahertz ZHz zidovudine ziggy zillionaire/MS zin zincate zincic zineb zinfandel zingy/R zinnia Ziploc/MS zippy/R ziram zirconia zirconic zither/S zitherist zizith zoantharian/MS zoarial zoarium zobrist Zoe/M zombify zombiism/M zonate/DN zonk/DGS Zontian zoodle zoogenic zoogenous zoogeographer zoogeographic zoogeography zooks zoologic zoomorphic zoonosis zoonotic zooparasite zooparasitic zoophagous zoophilic zoophilous zoophyte zoophytic zooplankter zooplankton zoosporal zoospore zoosterol zoot zootechnical zootechnics zooty zori Zorn zouk zoysia zucchini zwitterion/S zwitterionic zygosity zygote/MS zymogram zymosan étouffée ispell-3.4.02/languages/english/PaxHeaders.22185/american.10000644000000000000000000000013213770761353020102 xustar0030 mtime=1608770283.084172164 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/english/american.10000444003214100001440000001171513770761353021160 0ustar00geofffaculty00000000000000acclimatize/GRSZ acclimatizes/A actualize/DGS actualizes/A aggrandizement/MS airbrake/MS americanized amortization/MSU animized annualize/DGS anonymization Balkanization/MS biosynthesized bureaucratization/MS caliper/S cancelate/D canonized/U cauterize/DGS caviler/S centerline/S cesium Christianizing civilizational/MS cognizable commercialization/MS communize/DGS computerization conditionalize/DGS conventionalized criminalize/DGS crystallite/S crystallization/AMS crystallographer/S crystallographic crystallography/M decentralizing decontextualization/M decontextualize/DGRS deemphasize/DGRSZ deglycerolized dehumanize/DGS demineralization/MS democratization/MS democratize/DGRS democratizes/U demonize/DGS demoralization/MS demythologization demythologize/DGRS depersonalization/MS depersonalized deputized destabilize/DGS destigmatization desynchronize/DGS detribalize/DGS diagonalizable dialyzed/U diarrhea/MS diarrheal dichotomization digitalization/MS digitization diopter/MS discolored/MPS discoloreds/U discolors disfavor/DGRSZ disfavorer/MS disheveled disincentivize/DGRS disorganization/MS disulfide doweling downdraft draftsperson/MS drafty/PRY dramatization/MS dramatize/DGRSZ duelist/S dynamized edema/MS edematous emphasize/ADGRSZ energized/U energizes enthrall/S epicenter/MS esthete/S eulogize/DGRSZ Europeanization/MS Europeanized exorcize/DGS extemporize/DGRSZ externalization/MS favoritism/MS federalize/DGS fetid/PY fetus/MS fiberboard fossilized/U fraternize/DGRSZ galvanization/AMS galvanize/DGRSZ galvanizes/A generalizable/MS germanized gimbaled glottalization glycerolized grueling/Y gynecological/MS gynecologist/MS harmonization/MS homeomorph homeopath homogenization/MS homogenize/DGRSZ honoree/MS hospitalization/MS humanize/DGRSZ humanizes/AI hydrolyzed/U hypnotize/DGRSZ hypnotizer/MS hypnotizes/U hypophysectomized idolize/DGRSZ immobilize/DGRS immortalized/U immunization/MS impersonalized incentivization/DGMS incentivize/DGRS industrialized/AU industrializing institutionalization/MS institutionalization's/A internationalization/MS internationalized ionize/DGJNRSXZ kinesthesis kinesthetic/S kinesthetically lackluster legitimize/DGRS libeler/S libelous/Y liberalization/MS lionize/DGRSZ magnetized/U maneuverability maneuverable marbleized marbleizing maximization/MS mazurka/MS memorialized/U mesmerized/U metabolized metalization/MS metropolitanization milliliter/MS mineralized/U misbehavior/MS mischaracterization/MS mischaracterize/DGS misdemeanor/MS mobilization/AMS mobilize/DGRS mobilizes/A modernization/MS monetization/M monetize/ADGS monopolization/MS monopolize/DGRSZ monopolized/U monopolizes/U multicolor/DMS narcotizes nasalization/MS nasalized naturalized/U neutralization/MS nominalized novelized ocher/MS operationalization/S operationalize/D orthogonalization/M orthogonalized orthopedic/S ostracized outmaneuver/DGS overemphasize/DGRSZ packetize/DGRSZ packetizer/MS palatalization palatalize/DGS palletized panelization panelized parenthesize/GS particularize/DGS pasteurization/S pedaled pedaling peptizing plagiarize/DGRSZ platinize/DGS plowshare/MS polarize/DGRSZ polarized/AU politicized polymerizations preprogram/S prioritization/M proletarianization proletarianized pronominalization pronominalize pummeled pyorrhea/MS pyrolyze/MRS radiopasteurization radiosterilization radiosterilized rancor/MS randomization/MS rationalization/MS realizability/MS reconceptualization recrystallize/G regularizing reharmonization remonetization repopularize revitalization revitalize/DGRSZ ritualized romanticize/GS rubberized sanitization/M Sanskritize satirize/DGRSZ satirizes/U scandalized/U scandalizing sectionalized secularization/MS secularized/U sensationalize/DGS sensitized/U sentimentalize/DGRSZ sentimentalizes/U serializability/M serializable sexualized signalizes sniveled sniveler/S sniveling/S snowplow/MS socialization/MS stabilization/MS stigmatization/MS stigmatized/U stylization/MS subcategorizing subsidization/MS substerilization suburbanization/MS suburbanized suburbanizing sulfaquinoxaline sulfide sulfite sulfonamide/S sulfurous/PY swiveled swiveling synergize/DGS systematization/MS systemization/MS teaseled teaseling teetotaler temporize/DGJRSZ temporizer/MS temporizing/MSY temporizings/U theatergoer/MS theatergoing/MS thru tine's tinseled tinseling traditionalized travelog/MS trialization triangularization/S tricolor/DMS tyrannize/DGJRSZ tyrannizing/MSY uncauterized/MS underutilization/M underutilized undialyzed/MS undramatized/MS unenergized/MS uneulogized/MS unfossilized/MS unfraternizing/MS unhydrolyzed/MS unidolized/MS unindustrialized/MS unitized universalize/DGRSZ unmagnetized/MS unmemorialized/MS unmineralized/MS unmobilized/MS unpolarized/MS unpreemphasized unsavory/MPS unstigmatized/MS untrammeled unvocalized/MS unvulcanized/MS updraft/MS urbanization/MS urbanized vacuolization/MS vaporization/AMS varicolored/MS velarize/DGS visualization/AMS vocalization/MS vocalize/DGRSZ volatilization/MS vulcanized/U watercolor/DGMS watercolorist/S yodeled yodeler yodeling ispell-3.4.02/languages/english/PaxHeaders.22185/english.00000644000000000000000000000013113776175722017757 xustar0029 mtime=1610152914.78209043 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/english/english.00000444003214100001440000056153713776175722021052 0ustar00geofffaculty00000000000000aback abaft abandon/DGRS abandonment/S abase/DGRS abasement/S abash/DGS abashed/U abate/DGRS abated/U abatement/S abbe abbey/MS abbot/MS abbreviate/DGNSX abbreviated/AU abdomen/MS abdominal/Y abduct/DGS abduction/MS abductor/MS abed aberrant/Y aberration/S abet/S abetted abetter abetting abettor abeyance abhor/S abhorred abhorrent/Y abhorrer abhorring abide/DGRS abiding/Y abilities/I ability/MS abject/PY abjection/S abjure/DGRS ablate/DGNSV ablative/Y ablaze able/DRT ablution/S ably abnormal/Y abnormality/S aboard abode/MS abolish/DGRSZ abolishment/MS abolition abolitionist/S abominable aboriginal/Y aborigine/MS abort/DGRSV abortion/MS abortive/PY abound/DGS about above aboveground abrade/DGRS abrasion/MS abreaction/MS abreast abridge/DGRS abridged/U abridgment abroad abrogate/DGNS abrupt/PY abscess/DS abscissa/MS abscond/DGRS absence/MS absent/DGSY absentee/MS absenteeism absentia absentminded/PY absinthe absolute/NPSY absolve/DGRS absorb/DGRS absorbency absorbent/MS absorbing/Y absorption/MS absorptive abstain/DGRS abstention/S abstinence abstract/DGMPRSVY abstracted/PY abstraction/MS abstractionism/M abstractionist/S abstractor/MS abstruse/PY abstruseness/S absurd/PY absurdity/MS abundance/S abundant/Y abuse/DGRSVZ abusive/PY abut/S abutment/S abutted abutter/MS abutting abysmal/Y abyss/MS acacia academia academic/S academically academy/MS accede/DGS accelerate/DGNSVX accelerated/U accelerating/Y accelerator/S accelerometer/MS accent/DGS accentual/Y accentuate/DGNS accept/DGRSVZ acceptability/U acceptable/P acceptably/U acceptance/MS accepted/Y accepting/PY acceptor/MS access/DGS accessibility/I accessible/IU accessibly/I accession/MS accessory/MS accident/MSY accidental/PY acclaim/DGRS acclamation acclimate/DGNS accolade/S accommodate/DGNSVX accommodated/U accommodating/Y accommodative/P accompanied/U accompaniment/MS accompanist/MS accompany/DGRS accomplice/S accomplish/DGRSZ accomplished/U accomplishment/MS accord/DGRSZ accordance/S according/Y accordion/MS accost/DGS account/DGJS accountability/S accountable/P accountably/U accountancy accountant/MS accounted/U accredit/D accreditation/S accretion/MS accrue/DGS acculturate/DGNSV acculturated/U accumulate/DGNSVX accumulative/PY accumulator/MS accuracy/IS accurate/PY accurately/I accursed/PY accusal accusation/MS accusative accuse/DGRSZ accusing/Y accustom/DGS accustomed/P ace/DGMRS acetate acetone acetylene ache/DGS achievable/U achieve/DGRSZ achieved/U achievement/MS Achilles aching/Y acid/PSY acidic acidity/S acidulous acknowledge/DGRSZ acknowledged/Y acknowledgment/AMS ACM acme acne/D acolyte/S acorn/MS acoustic/S acoustical/Y acoustician acquaint/DGS acquaintance/MS acquainted/AU acquiesce/DGS acquiescence acquirable acquire/ADGS acquisition/MS acquisitiveness acquit/S acquittal/S acquitted acquitter acquitting acre/MS acreage acrid/PY acrimonious/Y acrimony acrobat/MS acrobatic/S acronym/MS acropolis across acrylic act/DGMSV actinium actinometer/MS action/MRS actions/AI activate/DGNSX activation/AI activator/MS active/APY actively/AI activism activist/MS activity/MS actor/AMS actress/MS actual/SY actuality/S actuarial/Y actuate/DGNSX actuation/MS actuator/MS acuity acumen acute/PRTY acyclic acyclically ad/AS Ada/M adage/S adagio/S adamant/Y adapt/DGRSVZ adaptability adaptable/U adaptation/MS adaptation's/A adapted/AU adaptedness adapting/A adaption adaptive/PY adaptor/S add/DGRSZ addenda addendum addict/DGSV addiction/MS addition/MS additional/Y additive/MSY additivity address/DGRSZ addressability addressable addressed/U addressee/MS adduce/DGRS adduct/DGSV adduction adductor adept/PSY adequacy/IS adequate/IPY adhere/DGRSZ adherence/S adherent/MSY adhesion/S adhesive/MPSY adiabatic adiabatically adieu adjacency adjacent/Y adjective/MSY adjoin/DGS adjourn/DGS adjournment adjudge/DGS adjudicate/DGNSVX adjudication/MS adjunct/MSVY adjure/DGS adjust/DGRSVZ adjustable/AU adjustably adjusted/AU adjustment/MS adjustments/A adjustor/MS adjusts/A adjutant/S administer/DGJS administration/MS administrative/Y administrator/MS admirable/P admirably admiral/MS admiralty admiration/S admire/DGRSZ admiring/Y admissibility/I admissible/I admission/MS admit/S admittance admitted/Y admitting admix/DS admixture admonish/DGRS admonishing/Y admonishment/MS admonition/MS ado adobe adolescence adolescent/MSY adopt/DGRSVZ adopted/U adoption/MS adoptive/Y adorable/P adoration adore/DGRS adorn/DGS adorned/U adornment/MS adrenal/Y adrenaline adrift adroit/PY adsorb/DGS adsorption adulate/GNX adult/MPSY adulterate/DGNS adulterated/U adulterer/MS adulterous/Y adultery adulthood adumbrate/DGNSV adumbrative/Y advance/DGRSZ advancement/MS advantage/DGS advantageous/PY advent/V adventist/S adventitious/PY adventive/Y adventure/DGRSZ adventurous/PY adverb/MS adverbial/Y adversary/MS adverse/DGSY adversity/S advertise/DGRSZ advertised/U advertisement/MS advice advisability/I advisable/P advisably advise/DGRSZ advised/UY advisee/MS advisement/S adviser/MS advisor/MS advisory advocacy advocate/DGNSV aegis aerate/DGNS aerator/S aerial/MSY aeroacoustic aerobic/S aerodynamic/S aerofoil/S aeronautic/S aeronautical/Y aeroplane/MS aerosol/S aerospace afar/S affable affair/MS affect/DGRSV affectation/MS affected/PUY affecting/Y affection/DMS affectionate/UY affective/Y afferent/Y affianced affidavit/MS affiliate/DGNSX affiliated/U affinity/MS affirm/ADGS affirmation/MS affirmative/Y affix/DGS afflict/DGSV affliction/MS afflictive/Y affluence affluent/Y afford/DGS affordable affricate/NSV affright affront/DGS afghan/S Afghanistan/M aficionado/MS afield afire aflame afloat afoot afore aforementioned aforesaid aforethought afoul afraid/U afresh Africa/M African/MS aft/RZ aftereffect/S aftermath aftermost afternoon/MS aftershock/MS afterthought/S afterward/S again against agape agar agate/S age/DGRSZ aged/PY ageless/PY agency/MS agenda/MS agent/MSV agents/A agglomerate/DNSV agglutinate/DGNSV agglutinin/S aggravate/DGNSX aggregate/DGNPSVXY aggregated/U aggregative/Y aggression/MS aggressive/PY aggressor/S aggrieve/DGS aggrieved/Y aghast agile/Y agility agitate/DGNSVX agitated/Y agitator/MS agleam aglow agnostic/MS ago agog agony/S agrarian agree/DRSZ agreeable/P agreeably agreeing agreement/MS agricultural/Y agriculture ague ah ahead aid/DGRS aide/DGRS aided/U ail/DGS aileron/S ailment/MS aim/DGRSZ aimless/PY air/DGJRSZ airbag/MS airborne aircraft/MS airdrop/S Airedale/MS airfield/MS airflow airfoil/S airframe/MS airhead airless/P airlift/MS airline/MRSZ airliner/MS airlock/MS airmail/S airman airmen airplane/MS airport/MS airship/MS airspace airspeed/S airstrip/MS airway/MS airy/PRTY aisle/S ajar akimbo akin Alabama/M Alabamian/M alabaster alacrity alarm/DGS alarming/Y alarmist alas Alaska/M alba albacore Albania/M Albanian/MS albeit album/NS albumin alchemy Alcibiades alcohol/MS alcoholic/MS alcoholism/S alcove/DMS Alden/M alder alderman/M aldermen ale/V alee alert/DGPRSYZ alerted/Y Alex/M alfalfa alfresco alga algae algaecide algebra/MS algebraic algebraically Algeria/M Algerian/M alginate/S Algol/M algorithm/MS algorithmic algorithmically alias/DGS alibi/MS Alice/M alien/MS alienate/DGNS alight/DGS align/DGRS aligned/AU alignment/AS alike/P aliment/S alimony alive/P alkali/MS alkaline alkaloid/MS alkyl all Allah/M allay/DGS allegation/MS allege/DGS alleged/Y allegiance/MS allegoric allegorical/PY allegory/MS allegretto/MS allegro/MS allele/S allemande allergic allergy/MS alleviate/DGNSV alleviator/MS alley/MS alleyway/MS alliance/MS alligator/DMS alliteration/MS alliterative/Y allocate/ADGNSVX allocated/AU allocation/AMS allocator/AMS allophone/S allophonic allot/AS allotment/MS allotments/A allotted/A allotter allotting/A allow/DGS allowable/P allowably allowance/DGMS allowed/Y alloy/DGMS alloyed/U allude/DGS allure/DGS allurement allusion/MS allusive/PY ally/DGRS alma almanac/MS almighty/P almond/MS almoner almost alms/A almsman alnico aloe/S aloft aloha alone/P along alongside aloof/PY aloud alpha alphabet/MS alphabetic/S alphabetical/Y alphanumeric/S alpine Alps already also altar/MS alter/DGRSZ alterable/IU alteration/MS altercation/MS altered/U alternate/DGNSVXY alternative/PSY alternator/MS although altitude/S alto/MS altogether altruism altruist/S altruistic altruistically alum alumna/M alumnae alumni alumnus alundum alveolar/Y alveoli alveolus always Alyssa/M am/N amain amalgam/MS amalgamate/DGNSVX Amanda/M amanuensis amass/DGRS amateur/MS amateurish/PY amateurism amatory amaze/DGRSZ amazed/Y amazement amazing/Y amazon/MS ambassador/MS amber ambiance/S ambidextrous/Y ambient ambiguity/MS ambiguous/PY ambiguously/U ambition/MS ambitious/PY ambivalence ambivalent/Y amble/DGRS ambrosial/Y ambulance/MS ambulatory/Y ambuscade/R ambush/DRS Amdahl/M Amelia/M ameliorate/DGNV amenable amend/DGRS amendment/MS amenity/S America/MS American/MS Americana americium Ames amiable/PRT amicable/P amicably amid amide amidst amigo amino amiss amity ammo ammonia/S ammoniac ammonium ammunition/S amnesty amoeba/MS amok among amongst amoral/Y amorality amorist/MS amorous/PY amorphous/PY amount/DGRSZ amour/MS amp/DGSY ampere/S ampersand/MS amphetamine/S amphibian/MS amphibious/PY amphibology ample/PRT amplify/DGNRSXZ amplitude/MS ampoule/MS amputate/DGNS Amsterdam/M Amtrak/M amulet/S amuse/DGRSVZ amused/Y amusement/MS amusing/PY amyl an Anabaptist/MS anachronism/MS anachronistically anaconda/S anaerobic anagram/MS anal/Y analogical/Y analogous/PY analogy/MS analyses analysis/A analyst/MS analytic/MS analytical/Y analyticity/S anaphora anaphoric anaphorically anaplasmosis anarchic anarchical anarchist/MS anarchy anastomoses anastomosis anastomotic anathema anatomic anatomical/SY anatomy ancestor/MS ancestral/Y ancestry anchor/DGS anchorage/MS anchored/U anchorite anchoritism anchovy/S ancient/PSY ancillary/S and/DGSZ Andorra/M anecdotal/Y anecdote/MS anechoic anemometer/MS anemometry anemone/S anew angel/MS Angela/M Angeleno/MS angelic anger/DGS angiography/M angle/DGRSZ Anglican/MS Anglicanism/M Anglophilia/M Anglophobia/M Angola/M angry/PRTY angst angstrom/S anguish/D angular/Y anhydrous/Y aniline animal/MPSY animate/DGNPSXY animated/Y animator/MS animism animosity anion/MS anionic/S anise aniseikonic anisotropic anisotropy/MS ankle/MS annal/NS annex/DGS annexation/S Annie/M annihilate/DGNSV anniversary/MS annotate/DGNSVX announce/DGRSZ announced/U announcement/MS annoy/DGRSZ annoyance/MS annoying/Y annual/SY annul/S annulled annulling annulment/MS annum annunciate/DGNS annunciator/S anode/MS anoint/DGRS anomalous/PY anomaly/MS anomic anomie anon anonymity anonymous/PY anorexia/M another/M ANSI answer/DGRSZ answerable/U answered/U ant/DGMS antagonism/S antagonist/MS antagonistic antagonistically antarctic Antarctica/M ante/DG anteater/MS antecedent/MSY antedate/DGS antelope/MS antenna/MS antennae anterior/SY anthem/MS anther anthology/S anthracite anthropological/Y anthropologist/MS anthropology anthropomorphic anthropomorphically anti antibacterial antibiotic/S antibody/S antic/MS anticipate/DGNSVX anticipated/U anticipative/Y anticipatory anticoagulation anticompetitive antidisestablishmentarianism antidote/MS antiformant antifundamentalist antigen/MS antihistorical antimicrobial antimony antinomian antinomy antipathy antiphonal/Y antipode/MS antiquarian/MS antiquate/DN antique/MS antiquity/S antiredeposition antiresonance antiresonator antiseptic antisera antiserum antislavery antisocial/Y antisubmarine antisymmetric antisymmetry antithesis antithetical/Y antithyroid antitoxin/MS antitrust/R antler/DMS anus anvil/MS anxiety/S anxious/PY any anybody/MS anyhow anymore anyone/MS anyplace anything/S anyway/S anywhere/S aorta apace apart/P apartheid apartment/MS apathetic apathy ape/DGRS aperiodic aperiodicity aperture/D apex/S aphasia aphasic aphid/MS aphonic aphorism/MS Aphrodite/M apiary/S apical/Y apiece apish/PY aplenty aplomb apocalypse apocalyptic apocrypha apocryphal/PY apogee/S Apollo/M Apollonian apologetic/S apologetically/U apologia apologist/MS apology/MS apostate/S apostle/MS apostolic apostrophe/S apothecary apotheoses apotheosis Appalachia/M Appalachian/MS appalled appalling/Y appanage apparatus/S apparel/S apparent/PY apparently/I apparition/MS appeal/DGRSZ appealing/UY appear/DGRSZ appearance/S appease/DGRS appeasement appellant/MS appellate/NV appellative/Y append/DGRSZ appendage/MS appendices appendicitis appendix/MS appertain/DGS appetite/MSV applaud/DGRS applause apple/MS applejack appliance/MS applicability/I applicable/I applicant/MS application/MS applicative/Y applicator/MS applique/S apply/DGNRSXZ applying/A appoint/DGRSVZ appointee/MS appointment/MS appointment's/A apportion/DGS apportioned/A apportionment/S appraisal/MS appraisals/A appraise/DGRSZ appraised/A appraises/A appraising/Y appreciable/I appreciably/I appreciate/DGNSVX appreciated/U appreciative/IPY apprehend/DGRS apprehensible apprehension/MS apprehensive/PY apprentice/DS apprenticeship/S apprise/DGJRSZ apprize/DGJRSZ apprizing/SY approach/DGMRSZ approachability/U approachable/IU approbate/N appropriate/DGNPSTVXY appropriated/U appropriator/MS approval/MS approve/DGRSZ approving/Y approximate/DGNSVXY approximative/Y appurtenance/S apricot/MS April/MS apron/MS apropos apse/S apsis apt/IPUY aptitude/S aqua/S aquaria aquarium Aquarius aquatic/S aqueduct/MS aqueous/Y aquifer/S Arab/MS arabesque Arabia/M Arabian/MS Arabic/M arable arachnid/MS arbiter/MS arbitrary/PY arbitrate/DGNSV arbitrator/MS arboreal/Y arc/DGS arcade/DGMS arcane arch/DGPRSVYZ archaeological/Y archaeologist/MS archaeology archaic/P archaically archaism archangel/MS archbishop archdiocese/S archenemy archer/MS archery archetype/S archfool Archie/M archipelago archipelagoes architect/MS architectonic/S architectural/Y architecture/MS archival archive/DGRSZ archivist/S arclike arctic ardent/Y arduous/PY are/S area/MS aren't arena/MS Argentina/M Argo/MS argon argonaut/S argot arguable/IU arguably/IU argue/DGRSZ argument/MS argumentation argumentative/Y Arianism/M Arianist/MS arid/P aridity Aries aright arise/GJRS arisen aristocracy aristocrat/MS aristocratic aristocratically Aristotelian/M Aristotle/M arithmetic/S arithmetical/Y Arizona/M ark Arkansas/M arm/DGMRSZ armadillo/S Armageddon/M armament/MS armchair/MS armed/AU Armenian/M armful/S armhole armistice armload armpit/MS arms/A Armstrong/M army/MS aroma/S aromatic/P arose around arousal arouse/DGS arpeggio/MS arrack arraign/DGS arraignment/MS arrange/DGRSZ arrangement/AMS arrant/Y array/DGRS arrears arrest/DGRSZ arrested/A arresting/Y arrestor/MS arrival/MS arrive/DGRS arrogance arrogant/Y arrogate/DGNS arrow/DGS arrowhead/MS arroyo/S arsenal/MS arsenic arsine/S arson art/MS Artemis arterial/Y arteriolar arteriole/MS arteriosclerosis artery/MS artful/PY arthritis arthrogram/MS arthropod/MS artichoke/MS article/DGMS articulate/DGNPSVXY articulated/U articulator/S articulatory artifact/MS artifice/RS artificial/PY artificiality/S artillerist artillery/S artisan/MS artist/MS artistic/I artistically/I artistry artless/Y artwork/MS Aryan/MS as ASAP asbestos ascend/DGRSZ ascendancy ascendant/Y ascendency ascendent ascension/S ascent ascertain/DGS ascertainable ascetic/MS asceticism ASCII ascot ascribable ascribe/DGS ascription aseptic ash/NRS ashamed/UY ashman ashore ashtray/MS Asia/M Asian/MS Asiatic/MS aside/S asinine/Y ask/DGRSZ askance asked/U askew/P asleep asocial asp/NR asparagus aspect/MS aspersion/MS asphalt/D asphyxia aspic aspirant/MS aspirate/DGNSX aspiration/MS aspirator/S aspire/DGRS aspirin/S ass/MS assail/DGS assailant/MS assassin/MS assassinate/DGNSX assault/DGRSV assaultive/PY assay/DGRZ assemblage/MS assemble/DGRSZ assembled/AU assembly/MS assent/DGRS assert/DGRSVZ assertion/MS assertive/PY asserts/A assess/ADGS assessment/AMS assessor/MS asset/MS assiduity assiduous/PY assign/DGRSZ assignable/A assigned/AU assignee/MS assignment/AMS assigns/AU assimilate/DGNSVX assist/DGRS assistance/S assistant/MS assistantship/S assisted/U associate/DGNSVX association/MS associational associative/Y associativity/S associator/MS assonance assonant assort/DGRS assortment/MS assuage/DGS assume/DGRS assumption/MS assurance/MS assurances/A assure/DGRSZ assured/PY assuring/AY Assyrian/M Assyriology/M astatine aster/MS asterisk/MS asteroid/MS asteroidal asthma astonish/DGS astonishing/Y astonishment astound/DGS astounding/Y astral/Y astray astride astringency astringent/Y astronaut/MS astronautics astronomer/MS astronomical/Y astronomy astrophysical astrophysics astute/PY asunder asylum/S asymmetric asymmetrical/Y asymmetry/S asymptomatically asymptote/MS asymptotic asymptotically asynchronism asynchronous/Y asynchrony at atavistic ate atemporal atheism atheist/MS atheistic Athena/M Athenian/MS Athens atherosclerosis athlete/MS athletic/S athleticism Atlantic/M atlas ATM ATM's atmosphere/DMS atmospheric/S atoll/MS atom/MS atomic/S atomically atonal/Y atone/DGS atonement atop atrocious/PY atrocity/MS atrophic atrophy/DGS attach/DGRSZ attache/DGRSZ attached/U attachment/MS attack/DGRSZ attackable attacker/MS attain/DGRSZ attainable/P attainably attainment/MS attempt/DGRSZ attend/DGRSZ attendance/MS attendant/MS attended/U attendee/MS attention/MS attentional attentionality attentive/IPY attenuate/DGNS attenuated/U attenuator/MS attest/DGRS attic/MS attire/DGS attitude/MS attitudinal/Y attorney/MS attract/DGSV attraction/MS attractive/PUY attractor/MS attributable attribute/DGNRSVX attributed/U attributive/Y attrition attune/DGS atypical/Y auburn Auckland/M auction/DGMS auctioneer/MS audacious/PY audacity audible/I audibly/I audience/MS audio audiogram/MS audiological audiologist/MS audiology audiometer/MS audiometric audiometry audit/DGSV audition/DGMS auditor/MS auditorium/S auditory Audubon/M auger/MS aught augment/DGRS augmentation/S augur/S august/PY Augusta/M Augusts aunt/MSY aura/MS aural/Y aureole aureomycin aurora auscultate/DGNSX auspice/S auspicious/IPY austere/PY austerity Austin/M Australia/M Australian/MS Austria/M Austrian/M authentic/IU authentically authenticate/DGNSX authenticated/U authenticator/S authenticity/I author/DGMS authoritarian authoritarianism authoritative/PY authority/MS authorship autism autistic auto/MS autobiographic autobiographical/Y autobiography/MS autocollimator autocorrelate/DGNSX autocracy/S autocrat/MS autocratic autocratically autodial autofluorescence autofocus/DGRS autograph/DGS automata/M automate/DGNS automated/U automatic/S automatically automaton/MS automobile/MS automotive autonavigator/MS autonomic autonomous/Y autonomy autopilot/MS autopsy/DS autoregressive autorepeat/GS autosuggestibility autotransformer autumn/MS autumnal/Y auxiliary/S avail/DGRSZ availability/S available/P availably avalanche/DGS avant avarice avaricious/PY Ave avenge/DGRS avenue/MS aver/S average/DGPSY averred averrer averring avers/V averse/NPVXY aversion/MS avert/DGS avian aviary/S aviation aviator/MS avid/PY avidity avionic/S avocado/S avocation/MS avoid/DGRSZ avoidable/U avoidably/U avoidance avouch avow/DRS avowed/Y await/DGS awake/DGS awaken/DGRS award/DGRSZ aware/PU awash away/P awe/DG awesome/PY awful/PY awhile/S awkward/PY awl/MS awning/DMS awoke awry ax/DGRSZ axe/DGNRSXZ axial/Y axiological/Y axiom/MS axiomatic/S axiomatically axion/MS axis axle/MS axolotl/MS axon/MS aye/RSZ azalea/MS azimuth/MS azure babble/DGRS babe/MS Babel/M baby/DGMS babyhood babyish babysit/S babysitter/S baccalaureate Bach/M bachelor/MS bacilli bacillus back/DGRSZ backache/MS backbone/MS backdrop/MS backed/U background/MS backlash/R backlog/MS backpack/DGMRSZ backplane/MS backscatter/DGMS backslash/DGS backspace/DGS backstabber backstabbing backstage backstairs backstitch/DGS backtrack/DGRSZ backup/S backward/PSY backwater/MS backwoods backyard/MS bacon/R bacteria bacterial/Y bacterium bad/PSY bade Baden/M badge/DGMRSZ badger/DGMS badlands badminton baffle/DGRSZ baffling/Y bag/MS bagatelle/MS bagel/MS baggage bagged bagger/MS bagging baggy/PRSY bagpipe/MRS Bagrodia/MS bah bail/DGRSY Bailey/MS bailiff/MS bait/DGRS bake/DGJRSZ baker/MS bakery/MS baklava balalaika/MS balance/DGRSZ balanced/PU balcony/DMS bald/GPRY bale/DGRSZ baleful/PY balk/DGRS Balkan/MS balky/PR ball/DGRSZ ballad/MS ballast/MS baller/MS ballerina/MS ballet/MS ballistic/S balloon/DGRSZ ballot/DGMRS ballplayer/MS ballroom/MS ballyhoo/DGS balm/MS balmy/PRY balsa balsam/S Baltic/M balustrade/MS bamboo/S ban/GMS banal/Y banana/MS band/DGRS bandage/DGRS bandit/MS bandpass bandstand/MS bandwagon/MS bandwidth/S bandy/DGS bane/G baneful/Y bang/DGRS Bangladesh/M bangle/MS banish/DGRS banishment banister/MS banjo/MS bank/DGMRSZ bankrupt/DGS bankruptcy/MS banned/U banner/MS banning/U banquet/DGJRS bans/U banshee/MS bantam banter/DGRS bantering/Y Bantu/MS baptism/MS baptismal/Y baptist/MS baptistery baptistry/MS bar/DGMRST barb/DRSZ Barbados barbarian/MS barbaric barbarity/S barbarous/PY barbecue/DGRS barbed/P barbell/MS barber/DGMS barbered/U barbital barbiturate/S bard/MS bare/DGPRSTY barefoot/D barfly/MS bargain/DGRS barge/DGS baritone/MS barium bark/DGRSZ barley barn/MS barnstorm/DGRS barnyard/MS barometer/MS barometric baron/MS baroness baronial barony/MS baroque/PY barrack/RS barracuda/MS barrage/DGMS barred/U barrel/MS barren/PS barricade/MS barrier/MS barring/R barrow/S bartender/MS barter/DGRS bas/DGRST basal/Y basalt base/DGPRSTY baseball/MS baseboard/MS baseless baseline/MS baseman basement/MS bash/DGRS bashful/PY basic/S basically basil basin/DMS basis bask/DGS basket/MS basketball/MS bass/MS basset bassinet/MS basso bastard/MSY baste/DGNRSX bastion/DMS bat/DGMRS batch/DGRS bated/AU bath/DGRSZ bathe/DGRSZ bathos bathrobe/MS bathroom/DMS bathtub/MS baton/MS battalion/MS batted batten/DGS batter/DGS battery/MS batting battle/DGRSZ battlefield/MS battlefront/MS battleground/MS battlement/DMS battleship/MS bauble/MS baud/S bauxite bawdy/PRY bawl/DGRS Baxter/M bay/DGSY bayonet/DGMS bayou/MS bazaar/MS be/DGHSTY beach/DGS beachhead/MS beacon/DGMS bead/DGS beadle/MS beady beagle/MS beak/DRSZ beam/DGRSZ bean/DGRSZ beanbag/MS bear/GJRSZ bearable/U bearably/U beard/DS bearded/P beardless bearish/PY beast/JMSY beastly/PR beat/GJNRSZ beatable/U beatably/U beaten/U beatific beatify/N beatitude/MS beatnik/MS beau/MS beauteous/PY beautiful/PY beautifully/U beautify/DGNRSXZ beauty/MS beaver/MS becalm/DGS became because beck beckon/DGS become/GS becoming/UY bed/MS bedazzle/DGS bedazzlement bedbug/MS bedded bedder/MS bedding bedevil/S bedfast bedlam bedpost/MS bedraggle/D bedridden bedrock/M bedroom/DMS bedside bedspread/MS bedspring/MS bedstead/MS bedtime bee/GJRSZ beech/NR beef/DGRSZ beefsteak beefy/R beehive/MS been/S beep/DGRS beet/MS Beethoven/M beetle/DGMS befall/GNS befell befit/MS befitted befitting/Y befog/S befogged befogging before beforehand befoul/DGS befriend/DGS befuddle/DGS beg/S began beget/S begetting beggar/DGSY beggarly/P beggary begged begging begin/S beginner/MS beginning/MS begot begotten begrudge/DGRS begrudging/Y beguile/DGRS beguiling/Y begun behalf behave/DGRS behead/G beheld behest behind behold/GNRSZ beige belated/PY belay/DGS belch/DGS belfry/MS Belgian/MS Belgium/M belie/DRS belief/MS believability believable/U believably/U believe/DGRSZ believing/U belittle/DGRS bell/MS bellboy/MS belle/MS bellhop/MS bellicose/PY bellicosity belligerence belligerent/MSY bellman bellmen Bellovin/M bellow/DGS bells/A bellwether/MS belly/DGMS bellyful belong/DGJS belonging/PS beloved below belt/DGRS belted/U Belushi/M bely/DGRS bemoan/DGS bench/DGRS benchmark/DGMS bend/DGRSZ bendable/U beneath Benedict/M Benedictine/M benediction/MS benefactor/MS beneficence/S beneficial/PSY beneficiary/S benefit/DGRSZ benevolence benevolent/PY Bengal/M Bengali/M benighted/PY benign/Y bent/S Benzedrine/M benzene bequeath/DGS bequest/MS berate/DGS bereave/DGS bereavement/S bereft beret/MS Bergsten/M beribboned beriberi Berkeley/M berkelium Berlin/MRZ Bermuda/M berry/DGMS berth/DGJS beryl beryllium beseech/GS beseeching/Y beset/S besetting beside/S besiege/DGRZ besmirch/DGS besotted besotting besought bespeak/S bespectacled Bessel/M best/DGRS bestial/Y bestow/D bestowal bestseller/MS bestselling bet/MS beta/S betide betray/DGRS betrayal betroth/D betrothal/S betrothed/U Betsy/M better/DGS betterment/S betting between/P betwixt bevel/S beverage/MS Beverly/M bevy/S bewail/DGS beware bewhiskered bewilder/DGS bewildered/PY bewildering/Y bewilderment bewitch/DGS bewitching/Y beyond biannual bias/DGPS bib/MS bibbed bibbing bible/MS biblical/Y bibliographic/S bibliographical/Y bibliography/MS bibliophile/S bicameral bicarbonate bicentennial biceps bicker/DGRS biconcave biconvex bicycle/DGRSZ bid/DGMRS biddable bidden/U bidder/MS bidding/A biddy/S bide/DGRS bidirectional bids/A biennial/Y biennium bifocal/S bifurcate/DGNSXY big/PY bigger biggest bight/MS bigot/DGMS bigoted/Y bigotry bijection/MS bijective/Y bike/DGMRSZ biker/MS bikini/DMS bilabial bilateral/PY Bilbo/M bile bilge/DGMS bilinear bilingual/SY bilk/DGRS bill/DGJMRSZ billboard/MS biller/MS billet/DGS billiard/S billion/HS billow/DGS bimodal bimolecular/Y bimonthly/S bin/MRS binary/S binaural/Y bind/DGJRSZ binding/PSY bing/N binge/S bingo/S binocular/SY binomial/Y binuclear biochemical/Y biochemistry biofeedback biographer/MS biographic biographical/Y biography/MS biological/SY biologist/MS biology biomedical biomedicine/M biopsy/S bipartisan bipartite/NY biped/S biplane/MS bipolar biracial birch/NRS bird/MRS birdbath/MS birdie/DS birdlike birefringence birefringent birth/DMS birth's/A birthday/MS birthplace/S birthright/MS biscuit/MS bisect/DGS bisection/MS bisector/MS bishop/MS bismuth bison/MS bisque/S bit/GMRSZ bitblt/S bitch/MS bite/GRSZ biting/Y bitmap/MS bits/R bitten bitter/PRSTY bittersweet/PY bituminous bitwise bivalve/DMS bivariate bivouac/S biweekly bizarre/PY blab/S blabbed blabbermouth/S blabbing black/DGNPRSTXY blackberry/MS blackbird/MRS blackboard/MS blacken/DGRS blackjack/MS blacklist/DGRS blackmail/DGRSZ blackout/MS blacksmith/GMS bladder/MS blade/DMS blamable blame/DGRSZ blameless/PY blanch/DGRS bland/PY blank/DGPRSTY blanket/DGRSZ blare/DGS blase blaspheme/DGRS blasphemous/PY blasphemy/S blast/DGRSZ blatant/PY blaze/DGRSZ blazing/Y bleach/DGRSZ bleak/PY blear bleary/PY bleat/GRS bled bleed/GJRSZ blemish/DGMS blemished/U blend/DGRSZ bless/DGJS blessed/PY blew blight/DR blimp/MS blind/DGPRSYZ blinded/U blindfold/DGS blinding/Y blink/DGRSZ blinker/DGS blinking/U blip/MS bliss/D blissful/PY blister/DGS blistering/Y blithe/RTY blitz/MS blitzkrieg blizzard/MS bloat/DGRSZ blob/MS bloc/MS block/DGMRSZ blockade/DGRS blockage/MS blockhouse/S bloke/MS blond/MS blonde/MS blood/DS bloodhound/MS bloodless/PY bloodshed bloodshot bloodstain/DMS bloodstream bloody/DGPTY bloom/DGRSZ blossom/DS blot/MS blotted blotting blouse/GMS blow/DGRSZ blower/MS blowfish blown/U blowup blubber/DG bludgeon/DGS blue/DGPRSTY blueberry/MS bluebird/MS bluebonnet/MS bluefish blueprint/DGMS bluestocking bluff/DGPRSY bluish/P blunder/DGJRS blundering/SY blunt/DGPRSTY blur/MS blurb/MS blurred/Y blurring/Y blurry/PRY blurt/DGRS blush/DGRS blushing/UY bluster/DGRS blustering/Y blustery boar board/DGMRSZ boardinghouse/MS boards/I boast/DGJRSZ boastful/PY boat/DGMRSZ boathouse/MS boatload/MS boatman boatmen boatswain/MS boatyard/MS bob/MS bobbed bobbin/MS bobbing bobby/S bobolink/MS bobwhite/MS bode/DGS bodice bodied/U body/DGSY bodybuilder/MS bodybuilding bodyguard/MS bog/MS bogged boggle/DGS bogus boil/DGRSZ boilerplate boisterous/PY bold/PRTY boldface/DGS Bolivia/M boll Bologna/M Bolosky/M Bolshevik/MS Bolshevism/M bolster/DGRS bolt/DGRS bolted/U bomb/DGJRSZ bombard/DGS bombardment/S bombast/R bombastic bombproof bonanza/MS bond/DGRSZ bondage bonds/A bondsman bondsmen bone/DGRSZ boned/U bonfire/MS bong bonnet/DS bonneted/U bonny/RY bonus/MS bony/R boo/HS boob booboo booby/S book/DGJMRSZ bookcase/MS bookie/MS bookish/PY bookkeeper/MS bookkeeping booklet/MS bookseller/MS bookshelf/M bookshelves bookstore/MS boolean/S boom/DGRS boomerang/MS boon boor/MS boorish/PY boost/DGRSZ booster/MS boot/ADGS booth/S bootleg/S bootlegged bootlegger/MS bootlegging bootstrap/MS bootstrapped bootstrapping booty/S booze/GR borate/DS borax bordello/MS border/DGJRS borderland/MS borderline bore/DGRSZ boredom boric boring/PY born/AIU borne Borneo/M boron borough/S borrow/DGJRSZ bosom/MS boss/DS Boston/M Bostonian/MS bosun botanical/Y botanist/MS botany botch/DGRSZ both/RZ bother/DGS bothered/U bothersome Botswana/M bottle/DGRSZ bottleneck/DGMS bottom/DGRS bottomless/PY botulinus botulism bouffant bough/DMS bought/N boulder/DGMS boulevard/MS bounce/DGRSZ bouncing/Y bouncy/RY bound/DGNRS boundary/MS bounded/AIU boundless/PY bounds/AI bounteous/PY bounty/DMS bouquet/MS bourbon/S bourgeois bourgeoisie Bourne/M bout/MS bovine/SY bow/DGNRSZ bowed/U bowel/MS bowl/DGRSZ bowline/MS bowman bows/R bowstring/MS box/DGRSZ boxcar/MS boxwood boy/MRS boycott/DGRS boyfriend/MS boyhood boyish/PY Bozman/M bra/MS brace/DGRS bracelet/MS bracket/DGS brackish/P Brad/M brae/MS brag/S bragged bragger bragging braid/DGRS braille brain/DGRS brainchild/M brainstorm/GMRS brainwash/DGRS brainy/PR brake/DGS bramble/GMS brambly bran branch/DGJS branched/U brand/DGRS brandish/GS brandy/DGS brash/PY brass/DS brassiere brassy/PRY brat/MS bravado brave/DGPRSTY bravery bravo/DGS bravura brawl/DGRS brawn bray/DGRS braze/DGRS brazen/DGPY brazier/MS Brazil/M Brazilian/M breach/DGRSZ bread/DGHS breadboard/MS breadwinner/MS break/GRSZ breakable/S breakage breakaway breakdown/MS breakfast/DGRSZ breakpoint/DGMS breakthrough/MS breakup/S breakwater/MS breast/DGS breastwork/MS breath/DGRSZ breathable/U breathe/DGRSZ breathless/PY breathtaking/Y breathy/R bred/IU breech/GMS breed/GRS breeze/DGMS breezy/PRY bremsstrahlung Bresenham/M brethren breve/S brevet/DGS brevity brew/DGRSZ brewery/MS briar/MS bribe/DGRSZ brick/DGRS bricklayer/MS bricklaying bridal bride/MS bridegroom bridesmaid/MS bridge/DGS bridgeable bridgehead/MS bridgework/M bridle/DGS bridled/U brief/DGJPRSTY briefcase/MS briefing/MS brier brig/MS brigade/DGMS brigadier/MS brigantine bright/GNPRSTXY brighten/DGRSZ brightness/S brilliance brilliancy brilliant/PY brim brimful brimmed brindle/D brine/GR bring/GRSZ brink brinkmanship brisk/PRY bristle/DGS Britain/M britches British/RY Briton/MS brittle/DGPRTY broach/DGRS broad/NPRSTXY broadband broadcast/DGJRSZ broadcasts/A broaden/DGJRSZ broadside/DGS brocade/D broccoli brochure/MS broil/DGRSZ broke/RZ broken/PY broker/MS brokerage bromide/MS bromine/S bronchi bronchial bronchiole/MS bronchitis bronchus bronze/DGRS brooch/MS brood/DGRS brooding/Y brook/DMS broom/DGMS broomstick/MS broth/RSZ brothel/MS brother/MSY brotherhood brotherly/P brought brow/MS browbeat/GNS brown/DGJPRSTY Brown's brownie/MS brownish brows/DGRSZ browse/DGRSZ browser/MS bruise/DGRSZ brunch/S brunette/S brunt brush/DGRS brushfire/MS brushlike brushy/R brusque/PY brutal/Y brutality/S brute/MS brutish/PY BSD bubble/DGRS bubbly/R buck/DGRS buckboard/MS bucket/DGMS buckle/DGRS buckshot buckskin/S buckwheat bucolic bud/MS budded budding buddy/MS budge/DGS budget/DGRSZ budgetary budging/U Buehring/M buff/GMRSZ buffalo buffaloes buffer/DGMRSZ buffered/U bufferer/MS buffet/DGJS buffoon/MS bug/MS bugged bugger/DGMS bugging buggy/MS bugle/DGRS build/DGJRSZ building/MS buildup/MS built/AIU bulb/DMS bulge/DGS bulk/DS bulkhead/DMS bulky/PRY bull/DGS bulldog/MS bulldoze/DGRSZ bullet/MS bulletin/MS bulletproof/DGS bullion bullish/PY bully/DGS bulwark bum/MS bumble/DGRSZ bumblebee/MS bumbling/Y bummed bummer/S bumming bump/DGRSZ bumptious/PY bun/MS bunch/DGS bundle/DGRS bundled/U bungalow/MS bungle/DGRSZ bungling/Y bunion/MS bunk/DGRSZ bunker/DGMS bunkhouse/MS bunkmate/MS bunny/MS bunt/DGRSZ buoy/DGS buoyancy buoyant/Y burden/DGMS burdened/U burdensome/PY bureau/MS bureaucracy/MS bureaucrat/MS bureaucratic/U burgeon/DGS burger burgess/MS burgher/MS burglar/MS burglarproof/DGS burglary/MS burgle/DGS burial buried/U burl/DR burlesque/DGRSY burly/PRY burn/DGJRSZ burned/U burning/SY burnish/DGRS burnt/PY burp/DGS burr/DMRS burro/MS burrow/DGRS bursa/S bursitis burst/DGRS bury/DGRS bus/DGS busboy/MS bush/DGJS bushel/MS bushwhack/DGRS bushy/PRY business/MS businesslike businessman/M businessmen buss/DGS bust/DGRS bustard/MS bustle/DG bustling/Y busy/DGPRSTY but/A butane butcher/DGMRSY butchery butler/MS butt/DGMRSZ butte/DGRSZ butted/A butter/DGRSZ buttered/U butterfat butterfly/MS butternut butting/A buttock/MS button/DGRS buttoned/U buttonhole/MRS buttons/U buttress/DGS butyl butyrate buxom/PY buy/GRSZ buyer/MS buzz/DGRS buzzard/MS buzzword/MS buzzy by/R bye/SZ bygone/S bylaw/MS byline/MRS bypass/DGS byproduct/MS bystander/MS byte/MS byway/S byword/MS cab/MRS cabbage/DGMS cabin/MS cabinet/MS cable/DGMS cache/DGMRS cackle/DGRS cacti cactus/S cad cadence/DGS cafe/MS cafeteria/MS cage/DGMRSZ caged/U cajole/DGRS cake/DGS calamity/MS calcium calculate/ADGNSVX calculated/PY calculating/AU calculator/MS calculus calendar/DGMS calf/S calibrate/DGNRSX calibrated/U calibrator/S calico California/M Californian/MS caliph/S call/DGMRSZ called/AU caller/MS callous/DPY calm/DGPRSTY calming/Y calorie/MS calves Cambridge/M came/N camel/MS camera/MS camouflage/DGS camp/DGRSZ campaign/DGRSZ campus/MS can/DGMRS can't Canada/M canal/MS canary/MS cancel/S cancellation/MS cancer/MS candid/MPSY candidate/MS candidly/U candle/DGRS candlestick/MS candy/DGS cane/DGRS canker/DG canned canner/MS cannibal/MS canning cannister/MS cannon/DGMS cannot canoe/DMS canon/MS canonical/SY canopy cantankerous/PY canto/S canton/MS cantor/MS canvas/MRS canvass/DGRSZ canyon/MS cap/MRSZ capability/MS capable/IP capably/I capacious/PY capacitance/S capacitive/Y capacitor/MS capacity/S cape/RSZ caper/DGS capillary capita capital/SY capitalism capitalist/MS capitol/MS capped/A capping/A capricious/PY captain/DGMS caption/DGMRS captioned/U captivate/DGNS captive/MS captivity captor/MS capture/DGRSZ car/DGMRSZ caravan/MRS carbohydrate/MS carbolic carbon/MS carbonate/DNS carbonic carcass/MS card/DGMRS cardboard/S cardiac cardinal/MSY cardinality/MS care/DGRSZ cared/U career/DGMS carefree careful/PY careless/PY caress/DGRSV caressing/Y caressive/Y caret/S cargo/S cargoes caribou/S caring/U carnation/IS carnival/MS carnivorous/PY carol/MS Carolina/MS Carolyn/M carpenter/DGMS carpet/DGS carriage/MS carrier/MS carrot/MS carry/DGRSZ carryover/S cart/DGRSZ Cartesian cartography carton/MS cartoon/MS cartridge/MS carve/DGJRSZ cascade/DGS case/DGJS casement/MS cash/DGRSZ cashier/MS cask/MS casket/MS casserole/MS cast/DGJMRSZ caste/DGHJMRSZ castle/DGS casual/PSY casualty/MS cat/MRSZ catalyst/MS cataract/S catastrophe/MS catastrophic catch/GRSZ catchable/U catcher/MS categorical/Y category/MS cater/DGRS caterpillar/MS cathedral/MS catheter/S cathode/MS catholic/MS catsup cattle caught/U causal/Y causality causation/MS cause/DGRS caused/U causeway/MS caustic/SY caution/DGJRSZ cautious/IPY cavalier/PY cavalry cave/DGRS caveat/MS cavern/MS cavity/MS caw/DGS CDC CDC's cease/DGS ceaseless/PY ceasing/U Cecily/M cedar ceiling/DMS celebrate/DGNSX celebrated/P celebratory celebrity/MS celery celestial/Y celibate/S cell/DMS cellar/DGMRS cellist/MS cellular/Y cement/DGRS cemetery/MS censor/DGMS censored/U censorship censure/DGRS census/MS cent/AI centipede/MS central/SY centrifuge/DGMS centripetal/Y cents century/MS CEO cereal/MS cerebral/Y ceremonial/PY ceremony/MS certain/UY certainty/SU certifiable certificate/DGNSX certified/AU certify/ADGNRSXZ cessation/MS chafe/GR chaff/GR chaffer/DGR chagrin/DGS chain/DGMS chair/DGMS chairman/M chairmanship/S chairmen chairperson/MS chalice/DMS chalk/DGS challenge/DGRSZ challenged/AU challenging/Y chamber/DGRSZ chamberlain/MS champagne champaign champion/DGS championship/MS chance/DGRS chancellor/MS chandelier/MS change/DGRSZ changeability/U changeable/P changeably/U changed/U changeover/MS channel/MS chant/DGRS chanticleer/MS chaos chaotic chap/MS chapel/MS chaperon/D chaplain/MS chapter/DGMS char/GS character/DGMS characteristic/MS characteristically/U charcoal/DS charge/DGRSZ chargeable/P charged/AU charges/A chariot/MS charitable/PU charity/MS charm/DGRSZ charming/Y chart/DGJMRSZ chartable charted/U charter/DGRSZ chartered/U chartering/A chase/DGRSZ Chase's chasm/MS chaste/PRTY chastise/DGRSZ chat/S chateau/MS chatter/DGRSYZ chauffeur/DGS chauvinism/M chauvinist/MS chauvinistic cheap/NPRTXY cheapen/DGS cheat/DGRSZ check/DGRSZ checkable/U checked/AU checker/DGS checkout/S checkpoint/DGMS checks/A checksum/MS cheek/MS cheer/DGRSYZ cheerful/PY cheerless/PY cheery/PRY cheese/DGMS chef/MS chemical/SY chemise/S chemist/MS chemistry/S cherish/DGRS cherry/MS cherub/MS cherubim chess chest/RS chestnut/MS chew/DGRSZ chick/NSX chickadee/MS chicken/DGS chide/DGS chief/MSY chieftain/MS chiffon child/MY childhood/S childish/PY children/M chill/DGPRSZ chilling/Y chilly/PRSY chime/DGMRS chimney/DMS chin/MS Chinese/M chink/DS chinned chinner/S chinning chintz chip/MS chipmunk/MS chirp/DGS chisel/MS chivalrous/PY chivalrously/U chivalry chlorine chloroplast/MS chock/DGMRS chocolate/MS choice/PRSTY choir/MS choke/DGRSZ choking/Y cholera choose/GRSZ chop/S chopped chopper/MS chopping choral/Y chord/DGMS chore/GNS chorister/MS chorus/DS chose chosen/U christen/DGS Christian/MS Christians/N Christmas chronic chronicle/DRSZ chronological/Y chronology/MS chubby/PRTY chuck/DGMS chuckle/DGS chuckling/Y chum/S chump/GMS chunk/DGMS church/DGSY churchly/P churchman churchyard/MS churn/DGRSZ chute/DGMS cider/S cigar/MS cigarette/MS cinder/MS cinnamon cipher/DGMS circle/DGRS circuit/DGMS circuitous/PY circuitry circular/MPSY circularity/S circulate/DGNSVX circumference/S circumflex/S circumlocution/MS circumspect/Y circumstance/DGMS circumstantial/Y circumvent/DGS circumventable circus/MS cistern/MS citadel/MS citation/AMS citations/AI cite/ADGIS cited/AIU citizen/MSY citizenship city/DMS civic/S civil/UY civilian/MS civility/S clad/S claim/ADGRS claimable/A claimant/MS claimed/AU clairvoyant/SY clam/MS clamber/DGRS clamorous/PUY clamp/DGRS clan/S clang/DGRSZ clap/S clarify/DGNRSX clarity/U clash/DGRS clasp/DGRS class/DGRS classic/S classical/Y classifiable classified/AU classifieds classify/DGNRSXZ classmate/MS classroom/MS classwork clatter/DGRS clattering/Y clause/MS claw/DGRS clay/DGMS clean/DGPRSTYZ cleaner/MS cleanly/PR cleans/DGRSZ cleanse/DGRSZ cleanup/MS clear/DGJPRSTY clearance/MS clearing/MS cleavage/S cleave/DGRSZ cleft/MS clench/DGS clenched/U clergy clergyman clerical/SY clerk/DGMSY clever/PRTY cliche/MS click/DGRSZ client/MS cliff/MS climate/MS climatic climatically climax/DGS climb/DGRSZ clime/MS clinch/DGRS clinching/Y cling/GS clinic/MS clinical/Y clink/DRZ clinker/DGS clip/MS clipped/U clipper/MS clipping/MS clique/MS cloak/DGMS clobber/DGS clock/DGJRSZ clockwise clockwork clod/MS clog/MS clogged/U clogging/U clogs/U cloister/DGMS clone/DGMRSZ cloned/U close/DGJPRSTYZ closed/IU closeness/S closet/DS closure/DGMS cloth/DGS clothe/DGS clothed/U cloud/DGS clouded/U cloudless/PY cloudy/PRTY clout clove/RS clown/GMS club/MS clubbed clubbing cluck/DGS clue/GMS clump/DGS clumsy/PRTY clung cluster/DGJMS clustered/AU clusters/A clutch/DGS clutter/DGS cluttered/U CMOS coach/DGMRS coachman coagulate/DGNS coal/DGRS coalesce/DGS coalition coarse/PRTY coarsen/DG coast/DGRSZ coastal coat/DGJRSZ coated/U coax/DGRS coaxial/Y cobbler/MS Cobol/M cobweb/MS cock/DGRS cockroach/S cocktail/MS cocoa coconut/MS cocoon/MS cod/DGJRSZ code/DGJMRSZ coded/AU coder/MS codeword/MS codification/MS codifier/MS codify/DGNRSXZ coefficient/MSY coerce/DGNSVX coercive/PY coexist/DGS coexistence coffee/MS coffer/MS coffin/MS cogent/Y cogitate/DGNSV cognition/AS cognitive/SY cohabit/DGS cohabitation/S cohere/DGRS coherence/I coherent/IY cohesion cohesive/PY coil/ADGS coiled/AU coin/DGRS coinage/A coincide/DGS coincidence/MS coincidental/Y coined/U coke/GS cold/PRSTY Coleman/M collaborate/DGNSVX collaborative/Y collaborator/MS collapse/DGS collar/DGS collate/DGNSVX collateral/Y collator/S colleague/MS collect/ADGSV collected/PY collectible/MS collection/AMS collective/SY collector/MS college/MS collegiate/Y collide/DGRSZ collider/MS collie/DRS collision/MS collocate/DGMNS cologne/D colon/MS colonel/MS colonial/PSY colonist/MS colony/MS Colorado/M colossal/Y colt/MRS column/DMS columnar comb/DGJRSZ combat/DGSV combatant/MS combative/PY combination/AMS combinational/A combinator/MS combinatorial/Y combinatoric/S combine/DGRSZ combustion/MS Comdex/M come/GHJRSTYZ comedian/MS comedic comedy/MS comely/PR comestible/S comet/MS comfort/DGRSZ comfortability/S comfortable/P comfortably/U comforted/U comforting/Y comic/MS comical/Y comma/MS command/DGMRSZ commandant/MS commandeer/DGS commanding/Y commandment/MS commemorate/DGNSVX commemorative/SY commence/DGRS commenced/A commencement/MS commences/A commend/ADGRS commendation/AMS commensurate/NSXY comment/DGMRSZ commentary/MS commentator/MS commented/U commenter/MS commerce/DG commercial/PSY commission/DGMRSZ commissioner/MS commit/S commitment/MS committed/U committee/MS committing commodity/MS commodore/MS common/PRSTYZ commonality/S commoner/MS commonplace/PS commonwealth/S commotion/S communal/Y commune/DGNS communicant/MS communicate/DGNSVX communicative/PY communicator/MS communist/MS community/MS commutative/Y commutativity commute/DGRSZ compact/DGPRSTYZ compacted/U compactor/MS companion/MS companionable/P companionship company/MS comparability/I comparable/P comparably/I comparative/PSY comparator/MS compare/DGRS comparison/MS compartment/DGS compass/DGS compassion compassionate/PY compassionately/U compatibility/IMS compatible/PS compatibly/I compel/S compelled compelling/Y compendium compensate/DGNSVX compensated/U compensatory compete/DGS competence/S competent/IY competition/MS competitive/PY competitor/MS compilable compilation/AMS compile/DGRSZ compiler/MS complain/DGRSZ complaining/UY complaint/MS complement/DGRSZ complementary/PY complete/DGNPRSVXY completed/U complex/PSY complexion/D complexity/S compliance/S complicate/DGNSX complicated/PY complicator/MS complicity compliment/DGRSZ complimentary/Y comply/DGNRSXZ component/MS compose/DGRSZ composed/PY composer/MS composite/DGNSXY compositional/Y composure compound/DGRS comprehend/DGS comprehending/U comprehensibility/I comprehensible/IP comprehension/MS comprehensive/PY compress/DGSUV compressed/Y compressible/I compression/S compressive/Y comprise/DGS compromise/DGRSZ compromising/UY comptroller/MS compulsion/MS compulsory/Y compunction/S computability/U computable/IU computation/MS computational/Y compute/DGRSZ computer/MS computerese/M comrade/SY comradely/P comradeship concatenate/DGNSX conceal/DGRSZ concealing/Y concealment concede/DGRS conceded/Y conceit/DS conceited/PY conceivable/IU conceivably/I conceive/DGRS concentrate/DGNSVX concentrator/S concentric concept/MSV conception/MS conceptual/Y concern/DGS concerned/UY concert/DS concerted/PY concession/MRS concise/NPXY conclude/DGRS conclusion/MS conclusive/IPY concomitant/SY concord concrete/DGNPSY concur/S concurred concurrence concurrency/S concurrent/Y concurring condemn/DGRSZ condemnation/S condensation condense/DGRSZ condescend/DGS condescending/Y condition/DGRSZ conditional/SY conditionally/U conditioned/AU condone/DGRS conducive/P conduct/DGSV conduction conductive/Y conductivity/S conductor/MS conduit/S cone/DGMS confederacy confederate/NSVX confer/S conference/DGMS conferred conferrer/MS conferring confess/DGS confessed/Y confession/MS confessor/MS confidant/MS confide/DGRS confidence/S confident/Y confidential/PY confidentiality confiding/PY configurable/A configuration/AMS configure/ADGS confine/DGRS confined/U confinement/MS confirm/DGS confirmation/MS confirmed/PY confiscate/DGNSX conflict/DGSV conflicting/Y conform/DGRSZ conformity/IU confound/DGJRS confounded/Y confounding/MS confront/DGRSZ confrontation/MS confuse/DGNRSXZ confused/PY confusing/Y congenial/Y congested congestion congratulate/DNSX congregate/DGNSX congress/DGMS congressional/Y congressman congruence/I congruent/IY conjecture/DGRS conjoined conjunct/DSV conjunction/MS conjunctive/Y conjure/DGRSZ connect/DGRSVZ connected/PY connection/AMS connective/MSY connectivity/S connector/MS Connie/M connoisseur/MS connote/DGS conquer/DGRSZ conquerable/U conqueror/MS conquest/MS cons conscience/MS conscientious/PY conscious/PSY consecrate/DGNSVX consecutive/PY consensus consent/DGRSZ consenting/Y consequence/MS consequent/PSY consequential/PY consequentiality/S consequentially/I consequently/I conservation/MS conservationist/MS conservatism conservative/PSY conservatory/S conserve/DGRS consider/DGRS considerable/I considerably/I considerate/NPXY consideration/AI considered/AU consign/DGS consist/DGS consistency/IS consistent/IY consolable/I consolation/MS console/DGRSZ consolidate/DGNSX consolidated/AU consolidates/A consoling/Y consonant/MSY consort/DGS consortium conspicuous/IPY conspiracy/MS conspirator/MS conspire/DGS constable/MS constancy/I constant/SY constantly/I constellation/MS consternation constituency/MS constituent/MSY constitute/DGNSVX constituted/A constitutes/A constitution/MS constitutional/UY constitutionality/U constitutive/Y constrain/DGS constrained/Y constraint/MS construct/ADGSV constructed/AU constructibility constructible/A construction/MS constructions/A constructive/PY constructor/MS construe/DGS consul/MS consulate/MS consult/DGRSV consultant/MS consultation/MS consultative consumable/S consume/DGRSZ consumed/Y consumer/MS consuming/Y consummate/DGNSVXY consummated/U consumption/MS consumptive/Y contact/DGS contacted/A contagion contagious/PY contain/DGRSZ containable container/MS containment/MS contaminate/DGNSVX contaminated/U contemplate/DGNSVX contemplative/PY contemporaneous/PY contemporary/PSY contempt contemptible/P contemptuous/PY contend/DGRSZ content/DGSY contented/PY contention/MS contentment contest/DGRSZ contestable/I contested/U context/MS contextual/Y contiguity contiguous/PY continent/MSY continental/Y continently/I contingency/MS contingent/MSY continual/Y continuance/MS continuation/MS continue/DGRS continuity/S continuous/PY continuum contour/DGMS contract/DGSV contracted/U contraction/MS contractor/MS contractual/Y contradict/DGS contradicted/U contradiction/MS contradictory/PY contradistinction/S contrapositive/S contraption/MS contrary/PY contrast/DGRSVZ contrasting/Y contrastive/Y contribute/DGNRSVXZ contributive/Y contributor/MS contributory/Y contrivance/MS contrive/DGRS contrived/U control/MS controllability/U controllable/IU controllably/U controlled/U controller/MS controlling controversial/Y controversy/MS conundrum/MS convalescence convene/DGRSZ convened/A convenes/A convenience/MS convenient/IY convent/MS convention/MS conventional/UY converge/DGS convergence/S convergent conversant/Y conversation/MS conversational/Y converse/DGNSXY conversion/GS convert/DGRSZ convertibility/I convertible/IU convertibleness converts/A convex convey/DGRSZ conveyance/DGMRSZ convict/DGSV conviction/MS convince/DGRSZ convinced/U convincing/PUY convoluted convoy/DGS convulsion/MS coo/G cook/DGMRSZ cooked/U cookery cookie/MS cooky/S cool/DGJPRSTYZ cooled/U cooler/MS coolie/MS coolness/S coon/MS coop/DRSZ cooper/DGS cooperate/DGNSVX cooperative/PSY cooperator/MS coordinate/DGNPSVXY coordinated/U coordinator/MS cop/DGJMRS cope/DGJRS copious/PY copper/DGMS cops/S copse/S copy/DGRSZ copyright/DGMRSZ coral cord/ADGRS cordial/PY core/DGMRSZ cored/A cork/DGRSZ corked/U cormorant/S corn/DGRSZ corner/DGS cornerstone/MS cornfield/MS corollary/MS coronary/S coronation coronet/DMS coroutine/MS corporal/MSY corporate/NVXY corporation/MS corps/S corpse/MS corpus correct/DGPSVY correctable/U corrected/U correction/S corrective/PSY corrector correlate/DGNSVX correlated/U correlative/Y correspond/DGS correspondence/MS correspondent/MS corresponding/Y corridor/MS corroborate/DGNSVX corroborative/Y corrosion/S corrupt/DGRSVY corruption/I corruptive/Y corset/S cosine/S cosmetic/S cosmology cosmopolitan cost/DGSVY costive/PY costly/PRT costume/DGRSZ cot/MS cottage/RSZ cotton/DGS cotyledon/MS couch/DGS cough/DGRS could/T couldn't council/MS councillor/MS counsel/MS count/DGRSZ countable/U countably/U counted/AU countenance/R counter/DGS counteract/DGSV counterclockwise counterexample/S counterfeit/DGRSZ counterfeiter/MS countermeasure/MS counterpart/MS counterpoint/G counterproductive counterrevolution countess countless/Y country/MS countryman countryside county/MS couple/DGJMRSZ coupled/U coupon/GMS couponing/M courage courageous/PY courier/MS course/DGMRS courses/A court/DGMRSYZ courteous/PY courtesy/MS courthouse/MS courtier/MS courtly/P courtroom/MS courtship courtyard/MS cousin/MS cove/GRSZ covenant/DGMRS covenanted/U cover/DGJRS coverable/A coverage coverlet/MS covert/PY covet/DGRS coveting/Y covetous/PY cow/DGRSZ coward/SY cowardice cowardly/P cowboy/MS cowed/Y cower/DGRSZ cowering/Y cowgirl/MS cowl/DGS cowslip/MS coyote/MS cozy/PRSY CPU CPU's CPUs crab/MS crack/DGRSYZ crackle/DGS cradle/DGRS craft/DGRS craftsman crafty/PRY crag/MS cram/S cramp/DMRS cranberry/MS Crandall/M crane/DGMS crank/DGS cranky/PRTY crap/GS crash/DGRSZ crasher/MS crate/GRSZ crater/DS cravat/MS crave/DGRS craven/PY crawl/DGRSZ Cray/MS craze/DGS crazy/PRSTY creak/DGS cream/DGRSZ creamy/PY crease/DGIRS create/ADGNSVX created/AU creative/PY creativity creator/MS creature/MSY creaturely/P credence credibility/I credible/I credibly/I credit/DGS creditable/P creditably creditor/MS credulity/I credulous/PY credulously/I creed/MS creek/MS creep/GRSZ cremate/DGNSX crept crescent/MS crest/DGS cretin/S crevice/MS crew/DGS crib/MS cricket/GMRS crime/MS criminal/SY crimson/G cringe/DGRS cripple/DGRS crises crisis crisp/NPRSY criteria criterion critic/MS critical/PY critically/U criticism/MS critique/DGS critter/MS croak/DGRSZ croaker/MS crochet/DGRS crook/DS crooked/PY crop/MS cropped/U cropper/MS cropping cross/DGJRSYZ crossable crossbar/MS crossover/MS crossword/MS crouch/DGS crow/DGMS crowd/DGRS crowded/P crown/DGRS crowned/U crucial/Y crucify/DGNS crude/PRTY cruel/PRTY cruelty cruise/DGRSZ crumb/SY crumble/DGJS crumbly/PR crumple/DGS crunch/DGRSZ crunchy/PRT crusade/DGRSZ crush/DGRSZ crushable/U crushing/Y crust/DGMS crustacean/MS crutch/DMS crux/MS cry/DGRSZ cryptanalysis cryptic cryptographic cryptography/M cryptology crystal/MS crystalline crêpe/MS cub/DGMRS cube/DGRS cubic/SY cuckoo/MS cucumber/MS cuddle/DGS cudgel/MS cue/DGS cuff/DGMS cull/DGRS culminate/DGNS culpability culprit/MS cult/MS cultivate/DGNSX cultivator/MS cultural/Y culture/DGS cultured/U cumbersome/PY cumulative/Y cunning/PY cup/MS cupboard/MS Cupertino/M cupful/S cupped cupping cur/DGRSY curable/IP curably/I curb/DGS curds cure/DGRS cured/U curfew/MS curiosity/MS curious/PRTY curl/DGRSZ curled/U curly/PRS currant/MS currency/MS current/PSY currently/A curricular curriculum/MS curry/DGRS curs/ADGSV curse/ADGSV cursed/PY cursive/APY cursor/MS cursory/PY curt/PY curtail/DGRS curtain/DGS curtsy/DGMS curvature/S curve/DGS curved/A cushion/DGS cusp/MS cuss/DRS cussed/PY custard custodian/MS custody/S custom/RSZ customary/PY customer/MS cut/MRST cute/PRSTY cutoff/S cutter/MS cutting/SY cybernetic/S cycle/DGRS cyclic/Y cyclically cycloid/MS cycloidal cyclone/MS cylinder/DGMS cylindrical/Y cymbal/MS cynical/UY cypress cyst/S cytology czar Czechoslovakian dabble/DGRSZ dad/MS daddy/MS daemon/MS daffodil/MS dagger/S daily/S dainty/PRSY dairy/GS daisy/MS dale/HMS dam/DMS damage/DGRSZ damaged/U damaging/Y damask dame/D damn/DGS damnation damned/RT damning/Y damp/DGNPRSXYZ damped/U dampen/DGRS damsel/MS Dan/M dance/DGRSZ dandelion/MS dandy/RSY danger/MS dangerous/PY dangle/DGRSZ dangler/MS dangling/Y dare/DGRSZ daring/PY dark/NPRSTY darken/DGRZ darling/MPSY darn/DGRS DARPA DARPA's dart/DGRSZ darter/MS dash/DGRSZ dashing/Y data/M database/MS date/DGRSV dated/PY datum/MS daughter/MSY daunt/DGS daunted/U dauntless/PY dawn/DGS day/MSY daybreak/S daydream/DGRSZ daylight/GMS daytime/S daze/DGS dazed/P dazzle/DGRSZ dazzling/Y deacon/MS dead/NPXY deaden/DGRS deadening/Y deadline/MS deadlock/DGS deadly/PRT deaf/NPRTXY deafen/DGS deafening/Y deal/GJRSZ deallocate/DGNSX deallocation/MS deallocator dealt dean/MS dear/HPRSTY dearth/S death/MSY debatable/U debate/DGRSZ Debbie/M debilitate/DGNS debris debt/MS debtor/S debug/S debugged debugger/MS debugging decade/MS decadence decadent/Y decay/DGRS decease/DGS deceit deceitful/PY deceive/DGRSZ deceiving/Y decelerate/DGNSX December/MS decency/MS decent/IY deception/MS deceptive/PY decidability decidable/U decide/DGRS decided/PY decimal/SY decimate/DGNS decipher/DGRSZ decision/MS decisive/IPY deck/DGJRS declaration/MS declarative/SY declare/DGRSZ declared/AU declination/MS decline/DGRSZ DECNET decode/DGJRSZ decompile/DGRSZ decomposability decomposable/IU decompose/DGRS decomposition/MS decompression decorate/DGNSVX decorated/AU decorates/A decorative/PY decorum/S decouple/DGRS decoy/MS decrease/DGS decreasing/Y decree/DRS decreeing decrement/DGS dedicate/DGNSVX dedicated/Y dedication/AS deduce/DGRS deducible deduct/DGSV deduction/MS deductive/Y deed/DGS deem/ADGS deep/NPRSTXY deepen/DGS deer/S default/DGRS defeat/DGS defeatism defeatist/S defect/ADGSV defection/MS defective/PSY defend/DGRSZ defendant/MS defended/U defender/MS defenestrate/DGNSX defensive/PY defer/S deference deferment/MS deferrable deferred deferrer/MS deferring defiance/S defiant/Y deficiency/S deficient/Y deficit/MS defile/DGRS definable/IU define/DGRSZ defined/AU definite/NPVXY definition/AMS definitional/Y definitive/PY deformation/MS deformed/U deformity/MS deftly defy/DGRS defying/Y degenerate/DGNPSVY degradable degradation/MS degrade/DGRS degraded/PY degrading/Y degree/DMS deign/DGS deity/MS dejected/PY Delaware/M delay/DGRSZ delegate/DGNSX delete/DGNRSX deleted/U deliberate/DGNPSVXY deliberative/PY deliberator/MS delicacy/MS delicate/PSY delicious/PSY delight/DGRS delighted/PY delightful/PY delimit/DGRSZ delineate/DGNSVX delinquency delinquent/MSY delirious/PY deliver/DGRSZ deliverable/MS deliverance delivery/MS dell/MS delta/MS delude/DGRS deluding/Y deluge/DGS delusion/MS delve/DGRS demand/DGRS demanding/Y demise/DGS demo/PS democracy/MS democrat/MS democratic/U democratically/U demodulate/DGNSX demodulation/MS demodulator/MS demographic/S demolish/DGRS demolition/S demon/MS demonstrable/P demonstrate/DGNSVX demonstrative/PUY demonstrator/MS DeMorgan/M demur/S den/MS deniable/U denial/MS denigrate/DGNSV denizen/S Denmark/M Denny/M denomination/MS denominator/MS denotable denotation/MS denotational/Y denotative denote/DGS denounce/DGRSZ dens/RT dense/PRTY density/MS dent/DGIS dental/SY dentist/MS deny/DGRS denying/Y depart/DGS department/MS departmental/Y departure/MS depend/DGS dependability dependable/P dependably dependence/S dependency/S dependent/ISY depict/DGRS depicted/U deplete/DGNSVX deplorable/P deplore/DGRS deploring/Y deploy/DGS deployment/MS deploys/A deport/DGS deportation deportee/MS deportment depose/DGS deposit/ADGS deposition/MS depositor/AMS depot/MS deprave/DGRS depraved/PY depreciate/DGNSVX depreciating/Y depreciative/Y depress/DGSV depressing/Y depression/MS depressive/Y deprivation/MS deprive/DGS depth/S deputy/MS dequeue/DGS derail/DGS derby/S dereference/DGRSZ deride/DGRS deriding/Y derision derivable/U derivation/MS derivative/MPSY derive/DGRS derived/U descend/DGRSZ descendant/MS descended/U descent/MS describable/I describe/DGRSZ described/U description/MS descriptive/PSY descriptor/MS descry/DG desert/DGRSZ desertion/S deserve/DGJRS deserved/PY deserving/SY desiderata desideratum design/DGMRSZ designate/DGNSVX designated/U designator/MS designed/AU designedly designer/MS designing/AU desirability/U desirable/PU desirably/U desire/DGRS desired/U desirous/PY desk/MS desktop/MS desolate/DGNPRSXY desolating/Y despair/DGRS despairing/Y despatch/D desperate/NPY despise/DGRS despite/D despot/MS despotic dessert/MS destination/MS destine/DG destiny/MS destitute/NP destroy/DGRSZ destroyer/MS destruction/MS destructive/PY detach/DGRS detached/PY detachment/MS detail/DGRS detailed/PY detain/DGRS detangle/DGRS detect/DGSV detectable/U detectably detected/U detection/MS detective/S detector/MS detention deteriorate/DGNSV determinable/IP determinacy/I determinant/MS determinate/NPVXY determination/AI determinative/PY determine/DGRSZ determined/PY determines/A determinism/I deterministic/I deterministically detest/DGS detestable/P detonate/DGNSV detract/DGSV detractive/Y detractor/MS detriment/S devastate/DGNSVX devastating/Y develop/ADGRSZ developed/AU developer/MS development/MS developmental/Y deviant/MSY deviate/DGNSX deviated/U deviating/U device/MS devil/MS devilish/PY devise/DGJNRSX devoid devote/DGNSX devoted/Y devotee/MS devour/DGRS devout/PY dew/DGS dewdrop/MS dewy/PRY dexterity diabetes diadem diagnosable/U diagnose/DGS diagnosed/U diagnosis diagnostic/MS diagonal/SY diagram/DGMS diagrammable diagrammatic diagrammatically diagrammed diagrammer/MS diagramming dial/MS dialect/MS dialog/MS dialogue/MS dials/A diameter/MS diametrically diamond/MS diaper/DGMS diaphragm/MS diary/MS diatribe/MS dice/GRS dices/I dichotomy/S dickens dicky dictate/DGNSX dictator/MS dictatorship/S diction/S dictionary/MS dictum/MS did/U didn't die/DS dielectric/MS dies/U diet/RSZ dietitian/MS differ/DGRSZ difference/DGMS different/PY differential/MSY differentiate/DGNSX differentiated/U differentiators differently/I difficult/Y difficulty/MS diffuse/DGNPRSVXYZ diffusive/PY dig/ST digest/DGRSV digested/IU digestible/I digestion/S digestive/PY digger/MS digging/S digit/MS digital/Y dignified/U dignify/D dignity/IS digress/DGSV digression/MS digressive/PY Dijkstra/M dike/GMRS dilate/DGNSV dilated/PY dilemma/MS diligence/S diligent/PY dilute/DGNPRSVXY diluted/U dim/PRSYZ dime/MRSZ dimension/DGS dimensional/Y dimensionality diminish/DGS diminished/U diminution diminutive/PY dimmed/U dimmer/MS dimmest dimming dimple/DGS din/DGRZ dine/DGRSZ dingy/PRY dinner/MS dint diode/MS Diophantine dioxide/S dip/S diphtheria diploma/MS diplomacy diplomat/MS diplomatic/S dipped dipper/MS dipping/S dire/PRTY direct/DGPSVY directed/AIU direction/AMS directional/Y directionality directions/AI directive/MS director/AMS directory/MS dirge/DGMS dirt/MS dirty/DGPRSTY disability/MS disable/DGRSZ disabuse disadvantage/DGMS disadvantaged/P disagree/DS disagreeable/P disagreeing disagreement/MS disallow/DGS disambiguate/DGNSX disappear/DGS disappearance/MS disappoint/DGS disappointed/Y disappointing/Y disappointment/MS disapproval disapprove/DGRS disapproving/Y disarm/DGRSZ disarmament disarming/Y disassemble/DGRSZ disassembler/MS disaster/MS disastrous/Y disband/DGS disbelieve/DGRSZ disburse/DGRS disbursement/MS disc/MS discard/DGRS discern/DGRS discernibility discernible/I discernibly discerning/Y discernment discharge/DGRS disciple/MS disciplinary/Y discipline/DGRS disciplined/IU disclaim/DGRSZ disclose/DGRS disclosed/U disclosure/MS discomfort/G discomforting/Y disconcert/DGS disconcerting/Y disconnect/DGRS disconnected/PY disconnection/S discontent/D discontented/Y discontinuance discontinue/DGS discontinuity/MS discontinuous/Y discord/S discount/DGRS discourage/DGRS discouragement discouraging/Y discourse/DGMRS discover/DGRSZ discovered/AU discovers/A discovery/MS discredit/DGS discreet/IPY discrepancy/MS discrete/NPXY discriminate/DGNSVX discriminating/IY discriminatory/Y discuss/DGRS discussed/U discussion/MS disdain/GS disease/DGS disenfranchise/DGRS disenfranchisement/MS disengage/DGS disentangle/DGRS disfigure/DGS disgorge/R disgrace/DGRS disgraceful/PY disgruntled disguise/DGRS disguised/UY disgust/DGS disgusted/Y disgusting/Y dish/DGS dishearten/DGS disheartening/Y dishonest/Y dishwasher/S disillusion/DG disillusionment/MS disinterested/PY disjoint/DPY disjointed/PY disjunct/SV disjunction/MS disjunctive/Y disk/DGMS dislike/DGRS dislocate/DGNSX dislodge/DGS dismal/PY dismay/DGS dismayed/U dismaying/Y dismiss/DGRSVZ dismissal/MS dismount/DGS disobedience disobey/DGRS disorder/DSY disordered/PY disorderly/P disown/DGS disparate/PY disparity/MS dispatch/DGRSZ dispel/S dispelled dispelling dispensation dispense/DGRSZ disperse/DGNRSVX dispersed/Y dispersive/PY displace/DGRS displacement/MS display/DGRS displease/DGS displeased/Y displeasure disposable disposal/MS dispose/DGRS disposed/I disposes/I disposition/MS disprove/DGS dispute/DGRSZ disputed/U disqualify/DGNS disquiet/GY disquieting/Y disregard/DGS disrupt/DGRSV disrupted/U disruption/MS disruptive/PY dissatisfaction/MS dissatisfied disseminate/DGNS dissension/MS dissent/DGRSZ dissertation/MS disservice dissident/MS dissimilar/Y dissimilarity/MS dissipate/DGNRSVX dissipated/PY dissociate/DGNSV dissociated/U dissolution/MS dissolve/DGRS dissonance/MS distal/Y distance/DGS distant/PY distaste/S distasteful/PY distemper distill/DGRSZ distillation distinct/IPVY distinction/MS distinctive/PY distinguish/DGRS distinguishable/I distinguished/U distort/DGRS distorted/U distortion/MS distract/DGSV distracted/Y distracting/Y distraction/MS distraught/Y distress/DGS distressing/Y distribute/DGNRSVX distributed/AU distribution/AMS distributional distributive/PY distributivity distributor/MS district/DGMS distrust/DS disturb/DGRS disturbance/MS disturbed/U disturbing/Y ditch/DGMRS divan/MS dive/DGRSTZ diverge/DGS divergence/MS divergent/Y diverse/NPXY diversify/DGNRS diversity/S divert/DGS divest/DGS divide/DGRSZ divided/U dividend/MS divine/DGRSY divinity/MS division/MS divisor/MS divorce/DGS divulge/DGS dizzy/DGPRY dizzying/Y do/GHJRZ dock/DGMRS docker/M doctor/DGMS doctoral doctorate/MS doctrine/MS document/DGMRSZ documentary/MSY documentation/MS documented/U dodge/DGRSZ does/U doesn't dog/MS dogged/PY dogging dogma/MS dogmatism doing/AU dole/DGS doleful/PY doll/MS dollar/S dolly/DGMS dolphin/MS domain/MS dome/DGS domestic/MS domestically domesticate/DGNS domesticated/U dominance dominant/Y dominate/DGNSVX dominion/S don/S don't donate/DGNSVX done/AU donkey/MS doom/DGS door/MS doors/I doorstep/MS doorway/MS dope/DGRSZ dormant dormitory/MS dorsal/Y DOS dose/DGS dot/DGMRS dote/DGRS doting/Y dotted dotting double/DGJPRSZ doubled/AU doublet/MS doubling/MS doubly doubt/DGRSZ doubtable/A doubted/U doubtful/PY doubting/Y doubtless/PY dough doughnut/MS douse/DGRS dove/RS down/DGRSZ downcast downfall/N downplay/DGS downright/PY downstairs downstream downtown/RS downward/PSY downy/R doze/DGRS dozen/HS drab/PSY draft/DGMRSZ draftsmen drag/S dragged dragging/Y dragon/MS dragoon/DS drain/DGRSZ drainage/S drained/U drake drama/MS dramatic/S dramatically/U dramatist/MS drank drape/DGRSZ drapery/MS drastic drastically draw/GJRSYZ drawback/MS drawbridge/MS drawl/DGRS drawling/Y drawn/PY dread/DGS dreadful/PY dream/DGRSZ dreamed/U dreaming/Y dreamy/PRY dreary/PRY dredge/DGMRSZ dregs drench/DGRS dress/DGJRSZ dressmaker/MS drew dried/U drier/MS drift/DGRSZ drifting/Y drill/DGRS drink/GRSZ drinkable/U drip/MS dripping/MS drive/GMRSZ driven/P driver/MS driveway/MS drone/GMRS droning/Y drool/DGRS droop/DGS drooping/Y drop/MS dropoff/MS dropped dropper/MS dropping/MS drought/MS drove/RSZ drown/DGJRS drowsy/PRTY drudgery drug/MS druggist/MS drum/MS drummed drummer/MS drumming drunk/MNRSY drunkard/MS drunken/PY dry/DGRSTYZ dual/SY duality/MS dub/AS dubious/PY duchess/MS duchy/S duck/DGRS dude due/PS duel/S dug duke/MS dull/DGPRST dully duly/U dumb/DPRTY dumbbell/MS dummy/DGMS dump/DGRSZ dunce/MS dune/MS dungeon/MS duplicate/DGNSVX duplicated/A duplicator/MS durability/S durable/PS durably duration/MS during dusk dusky/PRY dust/DGRSZ dusty/PRTY dutiful/PUY duty/MS DVD/M DVDs dwarf/DPS dwell/DGJRSZ dwindle/DGS dye/DGRSZ dyeing dying/U Dylan/M dynamic/S dynamically dynamite/DGRS dynasty/MS each eager/PY eagle/MS ear/DGHSY earl/MS early/PRT earmark/DGJS earn/DGJRSTZ earned/U earner/MS earnest/PY earring/MS earshot earth/DMNRSY earthenware earther/M earthly/PU earthquake/MS earthworm/MS ease/DGRS easement/MS east/GRS easter/Y eastern/RZ eastward/S easy/PRTY eat/GJNRSZ eaten/U eaves eavesdrop/S eavesdropped eavesdropper/MS eavesdropping ebb/DGS ebony eccentric/MS eccentricity/S ecclesiastical/Y echo/DGS echoes eclipse/DGS ecology economic/S economical/Y economist/MS economy/MS ecstasy eddy/DGMS edge/DGRS edible/PS edict/MS edifice/MS edit/DGS edited/IU edition/MS editor/MS editorial/SY EDP Edsger/M educate/DGNSVX educated/PY education/MS educational/Y educator/MS eel/MS eerie/R effect/DGSV effective/PSY effector/MS effectually effeminate efficacy/I efficiency/IS efficient/IY effigy effort/MS effortless/PY EGA EGA's egg/DGRS ego/S eigenvalue/MS eight/S eighteen/HS eighth/MS eighty/HS either ejaculate/DGNSX eject/DGSV ejection/MS eke/DGS el/AS elaborate/DGNPSVXY elaborators elapse/DGS elastic/S elastically/I elasticity/S elate/DGNRS elated/PY elbow/DGS elder/SY elderly/P eldest elect/ADGSV elected/AU election/MS elective/PSY elector/MS electoral/Y electric/S electrical/PY electricity/S electrify/DGNS electrocute/DGNSX electrode/MS electrolyte/MS electrolytic electron/MS electronic/S electronically elegance/S elegant/IY element/MS elemental/SY elementary/PY elephant/MS elevate/DGNSX elevator/MS eleven/HS elevens/S elf Elgar/M elicit/DGS eligibility/S eligible/S eliminate/DGNSVXY eliminator/S elk/MS Ellen/M ellipse/MS ellipsis ellipsoid/MS ellipsoidal elliptic elliptical/Y elm/RS Elmer's elongate/DGNS eloquence eloquent/IY else/M elsewhere elucidate/DGNSV elude/DGS elusive/PY elves Elvis/M emaciated emacs/M email/DGMRS emanating emancipation embark/DGS embarrass/DGS embarrassed/Y embarrassing/Y embarrassment embassy/MS embed/S embedded embedding embellish/DGRS embellished/U embellishment/MS ember/S embezzle/DGRSZ embezzler/MS emblem/S embodiment/MS embody/DGRS embrace/DGRSV embracing/Y embroider/DRS embroidery/S embryo/MS embryology emerald/MS emerge/DGS emerged/A emergence emergency/MS emergent emery/S emigrant/MS emigrate/DGNS eminence/MS eminent/Y emit/S emitted emotion/MS emotional/UY empathy emperor/MS emphases emphasis emphatic/U emphatically/U empire/MS empirical/Y empiricist/MS employ/DGRSZ employable/U employed/U employee/MS employer/MS employment/MS empower/DGS empress empty/DGPRSTY emulate/DGNSVX emulative/Y emulator/MS enable/DGRSZ enact/ADGS enactment/S enamel/S encamp/DGS encapsulate/DGNS enchant/DGRS enchanting/Y enchantment encipher/DGRS encircle/DGS enclose/DGS enclosure/MS encode/DGJRSZ encoding/MS encompass/DGS encounter/DGS encourage/DGRS encouragement/S encouraging/Y encrypt/DGS encrypted/U encryption/MS encumber/DGS encumbered/U encyclopedia/MS encyclopedic end/DGJRSVZ endanger/DGS endear/DGS endearing/Y endemic endless/PY endorse/DGRS endorsement/MS endow/DGS endowment/MS endurable/U endurably/U endurance endure/DGS enduring/PY enema/MS enemy/MS energetic/S energy/S enforce/DGRSZ enforced/Y enforcement/A enfranchise/DGRS enfranchisement engage/DGS engagement/MS engaging/Y engender/DGS engine/DGMS engineer/DGJMS engineering/SY england/RZ English/M engrave/DGJRSZ engross/DGR engrossed/Y engrossing/Y enhance/DGS enhancement/MS enigmatic enjoin/DGS enjoy/DGS enjoyable/P enjoyably enjoyment enlarge/DGRSZ enlargement/MS enlighten/DGS enlightening/U enlightenment enlist/DGRS enlistment/S enlists/A enliven/DGS enmity/S ennoble/DGRS ennui enormity/S enormous/PY enough enqueue/DS enquire/DGRSZ enrage/DGS enrich/DGRS enrolled enrolling ensemble/MS ensign/MS enslave/DGRSZ ensnare/DGS ensue/DGS ensure/DGRSZ entail/DGRS entangle/DGRS enter/DGRS enterprise/GRS enterprising/Y entertain/DGRSZ entertaining/Y entertainment/MS enthusiasm/S enthusiast/MS enthusiastic/U enthusiastically/U entice/DGRSZ entire/Y entirety/S entitle/DGS entity/MS entrance/DGS entreat/DGS entreating/Y entreaty/S entrench/DGS entrepreneur/MS entropy/S entrust/DGS entry/MS enumerable enumerate/DGNSVX enumerated/U enumerator/MS enunciation envelop/DGRS envelope/DGRS enviably envied/U envious/PY environ/DGS environment/MS environmental/Y envisage/DGS envision/ADGS envoy/MS envy/DGRS envying/Y epaulet/MS ephemeral/SY epic/MS epidemic/MS episcopal/Y episode/MS episodic epistemological/Y epistemology epistle/MRS epitaph/DGS epitaxial/Y epithet/MS epoch epochs epsilon/S equal/SY equalities/I equality/MS equally/U equate/DGNSX equator/MS equatorial equilibrium/S equip/S equipment/S equipped equipping equitable/P equitably/I equity/IS equivalence/DGS equivalent/SY era/MS eradicate/DGNSV eras/DGRSZ erasable erase/DGNRSZ erasure/MS ere erect/DGPSY erection/MS erector/MS ergo Erlang/M ermine/DMS err/DGS errand/S erratic erring/UY erroneous/PY error/MS eruption/S escalate/DGNS escapable/I escapade/MS escape/DGRS escapee/MS eschew/DGS escort/DGS esoteric especial/Y espionage espouse/DGRS esprit/S espy/DGS esquire/S essay/DRS essence/MS essential/PSY establish/DGRS establishment/MS estate/MS esteem/DGS estimate/DGNSVX estimating/A etc eternal/PY eternity/S Ethan/M ethereal/PY Ethernet/MS ethic/S ethical/PY ethically/U ethnic etiquette eunuch eunuchs euphemism/MS euphoria Euro/MS Europe/M European/MS evacuate/DGNSVX evade/DGRS evaluate/DGNSVX evaluated/AU evaluator/MS evaporate/DGNSVX evaporative/Y eve/RS even/DGJPRSY evenhanded/PY evening/MS event/MS eventful/PY eventfully/U eventual/Y eventuality/S ever/T evergreen everlasting/PY evermore every everybody/M everyday/P everyone/MS everything/M everywhere eves/A evict/DGS eviction/MS evidence/DGS evident/Y evil/PSY evince/DGS evoke/DGS evolute/MNSX evolution/MS evolutionary/Y evolve/DGS ewe/MRS exacerbate/DGNSX exact/DGPRSY exacting/PY exaction/MS exactitude/I exaggerate/DGNSVX exaggerated/PY exaggerative/Y exalt/DGRSZ exalted/Y exam/MNS examination/MS examine/DGRSZ examined/AU example/DGMS exampled/U exasperate/DGNSX exasperated/Y exasperating/Y excavate/DGNSX exceed/DGRS exceeding/Y excel/S excelled excellence/S excellency excellent/Y excelling except/DGSV exception/MS exceptional/PY exceptionally/U excerpt/DRS excess/SV excessive/PY exchange/DGRSZ exchangeable exchequer/MS excise/DGNSX excitable/P excitation/MS excite/DGRS excited/Y excitement exciting/Y exclaim/DGRSZ exclamation/MS exclude/DGRS exclusion/RSZ exclusive/PY exclusivity excommunicate/DGNSV excrete/DGNRSX excruciatingly excursion/MS excusable/IP excusably/I excuse/DGRS excused/U executable/MS execute/DGNRSVXZ executed/U execution/RSZ executional executioner/MS executive/MS executor/MS exemplar/S exemplary/PY exemplify/DGNRSZ exempt/DGS exercise/DGRSZ exert/DGS exertion/MS exhale/DGS exhaust/DGRSV exhausted/Y exhaustible/I exhausting/Y exhaustion exhaustive/PY exhibit/DGMSV exhibition/MRS exhibitor/MS exhortation/MS exigency/S exile/DGS exist/DGS existence/S existent/I existential/Y existentialism existentialist/MS exit/DGS exorbitant/Y exoskeletons exotic/P expand/DGRSZ expandable expanded/U expander/MS expanse/DGNSVX expansionism expansive/PY expect/DGS expectancy/S expectant/Y expectation/MS expected/PUY expecting/Y expedient/IY expedite/DGNRSX expedition/MS expeditious/PY expel/S expelled expelling expend/DGRS expendable expended/U expenditure/MS expense/DGSV expensive/IPY experience/DGS experienced/IU experiment/DGMRSZ experimental/Y experimentation/MS experimenter/MS expert/MPSY expertise expiration/MS expire/DGS expired/U explain/DGRSZ explainable/IU explained/U explainer/MS explanation/MS explanatory/Y explicit/PY explode/DGRS exploit/DGRSVZ exploitable exploitation/MS exploited/U exploration/MS exploratory explore/DGRSZ explored/U explosion/MS explosive/PSY exponent/MS exponential/SY exponentiate/DGNSX exponentiation/MS export/DGRSZ expose/DGRSZ exposition/MS expository exposure/MS expound/DGRS express/DGRSVY expressed/U expressibility/I expressible/I expressibly/I expression/MS expressive/IPY expropriate/DGNSX expulsion expunge/DGRS exquisite/PY extant extend/DGRS extended/PY extendible/S extensibility/M extensible/I extension/MS extensive/PY extent/MS extenuate/DGN exterior/MSY exterminate/DGNSX external/SY extinct/V extinction extinguish/DGRSZ extol/S extortion/MR extortionist/MS extra/S extract/DGSV extraction/MS extractive/Y extractor/MS extracurricular extraneous/PY extraordinary/PY extrapolate/DGNSVX extravagance extravagant/Y extremal extreme/DPRSTY extremist/MS extremity/MS extrinsic exuberance exult/DGS exultation exulting/Y eye/DRSZ eyeball/S eyebrow/MS eyed/P eyeglass/S eyeing eyelid/MS eyepiece/MS eyesight eyewitness/MS fable/DGRS fabric/MS fabricate/DGNSX fabulous/PY facade/DGS face/DGJRS faced/A faceless/P faces/A facet/DGS facial/Y facile/PY facilitate/DGNSV facility/MS facsimile/DGMS fact/MS faction/MS factor/DGJMS factorial/MS factory/MS factual/PY faculty/MS fade/DGRSZ faded/Y fading/U fag/S fail/DGJS failing/SY failure/MS fain faint/DGPRSTY fair/DGPRSTY Fairbanks fairy/MS fairyland faith/S faithful/PSY faithless/PY fake/DGRS falcon/RS fall/GMNRS fallacious/PY fallacy/MS fallibility/I fallible/I false/PRTY falsehood/MS falsify/DGNRS falsity falter/DGRS faltering/UY fame/DGS familiar/PSY familiarity/S familiarly/U family/MS famine/MS famish/DGS famous/PY famously/I fan/MS fanatic/MS fanatically fancier/MS fanciful/PY fancy/DGPRSTYZ fang/DMS fanned fanning fantastic fantasy/DMS far/DGR faraway farce/GMS fare/DGRS farewell/S farm/DGRSZ farmer/MS farmhouse/MS farmyard/MS farther farthest farthing fascinate/DGNSX fascinating/Y fashion/DGRSZ fashionable/P fashionably/U fast/DGNPRSTX fasten/DGJRSZ fastened/U fat/DGPSY fatal/SY fatality/MS fate/DGS father/DGMSY fathered/U fatherland fatherly/P fathom/DGS fatigue/DGS fatiguing/Y fatten/DGRSZ fatter fattest fault/DGS faultless/PY faulty/PRY fawn/DGMRS fawning/Y fax/DGMRS FBI FBI's fear/DGRS fearful/PY fearless/PY feasibility feasible/P feast/DGRS feat/GMSY feather/DGRSZ feathered/U feature/DGS featureless February/MS fed/S federal/SY federation fee/DSY feeble/PRT feebly feed/GJRSZ feedback/S feel/GJRSZ feeling/PSY feet feign/DGRS feigned/U Felder felicity/IS fell/DGPRSZ felled/A felling/A fellow/MSY fellowship/MS felt/DGS female/MPS feminine/PY femininity feminist/MS femur/MS fen/G fence/DGRSZ fenced/U ferment/DGRS fermentation/MS fern/MS ferocious/PY ferocity ferrite ferry/DGS fertile/PY fertility/S fervent/Y festival/MS festive/PY festivity/S fetch/DGRS fetching/Y fetter/DGS fettered/U feud/MS feudal/Y feudalism fever/DGS feverish/PY few/PRST fibrous/PY fickle/P fiction/MS fictional/Y fictitious/PY fiddle/DGRS fidelity/I field/DGMRSZ fields/I fiend/S fierce/PRTY fiery/PY fife FIFO fifteen/HS fifth/SY fifty/HS fig/MS fight/GRSZ fighter/IS fighting/I figurative/PY figure/DGJMRSZ filament/MS file/DGJMRSZ filename/MS filial/UY fill/DGJRSZ fillable/A filled/AU film/DGMS filter/DGMRS filtered/U filth filthy/PRTY filtration/M fin/DGMRST final/SY finality finance/DGS financial/SY financier/MS find/GJRSZ fine/DGPRSTY finger/DGJRS finish/DGJRSZ finished/AU finite/PSY Fiona/M fir/DGHJRZ fire/DGJRSZ firearm/MS fired/U firefly/MS firelight/G fireman/MS fireplace/MS fireside firewood fireworks firm/DGMPRSTY firmament firmware/S first/MSY firsthand fiscal/SY fish/DGRSZ fisherman/M fishermen/M fishery/S fissure/DGS fist/DGRS fit/PSY fitful/PY fitted/U fitter/MS fitting/PSY five/RS fix/DGJRSZ fixate/DGNSVX fixed/PY fixture/GMS flab flabby/PRY flag/MS flagged flagging/UY flagrant/Y flagship/MS flake/DGRS flame/DGRSZ flaming/Y flammable/S flank/DGRSZ flannel/MS flap/MS flapping flare/DGS flaring/Y flash/DGRSZ flashlight/MS flask flat/PSY flatness/S flatten/DGRS flatter/DGRS flattering/UY flattery flattest flaunt/DGS flaunting/Y flaw/DGS flawless/PY flax/N flea/MS fled fledged/U fledgling/MS flee/RS fleece/DMS fleecy/R fleeing fleet/GPSTY fleeting/PY flesh/DGJRSY fleshy/PR flew/S flexibility/S flexible/I flexibly/I flick/DGRS flicker/DG flickering/Y flight/MS flinch/DGRS flinching/U fling/GMRS flint/S flip/S flirt/DGRS flit/S float/DGRSZ flock/DGS flood/DGRS floor/DGJRS flop/MS floppy/MPRSY flora Florida/M florin floss/DGS flounder/DGS flour/DS flourish/DGRS flourishing/Y flow/DGRSZ flowchart/GMS flower/DGRS flowery/P flowing/Y flown flows/I fluctuate/DGNSX fluent/AI fluently fluffy/PRT fluid/PSY fluidity flung flunk/DGRS fluorescence flurry/DGS flush/DGPS flute/DGMRS flutter/DGRS fly/GMRSZ flyable flyer/MS foam/DGRS focal/Y foci focus/DGRS focusable focused/AU fodder foe/MS fog/MS fogged fogging foggy/PRTY foil/DGS fold/DGJRSZ folded/AU foliage/DS folk/MS folklore follow/DGJRSZ folly/S fond/PRSTY fondle/DGRS font/MS food/MS foodstuff/MS fool/DGS foolish/PY foolproof foot/DGJRSZ football/DMRSZ foothold/S footman footnote/DGMRS footprint/MS footstep/S for/HT forage/DGRS foray/MRS forbade forbear/GMRS forbearance forbid/S forbidden forbidding/PY force/DGMRS forced/Y forcefield/MS forceful/PY forcible/P forcibly ford/S fore/T forearm/DMS foreboding/PSY forecast/DGRSZ forecastle/S forefather/MS forefinger/MS forego/GR foregoes foregone foreground/S forehead/MS foreign/PRSYZ foreman foremost forenoon foresee/RS foreseeable/U foreseen/U foresight/D foresighted/PY forest/DRSZ forestall/DGRS forestallment foretell/GRS forethought/M foretold forever/P forewarn/DGJRS forfeit/DGRSZ forgave forge/DGRSVZ forgery/MS forget/SV forgetful/PY forgettable/U forgettably/U forgetting forgivable/U forgivably forgive/GPRS forgiven forgiving/PY forgot forgotten fork/DGRS forlorn/PY form/ADGIRSZ formal/PSY formalism/MS formality/S formally/I formant/IS format/ASV formation/MS formative/PY formatted/AU formatter/MS formatting/A formed/AIU former/MSY formidable/P formula/MS formulae formulate/DGNSX formulator/MS fornication forsake/GS forsaken fort/MS forte/S forthcoming/U forthwith fortify/DGNRSX fortitude fortnight/Y Fortran/M fortress/MS fortuitous/PY fortunate/PSY fortune/DGMS forty/HRS forum/MS forward/DGPRSYZ fossil/S foster/DGRS fought foul/DGPRSTY found/DGRSZ foundation/MS founded/U founder/DGS foundry/MS fount/MS fountain/MS four/HS Fourier/M fourscore fourteen/HRS fourth/SY fowl/GMRS fox/DGMS fractal/MS fraction/DGMS fractional/Y fractions/I fracture/DGS fragile/Y fragment/DGS fragmentary/PY fragrance/MS fragrant/Y frail/PRTY frailty/S frame/DGJMRSZ framework/MS franc/S France/MS franchise/DGMRS frank/DGPRSTY Frankfurt/M frantic/PY frantically fraternal/Y fraternity/MS fraud/MS fraudulently fraught/DGS fray/DGS freak/DGMS freckle/DGS free/DPRSTY freed/U freedom/MS freeing/S freeman freeway/MS freeze/GRSZ freight/DGRSZ French/M frenzied/Y frenzy/DGS frequency/S frequent/DGPRSYZ frequented/U frequently/I fresh/NPRTXYZ freshen/DGRSZ freshman freshmen fret/S fretful/PY friar/MSY fricative/S friction/MS frictionless/Y Friday/MS friend/MSY friendless/P friendly/PRSTY friendship/MS frieze/MS frigate/MS fright/NX frighten/DGS frightening/Y frightful/PY frill/DMS fringe/DGIS frisk/DGRS frivolous/PY frock/DGMS frog/MS frolic/S from front/DGS frontier/MS frost/DGS frosted/U frosty/PRY froth/GS frown/DGRS frowning/Y froze frozen/PY frugal/Y fruit/DMRS fruiter/R fruitful/PUY fruition fruitless/PY frustrate/DGNRSX frustrating/Y fry/DGNRS fuel/AS fugitive/MPSY fulfilled/U fulfiller fulfilling full/PRT fullword/MS fully fumble/DGRS fumbling/Y fume/DGS fun function/DGMS functional/SY functionality/S functor/MS fund/ADGRSZ fundamental/SY fundamentalist/MS funded/AU funeral/MS fungus/S funnel/S funnily/U funny/PRSTY fur/MPS furious/PRY furnace/DGMS furnish/DGJRSZ furnished/U furniture furrow/DGS further/DGRST furthermore furtive/PY fury/MS fuse/DGNSX fuss/GR futile/PY futility future/MS fuzzy/PRSTY gabardine/S gable/DRS gad gadget/MS gag/DGRS gagged gagging gaiety/S gain/DGJRSYZ gait/DRSZ galaxy/MS gale/S gall/DGS gallant/SY gallantly/U gallantry gallery/DS galley/MS galling/Y gallon/MS gallop/DGRSZ gallows/S Galvin/M gamble/DGRSZ game/DGPSY gamma/S gang/MRSY gangly/R gangrene/DGS gangster/MS gap/DGMRS gape/DGRS gaping/Y garage/DGS garb/D garbage/DGMS garble/DGRS garden/DGRSZ Garfunkel gargle/DGS garland/DS garlic/S garment/DGMS garner/DGS garnish/DS garrison/DGS garter/DGMS gas/MS gaseous/PY gash/DGMS gasoline/S gasp/DGRSZ gasping/Y gassed gasser/MS gassing/S gastric gastrointestinal gate/DGS gateway/DGMS gather/DGJRSZ gaudy/PRSTY gauge/DGRS gaunt/PY gauze/DGS gave gay/MPRSTY gaze/DGRSZ gear/DGS Geary/M geese gel/MS gelatin gelled gelling gem/MS gender/DGMS gene/MS general/MPSY generalist/MS generality/S generate/DGNSVX generative/AY generator/MS generators/A generic/P generically generosity/MS generous/PY generously/U genetic/S genetically genial/PY genius/MS genre/MS genteel/PRTY gentle/DGPRT gentleman/MY gentlemanly/P gentlewoman gently gentry/S genuine/PY genus Geoff/M Geoffrey/M geographic geographical/Y geography/S geological geologist/MS geometric/S geometry/S geranium germ/MNS German/MS germane Germany/M germinate/DGNSVX germinative/Y gestalt gesture/DGS get/S getter/DMS getting ghastly/PR ghost/DGSY ghosted/U ghostliness/S ghostly/PR giant/MS gibberish Gibson/M giddy/DGPRY gift/ADS gifted/PY gig/MS gigantic/P giggle/DGRS giggling/Y gild/DGRS gill/DMRS gilt gimmick/MS gin/MS ginger/DGY gingerbread gingerly/P gingham/S Gipsy/MS giraffe/MS gird/DGRSZ girder/MS girdle/DGRS girl/MS girlfriend/MS girt/U girth give/GHRSZ given/PS giving/Y gizmo/MS glacial/Y glacier/MS glad/PY gladder gladdest glade/S glamour/DGS glance/DGS glancing/Y gland/MSZ glare/DGS glaring/PY glass/DS glassy/PRSY glaze/DGRSZ glazed/U gleam/DGS glean/DGJRS glee/DS gleeful/PY glen/MS glide/DGRSZ glimmer/DGS glimpse/DGRSZ glint/DGS glisten/DGS glitch/MS glitter/DGS glittering/Y global/SY globe/GMS globular/PY globularity gloom/S gloomy/PRY glorify/DNRSXZ glorious/IPY glory/DGS gloss/DGS glossary/MS glossy/PRSY glottal glove/DGRSZ glow/DGRSZ glower/DGS glowing/Y glucose glue/DGRSZ glued/U gnat/MS gnaw/DGRS go/GHJR goad/DGS goal/MS goat/MS goatee/MS gobble/DGRSZ goblet/MS goblin/MS god/MSY goddess/MS godlike/P godly/PR godmother/MS Godzilla/M goer/G goes gold/GNS golden/PY goldsmith/S golf/GRSZ gone/NR gong/MS good/PRSY goodbye/MS goodie/MS goody/MS goose/DGMRS gore/DGS gorge/GRS gorgeous/PY gorilla/MS gosh gospel/S gossip/DGRSZ got/IU gotcha/MS Gothic goto gotten/U gouge/DGRS govern/DGS governed/U governess/S government/MS governmental/Y governor/MS gown/DS GPSS grab/S grabbed grabber/MS grabbing/S grace/DGS graceful/PUY gracious/PY graciously/U gradation/MS grade/DGJRSYZ graded/U grader/MS gradient/MS gradual/PY graduate/DGNSX graft/DGRS graham/MS grain/DGRS grained/I grains/I gram/MS grammar/MS grammatical/PY granary/MS grand/PRSTY grandeur grandfather/MSY grandiose/PY grandkid/MS grandma/M grandmother/MSY grandpa/MS grandparent/S grandson/MS grange/RS granite granny/S grant/DGMRS granularity/S granulate/DGNSVX grape/MS grapevine/MS graph/DGMS graphic/PS graphical/Y graphite grapple/DGRS grasp/DGRS graspable grasping/PY grass/DGSZ grassy/RT grate/DGJRS grateful/PUY gratified/U gratify/DGNX gratifying/Y grating/SY gratitude/I gratuitous/PY gratuity/MS grave/GPRSTYZ gravel/SY gravitation gravitational/Y gravity/S gravy/S gray/DGPRSTY graze/DGRS grease/DGRSZ greasy/PRY great/NPRSTY greaten/DG greed greedy/PRY Greek/MS green/DGPRSTY greenhouse/MS greenish/P greet/DGJRS greets/A Greg/M grenade/MS grew grey/GT grid/MS grids/A grief/MS grievance/MS grieve/DGRSZ grieving/Y grievous/PY grill/DGRS grim/DGPY grin/S grind/GJRSZ grinding/SY grindstone/MS grip/DGRS gripe/DGRS gripped gripper/MS gripping/Y grit/MS grizzly/R groan/DGRSZ grocer/MS grocery/S groom/DGMRS groove/DGRS grope/DGRS gross/DGPRSTY grotesque/PY grotto/MS ground/DGRSZ grounded/U groundwork group/DGJMRS grouse/DGRS grove/MRSZ grovel/S grow/GHRSYZ growing/Y growl/DGRS growling/Y growly/PR grown/I grownup/MS growth/IS grub/MS grudge/DGMRS grudging/Y gruesome/PY gruff/PY grumble/DGRS grumbling/Y grunt/DGRS guarantee/DRSZ guaranteeing guaranty guard/DGRS guarded/PUY guardian/MS guardianship guerrilla/MS guess/DGRS guessed/U guest/DGMS guidance/S guide/DGRS guidebook/MS guided/U guideline/MS guild/MRS guile guilt/S guiltless/PY guilty/PRTY guinea/S guise/DGMS guitar/MS gulch/MS gulf/MS gull/DGS gullibility gully/DGMS gulp/DRS gum/MS gun/MS gunfire/S gunned gunner/MS gunning gunpowder/S gurgle/DGS guru/MS gush/DGRS gust/MS gut/S guts/R gutter/DGS guy/DGMRSZ gym/S gymnasium/MS gymnast/MS gymnastic/S gypsy/DGMS gyration/S gyroscope/MS ha/HS habit/MS habitable/P habitat/MS habitation/MS habitual/PY hack/DGRSZ hacker/MS had hadn't hag haggard/PY hail/DGRSZ hailer/MS hair/DMS haircut/MS hairdresser/MS hairless/P hairy/PR hale/GIR half/P halfway halfword/MS hall/MRS hallmark/DGMS hallow/DGS hallowed/U hallway/MS halt/DGRSZ halter/DGS halting/Y halve/DGSZ ham/MS hamburger/MS hamlet/MS hammer/DGRS hammock/MS hamper/DGS hampered/U hand/DGRSZ handbag/MS handbook/MS handcuff/DGS handed/PY handful/S handicap/MS handicapped handily/U handiwork handkerchief/MS handle/DGRSZ handshake/GMRS handsome/PRTY handsomely/U handwriting handwritten handy/PRTY hang/DGRSZ hangar/MS hangover/MS hap/Y haphazard/PY hapless/PY happen/DGJS happy/PRTUY harass/DGRS harassment/S hard/GJNPRSTXY harden/DGRS hardness/S hardship/MS hardware/M hardy/PRY hare/MS hark/DGNS harlot/MS harm/DGRS harmed/U harmful/PY harmless/PY harmonious/IPY harmony/S harness/DGRS harp/DGJRSZ harrow/DGRS harry/DGR harsh/NPRTY harshen/DG hart harvest/DGRSZ hash/DGRS hasn't hassle/DGRS haste/DGJS hasten/DGRS hasty/PRTY hat/DGMRS hatch/DGRS hatched/U hatchery/MS hatchet/MS hate/DGRS hateful/PY hatred haughty/PRY haul/DGRSZ haunch/MS haunt/DGRS haunting/Y have/GRSZ haven/MS haven't haver/GS havoc/S Hawaiian/MS hawk/DGRSZ hay/GRS hazard/DGMS hazardous/PY haze/DGMRS hazel hazy/PRTY he/HMRTVZ he'd he'll head/DGJMRSZ headache/MS headgear heading/MS headland/MS headline/DGRS headlong headphone/MS headquarters headway heal/DGHRSZ health/S healthful/PY healthy/PRTY heap/DGS hear/GHJRSTZ heard/U hearken/DG hears/GS hearsay heart/DMNSX heartache/MS hearted/Y hearten/DGS heartening/Y hearth/S heartless/PY hearty/PRSTY heat/DGRSZ heatable heated/Y heath/NR heave/DGRSZ heaven/MSY heavenly/P heavy/PRSTY hedge/DGRS hedgehog/MS hedging/Y heed/DGS heeded/U heeding/U heedless/PY heel/DGRSZ heifer height/NSX heighten/DGS Heinlein/M heinous/PY heir/MS heiress/MS held hell/MRS hello/S helm/MS helmet/DMS help/DGRSZ helper/MS helpful/PY helpfully/U helpless/PY hem/MS hemisphere/DMS hemlock/MS hemostat/S hemp/N hen/MS hence henceforth henchman henchmen herald/DGS heralded/U herb/DMS herbivore herbivorous/Y herd/DGRS here/M hereabout/S hereafter hereby hereditary/Y heredity herein hereinafter heresy heretic/MS heretofore herewith heritage/S hermit/MS hero/MS heroes heroic/S heroically heroin heroine/MS heroism heron/MS herring/MS herself hesitant/Y hesitate/DGNRSX hesitating/UY heterogeneous/PY heuristic/MS heuristically hew/DGRS Hewlett/M hex/R hexagonal/Y hey hickory/S hid/DGR hidden hide/DGRS hideous/PY hideout/MS hierarchical/Y hierarchy/MS high/PRSTY highland/RS highlight/DGRSZ highlighter/MS highness/MS highway/MS hijack/DGRSZ hike/DGRSZ hilarious/PY hill/DGMRS hillock/S hillside/MS hilltop/MS hilt/MS him/S himself hind/RSZ hinder/DGRS hindrance/S hindsight hinge/DGRS hinged/U hint/DGMRS hip/MPS hire/DGJRSZ his hiss/DGRS histogram/MS historian/MS historic historical/PY history/MS hit/MS hitch/DGRS hitched/U hitchhike/DGRSZ hither hitherto hitter/MS hitting hive/GS hoar hoard/DGJRS hoarded/U hoarding/MS hoarse/PRTY hoary/PR hoax/DGMRS hobble/DGRS hobby/MS hobbyist/MS hockey hoe/MRS hog/MS hoist/DGRS hold/GJNRSZ holding/IS hole/DGMS holiday/MRS holistic Holland/MRSZ hollow/DGPRSTY holly/S holocaust hologram/MS holy/PRSY homage/DGRS home/DGMRSYZ homebuilt homeless/P homely/PR homemade homemaker/MS homeomorphic homeomorphism/MS homesick/P homespun homestead/RSZ homeward/S homework/MRSZ homogeneity/IMS homogeneous/PY homomorphic homomorphism/MS Honda/M hone/DGRST honest/Y honesty honey/DGS honeycomb/D honeymoon/DGRSZ honeysuckle honorary/Y hood/DGMS hooded/P hoodwink/DGRS hoof/DMRS hook/DGRSZ hooked/P hooks/U hoop/DGRS hooray/MS hoot/DGRSZ hop/DGRS hope/DGRS hoped/U hopeful/PSY hopeless/PY hopped hopper/MS hopping horde/MS horizon/MS horizontal/MSY hormone/MS horn/DS horned/P hornet/MS horrendous/Y horrible/P horribly horrid/PY horrify/DGS horrifying/Y horror/MS horse/GMSY horseback horseman horsepower/S horseshoe/RS hose/DGMS hospitable/I hospitably/I hospital/MS hospitality/I host/DGMSY hostage/MS hostess/MS hostile/Y hostility/S hot/PY hotel/MS hotter hottest hound/DGRS hour/MSY house/DGJMRS housed/AU housefly/MS household/MRSZ housekeeper/MS housekeeping houses/A housetop/MS housewife/MY housewifely/P housework/RZ hovel/MS hover/DGRS how/MS however howl/DGRS hrs hub/MS hubris huddle/DGRS hue/DMS hug/RST huge/PRTY huh hull/DGMRS hum/S human/MPSY humane/PY humanely/I humanities/I humanity/MS humble/DGPRST humbly humid/Y humidify/DGNRSXZ humidity/S humiliate/DGNSX humiliating/Y humility hummed humming humorous/PY hump/DGS hunch/DS hundred/HS hung/RZ hunger/DGS hungry/PRTY hunk/MRSZ hunker/DGS hunt/DGRSZ hunter/MS huntsman hurdle/DGRS hurl/DGRSZ hurrah hurricane/MS hurried/PY hurriedly/U hurry/DGRS hurt/GRS hurting/Y husband/MRSY husbandry hush/DGS husk/DGRS husky/PRSY hustle/DGRSZ hut/MS hyacinth/S hybrid/S hydraulic/S hydraulically hydrodynamic/S hydrogen/MS hygiene hymn/GMS hype/DMRS hyperbolic hypertext/MS hyphen/DGMS hypocrisy/S hypocrite/MS hypodermic/S hypotheses hypothesis hypothetical/Y hysteresis hysterical/UY Hz I'd I'll I'm I've IBM IBM's ice/DGJS iceberg/MS icon/MS icy/PRTY id/MY idea/MS ideal/SY idealism idealistic identical/PY identifiable/U identifiably identified/U identifier/MS identify/DGNRSXZ identity/MS ideological/Y ideology/S idiocy/S idiosyncrasy/MS idiosyncratic idiot/MS idiotic idle/DGPRSTZ idol/MS idolatry IEEE if ignition ignoble/P ignorance ignorant/PY ignore/DGRS ii iii ill/PS illegal/Y illegality/S illicit/Y Illinois illiterate/PSY illness/MS illogical/PY illuminate/DGNSVX illuminating/Y illusion/MS illusive/PY illustrate/DGNSVX illustrative/Y illustrator/MS illustrious/PY image/DGMS imaginable/P imaginably/U imaginary/PY imagination/MS imaginative/PY imaginatively/U imagine/DGJRS imbalance/DGS imitate/DGNSVX imitative/PY immaculate/PY immaterial/PY immature/PY immaturity immediacy/S immediate/PY immemorial/Y immense/PY immerse/DGNRSVX immigrant/MS immigrate/DGNS imminent/PY immoral/Y immorality/S immortal/SY immortality immovability immovable/P immovably immune immunity/MS immunology immutable/P imp/MSY impact/DGRSV impaction/S impactor/MS impair/DGRS impaired/U impart/DGS impartial/Y impasse/NSVX impassion/DGS impassioned/U impassive/PY impatience impatient/Y impeach/DGS impedance/MS impede/DGRS impeded/U impediment/MS impel/S impending impenetrability impenetrable/P impenetrably imperative/PSY imperfect/PVY imperfection/MS imperial/Y imperialism imperialist/MS imperil imperious/PY impermanence impermanent/Y impermissible impersonal/Y impersonate/DGNSX impertinent/Y imperturbability impervious/PY impetuous/PY impetus impinge/DGS impious/Y implant/DGRS implausible implement/DGRSZ implementable implementation/AMS implemented/AU implementor/MS implicant/MS implicate/DGNSVX implicative/PY implicit/PY implore/DGS imply/DGNSX import/DGRSZ importance/U important/Y importation/S impose/DGRS imposing/Y imposition/MS impossibility/S impossible/PS impossibly impostor/MS impotence impotent/Y impoverish/DGRS impoverishment impracticable/P impractical/PY impracticality imprecise/NPY impregnable/P impress/DGRSV impressed/U impression/MS impressionable/P impressionist/S impressionistic impressive/PY impressment imprint/DGS imprison/DGS imprisonment/MS improbable/P impromptu improper/PY improve/DGRS improved/U improvement/S improvisation/MS improvisational improvise/DGRSZ impudent/Y impulse/DGNSVX impulsive/PY impunity impure/PY impurity/MS impute/DGS in/SY inability/S inaccurate/Y inactive/Y inactivity inadvertent/Y inadvisable inalterable/P inane/PRTY inanimate/PY inappropriate/PY inarticulable inasmuch inaugural inaugurate/DGNX Inc incantation/S incapacitating incarnation/MS incendiary/S incense/DGS incentive/MSY inception/S incessant/Y inch/DGS incidence/S incident/MS incidental/SY incipient/Y incision/MS incite/DGRS incivility inclination/MS incline/DGRS inclose/DGS include/DGS inclusion/MS inclusive/PY incoherence/S income/GRSZ incommensurate incomparable incompatible incompetence incompetent/MSY incomplete/NPY incomprehensibly incomprehension inconceivable/P inconsequential/Y inconsiderable/P inconsiderate/NPY inconsistency/MS inconsolable/P inconvenience/DGS incorporate/DGNSV incorporated/U incorporating/A incorporation/A incorrect/PY increasing/Y incredible/P incredulous/Y increment/DGS incremental/Y incubate/DGNSV incubator/MS incur/S incurable/PS incurred incurring indebted/P indecision indeed indefinable/P indefinite/PY indemnity indent/DGRS indentation/MS indented/U independence indescribable/P indeterminacy/MS indeterminate/NPY index/DGRSZ indexable India/M Indian/MS Indiana/M indicate/DGNSVX indicative/SY indicator/MS indictment/MS indifference indifferent/Y indigenous/PY indigestion indignant/Y indignation indigo indirect/DGPSY indirection/S indiscipline/D indiscriminate/GNPY indispensability indispensable/P indispensably indistinct/PVY indistinguishable/P individual/MSY individualistic individuality indivisibility indivisible/P indoctrinate/DGNS indolent/Y indomitable/P indoor/S induce/DGRS inducement/MS induct/DGSV inductance/S induction/MS inductive/PY inductor/MS indulge/DGRS indulgence/MS industrial/SY industrialist/MS industrious/PY industry/MS ineffective/PY inequality/S inert/PY inertia/S inescapably inessential inestimable inevitability/S inevitable/P inevitably inexact/PY inexhaustible/P inexorable/P inexorably inexperience/D inexplicable/P inexplicably inexpressible/P infallibly infamous/Y infancy infant/MS infantry infeasible infect/DGSV infected/U infection/MS infectious/PY infer/S inference/GMRS inferential/Y inferior/MSY inferiority infernal/Y inferno/MS inferred inferring infertility infest/DGRS infested/U infidel/MS infighter/MS infiltrate/DGNSV infinite/PVY infinitesimal/Y infinitive/MSY infinitum infinity/S infirmity infix/MS inflame/DGR inflammable/P inflatable/MS inflate/DGNRS inflationary inflexibility inflexible/P inflict/DGRSV influence/DGRS influenced/U influential/Y influenza informal/Y informality informant/MS information/MS informational informative/PY informatively/U informed/U infrastructure/MS infrequent/Y infringe/DGRSZ infringement/MS infringer/MS infuriate/DGNSY infuriating/Y infuse/DGNRSX ingenious/PY ingenuity/M ingrained/Y ingredient/MS ingrown/P inhabit/DGRS inhabitable inhabitance inhabitant/MS inhabited/U inhale/DGRS inhere/DGS inherent/Y inherit/DGS inheritable/P inheritance/MS inheritor/MS inheritress/MS inheritrices inheritrix/M inhibit/DGRSV inhibition/MS inhibitor/MS inhospitable/P inhuman/PY inhumane/Y inion iniquity/MS initial/MPSY initiate/DGNSVX initiated/U initiative/MS initiator/MS inject/DGSV injection/MS injective/MS injure/DGRS injured/U injurious/PY ink/DGJMRSZ inkling/MS inland/R inly/GR inmate/MS inn/GJMRS innards innate/PY inner/Y innermost innocence innocent/SY innocuous/PY innovate/DGNSVX innovation/MS innovative/P innumerability innumerable/P innumerably inopportune/PY inordinate/PY inorganic input/DGMRS inquire/DGRSZ inquiring/Y inquiry/MS inquisition/MS inquisitive/PY inroad/S insane/PY inscribe/DGRS inscription/MS insecure/PY insecurity/MS insensitive/PY insensitivity insert/DGRS insertion/AMS inside/MRSZ insidious/PY insight/MS insightful/Y insignia/S insinuate/DGNSVX insinuating/Y insist/DGS insistence insistent/Y insofar insolence/M insolent/Y insoluble/P inspect/DGSV inspection/MS inspector/MS inspiration/MS inspire/DGRS inspired/U inspiring/U instability/S install/DGRSZ installation/MS installment/MS instance/DGS instant/PRSY instantaneous/PY instantiate/DGNSX instantiated/U instantiation/MS instead instigate/DGNSV instigator/MS instinct/MSV instinctive/Y institute/DGMNRSVXZ institution/MS institutional/Y instruct/DGSV instruction/MS instructional instructive/PY instructor/MS instrument/DGMS instrumental/SY instrumentalist/MS instrumentation/M insufficiency/MS insulate/DGNSX insulated/U insulator/MS insult/DGMRS insulting/Y insuperable insupportable/P insurance/MS insure/DGRSZ insured/U insurgent/MS insurmountable insurrection/MS intact/P intangible/MPS integer/MS integral/MSY integrate/DGNSVX integrated/A integration/MS integrity Intel/M intellect/MSV intellective/Y intellectual/MPSY intelligence/MRS intelligent/UY intelligibility/U intelligible/PU intelligibly/U intend/DGRS intended/MPY intense/PVY intensify/DGNRSZ intensity/S intensive/PY intent/PSY intention/DMS intentional/UY interact/DGSV interaction/MS interactive/Y interactivity intercept/DGMRS interchange/DGJMRS interchangeability/M interchangeable/P interchangeably intercity/M intercommunicate/DGNS interconnect/DGS interconnected/P interconnection/MS interconnectivity/M intercourse/M interdependence/M interdependency/MS interdependent/Y interdisciplinary interest/DGMS interested/Y interesting/PY interestingly/U interface/DGMRS interfere/DGRS interference/MS interfering/Y interim interior/MSY interlace/DGS interleave/DGJS interleaving/MS interlink/DGS interlisp/M intermediary/S intermediate/DGMNPSY intermediation/M interminable intermingle/DGS intermittent/Y intermix/DGRS intermodule intern/DGMS internal/SY international/SY internationality Internet/MS interpersonal/Y interplay interpolate/DGNSVX interpose/DGRS interpret/DGRSVZ interpretable/U interpretation/MS interpretations/A interpreted/AU interpreter/MS interpretive/Y interprocess interrelate/DGNSX interrelated/PY interrelationship/MS interrogate/DGNSVX interrogative/SY interrupt/DGMRSVZ interruptible/U interruption/MS intersect/DGS intersection/MS intersperse/DGNSX interstage interstate/N interstation/M intertask intertwine/DGS interval/MS intervene/DGRS intervention/MS interview/DGMRSZ interviewed/AU interviewee/MS interviewer/MS interwoven intestinal/Y intestine/MS intimacy intimate/DGNPRSXY intimidate/DGNS intolerable/P intolerance/M intolerant/PY intonation/MS intoxicate/DGN intoxicated/Y intractable/P intractably intramural/Y intransigent/SY intraprocess intricacy/S intricate/PY intrigue/DGRS intriguing/Y intrinsic/S intrinsically introduce/DGRS introduction/MS introductory/Y introspect/V introspection/MS introspective/PY introvert/DMS intrude/DGRSZ intruder/MS intrusion/MS intrusive/PY intubate/DGNS intuition/MS intuitive/PY invade/DGRSZ invalid/PSY invalidity/MS invaluable/P invariable/P invariance invasion/MS invent/ADGSV invention/MS inventive/PY inventor/MS inventory/MS inverse/MNSVXY invert/DGRSZ invertebrate/MS inverter/MS invertible invested/A investigate/DGNSVX investigator/MS investment/AMS investor/MS invincible/P invisibility invitation/MS invite/DGRS invited/U inviting/Y invocation/MS invoice/DGMS invokable invoke/DGRSZ invoked/A invokes/A involve/DGRS involved/Y involvement/MS inward/PSY ioctl/MS iodine/M ion/MS Iran/M Iraq/M irate/PY ire/MS Ireland/M iris/S irk/DGS irksome/PY iron/DGJPRS ironical/PY ironwork/MRS irony/MS irrational/PSY irrationality/M irrecoverable/P irreducible irreducibly irreflexive irrefutable irregular/SY irregularity/MS irrelevance/S irrelevant/Y irrepressible irresistible/P irrespective/Y irresponsible/P irresponsibly irreversible irrigate/DGNSX irritate/DGNSVX irritating/Y is island/MRSZ isle/GMS islet/MS isn't isolate/DGNSX isometric/S isomorphic isomorphically isomorphism/MS isotope/MS ispell/M Israel/M Israeli/MS issuance issue/ADGRSZ isthmus it/MSU it'd it'll Italian/MS italic/S itch/GS ITCorp/M ITcorp/M item/MS iterate/ADGNSVX iterative/AY iterator/MS itinerary/S itself iv ivory/MS ivy/DMS ix jab/MS jabbed jabbing jack/DGMRS jacket/DS jacketed/U jade/DGMS jaded/PY jail/DGMRSZ jam/MS James jammed/U jamming/U janitor/MS January/MS Japan/M Japanese/M jar/MS jargon/M jarred jarring/Y jaunt/DGMS jaunty/PRY javelin/MS jaw/DMS jay/MS jazz/DGMS jealous/PY jealousy/MS jean/MS jeep/DGMSZ jeer/MRS Jefferson/M jelly/DGMS jellyfish/M jenny/M jerk/DGJRS jerky/MPRY jersey/MS jest/DGMRS jet/MS jetted jetting jewel/MRSZ jeweler/MS jig/MS Jill/M jingle/DGMRS job/MS jock/MS jocund/Y jog/S john/MS Johnnie/M Johnson/M join/DGRSZ joined/AU joint/DGMPRSY jointed/PY joke/DGMRSZ joking/Y jolly/DGRS jolt/DGMRS Josh/M jostle/DGRS jot/S jotted jotting journal/DGMS journalism/M journalist/MS journalistic journey/DGJS joust/DGRS joy/MS joyful/PY joyous/PY Jr jubilee/M judge/DGMRS judgment/MS judicable judicial/Y judiciary/MS judicious/IPY jug/MS juggle/DGRSZ juice/DGMRSZ juicy/PRTY Julie/MS July/MS Julys jumble/DGMS jump/DGMRSZ jumpy/PR junction/IMS juncture/MS June/MS jungle/DMS junior/MS juniper junk/DGRSZ junkie/S junky/S jurisdiction/MS juror/MS jury/IMS just/GPRY justice/IMS justifiable/U justifiably/U justified/U justifier/MS justify/DGNRSXZ jut juvenile/MS juxtapose/DGS Katherine/M keel/DGRS keen/GPRTY keep/GRSZ keeper/MS ken kennel/MS kept kerchief/DMS kernel/MS kerosene ketchup kettle/MS key/DGS keyboard/GMRS keyclick/MS keypad/MS keystroke/MS keyword/MS kHz kick/DGRSZ kid/MS kidded kidding/Y kidnap/MS kidney/MS kill/DGJRSZ killing/SY kilobit/MS kilobyte/MS kilogram/MS kin kind/PRSTY kindergarten kindhearted/PY kindle/ADGRS kindly/PR kindness/S kindred king/MSY kingdom/MS kingly/PR kinky/PR kinship kinsman kiss/DGJRSZ kit/DGMRS kitchen/MRS kite/DGRS kitsch kitten/DGMS kitty/S Klein/M Kleinrock/M Kline/M kludge/DGMRSZ kludger/MS kludgey klutz/MS klutzy/P knack/RS knapsack/MS knave/MS knead/DGRS knee/DS kneeing kneel/DGRS knell/MS knelt knew knife/DGS knight/DGSY knighthood knightly/P knit/AU knits knives knob/MS knock/DGRSZ knoll/MS knot/MS knotted knotting know/GRS knowable/U knowhow knowing/UY knowledge/S knowledgeable/P known/U knuckle/DGRSZ knuckler/MS Knuth/M kudos Kuenning/M lab/MS label/MS labels/A laboratory/MS labyrinth/S lace/DGRS laced/U lacerate/DGNSVX lack/DGRS lackadaisical/Y lacquer/DGRSZ lad/DGNS ladder/S laden/DG lady/MS lag/RSZ lagged lagoon/MS Lagrangian/M laid/I lain lair/MS lake/GMRS lamb/MRS lambda/MS lame/DGPRSTY lament/DGS lamentable/P lamentation/MS lamented/U laminar lamp/MRS Lamport/M lance/DGRSZ land/DGJRSZ landlady/MS landlord/MS landmark/MS landowner/MS landscape/DGRSZ landscaper/MS lane/MS language/MS languid/PY languish/DGRS languishing/Y lantern/MS lap/MS lapel/MS laps/DGRS lapse/ADGRS lard/DGRS large/PRTY lark/MRS larva/S larvae laser/MS lash/DGJRS lashed/U lass/MS last/DGRSY lasting/PY latch/DGS late/DPRTY latency/MS latent/SY lateral/Y LaTeX latex/MS LaTeX's lath/GRS lather/DGR lathes Latin/M latitude/MS latrine/MS latter/MY lattice/DGMS laugh/DGRSZ laughable/P laughably laughing/Y laughter/S launch/DGJRSZ launder/DGJRS laundered/U laundry/S laurel/MS Laurie/M lava lavatory/MS lavender/DG lavish/DGPY law/MS lawful/PUY lawless/PY lawn/MS lawsuit/MS lawyer/MSY lay/GRSZ layer/DGS layman/M laymen layoffs layout/MS lazed lazing lazy/DGPRTY lead/DGJNRSZ leaded/U leaden/PY leader/MS leadership/MS leaf/DGRS leafless leaflet/MS leafy/RT league/DGRSZ leak/DGRS leakage/MS lean/DGJPRSTY leap/DGRS leapt learn/DGJRSZ learned/PY learns/A lease/ADGS leash/MS least leather/DGS leathern leave/DGJRSZ leaven/DG leavened/U lecture/DGMRSZ led LED's ledge/RSZ LEDs lee/RSZ leech/MS leer/DGS left/S leftist/MS leftmost leftover/MS leftward/S leg/S legacy/MS legal/SY legality/S legend/MS legendary/Y legged leggings legibility legible legibly legion/MS legislate/DGNSVX legislative/Y legislator/MS legislature/MS legitimacy legitimate/DGNSY leisure/DY leisurely/P lemma/MS lemon/MS lemonade lend/GRSZ length/NSXY lengthen/DGRS lengthwise lengthy/PRY leniency lenient/Y lens/DGJMRSZ lent/A Lenten lentil/MS leopard/MS leprosy less/GNRSX lessen/DGS lesson/DGMS lest/R let/IMS letter/DGRS lettered/U letting lettuce levee/DMS level/PSY lever/DGMS leverage/DGS levy/DGRS lewd/PY lexical/Y lexicographic lexicographical/Y lexicon/MS liability/MS liable/AP liaison/MS liar/MS liberal/PSY liberate/DGNS liberated/U liberator/MS liberty/MS libido librarian/MS library/MS libretti license/ADGRS licensed/AU licensee/MS lichen/DMS lick/DGRS licked/U lid/MS lie/DRS lied/R liege lien/MS lieu lieutenant/MS life/MRZ lifeless/PY lifelike/P lifelong lifestyle/S lifetime/MS lift/DGRSZ light/DGMNPRSTXYZ lighten/DGRS lighter/MS lighthouse/MS lightning/DMS lightweight/S like/DGJPRSTY likelihood/SU likely/PRT liken/DGS likeness/MS likewise lilac/MS lily/DMS limb/DRSZ limber/DGPSY limbers/U lime/DGMS limestone limit/DGRSZ limitability limitably limitation/MS limited/PSY limitedly/U limp/DGPRSY linden line/DGJMRSZ linear/Y linearity/S lined/U linen/MS linger/DGRS lingering/Y linguist/MS linguistic/S linguistically link/DGJRSZ linkage/MS linking/AU linoleum linseed lint/RS lion/MS lioness/MS lip/MS lipstick liquefy/DGRSZ liquid/MPSY liquidation/MS liquidity liquor/DGMS lisp/DGMRS list/DGJNRSXZ listed/U listen/DGRSZ listener/MS listing/MS lit/U literacy literal/PSY literary/PY literate/NPY literature/MS lithe/PY litigate/DGNS litigator litter/DGRS little/PRT livable/P livably live/DGHJPRSTYZ livelihood/MS lively/PRTY liven/DG livery/D living/PSY Liz/M lizard/MS load/DGJRSZ loaf/DGRSZ loan/DGRS loath/DGR loathe/DGRS loathsome/PY loaves lobby/DGS lobe/DMS lobster/MS local/SY locality/MS locate/DGNRSVX locative/S locator/MS loci lock/DGJRSZ lockout/MS lockup/MS locomotion locomotive/MSY locus/M locust/MS lodge/DGJRSZ lodger/MS loft/MRS lofty/PRY log/MS logarithm/MS logarithmically logged/U logger/MS logging logic/MS logical/PSY logician/MS login/S logistic/S logout loin/MS loiter/DGRS lone/PRYZ lonely/PRTY lonesome/PY long/DGJPRSTY longing/SY longitude/MS longword/MS look/DGRSZ lookahead lookout/S lookup/MS loom/DGS loon loop/DGMRS loophole/DGMS loose/DGPRSTY loosen/DGRS loot/DGRS lord/GMSY lordly/PR lordship lore lorry/S lose/GJRSZ loss/MS lossy/RT lost/P lot/MS lottery/S lotus loud/NPRTY louden/DG loudspeaker/MS lounge/DGRSZ lousy/PRY lovable/P lovably love/DGMRSYZ loved/U lovely/PRSTY lover/GMSY loving/PY low/GPRSTYZ lower/DGS lowland/RS lowly/PRTY loyal/Y loyalty/MS lubricant/MS lubrication luck/DS luckless lucky/PRTY ludicrous/PY Ludwig/M luggage lukewarm/PY lull/DS lullaby/MS lumber/DGRS luminous/PY lump/DGNRS lunar lunatic/S lunch/DGRS luncheon/MS lung/DGRS lurch/DGRS lure/DGRS lurk/DGRSZ luscious/PY lust/DGS lustrous/PY lusty/PRY lute/DGMS luxuriant/Y luxurious/PY luxury/MS lying/SY Lyle/M lymph lynch/DRS Lynn/M lynx/MS lyre/MS lyric/S ma'am macaroni/M MacDraw/M mace/DGRS machine/DGMS machinery/S MacIntosh/M MacPaint/M macro/MS macroeconomics macromolecule/MS macroscopic mad/PY madam/S madden/DG maddening/Y madder maddest made/AU mademoiselle/S madman madras Mafia/M magazine/DGMS maggot/MS magic magical/Y magician/MS magistrate/MS magnesium/S magnet/MS magnetic/S magnetically magnetism/MS magnificence magnificent/Y magnified/U magnify/DGNRSXZ magnitude/MS mahogany maid/MNSX maiden/SY maidenly/P mail/DGJMRSZ mailable mailbox/MS mailer/AMS maim/DGMRSZ maimed/P maimer/MS main/SY mainframe/MS mainland/RZ mainstay maintain/DGRSZ maintainability maintainable/U maintained/U maintainer/MS maintenance/MS majestic majesty/MS major/DGS majority/MS makable make/GJRSZ makefile/S maker/MS makeshift/S makeup/S malady/MS malaria male/MPS malefactor/MS malfunction/DGS Malibu/M malice malicious/PY maliciously/U malignant/Y mall/MS mallet/MS malnutrition malt/DGS mama mamma/MS mammal/MS mammoth man/DMSY manage/DGRSZ manageable/P managed/U management/MS manager/MS managerial/Y mandate/DGS mandatory/SY Mandelbrot/M mandible mandolin/MS mane/DMS manger/MS mangle/DGRS Manhattan/M manhood maniac/MS manicure/DGS manifest/DGPSY manifestation/MS manifold/MPRSY Manila/M manipulability manipulable manipulatable manipulate/DGNSVX manipulative/PS manipulator/MS manipulatory mankind manly/PRT manned/U manner/DSY mannered/U mannerly/PU manning manometer/MS manor/MS manpower mansion/MS mantel/MS mantissa/MS mantle/DGMS manual/MSY manufacture/DGRSZ manufacturer/MS manure/DGRSZ manuscript/MS many map/MS maple/MS mappable mapped/AU mapping/MS maps/AU mar/S marble/DGRS march/DGRSZ marcher/MS mare/MS margin/DGMS marginal/SY Marianne/M marigold/MS marijuana/M marinate/DGS marine/RSZ mariner/MS maritime/R mark/DGJMRSZ markable/A marked/AU markedly market/DGJMRS marketability marketable marketplace/MS marquis/S marriage/MS marriages/A married/AU marrow/S marry/DGS marsh/MS marshal/SZ mart/NSX martial/DGSY martyr/MS martyrdom marvel/S Mary/M Maryland/MZ masculine/PY masculinity mash/DGJRSZ mask/DGJRS masked/U masochist/MS mason/DGMS masonry masquerade/GRS mass/DGSV Massachusetts massacre/DGRS massage/DGRS Massey/M massing/R massive/PY mast/DRSZ master/DGJMSY masterful/PY masterly/P masterpiece/MS mastery masturbate/DGNS mat/DGJMRS match/DGJRSZ matchable/U matched/U matchless/Y matchmaker/MS matchmaking/M mate/DGJMRS mated/U material/PSY materialism/M maternal/Y mates/IU math/S mathematical/Y mathematician/MS mathematics matrices matriculation matrimony matrix/S matron/Y Matt/M matted matter/DGS mattress/MS maturation mature/DGPRSY maturity/S max maxim/MS maximal/Y maximum/SY Maxtor/M may/T maybe mayhap mayhem mayonnaise mayor/MS mayoral maze/DGMRS mazed/PY mazedness/S McElhaney/M McKenzie/M McMartin/M me/DG mead/S meadow/MS meager/PY meal/MS mean/GJPRSTY meander/DGJS meaning/MS meaningful/PY meaningless/PY meant/U meantime meanwhile measles measurable/U measurably measure/DGRS measured/Y measurement/MS meat/MS mechanic/MS mechanical/SY mechanism/MS med/S medal/MS medallion/MS meddle/DGRS media/MS median/MSY mediate/DGNPSVXY medic/MS medical/Y medicinal/Y medicine/MS medieval/MSY meditate/DGNSVX meditative/PY medium/MS Medusa/M meek/PRTY meet/GJRSY megabit/MS megabyte/MS megaword/S melancholy meld/GS Melissa/M mellow/DGPSY melodious/PY melodrama/MS melody/MS melon/MS melt/DGRS melting/Y member/DMS membership/MS membrane/DMS memo/MS memoir/S memorability memorable/P memoranda memorandum/S memorial/SY memory/MS memoryless men/MS menace/DGS menacing/Y menagerie/S mend/DGRS menial/SY mens/DGS mental/Y mentality/S mention/DGRSZ mentionable/U mentioned/U mentor/DGMS menu/MS mercenary/MPSY merchandise/DGRS merchant/MS merciful/PY mercifully/U merciless/PY mercury/S mercy/S mere/TY merge/DGRSZ meridian/S merit/DGS meritorious/PY merriment/S merry/PRTY mesh/DGS meshed/U mess/DGS message/DGMS messenger/MS messiah/S messieurs messy/PRTY met/DGRZ meta metacircular metacircularity metal/MS metalanguage/S metallic metallurgy metamathematical metamorphosis metaphor/MS metaphorical/Y metaphysical/Y metaphysics metavariable mete/DGRSZ meteor/MS meteoric meteorology meter/DGMS method/MS methodical/PY methodist/MS methodological/Y methodologists methodology/MS metric/MS metrical/Y metropolis metropolitan mew/DS MHz mica mice Michigan/M microbicidal microbicide microcode/DGS microcomputer/MS microeconomics microfilm/DMRS microinstruction/MS microphone/GS Microport/M microprocessing microprocessor/MS microprogram/GMS microprograming/M microprogrammed microprogramming microscope/MS microscopic microsecond/MS Microsoft/M microstore microwave/MS microword/S mid midday middle/DGJRS middling/SY midnight/SY midpoint/MS midst/S midsummer midway/S Midwest midwinter/Y mien/S miff/DGS might/S mighty/PRTY migrate/DGNSVX mild/NPRTY mildew/S mile/MRS mileage/S milestone/MS militant/PSY militarism/S military/MSY militia/S milk/DGRSZ milkmaid/MS milky/PRY mill/DGRSZ miller/MS millet million/DHS millionaire/MS millipede/MS millisecond/MS millstone/MS Mimi/M mimic/S mimicked mimicking mince/DGRSZ mincing/Y mind/ADGRSZ minded/P mindful/PY mindless/PY mine/DGNRSXZ mineral/MS mingle/DGS miniature/DGMS minicomputer/MS minimal/Y minimum/S minister/DGMS ministry/MS mink/MS Minnesota/M minnow/MS minor/DGMS minority/MS minstrel/MS mint/DGRS minus/S minute/DGPRSTY miracle/MS miraculous/PY mire/DGS mirror/DGS mirth/S misapply/DGNRS misbehaving miscalculation/MS miscellaneous/PY mischief mischievous/PY miscommunicate/DNS misconception/MS misconstrue/DGS misdirect/DS misdirection miser/SY miserable/P miserably miserly/P misery/MS misfeature misfit/MS misfortune/MS misgiving/SY misguide/DGRS misguided/PY mishap/MS misinform/DGS misinformation/M misinterpret/DGRSZ misjudgment/MS mislead/GJRS misleading/SY misled mismatch/DGS misnomer/D misperceive/DGS misplace/DGS misread/GRS misrepresentation/MS miss/DGSV missile/MS mission/DGRS missionary/MS missions/A missive/S misspell/DGJS misstate/DGRS mist/DGRSZ mistakable/U mistake/GRS mistaken/Y mistaking/Y mister/DGS mistreat/DGS mistress/MSY mistrust/DGRS misty/PRTY mistype/DGS misunderstand/GJRSZ misunderstanding/MS misunderstood misuse/DGRS MIT MIT's mite/S mitigate/DGNSVX mitigation/MS mitten/MS mix/DGRSZ mixed/AU mixture/MS ml mnemonic/MS mnemonically moan/DGS moat/MS mob/MS mobility moccasin/MS mock/DGRSZ mockery mocking/Y modal/Y modality/MS mode/ST model/MS models/A modem/S moderate/DGNPSXY moderated/U moderator/MS modern/PSY modernity modest/Y modesty modifiability modifiable/P modified/U modify/DGNRSXZ modular/Y modularity/S modulate/DGNSX modulator/AMS module/MS modulo modulus modus moist/NPY moisten/DGR moisture/S molasses mold/DGRSZ molder/DGS molding/A moldy/PR mole/ST molecular/Y molecule/MS molest/DGRSZ molested/U Molly/M molten mom/MS moment/MSY momentary/PY momentous/PY momentum/S monarch monarchs monarchy/MS monastery/MS monastic Monday/MS monetary/Y money/DMRS monitor/DGMS monk/MS monkey/DGS mono/M monochrome/S monograph/MS monolithic monopoly/MS monotheism monotone monotonic monotonically monotonicity monotonous/PY monotony monster/MS monstrous/PY Montana/M Montanan/MS month/MSY monthly/S monument/MS monumental/Y mood/MS moody/PRY moon/DGMS moonlight/DGRS moonlit moonshine/R moor/DGJMS Moore/M moose moot/D mop/DGRS moral/MSY morale/S morality/S morass/S morbid/PY more/NS moreover morn/GJ morning/MS morphological/Y morphology morrow morsel/MS mortal/SY mortality mortar/DGS mortgage/DGMRS mortified/Y mortify/DGNRSX mosaic/MS Moslem/MS mosquito/MS mosquitoes moss/MS mossy/R most/Y motel/MS moth/RSZ mother/DGMRSYZ motherboard/MS motherly/P motif/MS motion/DGRS motionless/PY motivate/DGNSVX motivated/U motivational/Y motive/DGS motley motor/DGS motorcar/MS motorcycle/MS motorist/MS Motorola/M motto/S mottoes mould/DGRS moulder/G moulds/A mound/DS mount/DGJRS mountain/MS mountaineer/GS mountainous/PY mourn/DGRSZ mournful/PY mourning/Y mouse/GRS mouth/DGRS mouthful movable/AP move/DGJRSZ moved/AU movement/MS movie/MS moving/SY mow/DGRSZ Mr/S Ms much/P muck/DGRS mud/S muddle/DGRSZ muddy/DGPRY muff/MS muffin/MS muffle/DGRSZ mug/MS mulberry/MS mule/GMS Multibus/M multicellular multicomponent Multics multidimensional multilevel multinational multiple/MS multiplex/DGRSZ multiplexor/MS multiplicand/MS multiplicative/SY multiplicity multiply/DGNRSXZ multiprocess/G multiprocessor/MS multiprogram/S multiprogrammed multiprogramming/S multistage multitasking multitude/MS multiuser multivariate mumble/DGJRSZ mummy/MS munch/DGRS mundane/PY municipal/Y municipality/MS munition/S Munsey/M mural/S murder/DGRSZ murderous/PY murky/PRY murmur/DGRS murmuring/U muscle/DGS muscular/Y muse/DGJRS museum/MS mushroom/DGS mushy/PRY music/MS musical/SY musician/SY musing/SY musk/S musket/MS muskrat/MS Muslim/MS muslin mussel/MS must/RSZ mustache/DS mustard/S muster/DGS musty/PRY mutability mutable/P mutate/DGNSVX mutator/S mute/DGPRSTY muted/Y mutilate/DGNSX mutiny/MS mutter/DGRSZ mutton mutual/Y muzzle/DGMRS my/S myriad myrtle myself mysterious/PY mystery/MS mystic/MS mystical/Y mysticism/S myth/MS mythical/Y mythology/MS nag/MS nail/DGRS naive naivete/M naked/PY name/DGMRSYZ nameable/U named/AU nameless/PY namesake/MS nanosecond/MS nap/MS napkin/MS narcissistic narcissus/S narcotic/S narrative/MSY narrow/DGPRSTY narrowing/P nasal/Y nasty/PRSTY nation/MS national/SY nationalist/MS nationality/MS nationwide native/PSY nativity natural/PSY naturalism naturalist nature/DMS natured/A natures/A naught/MS naughty/PRY naval/Y navigable/P navigate/DGNSX navigator/MS navy/MS nay Nazi/MS naïve/PRY naïveté/M near/DGPRSTY nearby neat/NPRSTY Nebraska/M Nebraskan/M nebula necessarily/U necessary/SY necessitate/DGNSX necessity/S neck/DGRS necklace/MS necktie/MS need/DGRSY needed/U needful/PY needle/DGRSZ needless/PY needlework/R needn't needy/PR negate/DGNRSVX negated/U negative/DGPSY negator/S neglect/DGRS negligence negligible negotiable/A negotiate/DGNSX negotiated/A negotiates/A Negro/M Negroes neigh neither neophyte/S Nepal/M nephew/MS nerve/DGMS nervous/PY nest/DGRSZ nester/MS nestle/DGRS net/MS nether Netherlands netted netting nettle/DGS network/DGMS neural/Y neurobiology/M neurological/Y neurologists neuron/MS neutral/PSY neutrality/S neutrino/MS never nevertheless new/PRSTY newborn/S newcomer/MS newline/MS newsgroup/MS newsletter/MS newsman newsmen newspaper/MS newswire/MS newt/S Newtonian next NFS nibble/DGRSZ nice/PRTY nicety/S niche/GS nick/DGRS Nick's nickel/MS nicker/DG nickname/DRS nicotine niece/MS nifty/RS nigh night/DMRSYZ nighter/MS nightfall nightgown nightingale/MS nightmare/MS nil/Y nimble/PRT nimbly nine/S nineteen/HS ninety/HS ninth nip/S nitrogen nix/DGRS no nobility/S noble/PRST nobleman nobly nobody/MS nocturnal/Y nod/MS nodded nodding node/MS noise/DGS noiseless/Y noisy/PRTY nomenclature/S nominal/Y nominate/DGNSVX nominated/A nominates/A nomination/MS nominative/Y non nonblocking nonconservative noncyclic nondecreasing nondescript/Y nondestructively nondeterminacy nondeterminate/Y nondeterminism/M nondeterministic nondeterministically nondisclosure/S none/S nonempty nonetheless nonexistence nonexistent nonextensible nonfunctional noninteracting noninterference nonintuitive nonlinear/Y nonlinearity/MS nonlocal nonnegative nonorthogonal nonorthogonality nonperishable nonprocedural/Y nonprogrammable nonprogrammer/MS nonsense nonsensical/PY nonspecialist/MS nonstandard nontechnical/Y nonterminal/MS nonterminating nontermination nontrivial/Y nonuniform nonzero nook/MS noon/GS noonday noontide nope nor/H norm/DGMS normal/SY normalcy normality north/GMRSZ northeast/R northeaster/Y northeastern norther/SY northern/RYZ northward/S northwest/R northwester/Y northwestern nose/DGS nostril/MS not/DGR notable/PS notably notation/MS notational/Y notch/DGS note/DGNRSX notebook/MS noted/PY noteworthy/PY nothing/PS notice/DGS noticeable/U noticeably/U noticed/U notify/DGNRSXZ notorious/PY notwithstanding noun/MS nourish/DGRS nourished/U nourishment novel/MS novelist/MS novelty/MS November/MS novice/MS now/S nowadays nowhere/S nroff/M nuances nuclear nucleotide/MS nucleus/S nuisance/MS null/DS nullify/DGNRSZ numb/DGPRSYZ number/DGRS numbered/AU numberless numbing/Y numeral/MSY numerator/MS numeric/S numerical/Y numerous/PY nun/MS nuptial/S nurse/DGMRS nursery/MS nurture/DGRS nut/MS nutcracker/MS nutrition/M nymph/S o'clock oak/NS oar/DGMS oasis oat/NRSZ oater/MS oath/S oatmeal Obama/M obedience/S obedient/Y obey/DGRS obfuscate/DGNRSX object/DGMSV objection/MS objectionable/P objective/PSY objector/MS oblate/NPXY obligate/DGNSXY obligation/MS obligatory/Y oblige/DGRS obliging/PY oblique/PY obliterate/DGNSVX obliterative/Y oblivion/S oblivious/PY oblong/PY obscene/Y obscure/DGPRSY obscurity/S observable/U observance/MS observant/Y observation/MS observatory/S observe/DGRSZ observed/U observer/MS observing/Y obsession/MS obsolescence obsolete/DGPSY obstacle/MS obstinacy obstinate/PY obstruct/DGRSV obstruction/MS obstructionist obstructive/PY obtain/DGRS obtainable/U obtainably obviate/DGNSX obvious/PY occasion/DGJS occasional/Y occlude/DGS occlusion/MS occupancy/S occupant/MS occupation/MS occupational/Y occupied/U occupy/DGRSZ occur/S occurred occurrence/MS occurring ocean/MS octal/S octave/S October/MS octopus odd/PRSTY oddity/MS ode/DMRS Oderberg/MS odious/PY odorous/PY Oedipus OEM/S OEM's of off/GRSZ offend/DGRSZ offender/MS offensive/PSY offer/DGJMRSZ office/MRSZ officer/DMS official/MSY officially/U officiate/DGNSX officio officious/PY offset/MS offspring/S oft/N often/R oftentimes oh/S Ohio/M oil/DGRSZ oilcloth oily/PRTY ointment/S OK okay/MS Oklahoma/M Oklahoman/M old/MNPRST olive/MRS Oliver's omen/MS ominous/PY omission/MS omit/S omitted omitting omnipresent/Y omniscient/Y omnivore on/RSY onanism once/R one/MNPRSX onerous/PY oneself ongoing online only/P onset/MS onto onward/S oops ooze/DGS opacity/S opal/MS opaque/PY opcode/MS open/DGJPRSTYZ opened/AU opening/MS opera/MS operable/I operand/MS operandi operate/DGNSVX operation/MS operational/Y operative/PSY operator/MS opiate/S opinion/MS opium opponent/MS opportune/IY opportunism opportunistic opportunistically opportunity/MS oppose/DGRSZ opposer/MS opposite/NPSXY oppress/DGSV oppression oppressive/PY oppressor/MS opt/DGS optic/S optical/Y optimal/Y optimality optimism optimistic optimistically optimum option/MS optional/Y or/M oracle/MS oral/SY orange/MS oration/MS orator/MS oratory/MS orb orbit/DGRSZ orbital/SY orchard/MS orchestra/MS orchid/MS ordain/DGRS ordeal/S order/DGJRSY ordered/AU orderly/PS ordinal/MS ordinance/MS ordinary/PSY ordinate/DGNSX ore/MNS organ/MS organic/S organism/MS organist/MS orgy/MS orient/DGS orientation/MS oriented/A orifice/MS origin/MS original/MSY originality originals/U originate/DGNSVX originative/Y originator/MS ornament/DGS ornamental/Y ornamentation/S orphan/DGS orthodox/SY orthodoxly/U orthogonal/Y orthogonality Orwell/M OS OS's oscillate/DGNSX oscillation/MS oscillator/MS oscillatory oscilloscope/MS ostrich/MS other/MPS otherwise otter/MS ought/S ounce/S our/S ourself ourselves out/DGJPRS outbreak/MS outburst/MS outcast/MS outcome/MS outcry/S outdoor/S outermost outfit/MS outgoing/PS outgrew outgrow/GHS outgrown outing/MS outlast/S outlaw/DGS outlay/MS outlet/MS outline/DGS outlive/DGS outlook outperform/DGS outpost/MS output/MS outputting outrage/DGS outrageous/PY outright/Y outrun/S outset outside/MRSZ outsider/MPS outskirts outstanding/Y outstretched outstrip/S outstripped outstripping outvote/DGS outward/PSY outweigh/DGS outwit/S outwitted outwitting oval/MPSY ovary/MS oven/MS over/GSY overall/MS overblown overboard overcame overcast/G overcoat/GMS overcome/GRS overcrowd/DGS overdone overdose/DGMS overdraft/MS overdraw/GS overdrawn overdrew overdue overemphasis overestimate/DGNSX overexpose/DGS overflow/DGS overhang/GS overhaul/DGJRS overhead/S overhear/GRS overheard overjoy/D overkill/M overlaid overland overlap/MS overlapped overlapping overlay/GS overload/DGS overlook/DGS overly/G overnight/RSZ overpower/DGS overpowering/Y overprint/DGS overproduction overridden override/GRS overrode overrule/DGS overrun/S overseas oversee/DRSZ overseed/DGS overseeing overshadow/DGS overshoot/GS overshot oversight/MS oversimplify/DGNSX overstate/DGS overstatement/MS overstocks overt/PY overtake/GRSZ overtaken overthrew overthrow/GS overthrown overtime overtip/S overtipped overtipping overtone/MS overtook overture/MS overturn/DGS overuse/DGS overview/MS overweight overwhelm/DGS overwhelming/Y overwork/DGS overwrite/GS overwritten overwrote overzealous/P ovum owe/DGS owl/MRS own/DGRSZ owner/MS ownership/S ox/N oxidation oxide/MS oxygen/S oyster/GMS pa/HS pace/DGMRSZ pacific pacify/DGNRSX pack/DGRSZ package/DGJMRSZ packaged/AU packages/AU Packard/MS packet/DGMS packs/AU pact/MS pad/MS padded/U padding/S paddle/DGRS paddy/S pagan/MS page/DGMRSZ pageant/MS paged/U pager/MS paginate/DGNSX paid/AU pail/MS pain/DGS painful/PY painless/PY painstaking/Y paint/DGJRSZ painted/AU painter/SY painterly/P pair/DGJMS paired/AU pairwise pal/DGMRSTY palace/MS palate/MS pale/DGPRSTY Palestinian palfrey pall/G palliate/NV palliative/SY pallid/PY palm/DGRS pamphlet/MS pan/MS panacea/MS pancake/DGMS pancreas panda/MS pandemonium pander/DGRS pane/MS panel/MS pang/MS panic/MS panned panning pansy/MS pant/DGS panther/MS pantry/MS panty/S papa papal/Y paper/DGJMRSZ paperback/MS paperwork paprika par/DGJRS parachute/DGMRS parade/DGRS paradigm/MS paradise paradox/MS paradoxical/PY paraffin/S paragon/MS paragraph/DGRS parallax/M parallel/S parallelism parallelogram/MS paralysis parameter/MS parameterless parametric paramilitary paramount paranoia paranoid parapet/DMS paraphrase/DGRS parasite/MS parasitic/S parcel/S parch/DGS parchment pardon/DGRSZ pardonable/P pardonably/U pare/DGJRS parent/GMS parentage parental/Y parentheses parenthesis parenthetical/Y parenthood parish/MS parity/S park/DGRSZ parliament/MS parliamentary/U parole/DGS parrot/DGMS parry/DG pars/DGJRSZ parse/DGJRSZ parsed/U parser/MS parsimony parsley parson/MS part/DGJRSYZ partake/GRS partial/SY partiality participant/MS participate/DGNSVX participatory particle/MS particular/SY partisan/MS partition/ADGRS partitioned/AU partner/DGMS partnership/S partridge/MS party/DGMS Pascal/M pass/DGRSVZ passage/DGMS passageway/MS passe/DGNRSVXZ passenger/MSY passionate/PY passive/PSY passivity passport/MS password/DMS past/DGMPS paste/DGS pastime/MS pastor/MS pastoral/PY pastry/S pasture/DGMRS pat/DMNRS patch/DGRS patchwork/RZ patent/DGMRSYZ patentable paternal/Y path/S pathetic pathname/MS pathological/Y pathologist/MS pathology/S pathos pathway/MS patience patient/MSY patriarch patriarchs patrician/MS Patrick/M patriot/MS patriotic/U patriotism patrol/MS patron/MSY patronage patter/DGJRS pattern/ADGS patty/MS paucity pause/DGS pave/DGRS paved/U pavement/MS pavilion/MS paving/A paw/DGS pawn/DGMRS pay/GRSZ payable/A paycheck/MS payer/MS payment/MS payments/A payoff/MS payroll/S PC PC's PCs PDP pea/MS peace/S peaceable/P peaceful/PY peach/MS peacock/MS peak/DGS peaked/P peal/ADGS peanut/MS pear/SY pearl/MRS pearly/R Pearson/M peasant/MS peasantry peat/A pebble/DGMS peck/DGRS peculiar/SY peculiarity/MS pedagogic/S pedagogical/Y pedantic peddler/MS pedestal/S pedestrian/MS pediatric/S peek/DGS peel/DGRS peeler/M peep/DGRSZ peer/DGMS peerless/PY peeve/DGMSZ peg/MS pellet/DGMS pelt/GRS pen/S penalty/MS penance/DGS pence pencil/S pend/DGS pendulum/MS penetrate/DGNSVX penetrating/Y penetrative/PY penetrator/MS penguin/MS peninsula/MS penitent/Y penitentiary penned penniless penning Pennsylvania/M penny/MS pens/V pension/DGRSZ pensive/PY pent/A pentagon/MS penthouse/MS peon/MS people/DGMS pep pepper/DGRS peppercorn/MS per perceivable perceivably perceive/DGRSZ perceived/U percent/RS percentage/S percentile/S perceptible perceptibly perception/S perceptive/PY perceptual/Y perch/DGS perchance percolate/DGNS percutaneous/Y peremptory/PY perennial/SY perfect/DGPRSVY perfection/S perfectionist/MS perfective/PY perforce perform/DGRSZ performance/MS performed/U performer/MS perfume/DGRS perhaps peril/MS perilous/PY period/MS periodic periodical/SY peripheral/SY periphery/MS perish/DGRSZ perishable/MS perishing/Y permanence permanent/PSY permeate/DGNSVX permissibility permissible/P permissibly permission/S permissive/PY permit/MS permitted permitting permutation/MS permute/DGS perpendicular/SY perpetrate/DGNSX perpetrator/MS perpetual/Y perpetuate/DGNS perplex/DGS perplexed/Y perplexity/S persecute/DGNSV persecutor/MS perseverance persevere/DGS persist/DGRS persistence persistent/Y person/MS personable/P personage/MS personal/SY personality/MS personify/DGNRSX personnel perspective/MSY perspicuous/PY perspiration/S persuadable persuade/DGRSZ persuaded/U persuasion/MS persuasive/PY persuasively/U pertain/DGS pertinent/Y perturb/DGS perturbation/MS perturbed/U perusal peruse/DGRSZ pervade/DGS pervasive/PY pervert/DGRS perverted/PY pessimistic pest/RSZ pester/DGS pestilence/S pet/RSZ petal/MS peter/DS Peter's petition/DGRSZ petitioner/MS Petkiewicz/M petroleum petted petter/MS petticoat/DMS pettiness/S petting petty/PRTY pew/MS pewter/R phantom/MS phase/DGRSZ PhD pheasant/MS phenomena phenomenal/Y phenomenological/Y phenomenology/S phenomenon philosopher/MS philosophic philosophical/Y philosophy/MS phone/DGMS phoneme/MS phonemic/S phonetic/S phonograph/RS phosphate/MS phosphoric photo/MS photocopier/MS photocopy/DGRSZ photograph/DGRSZ photographer/MS photographic photography phrase/ADGJS phyla phylum physic/S physical/PSY physician/MS physicist/MS physiological/Y physiology physique/D pi/DHRZ piano/MS piazza/MS picayune pick/DGJRSZ picker/GS picket/DGRSZ pickle/DGS pickup/MS picnic/MS pictorial/PY picture/DGS picturesque/PY pie/DRSZ piece/DGMRS piecemeal piecewise pierce/DGJRSZ piercer/MS piercing/MSY piety/S pig/MS pigeon/MS pigment/DS pike/DGMRS pile/DGJSZ pilferage pilgrim/MS pilgrimage/MS pill/MS pillage/DGRS pillar/DS pillow/MS pilot/DGMS pin/DGMS pinch/DGRS pine/DGNSX pineapple/MS ping/DGMRSZ pinger/MS pinion/DS pink/DGPRSTY pinnacle/DGMS pinned pinning/S pinpoint/DGS pint/MRS pioneer/DGS pious/PY pipe/DGJRSZ pipeline/DGS piping/SY pique/DG pirate/DGMS piss/DGRS pistil/MS pistol/MS piston/MS pit/MS pitch/DGRSZ piteous/PY pitfall/MS pith/DGS pithy/PRTY pitiable/P pitiful/PY pitiless/PY pitted pity/DGMRSZ pitying/Y pivot/DGS pivotal/Y pixel/MS placard/MS place/ADGRS placed/AU placement/AMS placid/PY plague/DGRS plagued/U plaid/DMS plain/PRSTY plaintiff/MS plaintive/PY plait/GMRS plan/DGMRSZ planar planarity Planck/M plane/DGMRSZ planet/MS planetary plank/GS planned/U planner/MS planning plant/DGJRSZ plantation/MS planted/A plasma/MS plaster/DGRSZ plastic/SY plasticity plate/DGJRSZ plateau/MS platelet/MS platen/MS platform/MS platinum platter/MS plausibility plausible/P play/ADGRSZ playable/U player/AMS playful/PY playground/MS playmate/MS plaything/MS playwright/MS plea/MS plead/DGJRS pleader/A pleading/SY pleas/DGRSZ pleasant/PUY please/DGRSYZ pleased/U pleaser/MS pleasing/PY pleasurable/P pleasure/DGS plebeian/Y plebiscite/MS pledge/DGRS plenary plenteous/PY plentiful/PY plenty/S pleurisy plight/R plod/S plot/MS plotted plotter/MS plotting ploy/MS pluck/DGR plucky/PRY plug/MS plugged/U plugging/U plugs/U plum/DGMS plumage/DS plumb/DGMRSZ plumbed/U plume/DGS plummeting plump/DNPRY plunder/DGRSZ plunge/DGRSZ plural/SY plurality plus/S plush/PY ply/DGNRSZ pneumonia poach/DGRSZ pocket/DGS pocketbook/MS pod/MS poem/MS poet/MS poetic/S poetical/PY poetry/MS point/DGRSZ pointed/PY pointer/MS pointless/PY pointy/RT poise/DGS poison/DGRS poisonous/PY poke/DGRS Poland/M polar polarity/MS pole/DGRS polemic/S police/DGMS policeman/M policemen/M policy/MS polish/DGJRSZ polished/U polishing/MS polite/PRTY politic/S political/Y politician/MS poll/DGNRS polled/U pollute/DGNRSV polluted/U polo polygon/MS polymer/MS polynomial/MS polyphonic pomp pompous/PY pond/RSZ ponder/DGRS ponderous/PY pony/MS poof pool/DGS poor/PRTY pop/MS pope/MS Popek/MS poplar popped popping poppy/DMS populace/MS popular/Y popularity/U populate/DGNSX populous/PY porcelain porch/MS porcupine/MS pore/DGS pork/R porn pornographic porridge port/DGRSYZ portability portable/MS portably portal/MS portamento/M portend/DGS porter/GS portion/DGMS portly/PR portrait/MS portray/DGRS pose/DGRSZ posit/DGSV position/ADGS positional positive/PSY possess/ADGSV possessed/PY possession/MS possessional possessive/MPSY possessor/MS possibility/MS possible/S possibly possum/MS post/DGJRSZ postage postal postcard/MS postcondition/S poster/MS posterior/Y posterity postman postmaster/MS postpone/DGRS postscript/MS postulate/DGNSX posture/DGMRS pot/MS potash potassium potato potatoes potent/Y potentate/MS potential/SY potentiality/S potentiating potentiometer/MS potted potter/MRS pottery/S potting pouch/DMS poultry pounce/DGS pound/DGRSZ pour/DGRSZ pouring/Y pout/DGRS poverty powder/DGRS Powell/M power/ADGS powerful/PY powerless/PY pox/S practicable/P practicably practical/PY practicality/S practice/MS practician practitioner/MS pragmatic/S pragmatically prairie/S praise/DGRSZ praising/Y prance/DGRS prancing/Y prank/MS prate/DGRS prating/Y pray/DGRSZ prayer/MS preach/DGRSZ preaching/Y preallocate/DGNSX preallocation/MS preallocator/S preassign/DGS precarious/PY precaution/DGMS precede/DGS precedence/MS precedent/DS precedented/U precept/MSV preceptive/Y precinct/MS precious/PY precipice precipitate/DGNPSVY precipitous/PY precise/NPXY preclude/DGS precocious/PY preconceive/D preconception/MS precondition/DS precursor/MS predate/DGNS predation/M predecessor/MS predefine/DGS predefinition/MS predetermine/DGRS predicament predicate/DGNSVX predict/DGSV predictability/U predictable/U predictably/U predicted/U prediction/MS predictive/Y predictor/S predominant/Y predominate/DGNSY preempt/DGSV preemption preemptive/Y preface/DGRS prefer/S preferable/P preferably preference/MS preferential/Y preferred preferring prefix/DGS pregnant/Y prehistoric prejudge/DR prejudice/DGS prejudiced/U prelate preliminary/SY prelude/DGMRS premature/PY prematurity premeditated/Y premier/DGMS premiere/DGS premise/DGMS premium/MS preoccupation/S preoccupy/DS preparation/MS preparative/MSY preparatory/Y prepare/DGRSZ prepared/PY preparer/MS prepend/DGRSZ preposition/MS prepositional/Y preposterous/PY preprint/DGS preprocessor/MS preproduction preprogrammed prerequisite/MS prerogative/DMS prescribe/DGRS prescribed/U prescription/MS prescriptive/Y preselect/DGS presence/MS present/DGPRSYZ presentation/AMS presenter/MS preservation/S preservative/MS preserve/DGRSZ preserved/U preset/S preside/DGRS presidency president/MS presidential/Y press/DGJRS pressing/SY pressure/DGS prestige presumably presume/DGRS presuming/Y presumption/MS presumptuous/PY presuppose/DGS pretend/DGRSZ pretended/Y pretending/U pretentious/PUY pretext/GMS pretty/DGPRSTY prevail/DGS prevailing/Y prevalence prevalent/Y prevent/DGRSV preventable preventably prevention/S preventive/PSY preview/DGRSZ previous/PY prey/DGRS price/DGRSZ priced/U priceless prick/DGRSY prickly/PR pride/DGS priest/SY priestly/P primacy primary/MSY prime/DGPRSYZ Prime's primed/U primeval/Y primitive/PSY primrose prince/MSY princely/PR princess/MS principal/MSY principality/MS principle/DS print/DGRSZ printable/U printably printed/AU printer/MS printout/S prior/SY priori priority/MS priory prism/MS prison/RSZ prisoner/MS privacy/MS private/NPSVXY privative/Y privilege/DS privileged/U privy/MSY prize/DGRSZ pro/MS probabilistic probabilistically probability/S probable probably probate/DGNSV probates/A probation/RZ probe/DGJRS problem/MS problematic/U problematical/UY procedural/Y procedure/MS proceed/DGJRS process/DGMS processed/AU procession processor/MS proclaim/DGRSZ proclamation/MS proclivity/MS procrastinate/DGNS procrastinator/MS procure/DGRSZ procurement/MS prodigal/Y prodigious/PY produce/ADGRSZ producer/MS producible/A product/MSV production/AMS productive/PY productively/A productivity/S profane/DGPRY profess/DGS professed/Y profession/MS professional/SY professionalism/S professionally/U professor/MS proffer/DGS proficiency/S proficient/Y profile/DGRSZ profiler/MS profit/DGMRSZ profitability profitable/PU profitably/U profiteer/MS profound/PTY progeny program/MS programmability programmable/U programmed/A programmer/AMS programming/A progress/DGSV progression/MS progressive/PY prohibit/DGRSV prohibition/MS prohibitive/PY project/DGMSV projected/U projection/MS projective/Y projector/MS Prokofiev/M prolegomena proletariat proliferate/DGNSV prolific/P prolog/MS prologue/MS prolong/DGRS promenade/GMRS prominence prominent/Y promiscuity/M promiscuous/PY promise/DGRS promising/UY promontory/S promote/DGNRSVXZ promotional promotive/P prompt/DGJPRSTYZ prompted/U prompter/MS promulgate/DGNSX prone/PY prong/DS pronoun/MS pronounce/DGRS pronounceable/U pronounced/Y pronouncement/MS pronunciation/MS proof/DGMRS prop/RS propaganda propagate/DGNSVX propagated/U propel/S propelled propeller/MS propensity/S proper/PY propertied/U property/DS prophecy/MS prophesy/DGRS prophet/MS prophetic propitious/PY proponent/MS proportion/DGRS proportional/Y proportionately proportionment proposal/MS propose/DGRSZ proposer/MS proposition/DGS propositional/Y propound/DGRS proprietary proprietor/MS propriety propulsion/MS pros/GR prose/GR prosecute/DGNSX prosodic/S prospect/DGSV prospection/MS prospective/PSY prospector/MS prospectus prosper/DGS prosperity prosperous/PY prostitution prostrate/DN protect/DGSV protected/UY protection/MS protective/PY protector/MS protectorate protege/MS protein/MS protest/DGMRSZ protestants protestation/S protester/MS protesting/Y protocol/MS proton/MS protoplasm prototype/DGMS prototypical/Y protrude/DGS protrusion/MS proud/RTY provability/U provable/P provably prove/DGRSZ proved/AU proven/U proverb/MS provide/DGRSZ provided/U providence provider/MS province/MS provincial/Y provision/DGRS provisional/Y provocation provoke/DGS provoking/Y prow/MS prowess prowl/DGRSZ proximal/Y proximate/PY proximity prudence prudent/Y prune/DGRSZ pry/DGRST prying/Y psalm/MS pseudo psyche/MS psychiatrist/MS psychiatry psychological/Y psychologist/MS psychology psychosocial/Y pub/MS public/MPSY publication/MS publicity publish/ADGRSZ published/AU publisher/AMS pucker/DGS pudding/MS puddle/DGRS puff/DGRSZ pull/DGJRS pulley/MS pulp/GR pulpit/MS pulse/DGRS pump/DGRS pumpkin/MS pun/MS punch/DGJRSZ punched/U puncher/MS punctual/PY punctuation puncture/DGMS punish/DGRS punishable punished/U punishment/MS punitive/PY punt/DGRSZ puny/PRY pup/MS pupa/S pupil/MS puppet/MS puppy/MS purchasable purchase/DGRSZ purchaser/MS purchaser's/A pure/PRTY purge/DGRS purify/DGNRSXZ purity purple/DGRST purport/DGRSZ purported/Y purpose/DGSVY purposeful/PY purposive/PY purr/DGS purring/Y purse/DGRSZ pursue/DGRSZ pursuit/MS purview push/DGRSZ pushbutton/S pushdown puss pussy/RS put/IS putter/GRS putting/I puzzle/DGJRSZ puzzlement pygmy/MS pyramid/MS QA quack/DGRSZ quadrant/MS quadratic/S quadratical/Y quadrature/MS quadruple/DGS quadword/MS quagmire/MS quail/MS quaint/PY quake/DGRSZ qualified/UY qualify/DGNRSXZ qualitative/Y quality/MS qualm/S quandary/MS quanta quantifiable/U quantify/DGNRSXZ quantitative/PY quantity/MS quantum quarantine/DGMS quarrel/S quarrelsome/PY quarry/DGMRS quart/RSZ quarter/DGRSY quarterly/S quartet/MS quartz quash/DGS quasi quaver/DGS quavering/Y quay/S queen/MSY queer/PRSTY quell/DGRS quench/DGRS quenched/U query/DGRS quest/ADGRSZ question/DGJRSZ questionable/P questionably/U questioned/AU questioning/SY questioningly/U questionnaire/MS queue/DMRSZ queuer/MS quick/NPRTXY quicken/DGRS quicksilver quiet/DGNPRSTXY quieten/DGS quietude/I quill/S quilt/DGRS quinine quit/S quite/A quitter/MS quitting quiver/DGS quiz quizzed quizzes quizzing quo/H quota/MS quotation/MS quote/DGS quoted/U quotient/S rabbit/DGMRS rabble/DGR raccoon/MS race/DGRSZ racehorse/MS racial/Y rack/DGRS racket/MS racketeer/GS radar/MS radial/Y radiance radiant/Y radiate/DGNSVXY radiative/Y radiator/MS radical/PSY radio/DGS radiology radish/MS radius/S radix/S raft/DGMRSZ rafter/DS rafting/M rag/DGMS rage/DGS ragged/PY raid/DGRSZ rail/DGJMRSZ railing/MS railroad/DGRSZ railway/MS raiment rain/DGMS rainbow/S raincoat/MS raindrop/MS rainfall rainy/RT raise/DGRSZ raisin/S rake/DGRS rally/DGS ram/MNSX ramble/DGJRSZ rambling/SY ramen/MS ramification/MS ramp/DGMS rampart/S rams/S ran/A ranch/DGRSZ rancher/MS random/PY rang/DGRZ range/DGRSZ rank/DGJPRSTYZ ranked/U ranker/MS ranking/MS rankle/DGS ransack/DGRS ransom/GRS rant/DGJRSZ ranting/MSY rap/DGMRS rape/DGRS rapid/PSY rapidity rapt/PY rapture/DGMS rapturous/PY rare/GPRTY rarity/MS rascal/SY rash/PRSY rasp/DGJRS raspberry rasping/SY raster/S rat/DGJMRSZ rate/DGJNRSXZ rated/U rather ratify/DGNSX ratio/MS ration/DGS rational/PSY rationale/MS rationality/S rattle/DGRSZ rattlesnake/MS rattling/Y ravage/DGRSZ rave/DGJRS raven/DGRS ravenous/PY ravine/DMS raw/PRSTY ray/DMS razor/MS RCS re/DGJSTVY reabbreviate/DGS reach/DGRS reachable/U reachably react/DGSV reacted/U reaction/MS reactionary/MS reactivate/DGNS reactivity read/GJRSZ readability/U readable/P reader/MSY readout/MS ready/DGPRSTY real/PSTY realign/DGS realism/U realist/MS realistic/U realistically/U reality/S realm/MS ream/DGMRS reap/DGRS reappear/DGS reappraisal/S rear/DGRS rearrange/DGS rearrangeable rearrest/D reason/DGJRS reasonable/PU reasonably/U reassemble/DGRS reassign/DGS reassure/DGS reassuringly/U reawaken/DGS rebate/DGMRS rebel/MS rebelled rebelling rebellion/MS rebellious/PY rebirth/M reboot/DGRSZ rebound/DGRS rebroadcast/S rebuff/DGS rebuild/GS rebuke/DGRS rebuttal/S recall/DGRS recapitulate/DGNS recapture/DGS recast/GS recede/DGS receipt/DGMS receivable/S receive/DGRSZ receiver/MS recent/PY receptacle/MS reception/MS receptive/PY receptivity receptor/MS recertification/MS recertifier/MS recess/DGSV recession/MS recessive/PY recipe/MS recipient/MS reciprocal/SY reciprocate/DGNSV reciprocity recirculate/DGNS recital/MS recite/DGRS reckless/PY reckon/DGJRS reclaim/DGRSZ reclamation/S reclassify/DGNS recline/DGS recode/DGS recognition/MS recombine/DGS recommend/DGRSZ recommender/MS recommission/DGS recompense recompile/DGS recompute/DGS reconcile/DGRS reconciliation/MS reconfigure/DGRS reconnect/DGRS reconsider/DGS reconstruct/DGSV reconstructed/U reconstruction/S record/DGJRSZ recorded/U recount/DGRS recourse/S recover/DGRS recoverability recoverable/U recovery/MS recreate/DGNSVX recreational recruit/DGMRSZ recruiter/MS recta rectangle/MS rectangular/Y rector/MS rectum/MS recur/S recurrence/MS recurrent/Y recurring recurse/DGNSVX recursion/MS recyclable/U recycle/DGS red/PSY redbreast redden/DG redder reddest reddish/P redeclare/DGS rededication/MS redeem/DGRSZ redeemed/U redefine/DGS redemption/R redeposit/DGMS redesign/DGS redevelopment Redford/M redirect/DGS redisplay/DGS redistribute/DGNSVX redouble/DGS redraw/GS redrawn redress/DGRS redub/DGS reduce/DGRSZ reducibility reducible reducibly reduction/MS redundancy/S redundant/Y reed/GMRS reeducation reef/GRS reel/DGRS reenactment reenter/DGS reentrant reestablish/DGS reevaluate/DGNS reexamine/DGS refer/S referee/DMS refereeing reference/DGRS referenced/U referendum referent/MS referential/Y referentiality referral/MS referred referrer referring refill/DGS refine/DGRS refined/U refinement/MS reflect/DGSV reflected/U reflection/MS reflective/PY reflectivity reflector/MS reflex/DMSVY reflexive/PY reflexivity refocus/DGS reformable reformat/SV reformation reformatter reformulate/DGNS refractory/PY refrain/DGS refresh/DGNRSZ refreshing/Y refreshment/MS refrigerator/MS refry/DGS refuge/DGS refugee/MS refund/DGMRSZ refusal/S refuse/DGRS refutable refutation refute/DGRS regain/DGS regal/DGY regard/DGS regardless/PY regenerate/DGNPSVY regent/MS regift/DGS regime/MS regimen regiment/DS region/MS regional/Y register/DGSU registration/MS regress/DGSV regression/MS regressive/PY regret/S regretful/PY regrettable regrettably regretted regretting regroup/DG regular/SY regularity/S regulate/DGNSVX regulated/U regulator/MS rehash/DGS rehearsal/MS rehearse/DGRS rehearsed/U reign/DGS reimbursed reimbursement/MS rein/DGS reincarnate/DN reindeer reinforce/DGRS reinforced/U reinforcement/MS reinsert/DGS reinstall/DGRS reinstate/DGS reinstatement reinterpret/DGS reintroduce/DGS reinvention reissuer/MS reiterate/DGNSVX reiterative/PY reject/DGRSV rejecting/Y rejection/MS rejector/MS rejoice/DGRS rejoicing/Y rejoin/DGS relabel/S relate/DGNRSVX related/PY relational/Y relationship/MS relative/MPSY relativism relativistic relativistically relativity/M relax/DGRS relaxation/MS relaxed/PY relay/DGS release/DGMRS released/U relegate/DGNS relent/DGS relenting/U relentless/PY relevance/S relevant/Y reliability/SU reliably/U reliance relic/MS relief/S relieve/DGRSZ relieved/Y religion/MS religious/PY relinquish/DGS relish/DGS relive/GS reload/DGRS relocate/DGNSX reluctance/S reluctant/Y rely/DGRS remain/DGS remainder/DGMS remark/DGS remarkable/P remarkably remarked/U remedy/DGS remember/DGRS remembrance/MRS reminiscence/MS reminiscent/Y remittance/S remnant/MS remodel/S remodulate/DGNS remonstrate/DGNSV remonstrative/Y remorse remote/MNPSTY removal/MS remove/DGRS renaissance renal rename/DGS rend/GRSZ render/DGJRS rendezvous/DGS rendition/MS renew/DGRS renewal/S renounce/DGRS renown/D rent/DGRSZ rental/MS renter/MS renumber/DGS reopen/DGS reorder/DGS repackage/DGRS repaint/DGRSZ repair/DGRSZ repairman reparable reparation/MS repartition/DGRSZ repast/MS repay/GS repeal/DGRS repeat/DGRSZ repeatable repeated/Y repel/S repent/DGRS repentance repercussion/MS repertoire repetition/MS repetitive/PY rephrasing/MS repine/DGR replaceable replenish/DGRS replete/NP replica/MS replicate/DGNSVX reply/DGNRSX report/DGRSZ reported/Y reporter/MS repose/DGS repository/MS repost/DGJRS represent/DGRS representable/U representably representational/Y representative/MPSY represented/U repress/DGSV repression/MS repressive/PY reprieve/DGS reprint/DGRS reprisal/MS reproach/DGRS reproaching/Y reproducibility/S reproducibly reproductive/Y reproductivity reproof reprove/DGR reproving/Y reptile/MS republic/MS republican/MS republication repudiate/DGNSX repulse/DGNSVX repulsive/PY repurchase/DGRS reputable reputably reputation/MS repute/DGS reputed/Y request/DGMRSZ requested/U requiem/MS require/DGRS requirement/MS requisite/NPSX requisition/DGRS requite/DGR requited/U reread/GS reroute/DJRSZ rerun/S reschedule/DGRS rescue/DGRSZ research/DGRSZ reselect/DGS resemblance/MS resemble/DGS resent/DGS resentful/PY resentment reservation/MS reserve/DGMRS reserved/PUY reservoir/MS reset/DGRS reshape/DGRS reside/DGRS residence/MS resident/MS residential/Y residue/MS resign/DGRS resignation/MS resigned/PY resin/DGMS resist/DGRSV resistance/S resistant/Y resisted/U resistible resistibly resisting/U resistive/PY resistivity resistor/MS resize/DGS resold resolute/NPVXY resolved/U resonance/S resonant/Y resort/DGRS resound/GS resounding/Y resourceful/PY respect/DGRSV respectability respectable/P respectably respectful/PY respective/PY respiration/S respite/DG resplendent/Y respond/DGRSZ respondent/MS responder/MS response/RSVX responsibility/S responsible/P responsibly responsive/PUY rest/DGRSV restamp/DGS restart/DGRS restate/DGS restatement restaurant/MS restful/PY restive/PY restless/PY restoration/MS restore/DGRSZ restrained/UY restraint/MS restrict/DGSV restricted/UY restriction/MS restrictive/PY restroom/MS restructure/DGS result/DGS resultant/SY resumable resume/DGS resumption/MS resurface/DGRSZ resurfacer/MS resurrect/DGS resurrection/MS retail/DGRSZ retailer/MS retain/DGRSZ retainment retaliation retard/DGR retention/S retentive/PY reticence reticent/Y reticle/MS reticular reticulate/DGNSY retina/MS retinal retinue/S retire/DGSU retirement/MS retiring/PY retort/DGS retrace/DGS retract/DGS retraction/S retrain/DGS retreat/DGRS retrievable retrieval/MS retrieve/DGRSZ retroactively retrospect/V retrospection retrospective/Y return/DGRSZ returned/U retype/DGS reunite/DG reuse/DGS revamp/DGS reveal/DGRS revealing/U revel/S revelation/MS revelry revenge/DGMRS revenue/RSZ revere/DGS reverence/R reverend/MS reverently reverify/DGS reversal/MS reverse/DGNRSXY reversible reversion/RS revert/DGRSV review/DGMRSZ revile/DGR revise/DGNRSX revision/MS revival/MS revive/DGRS revocation/S revoke/DGRS revolt/DGRS revolting/Y revolution/MS revolutionary/MPSY revolve/DGRSZ reward/DGRS rewarding/Y rewind/DGRS reword/DGJS rewording/MS rework/DGS rewound rewrite/GJRS rhetoric rheumatism rhinoceros rhubarb rhyme/DGRS rhythm/MS rhythmic/S rhythmical/Y rib/MS ribbed ribbing ribbon/MS rice/RS rich/NPRSTY richen/DG Rick/M rickshaw/MS rid/GJRSZ ridden riddle/DGRS ride/GJRSZ rider/MS ridge/DGMS ridicule/DGRS ridiculous/PY rifle/DGRS rifled/U rifleman rift rig/MS rigged rigging right/DGNPRSY righteous/PUY rightful/PY rightmost rightward/S rigid/PY rigidity/S rigorous/PY rill rim/GMRS rime/GR rind/DMS ring/DGJRSZ ringing/SY rinse/DGRS riot/DGRSZ riotous/PY rip/NRSTX ripe/PRTY ripen/DGRS ripped ripping ripple/DGRS rise/GJRSZ risen risk/DGRS Ritchie/M rite/MS ritual/SY rival/S rivalry/MS rive/DGRZ riven river/MS riverside rivet/DGRS rivulet/MS road/MRS roader/M roads/I roadside/S roadster/MS roadway/MS roam/DGRS roar/DGRS roaring/T roast/DGRS rob/DGS robbed robber/MS robbery/MS robbing robe/DGS Robert/MS robin/MS Robinson/M robot/MS robotic/S robust/PY rock/DGRSZ rocket/DGMS rocky/PRS rod/MS rode roe/S rogue/GMS role/MS roll/DGRSZ ROM Roman/MS romance/DGRSZ romantic/MS romantically/U romp/DGRSZ roof/DGRSZ rook/S room/DGRSZ roost/DGRSZ root/DGMRS rooted/P rope/DGRSZ rose/MS rosebud/MS rosy/PRY rot/MS rotary rotate/DGNSVX rotated/U rotational/Y rotative/Y rotator/MS rotten/PY rouge/G rough/DNPRTXY roughen/DGS round/DGPRSTYZ roundabout/P rounded/P roundoff roundup/MS rouse/DGRS rout/DGJRZ route/DGJRSZ router/MS routine/MSY rove/DGRS row/DGNRSZ Roy/M royal/Y royalist/MS royalty/MS RSX rub/S rubbed rubber/MS rubbing rubbish/S rubble/DG Rubens rubout ruby/MS rudder/MS ruddy/PRY rude/PRTY rudiment/MS rudimentary/PY rue/GS ruefully ruffian/SY ruffle/DGRS ruffled/U rug/MS rugged/PY ruin/DGRS ruination/MS ruinous/PY rule/DGJMRSZ ruled/U rum/NX rumble/DGRS rump/SY rumple/DGS rumply/R run/MS runaway/S rung/MS runnable runner/MS running/A runs/A runtime rupture/DGS rural/Y rush/DGRS russet/DGS Russian/MS rust/DGS rustic rusticate/DGNS rustle/DGRSZ rusty/NPRY rut/MS ruthless/PY rye/M sable/MS sabotage/DGS sack/DGRS sacred/PY sacrifice/DGRSZ sacrificial/Y sad/PY sadden/DGS sadder saddest saddle/DGRS sadism sadist/MS sadistic sadistically safe/PRSTY safeguard/DGS safely/U safety/DGMS sag/S sagacious/PY sagacity sage/PSY said/U sail/DGRSZ sailer/MS sailing/M sailor/MSY saint/DSY saintly/P sake/RS salable/A salad/MS salary/DS sale/MS salesman/M salesmen/M salespeople/M salesperson/MS salient/Y saline saliva sallow/P sally/DGS Sally's salmon/S salon/MS saloon/MS salt/DGPRSZ salted/U salty/PRTY salutary/PY salutation/MS salute/DGRS salvage/DGRS salvation salve/GRS Salz/M Sam/M same/P sample/DGJMRSZ sanctify/DNR sanction/DGS sanctity/S sanctuary/MS sand/DGRSZ sandal/MS sandpaper Sandra/M sandstone/S sandwich/DGS sandy/PR sane/PRTY sang sanguine/PY sanitarium/S sanitary/IU sanitation sanity/I sank sap/MS sapling/MS sapphire/MS Sarah/M sarcasm/MS sarcastic sash/DS sat/DG satchel/MS sate/DGS satellite/MS satin satire/MS satirist/MS satisfaction/MS satisfactorily/U satisfactory/PY satisfiability/U satisfiable/U satisfied/U satisfy/DGRSZ satisfying/Y saturate/DGNRSX saturated/AU saturates/A Saturday/MS satyr sauce/GRSZ saucepan/MS saucy/PRY saunter/DGRS sausage/MS savage/DGPRSYZ save/DGJRSZ saved/U saw/DGRS sawmill/MS sawtooth Sawyer/M say/GJRSZ scabbard/MS scaffold/GJS scalable/U scalar/MS scald/DGS scale/DGJRSZ scaled/A scallop/DGRS scalp/GMRS scaly/PR scam/MS scamper/DGS scan/AS scandal/MS scandalous/PY scanned/A scanner/MS scanning/A scant/PY scanty/PRSTY scar/DGMRS scarce/PRTY scarcity scare/DGRS scarf/S scarlet scary/R scatter/DGRS scattering/Y scavenger/MS SCCS scenario/MS scene/MS scenery/S scenic/S scent/DS schedule/DGMRSZ scheduled/AU scheduler/MS schema/MS schemata schematic/S schematically scheme/DGMRSZ schizophrenia scholar/SY scholarship/MS scholastic/S scholastically school/DGMRSZ schoolboy/MS schooled/U schoolhouse/MS schoolmaster/MS schoolroom/MS schoolyard/MS schooner/MS science/MS scientific/U scientifically/U scientist/MS scissor/DGS scoff/DGRS scold/DGRS scoop/DGRSZ scooper/MS scope/DGMS scorch/DGRS scorching/Y score/DGJMRSZ scorn/DGRS scornful/PY scorpion/MS Scotland/M Scott/M scoundrel/MSY scour/DGJRS scourge/GR scout/DGRS scow scowl/DGRS scramble/DGRSU scrap/DGJMRSZ scrape/DGJRSZ scrapped scratch/DGRSZ scratched/U scrawl/DGRS scream/DGRSZ screaming/Y screech/DGRS screen/DGJRSZ screened/AU screener/MS screw/DGRS screws/U scribble/DGRS scribe/GIRS script/DGMRS scripted/U scripter/M scripture/S scroll/DGS scrooge/MS scrub/S scruple/DGS scrupulous/PUY scrutiny scuffle/DGS sculpt/ADGS sculptor/MS sculpture/DGS scum/MS scurry/DG scuttle/DGS scythe/GMS sea/SY seaboard seacoast/MS Seagate/M seal/DGRS sealed/AU seals/U seam/DGNRS seaman/Y seaport/MS sear/DGS search/DGJRSZ searcher/AMS searching/SY searing/Y seashore/MS seaside season/DGJMRSYZ seasonable/PU seasonably/U seasonal/Y seasoned/U seat/DGRS seaward/S seaweed/S secede/DGRS secluded/PY seclusion second/DGRSYZ secondary/PSY secondhand secrecy secret/DGSVY secretarial secretary/MS secrete/DGNSVX secretive/PY sect/IMS section/DGMS sectional/Y sector/DGMS secular/Y secure/DGJPRSY secured/U security/IS sedge sediment/MS seduce/DGRSZ seductive/PY see/DRSZ seed/DGJRSZ seeded/U seedling/MS seeing/U seek/GRSZ seeking/Y seem/DGSY seeming/Y seemly/PR seen/U seep/DGS seer/MS seethe/DGS segment/DGS segmentation/MS segmented/U segregate/DGNSV segregated/U seismic seizable seize/DGJRSZ seizin/S seizor/S seizure/MS seldom/Y select/DGPSV selected/AU selection/MS selective/PY selectivity selector/MS self/P selfish/PUY selfsame/P sell/AGRSZ selves semantic/S semantical/Y semanticist/MS semaphore/MS semblance/A semester/MS semiautomated semicolon/MS semiconductor/MS seminal/Y seminar/MS seminary/MS semipermanent/Y senate/MS senator/MS send/GRSZ sender/MS sends/A senior/MS seniority sensation/MS sensational/Y sense/DGS senseless/PY sensibility/S sensible/IP sensibly/I sensitive/PSY sensitivity/S sensor/MS sensory sent/AU sentence/DGS sentential/Y sentiment/MS sentimental/Y sentinel/MS sentry/MS separable/IP separate/DGNPSVXY separator/MS September/MS sequel/MS sequence/DGJRSZ sequenced/A sequential/Y sequentiality sequester/DG serendipitous/Y serendipity serene/PY serenity serf/MS sergeant/MS serial/SY series serious/PY sermon/MS serpent/MS serpentine/Y serum/MS servant/MS serve/DGJRSZ served/AU server/MS service/DGMRS serviceable/P serviced/U servile/PY servitude session/MS set/MS sets/AIU setter/MS setting/AI settings/A settle/DGJRSZ settled/AU settlement/MS settles/A settling/AU setup/S seven/HS seventeen/HS seventh/S seventy/HS sever/DGRST several/SY severance severe/DGPRTY severity/MS sew/DGRSZ sex/DS sexism/M sexist/MS sexual/Y sexuality shabby/PRY shack/DS shackle/DGRS shackled/U shade/DGJRSZ shaded/U shader/MS shadow/DGRS shadowy/PY shady/PRTY shaft/DGMS shaggy/PRY shakable/U shakably shake/GRSZ shaken/U shaky/PRY shale/S shall shallow/PRSTY sham/DGMS shambles shame/DGS shameful/PY shameless/PY shan't shanty/MS shape/DGRSYZ shapeless/PY shapely/PR sharable share/DGRSZ sharecropper/MS shared/U shareholder/MS shark/MS sharp/DGNPRSTXY sharpen/DGRS sharpened/U shatter/DGS shattering/Y shave/DGJRS shaved/U shaven/U shawl/MS she/DMRSV she'd she'll sheaf shear/DGRSZ sheath/GRS sheathing/U sheaves shed/S sheep sheer/DPY sheet/DGRS shelf/S shell/DGMRS shelled/U shelter/DGRS sheltered/U shelve/DGRS shepherd/DGMS sheriff/MS shield/DGRS shielded/U shift/DGRSZ shifter/MS shifty/PRTY shilling/S shimmer/DG shin/DGRZ shine/DGRSZ shingle/DGMRS shining/Y shiny/PR ship/MS shipboard/S shipbuilding shipment/MS shippable shipped shipper/MS shipping shipwreck/DS shirk/GRS shirt/GS shit/MS shiver/DGRS shoal/GMS shock/DGRSZ shocking/Y shod/U shoe/DRS shoehorn/DGMS shoeing shoemaker shone shook shoot/GJRSZ shop/MS shopkeeper/MS shopped shopper/MS shopping shore/DGMS shorn short/DGNPRSTXY shortage/MS shortcoming/MS shortcut/MS shorten/DGRS shorthand/DS shot/MS shotgun/MS should/RTZ shoulder/DGS shouldn't shout/DGRSZ shove/DGRS shovel/S show/DGJRSZ shower/DGS shown shrank shred/MS shredder/MS shrew/MS shrewd/PTY shriek/DGRS shrill/DGP shrilly shrimp shrine/MS shrink/GRS shrinkable shrivel/S shroud/DGS shrub/MS shrubbery shrug/S shrunk/N shudder/DGS shuffle/DGRS shun/S shut/S shutdown/MS shutter/DGS shutting shuttle/DGS shy/DGRST shyly shyness sibling/MS sick/GNPRSTY sicken/DGR sickening/Y sicker/Y sickle/DG sickly/DGPY sickness/MS side/DGJMS sideboard/MS sideburns sided/P sidelight/MS sidetrack/DGS sidewalk/MS sideways sidewise siege/GMS sierra/S sieve/GMSZ sift/DGJRS sifted/A sigh/DGRS sight/DGJRSY sightly/P sign/DGRSZ signal/SY signature/MS signed/AU signet significance/IM significant/IY signify/DGNRS Signor Sikkim/M Sikkimese silence/DGRSZ silent/PSY silhouette/DS silicon/S silicone silk/NS silky/PRTY sill/MS silly/PRTY silt/DGS silver/DGRSY Silverstein/M silvery/P similar/Y similarity/S similitude simmer/DGS simple/PRST simplex/S simplicity/MS simplified/U simplify/DGNRSXZ simplistic simply simulate/DGNSVX simulator/MS simultaneity simultaneous/PY sin/AGMS since sincere/PTY sincerity/I sine/GS sinew/MS sinful/PY sing/DGRSYZ singable Singapore/M singer/MS singing/Y single/DGPS singleton/MS singular/Y singularity/MS sinister/PY sink/DGRSZ sinkhole/S sinned sinner/MS sinning sinusoidal/Y sinusoids sip/S siphon/DGMS siphons/U sir/DGNSX sire/DGS sirup sister/DGMSY sit/DGS site/DGMS sitter/MS sitting/S situate/DGNSX situational/Y six/HS sixpence/S sixteen/HS sixth/SY sixty/HS sizable/P size/DGJRSZ sized/AU skate/DGRSZ skater/MS skeletal/Y skeleton/MS skeptic/MS skeptical/Y sketch/DGRS sketchy/PRTY skew/DGPRSZ skewer/DGS ski/DGRSZ skier/MS skill/DGS skilled/U skillful/PUY skim/MS skimmed skimmer/MS skimming/S skimp/DGS skin/MS skinned skinner/MS skinning skip/S skipped skipper/DGMS skipping skirmish/DGRSZ skirt/DGRS skulk/DGRS skull/DMS skunk/MS sky/DGMRSZ skylark/GRS skylight/MS skyscraper/MS slab/S slack/DGNPRSTXY slacken/DGS slain slam/S slammed slamming slander/DGRS slang/G slant/DGS slanting/Y slap/S slapped slapping slash/DGRS slashing/Y slat/DGMRSZ slate/DGRSZ slaughter/DGRS slave/DGMRS slaver/DG slavery slay/GRSZ sled/MS sledge/GMS sledgehammer/MS sleek/PY sleep/GRSZ sleepless/PY sleepy/PRY sleet sleeve/DGMS sleigh/S sleken/DG slender/PRY slept slew/DG slice/DGRSZ slick/PRSYZ slid/GRZ slide/GMRSZ slight/DGPRSTY slighting/Y slim/DGPY slime/DGS slimy/PRY sling/GRS slings/U slip/MS slippage slipped slipper/MS slippery/PR slipping slit/MS slogan/MS slop/DGRSZ slope/DGRSZ sloped/U slopped slopping sloppy/PRY slot/MS sloth/S slotted slouch/DGRS slow/DGPRSTY slug/S sluggish/PY slum/MS slumber/DGMRS slump/DS slung/U slur/MS sly/Y slyer slyest smack/DGRS small/PRT smallpox smart/DGNPRSTY smarten/DG smash/DGRSZ smashing/Y smear/DGRS smell/DGRS smelly/R smelt/RS smile/DGRS smiling/UY smite/GR smith/MS smithy/S smitten smock/GS smog smokable smoke/DGRSZ smoker/MS smoky/PRSY smolder/DGS smoldering/Y smooth/DGNPRSTYZ smoothen/DG smote smother/DGS SMTP smug/PY smuggle/DGRSZ snack/DGRS snail/MS snake/DGS snap/SU snapped/U snapper/MS snapping/U snappy/PRTY snapshot/MS snare/DGRS snarf/DGJS snarl/DGRS snatch/DGRSZ snatcher/MS sneak/DGRSZ sneaker/DS sneaking/Y sneaky/PRTY sneer/DGRS sneeze/DGRS sniff/DGRSZ sniffer/MS snoop/DGRSZ snooper/MS snore/DGRS snort/DGRS snout/DMS snow/DGS snowman snowmen snowshoe/DMRS snowy/PRTY snuff/DGRS snug/PSY snuggle/DGS so/S soak/DGRS soap/DGRS soar/DGRS sob/RSZ sober/DGPRSTY soccer sociability/IU sociable/IU sociably/IU social/UY socialism socialist/MS societal/Y society/MS sociological/Y sociology sock/DGS socket/MS sod/MS soda/MS sodium sodomy sofa/MS soft/NPRTXY soften/DGRS software/M soil/DGS sojourn/RZ solace/DGR solar sold/RZ solder/DGRS soldier/DGMSY sole/DGPSY solemn/PY solemnity solicit/DGS solicited/U solicitor/S solid/PSY solidify/DGNS solidity soling/N solitaire solitary/PY solitude/MS solo/DGMS solubility/I soluble/AI solution/MS solvable/AIU solve/ADGRSZ solved/AU solvent/MSY somber/PY some/Z somebody/MS someday somehow someone/M someplace/M something/M sometime/S somewhat somewhere/S son/MSY sonar/S song/MS sonnet/MS soon/RT soot sooth/DGRY soothe/DGRS soothing/PY sophisticated/Y sophistication/U sophomore/MS sorcerer/MS sorcery sordid/PY sore/PRSTY sorrow/MRS sorrowful/PY sorry/PRTY sort/DGMRSZ sorted/AU sought/U soul/DMS sound/DGJPRSTY sounding/MSY soup/MS sour/DGPRSTY source/ADGMS south/GRS souther/Y southern/PRYZ sovereign/MSY soviet/MS sow/GMRSX sower/D space/DGJRSZ spaceship/MS spade/DGRS Spafford/M spaghetti Spain/M span/MS Spanish/M spank/DGRS spanned spanner/MS spanning spare/DGPRSTY sparing/UY spark/DGRS sparrow/MS sparse/PRTY spat/S spate/MS spatial/Y spatter/D spawn/DGRS speak/GRSZ speakable/U speaker/MS spear/DGRS special/PSY specialist/MS specialty/MS species specifiable specific/S specifically specificity/S specified/AU specify/DGNRSXZ specimen/MS speck/MS speckle/DGS spectacle/DS spectacular/Y spectator/MS spectra spectrogram/MS spectroscopically spectrum/S speculate/DGNSVX speculative/Y speculator/MS sped speech/MS speechless/PY speed/DGRSZ speedup/MS speedy/PRY spell/DGJRSZ Spencer/M spend/GRSZ spent/U sphere/GMS spherical/Y spice/DGS spicy/PRY spider/MS spike/DGRS spill/DGRS spin/S spinach spinal/Y spindle/DGRS spine/S spinner/MS spinning spiral/SY spire/DGMS spired/AI spires/AI spirit/DGS spirited/PY spiritual/PSY spit/DGS spite/DGS spiteful/PY spitting splash/DGRSZ spleen splendid/PY splice/DGJRSZ spline/DMS splinter/DGS split/MS splitter/MS splitting/S spoil/DGRSZ spoiled/U spoke/DGS spoken/U spokesman spokesmen sponge/DGRSZ sponsor/DGMS sponsorship/MS spontaneous/PY spoofer/MS spook/DGMS spooky/PRY spool/DGRSZ spooler/MS spoon/DGS spore/DGMS sport/DGSV sporting/Y sportive/PY sportsman/Y spot/MS spotless/PY spotlight/DGMS spotted/U spotter/MS spotting spouse/GMS spout/DGRS sprang sprawl/DGS spray/DGRS sprayed/U spread/GJRSZ spreadsheet/MS spree/MS sprig sprightly/PR spring/GMRSZ springtime springy/PRTY sprinkle/DGRSZ sprinkler/DMS sprint/DGRSZ sprite sprout/DGS spruce/DGPRTY sprung/U Spuds spun spur/MS spurious/PY spurn/DGRS spurt/DGS sputter/DR spy/DGRS squabble/DGRS squad/MS squadron/MS squall/MRS square/DGMPRSTY squash/DGRS squat/PSY squawk/DGRS squeak/DGRS squeal/DGRS squeeze/DGRS squid/S squint/DGRS squinting/Y squire/GMS squirm/DGS squirrel/SY Sr stab/SY stabbed stabbing/MS stability/MS stable/DGPRST stably/U stack/DGMRS stacked/U stacks/U staff/DGMRSZ stag/DGMRSZ stage/DGRSZ stagecoach stagehand/MS stagger/DGRS staggering/Y stagnant/Y staid/PY stain/DGRS stained/U stainless/Y stair/MS staircase/MS stairway/MS stake/DGS stale/DGPRSTY stalk/DGRSZ stalker/MS stall/DGJS stalwart/PY stamen/MS stamina stammer/DGRS stamp/DGRSZ stampede/DGRS stance/MS stanch/RT stand/GJMRS standard/SY standby standpoint/MS standstill stanza/MS staple/DGRSZ stapled/U star/DGMRS starboard/DGS starch/DGS stare/DGRS starfish staring/U stark/PTY starlet/MS starlight starred starring starry/R start/DGRSZ startle/DGS startling/PY startup/MS starvation starve/DGRS state/DGMNRSVXY stated/AIU stately/PR statement/MS states/AI statesman/MY static/S statically station/DGMRS stationary/SY statistic/MS statistical/Y statistician/MS statue/DMS statuesque/PY stature status/S statute/MS statutory/PY staunch/PTY stave/DGS stay/DGRSZ stdio stead/G steadfast/PY steady/DGPRSTY steak/MS steal/GHRS stealthy/PRY steam/DGRSZ steamboat/MS steamship/MS steed/S steel/DGSZ steep/DGNPRSTY steepen/DG steeple/MS steer/DGRS stellar stem/MS stemmed/U stemming stench/MS stencil/MS stenographer/MS step/MS Stephen/MS stepmother/MS stepped stepper stepping steps/I stepwise stereo/MS stereotype/DGRSZ stereotypical/Y sterile/U sterling/PY stern/PSY stew/DGS steward/MS stick/DGRSZ sticky/PRTY stiff/NPRSTXY stiffen/DGRSZ stiffness/S stifle/DGRS stifling/Y stigma/S stile/MS still/DGPRST stills/I stimulant/MS stimulate/DGNSVX stimuli stimulus sting/GRS stinging/Y stink/GRSZ stinking/Y stint/DGMRS stinting/U stipend/MS stipple/DGRS stipulate/DGNSX stir/S stirred stirrer/MS stirring/SY stirrup/S stitch/DGRS stochastic stochastically stock/DGJRSZ stockade/DGMS stockholder/MS stocking/DS stole/DMS stolen stomach/DGRS stone/DGMRS stony/PRY stood stool/S stoop/DGS stop/MS stopcock/S stopgap/MS stoppable/U stoppage/S stopped/U stopper/DGMS stopping storage/MS store/DGMS stored/AU storehouse/MS stork/MS storm/DGMS stormy/PRTY story/DGMS stout/NPRTY stouten/DG stove/MRS stow/DGS straggle/DGRSZ straight/NPRTXY straighten/DGRSZ straightforward/PSY straightway strain/ADGRSZ strained/AU strait/NPSY straiten/DG strand/DGRS stranded/P strange/PRTYZ stranger/MS strangle/DGJRSZ strangulation/MS strap/MS stratagem/MS strategic/S strategy/MS stratified/U stratify/DGNSX stratum straw/MS strawberry/MS stray/DGMRS streak/DGS stream/DGMRSZ streamed/U streamline/DGRS streamliner/M street/SZ streetcar/MS strength/NSX strengthen/DGRS strenuous/PY stress/DGS stressed/U stretch/DGRSZ strew/GHS strewn stricken strict/PRTY stride/GRS strife strike/GRSZ striking/Y string/DGMRSZ stringent/Y stringy/PRT strip/DGMRSZ stripe/DGRSZ striped/U striper/MS stripped/U stripper/MS stripping strive/GJRS strobe/DGMS stroboscopic strode stroke/DGRSZ stroll/DGRSZ stroller/MS strong/RTY stronghold strove struck structural/Y structure/DGRS structured/AU struggle/DGRS strung/U strut/S strutted strutter strutting stub/MS stubbed stubbing stubble stubborn/PY stuck/U stud/MS student/MS studied/PY studio/MS studious/PY study/DGMRS stuff/DGJRS stuffy/PRTY stumble/DGRS stumbling/Y stump/DGRS stun/S stung stunning/Y stunt/DGMS stunted/P stupefy/G stupendous/PY stupid/MPRSTY stupidity/S stupor sturdy/PRY style/DGRSZ stylish/PY stylistic/S stylistically sub/S subatomic subclass/MS subcommittee/MS subcomponent/MS subcomputation/MS subconscious/PY subculture/MS subdivide/DGRS subdivision/MS subdue/DGRS subdued/Y subexpression/MS subfield/MS subfile/MS subgoal/MS subgraph/MS subgroup/GMS subinterval/MS subject/DGMSV subjection subjective/PY subjectivity sublimation/S sublime/DGPRY sublist/MS submarine/DGRSZ submerge/DGS submission/AMS submit/AS submitted/A submitting/A submode/S submodule/MS subnetwork/MS subordinate/DGNPSVY subproblem/MS subprocess/MS subprogram/MS subproject subproof/MS subrange/MS subroutine/MS subschema/MS subscribe/DGRSZ subscript/DGS subscripted/U subscription/MS subsection/MS subsegment/MS subsequence/MS subsequent/PY subset/MS subside/DGS subsidiary/MSY subsidy/MS subsist/DGS subsistence subspace/MS substance/MS substantial/PY substantially/U substantiate/DGNSVX substantiated/U substantive/PY substantivity substitutability substitutable substitute/DGNRSVX substituted/U substitutive/Y substrate/MS substring/S substructure/MS subsume/DGS subsystem/MS subtask/MS subterranean/Y subtitle/DGMS subtle/PRT subtlety/S subtly subtopic/MS subtract/DGRSVZ subtracter/MS subtraction/S subtrahend/MS subtree/MS subunit/MS suburb/MS suburban subversion subvert/DGRS subway/MS succeed/DGRS success/SV successful/PY successfully/U succession/MS successive/PY successor/MS succinct/PY succumb/DGS such suck/DGRSZ sucker/DGS suckle/DGS suction sudden/PY suds/GR sue/DGRS Sue's sued/DG suffer/DGJRSZ sufferance suffice/DGRS sufficiency/I sufficient/IY suffix/DGRS suffixed/U suffocate/DGNSV suffocating/Y suffrage sugar/DGJS suggest/DGRSV suggestible suggestion/MS suggestive/PY suicidal/Y suicide/DGMS suit/DGMRSZ suitability/U suitable/P suitably/U suitcase/MS suite/DGRSZ suited/U suitor/MS sulk/DGS sulky/PRSTY sullen/PY sultan/MS sultry/PRY sum/MS summand/MS summary/MSY summation/MS summed summer/DGMS summing summit/DGMS summon/DGRSZ summons/S sumptuous/PY sun/MS sunbeam/MS sunburn/DGMS Sunday/MS sundown/RZ sundry/S sung/U sunglass/S sunk/N sunlight/S sunned sunning sunny/PRY sunrise/S sunset/MS sunshine/S suntan/DGMS suntanned suntanning sup/R super/DG superb/PY superclass/M supercomputer/MS superego/MS superficial/PY superfluity/MS superfluous/PY superhuman/PY superimpose/DGS superintend superintendent/MS superior/MSY superiority superlative/PSY supermarket/MS superpose/DGS superscript/DGS supersede/DGRS superset/MS superstition/MS superstitious/PY supertitle/DGMS superuser/MS supervise/DGNSX supervised/U supervisor/MS supervisory supper/MS supplant/DGRS supple/DGPRY supplement/DGRS supplemental supplementary/S supplier/AMS supply/DGMNRSZ support/DGRSVZ supportable/IU supported/U supporting/Y supportive/Y suppose/DGRS supposed/Y supposition/MS suppress/DGSV suppression/S suppressive/P supremacy supreme/PY sure/DPRTY surety/S surf/DGMRSZ surface/DGPRSZ surfer/MS surge/DGSY surged/A surgeon/MS surgery/S surges/A surgical/Y surly/PRY surmise/DGRS surmount/DGS surname/DMS surpass/DGS surpassed/U surpassing/Y surplus/MS surprise/DGMRS surprised/U surprising/UY surrender/DGRS surrogate/MNS surround/DGJS survey/DGS surveyor/MS survival/S survive/DGRS survivor/MS susceptible/I suspect/DGRS suspected/U suspecting/U suspend/DGRSZ suspended/AU suspender/MS suspense/NRSVX suspensive/Y suspicion/DGMS suspicious/PY sustain/DGRS suture/DGS swagger/DG swain/MS swallow/DGRS swam swamp/DGRS swampy/PR swan/MS swap/S swapped swapper/MS swapping swarm/DGRS swarthy/PR swatted sway/DGRS swayed/U swear/GRS sweat/DGRSZ sweep/GJRSZ sweeping/PSY sweet/GNPRSTXY sweeten/DGJRSZ sweetheart/MS sweetie/MS swell/DGJS swept swerve/DGS swerving/U swift/PRTY swim/S swimmer/MS swimming/Y swimsuit/MS swine swing/GRSZ swinging/Y swipe/DGS swirl/DGRS swirling/Y swish/DR switch/DGJMRSZ switchboard/MS swollen swoon/DGRS swooning/Y swoop/DGRS sword/MS swore sworn swum swung sycamore syllabi syllable/DGMS syllabus syllogism/MS symbiosis symbiotic symbol/MS symbolic/MS symbolically symbolism/S symmetric symmetrical/PY symmetrically/U symmetry/MS sympathetic/U sympathy/MS symphony/MS symposium/S symptom/MS symptomatic synapse/DGMS synchronous/PY synchrony syndicate/DGNS syndrome/MS synergism synergistic synonym/MS synonymous/Y synopses synopsis syntactic/SY syntactical/Y syntax/S syntheses synthesis synthetic/S syringe/DGS syrup system/MS systematic/PS systematically tab/MS tabernacle/DGMS table/DGMS tableau/MS tablecloth/S tablespoon/MS tablespoonful/MS tablet/MS taboo/MS tabular/Y tabulate/DGNSX tabulator/MS tachometer/MS tachometry tacit/PY tack/DGRS tackle/DGMRS tact/I tactics tactile/Y tag/MS tagged tagging tail/DGJRS tailor/DGS taint/DS take/GHJRSZ taken takes/I tale/MNRS talent/DS talented/U talk/DGRSZ talkative/PY talkie/S tall/PRT tallow tame/DGPRSTY tamed/U tamper/DGRS tampered/U tan/S tandem tang/DY tangent/MS tangential/Y tangible/IP tangibly/I tangle/DGSU tangy/R tank/DGRSZ tanner/MS tantamount tantrum/MS tap/DGJMRSZ tape/DGJRSZ taped/U taper/DGRS tapestry/DMS tapped/U tapper/MS tapping taproot/MS tar/GS tardy/PRSY target/DGMS tariff/MS tarp/MS tarry/DGS tart/PSY task/DGMS taste/DGRSZ tasteful/PY tasteless/PY tastier tastiest tatter/D tattoo/DRS tau taught/U taunt/DGRS taunting/Y taut/NPY tauten/DG tautological/Y tautology/MS tavern/MRS tawny/PRS tax/DGRS taxable taxation taxi/DGMS taxicab/MS taxing/Y taxonomic taxonomically taxonomy/S taxpayer/MS TCP tea/S teach/GJRSZ teachable/P teacher/MS team/DGMS tear/DGMRS tearful/PY teas/DGRS tease/DGRS teasing/Y teaspoon/MS teaspoonful/MS technical/PY technicality/MS technician/MS technique/MS technological/Y technologist/MS technology/MS tedious/PY tedium teem/DGS teeming/PY teen/RS teenage/DRZ teeth/DGR teethe/DGRS Teflon/M Tektronix/M telecommunication/S teleconference/DGMS telegram/MS telegraph/DGRSZ telegraphic teleological/Y teleology telephone/DGRSZ telephonic telephony telescope/DGMS teletype/MS televise/DGNSX television/MS televisor/MS tell/GJRSZ telling/SY temper/DGRS temperament/S temperamental/Y temperance/I temperate/IPY temperature/MS tempest/S tempestuous/PY template/DGMS temple/DMS temporal/Y temporary/PSY tempt/DGRSZ temptation/MS tempting/Y ten/HMS tenacious/PY tenant/MS tend/DGRSZ tendency/S tender/DGPSY tenement/MS Tennessee/M tennis tenor/MS tens/DGRSTV tense/DGNPRSTVXY tension/DGRS tensor/MS tent/DGRS tentacle/DS tentative/PY tented/U tenth/S tenure/DS tenured/U tequila/M term/DGMRSY termcap terminal/MSY terminate/DGNSVX terminated/U terminative/Y terminator/MS terminology/S terminus ternary terrace/DGS terrain/MS terrestrial/MSY terrible/P terribly terrier/MS terrific/Y terrify/DGS terrifying/Y territorial/Y territory/MS terror/MS terrorism terrorist/MS terroristic tertiary/S test/DGJMRSZ testability testable/U testament/MS tested/U tester/MS testicle/MS testify/DGRSZ testimony/MS TeX TeX's Texas/MS text/DGMS textbook/MS textile/MS textual/Y texture/DGS than thank/DGRS thankful/PY thankless/PY thanksgiving/MS that/MS thatch/DGRS thaw/DGS the/GJ theatrical/SY theft/MS their/MS them/DG thematic/U theme/DGMS themselves then thence thenceforth theologian/MS theological/Y theology/S theorem/MS theoretic/S theoretical/Y theoreticians theorist/MS theory/MS therapeutic/S therapist/MS therapy/MS there/M thereabouts thereafter thereby therefore therein thereof thereon thereto thereupon therewith thermodynamic/S thermometer/MS thermostat/DMS these/S thesis they they'd they'll they're they've thick/NPRSTXY thicken/DGRSZ thicket/DMS thickness/S thief/M thieve/GS thigh/DS thimble/MS thin/PRSTY thing/PS thingamajig/MS think/GRSZ thinkable/P thinkably/U thinking/PY thinkingly/U thinks/A thinner/S thinnest third/SY thirst/DRS thirsty/PRY thirteen/HS thirty/HS this thistle thong/D thorn/MS thorny/PR thorough/PY thoroughfare/MS those though thought/MS thoughtful/PY thoughtless/PY thousand/HS thousandth/S thrash/DGRS thread/DGMRSZ threading/A threat/NSX threaten/DGRS threatening/Y three/MS threescore threshold/DGMS threw thrice thrift thrifty/PRY thrill/DGRSZ thrilling/Y thrive/DGRS thriving/Y throat/DGS throb/S throbbed throbbing throne/GMS throng/GMS throttle/DGRS through/Y throughout throughput throw/GRS thrown thrush/S thrust/GRSZ thud/S thug/MS thumb/DGS thump/DGRS thunder/DGRSZ thunderbolt/MS thundering/Y thunderstorm/MS thunderstruck Thursday/MS thus/Y thwart/DGRSY thyself tick/DGRSZ ticket/DGMS tickle/DGRS ticklish/PY tidal/Y tide/DGJS tidy/DGPRSY tie/DRSZ tied/AU tier/DS tiger/MS tight/NPRSTXY tighten/DGJRSZ tilde/S tile/DGRS till/DGRSZ tillable tiller/DGS tilt/DGRSZ timber/DGS time/DGJRSYZ timeless/PY timely/PR timeout/S timer/MS timeshare/DGS timetable/DGMS timid/PY timidity tin/GMS tinge/DG tingle/DGS tingling/Y tinker/DGRS tinkle/DGS tinned tinning tinny/PRTY Tinseltown/M tint/DGRS tiny/PRTY tip/MS tipped tipper/MS tipping tiptoe/DGS tire/ADGS tired/APY tireless/PY tiresome/PY tissue/DGMS tit/MS tithe/GMRS title/DGMS titled/AU titling/A titter/DGS tizzy/S to/IU toad/MS toast/DGRSZ toasty/R tobacco today/MS toe/DMS together/P toggle/DGS toil/DGRS toilet/MS token/MS told/AU tolerability/I tolerable/I tolerably/I tolerance/S tolerant/IY tolerate/DGNSV toll/DGS tom/MS tomahawk/MS tomato tomatoes tomb/MS tomography tomorrow/MS ton/DGMRS tone/DGRS toned/I toner/I tongs tongue/DGS tonic/MS tonight/M tonnage tonsil too/H took tool/DGMRSZ toolkit/MS tooth/DGS toothbrush/GMS toothpick/MS top/DGRS topic/MS topical/Y topmost topological/Y topology/S topple/DGS torch/MS tore torment/DGRSZ torn tornado/S tornadoes torpedo/DGS torpedoes torque/GRSZ torrent/MS torrid/PY tortoise/MS torture/DGRSZ torus/MS toss/DGRS total/MSY totality/MS totter/DGS tottering/Y touch/DGRS touchable/U touched/U touching/Y touchy/PRTY tough/NPRSTXY toughen/DGS tour/DGRS tourist/DMS tournament/MS tow/DGRSZ toward/SY towardly/P towel/MS tower/DGS towering/Y town/MRS township/MS toxicity toxin/MS toy/DGRS trace/DGJMRSZ traceable/P traced/AU traceless/Y track/DGRSZ tracked/U tract/MSV tractability/I tractable/AI tractor/AMS trade/DGRSZ trademark/MS tradeoff/MS tradesman tradition/MS traditional/Y traffic/MS trafficked trafficker/MS trafficking tragedy/MS tragic tragically trail/DGJRSZ train/DGRSZ trained/AU trainee/MS trait/MS traitor/MS trajectory/MS tramp/DGRS trample/DGRS trance/GMS tranquil/PY transact/DGS transaction/MS transceiver/MS transcend/DGS transcendent/Y transcontinental transcribe/DGRSZ transcript/MS transcription/MS transfer/MS transferability transferable transferal/MS transference transferral/MS transferred transferrer/MS transferring transfinite transform/DGRSZ transformable transformation/MS transformational transformed/U transgress/DGSV transgression/MS transience transiency transient/SY transistor/MS transit/DGSV transition/DGMS transitional/Y transitive/IPY transitivity transitory/PY translatability translatable translate/DGNSVX translated/AU translational translator/MS translucent/Y transmission/AMS transmit/AS transmittal transmitted/A transmitter/MS transmitting/A transmogrify/N transparency/MS transparent/PY transpire/DGS transplant/DGRS transport/DGRSZ transportability transportation/S transpose/DGS transposed/U transposition/MS trap/MS trapezoid/MS trapezoidal trapped trapper/MS trapping/S trash/DGRS traumatic travail/S travel/S traversal/MS traverse/DGRS travesty/MS tray/MS treacherous/PY treachery/MS tread/DGRS treason treasure/DGRS treasury/MS treat/DGRSZ treated/AU treatise/MS treatment/MS treaty/MS treble/DGS tree/DMS treehouse/MS treetop/MS trek/MS tremble/DGRS tremendous/PY tremor/MS trench/DRSZ trend/GS trespass/DRSZ tress/DMS trial/MS triangle/MS triangular/Y tribal/Y tribe/MS tribunal/MS tribune/MS tributary tribute/GMS trichotomy trick/DGRS trickle/DGS tricky/PRTY tried/AU trifle/DGRS trigger/DGS trigonometric trigonometry trihedral trill/DR trillion/HS trim/PRSY trimmed trimmer trimmest trimming/S trinket/DMRS trip/MSY triple/DGS triplet/MS triply/N triumph/DGS triumphal triumphantly trivia trivial/Y triviality/S trod/U troff/MR Trojan/MS troll/DGMS trolley/DMS troop/DGRSZ trophy/DGMS tropic/MS tropical/Y trot/S trouble/DGRS troubled/U troublemaker/MS troubleshoot/DGRSZ troublesome/PY trough/S trouser/DS trout/S trowel/MS truant/MS truce/G truck/DGRSZ Trudeau/M trudge/DGRS true/DGPRST truism/MS truly/U trump/DS trumpet/DGRSZ trumpeter/MS truncate/DGNSX truncation/MS trunk/DMS trust/DGRS trusted/U trustee/DMS trustful/PY trusting/Y trustworthiness/U trustworthy/PY trusty/PRS truth/S truthful/PUY try/ADGRSZ trying/Y tty/M ttys tub/DGMRSZ tube/DGRSZ tuberculosis tuck/DGRS tucker/DG Tuesday/MS tuft/DMRS tug/S tuition/IS tulip/MS tumble/DGRSZ tumult/MS tumultuous/PY tunable/P tune/DGJRSZ tunic/MS tuning/MS tunnel/S tuple/MS turban/DMS turbulence/M turbulent/Y turf Turing/M turkey/MS turmoil/MS turn/DGJRSZ turnable/A turnip/MS turnkey/S turnover/S turpentine turquoise turret/DMS turtle/GMS tutor/DGS tutored/U tutorial/MS TV TV's twain twang/G twas tweak/DGRS tweed tweezer/S twelfth/S twelve/S twenty/HS twice twig/MS twilight/MS twill/DG twin/DGMRS twine/DGRS twinkle/DGRS twirl/DGRS twirling/Y twist/DGRSZ twisted/U twit/MS twitch/DGR twitter/DGR two/MS twofold tying/U Tyler/M type/DGMRS typed/AU typedef/S typewriter/MS typhoid typical/PY typify/DGNS typist/MS typographic typographical/Y typography typos tyranny tyrant/MS UART ubiquitous/PY ubiquity UCB UCB's UCLA ugh ugly/PRTY ulcer/DGMS ultimate/PY Ultrix/M umbrella/MS umpire/DGMS unabashed/Y unabated/Y unable unacceptable unaccustomed/Y unacknowledged unadulterated/Y unalienability unalienable unalterable/P unalterably unambiguous/Y unambitious unanimous/Y unanticipated/Y unary unassailable/P unassuming/P unattainability unattainable unavailability unavailable unavailing/PY unaware/PSY unbecoming/PY unbelieving/Y unbiased/P unblinking/Y unblock/DGS unbound/D unbounded/P unbreakable unbroken unbudging/Y uncanny/PY unceasing/Y uncertain/PY unchangeable unchanging/PY uncle/MS unclean/PY uncleanly/P unclear/DY unclouded/Y uncomfortable uncommon/PY uncomplimentary uncomprehending/Y uncomputability/M unconcerned/PY unconditional/Y unconfirmed unconnected unconscious/PY unconstrained uncool/D uncooperative uncouth/PY uncover/DGS undaunted/Y undecided undefinability undefined/P undelete/D undeniable/P undeniably under/Y underbrush underdone underestimate/DGNSX underflow/DGS underfoot undergo/G undergoes undergone undergrad/MS undergraduate/MS underground/R underlie/S underline/DGJS underling/MS underly/GS underlying/Y undermine/DGS underneath underpayment/MS underpinning/S underplay/DGS underscore/DS understand/GJS understandability understandable understandably understanding/SY understated understood undertake/GJRSZ undertaken undertaker/MS undertip/S undertipped undertipping undertook underway underwear underwent underworld underwrite/GRSZ undetermined undeviating/Y undiplomatic undo/GJR undoubted/Y undress/DGS undue undumper/M uneasy/PY uneconomical unedifying unemployment unending/Y unendurable/P unequal/Y unequivocal/Y unessential unethical/Y uneven/PY uneventful/Y unextended unfading/Y unfair/PY unfaith unfaithful/PY unfamiliar/Y unfamiliarity unfashionable unfeigned/Y unfit/PY unfixed unflinching/Y unfold/DGS unforgeable unforgiving/P unfortunate/SY unfriendly/P ungainly/P ungrammatical unguessable unhallow/D unhappy/PRTY unhealthy/PY unhelm unicorn/MS unicycle/DGMS unicyclist/MS unidirectional/Y unidirectionality uniform/DGPSY uniformity/S unify/DGNRSXZ unilluminating unimaginable unimportant uninhibited/PY unintended uninteresting/Y uninterrupted/PY union/AMS unique/PY unison unit/DGMRSV unite/DGRSV united/Y unity/MS univalve/MS universal/PSY universality universe/MS university/MS Unix/M UNIX's unjam unjust/PY unkind/PY unkindly/P unknown/S unleash/DGS unless unlike/PY unlikely/P unlimited/Y unlink/DGS unload/DGRSZ unlock/DGS unlucky/PY unmanageable unmanageably unmannered/Y unmarried/S unmentionable/S unmerciful/Y unmistakably unmitigated/PY unmodifiable unmount/DGS unmountable unnatural/PY unnecessary/Y unnerve/DGS unnerving/Y unobservable/S unofficial/Y unpack/DGRS unperturbed/Y unpopular unprecedented/Y unprincipled/P unprovable unpublishable unravel/S unread unreadable unreal unrecordable unrelated unrelenting/Y unreliable unreported unrest unrestrained/PY unrestrictive unroll/DGS unruly/P unsafe/Y unsatisfactory/Y unsatisfying unseemly unsettled/P unsettling/Y unsociable/P unsophisticated unsound/DPY unstable/P unstamped unsteady/PY unstinting/Y unsuccessful/Y unsuitable unsure untangle/DGRS unthinkable untidy/PY untie/DS until untimely/P untouchable/MS untoward/PY untraceable untrue untruth unvarying unwashed/P unwearied/Y unwelcome unwholesome/Y unwieldy/PY unwilling/PY unwind/GRSZ unwise/RTY unwitting/Y unworthy/PY unwound/D unwrap/S unwrapping unyielding/Y up/S upbraid/R upbringing update/DGRS upfield upgrade/DGS upheld uphill uphold/GRSZ upholster/DGRSZ upholstering/A upkeep upland/RS uplift/DGRS upload/DGS upon upper/S uppermost upright/PY uprising/MS uproar uproot/DGRS upset/S upsetting upshot/MS upside/S upstairs upstream upturn/DGS upward/PSY urban urchin/MS urge/DGJRS urgent/Y urinate/DGNS urine urn/GMS us/DGRSZ usability usable/AU usably usage/S USC USC's use/DGRSZ used/AU useful/PY useless/PY Usenet/M Usenix/M user/MS USG/S USG's usher/DGS usual/PUY usurp/DR Utah/M utensil/MS utility/MS utmost utopian/MS utter/DGRSY utterance/MS uttered/U uttermost uucp/M vacancy/MS vacant/PY vacate/DGNSX vacation/DGRSZ vacillate/DGNSX vacillating/Y vacillator/MS vacuo vacuous/PY vacuum/DGS vagabond/MS vagary/MS vagina/MS vagrant/SY vague/PRTY vainly vale/MS valedictorian/M valence/MS valentine/MS valet/MS valiant/PY valid/IPY validate/DGINSX validated/AI validates/AI validation/AI validity/I valley/MS valuable/PS valuably/I valuation/MS valuator/S value/DGRSZ valued/AU values/A valve/DGMS van/DMS vane/DMS Vanessa/M vanilla vanish/DGRS vanishing/Y vanity/S vanquish/DGRS vantage/S VAR variability/I variable/MPS variably/I variance/MS variant/ISY variation/MS varied/Y variety/MS various/PY varnish/DGMRSZ varnished/U vary/DGJRS varying/SY vase/MS vassal/S vast/PRTY vat/MS vaudeville vault/DGRS vaunt/DR Vax/M VCR veal/AGR vector/DGMS veer/DGS veering/Y vegetable/MS vegetarian/MS vegetate/DGNSV vegetative/PY vehemence vehement/Y vehicle/MS vehicular veil/DGSU vein/DGRS velocity/MS velvet vend/GR vendor/MS venerable/P vengeance venison venom venomous/PY vent/DGRS ventilate/DGNSVX ventilated/U ventral/Y ventricle/MS Ventura/M venture/DGJRSZ veracity/I veranda/DMS verb/DGMS verbal/Y verbose/PY verdict/S verdure/D verge/RS verifiability verifiable/P verified/AU verifier/MS verify/DGNRSXZ veritable/P vermin versa versatile/PY versatility verse/ADGNRSX versus vertebrate/MNS vertex/S vertical/PSY vertices very/RTY vessel/MS vest/DGIS vestige/MS vestigial/Y veteran/MS veterinarian/MS veterinary veto/DGR vetoes vetting/A vex/DGS vexation vexed/Y vi/DMRS via viability/I viable/IU viably vial/MS vibrate/DGNSX vice/GMS viceroy vicinity/S vicious/PY vicissitude/MS victim/MS victor/MS victorious/PY victory/MS victual/S video/S videotape/DGMS vie/DRS view/DGJRSZ viewable/U viewer/AMS viewpoint/MS vigilance vigilant/Y vigilante/MS vignette/DGMRS vigorous/PY vii viii vile/PRTY vilify/DGNRSX villa/MS village/MRSZ villain/MS villainous/PY villainy vindictive/PY vine/GMS vinegar/S vineyard/MS vintage/RS violate/DGNSVX violator/MS violence violent/Y violet/MS violin/MS violinist/MS viper/MS viral/Y virgin/MS Virginia/M virginity virtual/Y virtue/MS virtuoso/MS virtuous/PY virus/MS visa/DGS visage/D viscosity/S viscount/MS viscous/PY visibility/S visible/IP visibly/I vision/DGMS visionary/P visit/ADGS visitation/MS visited/AU visitor/MS visor/DMS vista/DMS visual/SY vita vitae vital/SY vitality vitamin/MS vivid/PY vizier VMS VMS's vocabulary/S vocal/SY vocation/MS vocational/Y vocations/AI vogue voice/DGRSZ voiced/IU void/DGPRS volatile/PS volatility/S volcanic volcano/MS volley/DGRS volleyball/MS volt/AS voltage/S volume/DGMS voluntary/IPY volunteer/DGS vomit/DGRS vortex/S vote/DGRSVZ voter/MS votive/PY vouch/GRSZ vow/DGRS vowel/MS voyage/DGJRSZ vulgar/Y vulnerability/S vulnerable/IP vulture/MS wade/DGRSZ wafer/DGMS waffle/DGMS waft/R wag/DGRSZ wage/DGRSZ waged/U wager/DGRS wagon/MRSZ wagoner/MS wail/DGRS waist/DMRS waistcoat/DMS wait/DGRSZ waiter/MS waitress/MS waive/DGRSZ waiverable wake/DGRS waken/DGR walk/DGRSZ walkway/MS wall/DGMRS wallet/MS wallow/DGRS walnut/MS walrus/MS waltz/DGRS wan/DGPY wand/RZ wander/DGJRSZ wane/DGS want/DGRS wanted/U wanton/PRY war/GMS warble/DGRS ward/DGMNRSX warden/MS wardrobe/MS ware/GS warehouse/DGRSZ warehouser/MS warfare/MS warily/U warlike warm/DGHPRSTYZ warn/DGJRS warning/SY Warnock/M warp/DGMRS warrant/DGRS warranted/U warranty/MS warred warring warrior/MS warship/MS wart/DMS wary/PRTY was wash/DGJRSZ Washington/M wasn't wasp/MS waste/DGRSZ wasteful/PY waster/MS wasting/Y watch/DGJMRSZ watchdog/MS watched/U watchful/PY watchman watchword/MS water/DGJMRS waterfall/MS waterproof/DGPRS waterway/MS watery/PY wave/DGRSZ waveform/MS wavefront/MS wavelength/S waver/DGRS wavering/UY wax/DGNRSZ waxy/PR way/MS wayside/S wayward/PY we/DGJTV we'd we'll we're we've weak/NPRTXY weaken/DGRS weakly/P weakness/MS wealth/S wealthy/PRTY wean/DGR weapon/DMS wear/GRS wearable wearied/U wearing/Y wearisome/PY weary/DGPRSTY weasel/MS weather/DGRSY weathercock/MS weave/GRSZ web/MRS wed/S wedded wedding/MS wedge/DGS Wednesday/MS wee/D weed/DGRS week/MSY weekday/MS weekend/MRS weekly/S weep/DGRSZ Weibull/M weigh/DGJRS weighed/U weight/DGJRS weird/PRTY welcome/DGPRSY weld/DGJRSZ welfare well/DGPS wench/MRS went wept/U were weren't west/GR wester/DGY westerly/S western/MRSZ westward/S wet/PSY wetted wetter wettest wetting whack/DGRS whale/GMRS whammy/S wharf/S wharves what/MS whatchamacallit/MS whatever/M whatsoever wheat/N wheel/DGJMRSZ whelp when whence whenever where/MP whereabouts whereas whereby wherein whereupon wherever whether whew whey which whichever while/DGS whim/MS whimper/DGS whimsical/PY whimsy/DMS whine/DGRS whining/Y whip/MS whipped whipper/MS whipping/MS whirl/DGRS whirlpool/MS whirlwind whirr/G whisk/DGRSZ whisker/DS whiskey/MS whisper/DGJRS whispering/SY whistle/DGRSZ whit/DGNRTX white/DGPRSTY whiten/DGRSZ whitespace whitewash/DGR whittle/DGJRS whiz whizzed whizzes whizzing who/M whoever whole/PS wholehearted/Y wholesale/DGRSZ wholesome/PY wholly whom whomever whoop/DGRS whore/GMS whorl/DMS whose why wick/DGRS wicked/PY wide/PRTY widen/DGRS widespread widget/MS widow/DRSZ width/S wield/DGRS wife/MY wifely/P wig/MS wigwam Wilbur/M wild/GPRTY wildcat/MS wilder/P wile/DGS will/DGJRS willed/U willful/PY willing/PSY Willisson/M willow/MRS Wilson/M wilt/DGS wily/PRY win/DGRSZ wince/DGS wind/DGJRSZ winding/MS windmill/GMS window/DGMS windy/PRY wine/DGRSZ wing/DGRSZ wink/DGRS winking/U winner/MS winning/STY winter/DGMRSY wintry/PRY wipe/DGRSZ wire/DGJRS wired/AU wireless/Y wires/A wiretap/MS wiry/PRY wisdom/S wise/DGPRSTY wish/DGRSZ wishful/PY wisp/MS wistful/PY wit/MPS witch/GS witchcraft with/RZ withal withdraw/GRS withdrawal/MS withdrawn/P withdrew wither/DGS withering/Y withheld withhold/GJRSZ withholding/MS within without withstand/GS withstood witness/DGS witnessed/U witty/PRTY wive/GS wizard/MSY woe/P woeful/Y woke wolf/MRS wolves woman/MY womanhood womanly/P womb/DMS women/MS won't wonder/DGRS wonderful/PY wondering/Y wonderland/M wonderment wondrous/PY wont/DG wonted/PUY woo/DGRS wood/DGMNS woodchuck/MS woodcock/MS wooden/PY woodland/R woodman woodpecker/MS woods/R woodwork/GR woody/PR woof/DGRSZ wool/DS word/DGJMS wordy/PRY wore work/DGJMRSZ workable/P workably workaround/MS workbench/MS workbook/MS worker/MS workhorse/MS workingman workload/MS workman/Y workmanship workmen/M workshop/MS workstation/MS world/MSYZ worldly/PU worldwide worm/DGMRS worn/U worried/Y worrisome/PY worry/DGRSZ worrying/Y worse/R worship/S worshipful/PY worst/D worth/GS worthless/PY worthwhile/P worthy/PRSTY would/T wouldn't wound/DGS wove woven/U wrangle/DGRSZ wrap/MS wrapped/U wrapper/MS wrapping/S wraps/U wrath wreak/S wreath/DGS wreck/DGRSZ wreckage wren/MS wrench/DGS wrenching/Y wrest/DGRS wrestle/DGJRS wretch/DS wretched/PY wriggle/DGRS wring/GRS wrinkle/DGS wrinkled/U wrist/DMS wristwatch/MS writ/GJMRSZ writable/U write/GJRSZ writer/MSY writhe/DGS written/AU wrong/DGPRSTY wrote/A wrought/I wrung Xenix/M Xeroxed Xeroxes Xeroxing xi xii xiii xiv xix xv xvi xvii xviii xx yacc/M Yamaha/M yank/DGS yard/DGMS yardstick/MS yarn/DGMS yawn/GRS yawning/Y yea/S yeah year/MSY yearn/DGJRS yearning/SY yeast/MS yecch yell/DGRS yellow/DGPRST yellowish yelp/DGRS Yentl/M yeoman/Y yeomen yes/S yesterday/MS yet yield/DGRS yielded/U yielding/U yoke/GMS yon yonder York/MRSZ you/H you'd you'll you're you've young/PRTY youngster/MS your/MS yourself yourselves youth/MS youthful/PY yuck Yugoslavian/MS yummy/RT yuppie/MS zap/S zapped zapping zeal Zealand/MRZ Zealander/MS zealous/PY zebra/MS zenith zero/DGHS zeroes zest/R zigzag zinc/M zodiac/S zombie/MS zonal/Y zone/DGRSY zoo/MS zookeeper/MS zoological/Y zoom/DGS Zulu/MS ispell-3.4.02/languages/english/PaxHeaders.22185/msgs.h0000644000000000000000000000013213776176153017367 xustar0030 mtime=1610153067.091920914 30 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/languages/english/msgs.h0000444003214100001440000003773113776176153020453 0ustar00geofffaculty00000000000000#ifndef MSGS_H_INCLUDED #define MSGS_H_INCLUDED /* * $Id: msgs.h,v 1.48 2021-01-08 16:44:27-08 geoff Exp $ * * Copyright 1992, 1993, 1999, 2001, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */ /* * Messages header file. * * This file contains all text strings that are written by any of the * C programs in the ispell package. The strings are collected here so that * you can have the option of translating them into your local language for * the benefit of your users. * * Anyone who goes to the effort of making a translation may wish to return * the translated strings to me, geoff@ITcorp.com, so that I can include * them in a later distribution under #ifdef control. * * Besides the strings in this header file, you may also want to translate * the strings in version.h, which give the version and copyright information. * However, any translation of these strings MUST accurately preserve the * legal rights under international law; you may wish to consult a lawyer * about this since you will be responsible for the results of any * incorrect translation. * * Most of the strings below are simple printf format strings. If the printf * takes more than one parameter, the string is given as a parameterized * macro in case your local language needs a different word order. */ /* * $Log: msgs.h,v $ * Revision 1.48 2021-01-08 16:44:27-08 geoff * Conditionalize the help messages so that warnings in correct.c go away. * * Revision 1.47 2020-12-30 22:20:19-08 geoff * Add the illegal-option message. * * Revision 1.46 2008-02-21 22:19:19-08 geoff * Improve the hash overflow message. * * Revision 1.45 2005/04/28 00:19:48 geoff * Remove obsolete messages related to the count file. * * Revision 1.44 2005/04/26 23:57:22 geoff * Add double-inclusion protection * * Revision 1.43 2005/04/20 23:06:32 geoff * Add a new message and tweak an old one. * * Revision 1.42 2005/04/13 22:52:37 geoff * Update the license. Improve a couple of messages. * * Revision 1.41 2001/09/06 00:34:38 geoff * Many changes from Eli Zaretskii to support DJGPP compilation. * * Revision 1.40 2001/07/25 21:51:47 geoff * *** empty log message *** * * Revision 1.39 2001/07/23 22:11:08 geoff * *** empty log message *** * * Revision 1.38 2001/07/23 20:43:37 geoff * *** empty log message *** * * Revision 1.37 2000/11/14 07:27:04 geoff * *** empty log message *** * * Revision 1.36 1999/01/07 01:58:14 geoff * Update the copyright. * * Revision 1.35 1999/01/03 01:51:19 geoff * Document the -F switch, and add messages needed in support of it. Also * fix the text of PARSE_Y_BAD_DEFORMATTER. * * Revision 1.34 1999/01/02 23:22:18 geoff * Add the -k switch * * Revision 1.33 1998/07/06 07:04:07 geoff * Clean up some minor problems in messages. Add DEFMT_C_NO_SPACE, and remove * PARSE_Y_8_BIT. * * Revision 1.32 1995/11/08 05:09:32 geoff * Fix the usage message to document the -h flag, and to document (mostly * by implication) the new interactive mode. * * Revision 1.31 1994/12/27 23:08:57 geoff * Add a message to be issued if a word contains illegal characters. * * Revision 1.30 1994/10/25 05:46:40 geoff * Improve a couple of error messages relating to affix flags. * * Revision 1.29 1994/10/04 03:46:23 geoff * Add a missing carriage return in the help message * * Revision 1.28 1994/09/16 05:07:00 geoff * Add the BAD_FLAG message, and start a sentence in another message with * an uppercase letter. * * Revision 1.27 1994/07/28 05:11:38 geoff * Log message for previous revision: add BHASH_C_ZERO_COUNT. * * Revision 1.26 1994/07/28 04:53:49 geoff * * Revision 1.25 1994/05/24 04:54:36 geoff * Add error messages for affix-flag checking. * * Revision 1.24 1994/01/25 07:12:42 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ /* * Produce either a CR or an empty string, depending on whether * stderr is a terminal device or not. Used when the message * could be printed to a redirected stream, to avoid the pesky ^M. */ #define MAYBE_CR(stream) (isatty (fileno (stream)) ? "\r" : "") /* * The following strings are used in numerous places: */ #define BAD_FLAG "%s\nIllegal affix flag character '%c'%s\n" #define CANT_OPEN "Can't open %s%s\n" #define CANT_CREATE "Can't create %s%s\n" #define WORD_TOO_LONG(w) "%s\nWord '%s' too long at line %d of %s, truncated%s\n", \ MAYBE_CR (stderr), w, __LINE__, __FILE__, \ MAYBE_CR (stderr) /* * The following strings are used in buildhash.c: */ #define BHASH_C_NO_DICT "No dictionary (%s)\n" #define BHASH_C_ZERO_COUNT "No words in dictionary\n" /* I think this message looks better when it's nearly 80 characters wide, * thus the ugly formatting in the next two defines. GK 9-87 */ #define BHASH_C_BAFF_1(max, excess) \ " Warning: this language table may exceed the maximum total affix length\nof %d by up to %d bytes. You should either increase MAXAFFIXLEN in local.h\nor shorten your largest affix/strip string difference. (This is the\n", \ max, excess #define BHASH_C_BAFF_2 \ "difference between the affix length and the strip length in a given\nreplacement rule, or the affix length if there is no strip string\nin that rule.)\n" #define BHASH_C_OVERFLOW "Hash table overflowed by %d word(s).\nYou probably need to run your dictionary through munchlist.\n" #define BHASH_C_CANT_OPEN_DICT "Can't open dictionary\n" #define BHASH_C_NO_SPACE "Couldn't allocate hash table\n" #define BHASH_C_COLLISION_SPACE "\ncouldn't allocate space for collision\n" #define BHASH_C_COUNTING "Counting words in dictionary ...\n" #define BHASH_C_WORD_COUNT "\n%d words\n" #define BHASH_C_USAGE "Usage: buildhash [-s] dict-file aff-file hash-file\n\tbuildhash -c count aff-file\n" /* * The following strings are used in correct.c: */ #define CORR_C_HELP_1 "Whenever a word is found that is not in the dictionary,%s\n" #define CORR_C_HELP_2 "it is printed on the first line of the screen. If the dictionary%s\n" #define CORR_C_HELP_3 "contains any similar words, they are listed with a number%s\n" #define CORR_C_HELP_4 "next to each one. You have the option of replacing the word%s\n" #define CORR_C_HELP_5 "completely, or choosing one of the suggested words.%s\n" /* You may add HELP_6 through HELP_9 if your language needs more lines */ #if 0 #define CORR_C_HELP_6 "" #define CORR_C_HELP_7 "" #define CORR_C_HELP_8 "" #define CORR_C_HELP_9 "" #endif #define CORR_C_HELP_COMMANDS "%s\nCommands are:%s\n%s\n" #define CORR_C_HELP_R_CMD "R Replace the misspelled word completely.%s\n" #define CORR_C_HELP_BLANK "Space Accept the word this time only.%s\n" #define CORR_C_HELP_A_CMD "A Accept the word for the rest of this session.%s\n" #define CORR_C_HELP_I_CMD "I Accept the word, and put it in your private dictionary.%s\n" #define CORR_C_HELP_U_CMD "U Accept and add lowercase version to private dictionary.%s\n" #define CORR_C_HELP_0_CMD "0-n Replace with one of the suggested words.%s\n" #define CORR_C_HELP_L_CMD "L Look up words in system dictionary.%s\n" #define CORR_C_HELP_X_CMD "X Write the rest of this file, ignoring misspellings,%s\n and start next file.%s\n" #define CORR_C_HELP_Q_CMD "Q Quit immediately. Asks for confirmation.%s\n Leaves file unchanged.%s\n" #define CORR_C_HELP_BANG "! Shell escape.%s\n" #define CORR_C_HELP_REDRAW "^L Redraw screen.%s\n" #define CORR_C_HELP_SUSPEND "^Z Suspend program.%s\n" #define CORR_C_HELP_HELP "? Show this help screen.%s\n" #define CORR_C_HELP_TYPE_SPACE "-- Type space to continue --" #define CORR_C_FILE_LABEL " File: %s" #define CORR_C_READONLY "[READONLY]" #define CORR_C_MINI_MENU "[SP] R)epl A)ccept I)nsert L)ookup U)ncap Q)uit e(X)it or ? for help\r\n" #define CORR_C_CONFIRM_QUIT "Are you sure you want to throw away your changes? " #define CORR_C_REPLACE_WITH "Replace with: " #define CORR_C_LOOKUP_PROMPT "Lookup string ('*' is wildcard): " #define CORR_C_MORE_PROMPT "-- more --" #define CORR_C_BLANK_MORE "\r \r" #define CORR_C_END_LOOK "--end--" #define CORR_C_SHORT_SOURCE "ispell: unexpected EOF on unfiltered version of input%s\n" /* * The following strings are used in defmt.c: */ #define DEFMT_C_TEX_MATH_ERROR "***ERROR in parsing TeX math mode!%s\n" #define DEFMT_C_LR_MATH_ERROR "***ERROR in LR to math-mode switch.%s\n" #define DEFMT_C_NO_SPACE "Ran out of space building keyword list%s\n" /* * The following strings are used in icombine.c: */ #define ICOMBINE_C_BAD_TYPE "icombine: unrecognized formatter type '%s'\n" #define ICOMBINE_C_USAGE "Usage: icombine [-T suffix] [aff-file] < wordlist\n" /* * The following strings are used in ispell.c: */ #define ISPELL_C_USAGE1 "Usage: %s [-dfile | -pfile | -wchars | -Wn | -t | -n | -H | -x | -b | -S | -B | -C | -P | -m | -Lcontext | -M | -N | -Ttype | -ktype kws | -Fpgm | -V] file .....\n" #define ISPELL_C_USAGE2 " %s [-dfile | -pfile | -wchars | -Wn | -t | -n | -H | -Ttype | -ktype kws | -Fpgm] -l\n" #ifndef USG #define ISPELL_C_USAGE3 " %s [-dfile | -pfile | -ffile | -Wn | -t | -n | -H | -s | -B | -C | -P | -m | -Ttype | -ktype kws | -Fpgm] [-a | -A]\n" #else #define ISPELL_C_USAGE3 " %s [-dfile | -pfile | -ffile | -Wn | -t | -n | -H | -B | -C | -P | -m | -Ttype | -ktype kws | -Fpgm] [-a | -A]\n" #endif #define ISPELL_C_USAGE4 " %s [-dfile] [-wchars | -Wn] -c\n" #define ISPELL_C_USAGE5 " %s [-dfile] [-wchars] -e[1-4]\n" #define ISPELL_C_USAGE6 " %s [-dfile] [-wchars] -D\n" #define ISPELL_C_USAGE7 " %s -v\n" #define ISPELL_C_TEMP_DISAPPEARED "temporary file disappeared or is unreadable (%s)%s\n" #define ISPELL_C_BAD_TYPE "ispell: unrecognized formatter type '%s'\n" #define ISPELL_C_NO_FILE "ispell: specified file does not exist\n" #define ISPELL_C_NO_FILES "ispell: specified files do not exist\n" #define ISPELL_C_CANT_WRITE "Warning: Can't write to %s%s\n" #define ISPELL_C_OPTIONS_ARE "Compiled-in options:\n" #define ISPELL_C_UNEXPECTED_FD "ispell: unexpected fd while opening '%s'%s\n" #define ISPELL_C_NO_OPTIONS_SPACE "ispell: no memory to read default options\n" /* * The following strings are used in lookup.c: */ #define LOOKUP_C_CANT_READ "Trouble reading hash table %s%s\n" #define LOOKUP_C_NULL_HASH "Null hash table %s%s\n" #define LOOKUP_C_SHORT_HASH(name, gotten, wanted) \ "Truncated hash table %s: got %d bytes, expected %d%s\n", \ name, gotten, wanted #define LOOKUP_C_BAD_MAGIC(name, wanted, gotten) \ "Illegal format hash table %s - expected magic 0x%x, got 0x%x%s\n", \ name, wanted, gotten #define LOOKUP_C_BAD_MAGIC2(name, wanted, gotten) \ "Illegal format hash table %s - expected magic2 0x%x, got 0x%x%s\n", \ name, wanted, gotten #define LOOKUP_C_BAD_OPTIONS(gotopts, gotchars, gotlen, wantedopts, wantedchars, wantedlen) \ "Hash table options don't agree with buildhash - 0x%x/%d/%d vs. 0x%x/%d/%d%s\n", \ gotopts, gotchars, gotlen, \ wantedopts, wantedchars, wantedlen #define LOOKUP_C_NO_HASH_SPACE "Couldn't allocate space for hash table%s\n" #define LOOKUP_C_BAD_FORMAT "Illegal format hash table%s\n" #define LOOKUP_C_NO_LANG_SPACE "Couldn't allocate space for language tables%s\n" /* * The following strings are used in makedent.c: */ #define MAKEDENT_C_NO_WORD_SPACE "%s\nCouldn't allocate space for word '%s'%s\n" #define MAKEDENT_C_BAD_WORD_CHAR "%s\nWord '%s' contains illegal characters%s\n" /* * The following strings are used in parse.y: */ #define PARSE_Y_NO_WORD_STRINGS "wordchars statement may not specify string characters" #define PARSE_Y_UNMATCHED "Unmatched charset lengths" #define PARSE_Y_NO_BOUNDARY_STRINGS "boundarychars statement may not specify string characters" #define PARSE_Y_LONG_STRING "String character is too long" #define PARSE_Y_NULL_STRING "String character must have nonzero length" #define PARSE_Y_MANY_STRINGS "Too many string characters" #define PARSE_Y_NO_SUCH_STRING "No such string character" #define PARSE_Y_MULTIPLE_STRINGS "Alternate string character is already defined" #define PARSE_Y_WRONG_STRING_COUNT \ "Alternate string characters must map one-to-one to base string characters" #define PARSE_Y_LENGTH_MISMATCH "Upper and lower versions of string character must be same length" #define PARSE_Y_WRONG_NROFF "Incorrect character count in nroffchars statement" #define PARSE_Y_WRONG_TEX "Incorrect character count in TeXchars statement" #define PARSE_Y_DOUBLE_COMPOUND "Compoundwords option may only appear once" #define PARSE_Y_LONG_FLAG "Flag must be single character" #define PARSE_Y_BAD_FLAG "Flag must be alphabetic" #define PARSE_Y_DUP_FLAG "Duplicate flag" #define PARSE_Y_BAD_OPTION "Illegal option" #define PARSE_Y_NO_SPACE "Out of memory" #define PARSE_Y_NEED_BLANK "Single characters must be separated by a blank" #define PARSE_Y_MANY_CONDS "Too many conditions; 8 maximum" #define PARSE_Y_EOF "Unexpected EOF in quoted string" #define PARSE_Y_LONG_QUOTE "Quoted string too long, max 256 characters" #define PARSE_Y_ERROR_FORMAT(file, lineno, error) \ "%s line %d: %s\n", file, lineno, error #define PARSE_Y_MALLOC_TROUBLE "yyopen: trouble allocating memory\n" #define PARSE_Y_UNGRAB_PROBLEM "Internal error: ungrab buffer overflow" #define PARSE_Y_BAD_DEFORMATTER "Deformatter must be 'plain', 'nroff', 'tex', or 'sgml'" #define PARSE_Y_BAD_NUMBER "Illegal digit in number" /* * The following strings are used in term.c: */ #define TERM_C_SMALL_SCREEN "Screen too small: need at least %d lines\n" #define TERM_C_NO_BATCH "Can't deal with non-interactive use yet.\n" #define TERM_C_CANT_FORK "Couldn't fork, try later.%s\n" #define TERM_C_TYPE_SPACE "\n-- Type space to continue --" /* * The following strings are used in tgood.c: */ #define TGOOD_C_NO_SPACE "Out of memory while generating expansions" /* * The following strings are used in tree.c: */ #define TREE_C_CANT_UPDATE "Warning: Cannot update personal dictionary (%s)%s\n" #define TREE_C_NO_SPACE "Ran out of space for personal dictionary%s\n" #define TREE_C_TRY_ANYWAY "Continuing anyway (with reduced performance).%s\n" /* * The following strings are used in unsq.c: */ #define UNSQ_C_BAD_COUNT "Illegal count character 0x%x\n" #define UNSQ_C_SURPRISE_EOF "Unexpected EOF\n" #endif /* MSGS_H_INCLUDED */ ispell-3.4.02/languages/english/PaxHeaders.22185/american.20000644000000000000000000000013213770761353020103 xustar0030 mtime=1608770283.532186901 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/english/american.20000444003214100001440000012042113770761353021154 0ustar00geofffaculty00000000000000abnormalize/S abolitionize/S absolutization/MS absolutize/S accessorize acclimatizable/MS accouter/DGS acculturize acetonization/MS acetonize/S achromatization achromatize/DGS acidize/S acronymize/S actionize/S activize/S adrenalize/S adulterize/S adverbialize/S aerosolization aestheticize/S Africanization/MS Africanize/DGS Afrikanerization/M Afrikanerize/DGS agatize/S agenize aggrandizable/MS aggrandization aggrandize/DGRSZ agnize/DGS agrarianize/S albumenization albumenize/DGS albuminization/MS albuminize/S alchemize alcoholizable/MS alcoholization/MS alcoholize/S algebraization/MS algebraize/S alienize/S alkalinization/MS alkalinize/S alkalization alkalize/DGS allegorization allegorize/DGRS alphabetization/MS alternize/S aluminization aluminize/DGS amalgamatize/S amalgamization/MS amalgamize/S Americanization/MS Americanize/GRSZ amor/MS amoralize/S amorism/MS amoristic/S amorphization amorphize amortizable/MS amortizement/MS anagrammatization anagrammatize analogize/S analyzation anarchize/S anathematization anathematize/DGS anatomize anemically anesthesiologist anesthesiology anesthetist anesthetization/MS angelicize/S angelize/S Anglicanize/S anglicization/MS anglicize/DS angularization/MS angularize/S anhydridization/MS anhydridize/S animalization/MS animalize/DGS animalizes/A annalize/S annualization anodization antagonization/MS anthologization anthologize/DGRS anthracitization/MS anthropomorphization anthropomorphize/DGS anticatalyzer/MS anticentralization/MS anticize/S antiepicenter/MS antifertilizer/MS antilabor/MS antioxidizer/MS antioxidizing/MS antipathize/S antiquarianize/S antirumor/MS antisensitize/RSZ antisensitizer/MS antisepticize/S antiseptize/S antithesize/S anviled anviling aphorize/DGRSZ apostatization apostatize/DGS apostrophize/DGS apotheosize appareling appetize/DSZ appetizement/MS Arabianize/S Arabicize/S arabization arabize/DGS arbores arborization arborize/DGS arcticize/S arithmetization/MS armorless aromatization aromatize/DGS arsenicize/S arterialization/MS arterialize/DGS artificialize/S Aryanization Aryanize/DGS asafetida asepticize/S Asiaticization/MS Asiaticize/S Assyrianize/S astigmatizer/MS asynchronize/DGS atomizability atomizable atticize/S attitudinization attitudinize/DGS Australianize/S Austrianize/S autoimmunization autoionization automatization/MS automatize/S autotomize avianize azotization azotize/DGS Babelize/S Babylonize/S bachelorize/S baconize/S bacterize balladize/S balsamize/S bantamize/S baptizable/MS baptizement/MS barbarianize/S barbarization barbarize/DGS baronize/S barycenter bastardization/MS beaverize/S beclamor/DGS becudgeled becudgeling bedlamize/S bedriveled bedriveling bejeweled bejeweling bemedaled Berlinize/S Bessemerize/S bestialize/DGS beveler/S bichromatize/S bicolor/D bimetalist bimetalistic biographize/S biologize/S bipolarization bipolarize/S Birminghamize/S bister/D bisulfate bisulfide bisulfite bituminization bituminize/DGS bolshevize bonderize borize/S Boswellize/S botanize/DGS boulevardize/S bourbonize/AS bowdlerization boweled boweling brominize/S brutalization/MS bureaucratize/DS busheler/S Byronize/S Byzantinize/S cadaverize/S cadmiumize/S Caesarize/S Calvinize/S Canadianization/MS Canadianize/S canaler/S canalization/AMS canalize/DGS cancelable cancelous cannibalization/MS canonization/MS canonize/GRSZ canonizes/U capitalizable/MS Caponization caponize/DGS capsulization capsulize/DGS caracoled caracoling caramelization/MS caramelize/DGS carbolization carbolize/DGS carbonatization/MS carbonizable/MS carburization carburize/DGS carnalize/S caroled caroler/S caroling cartelization/MS cartelize/S castorized/MS catabolize/DGS cataloguize/S catalyze/RSZ catalyzer/MS catechizable/MS catechization/MS catechize/DGRSZ catheterization/MS catheterize/S Catholicization catholicize/RSZ Catholicized catholicizes/U Catholicizing causticization/MS causticize/RSZ causticizes/A cauterization/MS cavilation caviled caviling/S celestialize/S Celticize/S centerable/MS centerboard centerfold centerless centiliter centrifugalization/MS centrifugalize/S cephalization cerebralization/MS cerebralize/S ceremonialize/S chameleonize/S championize/S channelization/MS channelize/S chattelization/MS chattelize/S cheerfulize/S chemicalization/MS chemicalize/S chiseling/S chloridize/S chlorinize/S chloroformization/MS chloroformize/S chorization/MS Christianization/MS Christianize/RSZ chromatize/S chromicize/S chromize/DGS chronologize/S Ciceronianize/S cinchonize cinematize circularization/MS circularize/DGRSZ citizenize/S civilianization/S civilianize/DGS civilizable/MSU clangor/DGMS classicalize/S classicization classicize/DGS clericalize/SU climatize/S coalize/RSZ cocainization/MS cocainize/S coeducationalize/S coenamor/DGS coequalize/S cognizably cognize/DGRSZ collateralize collectivization/MS collectivize/DS colloquialize/S colonialize/S colonizability/MS colonizable/MS colonizationist/MS colorability/MS colorable/MPSU colorably/SU colorama colorcast/RZ colorfast/P colorific colorism/MS colorist/MS coloristic/S coloristically colorization/MS colorize/S colorman colormap/MS colormen columnization/MS commercialize/DGS commoditize/DGRS commonize/S communalization/MS communalize/DGRSZ communization/MS companionize/S compartmentalization/MS compartmentize/S complementizer/MS computerizable concenter concertize/RSZ concretization/S concretize/DGS confederatize/S congenialize/S congregationalize/S conservatize/DGS consonantize/S constitutionalization/MS constitutionalize/S containerization containerize/DGS contemporization contemporize/DGS Continentalize/S controversialize/S conundrumize/S conventionalization/MS conventionalize/GS conventionalizes/U conventionize/S conversationize/S conveyorize/DGS convivialize/S copolymerization/MS copolymerize/DGS copperization/MS copperize/S coraled corbeled corbeling/S cordialize/S Corinthianize/S corporatize/DGRS corporealization/MS corporealize/S cosmopolitanization/MS cosmopolitanize/S cottonization/MS cottonize/S counselee/MS counselorship crawlerize/S creaturize/S crenelate/DNS creneled creneling Creolization Creolize/DGS cretinization/MS cretinize/S criminalization/M criticizable/MSU crofterization/MS crofterize/S cruelize/S crystallizability/MSU crystallizable/MSU Cubanize/S cudgeled cudgeler/S cudgeling/S culturization/MS culturize/S cupelation cupeled cupeler/S cupeling curarize/DGS curatize/S curricularization/MS curricularize/S cutinize/DGS cutization/MS cyclization/MS cyclize/DGS Czechization/MS dandyize/S Danization/MS Danize/S Darwinize/S dastardize/S deaconize/S deaminize decaliter/S decameter/MS decarbonization decarbonize/DGRS decarburization decarburize/DGS decasualization decentralizationist decentralize/S deciliter/S decimalization/MS decimalize/DGS decimeter/MS decolonization decolonize/DGS decolor/DGS decolorization decolorize/DRS decriminalization/M decriminalize deemphasization/M deenergize/DGRS defeminize/DGS defenseman definitization/MS definitize/DGS deflectionization/MS deflectionize/S deformalize defunctionalization/MS defunctionalize/S degenderize/DGRS deglamourize/DGRS dehumanization/MS dehypnotization dehypnotize/DGS deindustrialization/M deindustrialize deinstitutionalization/M deionization deionize/S delegitimize/DGRS delimitize/S delocalization delocalize deluster/DGS demagnetizable/MSU demagnetization/MS demagnetize/DGRSZ demagog dematerialization dematerialize/DGS demilitarization demilitarize/DGS demineralize/DGRS demobilization demobilize/DGS demonetization demonetize/DGS demonization denationalization denationalize/DGS denaturalization denaturalize/DGS denaturization/MS denaturize/RSZ denicotinize denizenize/S denominationalize/SU denormalize dentalization/MS dentalize/S denuclearization denuclearize/DGS deodorize/DGS deoxidizer departmentalization/MS departmentalize/S departmentization/MS departmentize/S depersonalize/GS depolarization/MS depolarize/DGRSZ depoliticization depoliticize/DGS depolymerization depolymerize/DGS depressurization depressurize/DGS deputationize/S deputization deputize/GS derationalization/MS derationalize/S deratization/MS derealization/M deregulationize/S desalinization desalinize desensitization/MS desensitize/DGRSZ desexualization desexualize/DGS despiritualization despiritualize despotize/S destabilization destalinize/DGS desterilize desulfurization desulfurize/DGS desynchronization detribalization/MS develed develing deviled deviling devilize/S devitalization devitalize/DGS devocalize devolatilization devolatilize/DGS diabolization diabolize/DGS diagonalization diagonalize/DGRS dialecticize/S dialist/S dialyzability/MS dialyzable/MS dialyze/RSZ dialyzer/MS diamondize/S diarrheic diarrhetic dieselization/MS dieselize/DGS differentialize/S digitalize/DGS dimensionalization dimensionalize/DGS dimerization/MS dimerize/DGS dimethylsulfoxide diminutivize/S diphthongization/MS diphthongize/SU diplomatize/S disangularize/S disauthorize/S disboweled disboweling discanonization/MS discanonize/S discolor/GM discolorization/MS discolorment/MS discretization discretize/DGS disdenominationalize/S disdiplomatize/S disemboweled disemboweling disenamor/MS disenthrall/S disequalize/MRSZ disharmonize/S disheveler disheveling dishonorable/MPS dishonorably/S dishumanize/S dishumor/DS disillusionize/RSZ disindividualize/S disinsectization dismalize/S disnaturalization/MS disnaturalize/S disorganize/GRSZ disozonize/S dispapalize/S dispauperize/S dispersonalize/S dispopularize/S disrealize/S disscepter/MS dissensualize/S dissocialize dissympathize/S disulfate disulfiram disulfuric disutilize/S divinization/MS divinize/DGS dockization/MS dockize/S doctorization/MS doctorize/S doctrinization/MS doctrinize/S documentize/S dogmatization dogmatize/R dognaped dognaping dolomitization/MS dolomitize/S dolor domesticize/S Doricize/S doweled doweler draftboard/MS draftsmanship/M dragonize/S dramatizable/MSU driveled driveler/S driveling dualization/MS dualize/SU ductilize/S easternize ebonization ebonize/DGS ecclesiasticize/S echoize/S eclecticize/S economization/MS ecstaticize/S Edenization/MS Edenize/S editorialization effectualize/S effeminatize/S egoize/RSZ Egyptianization/MS Egyptianize/S Egyptize/S egyptus elasticization elasticize/DGRSZ electricalize/S electricize/S electroanesthesia/MS electrocauterization/MS electrodialyze/RSZ electrodialyzer/MS electrogalvanize/S electrohomeopathy/MS electrolyze/DGS electromagnetizable/MS electrotonize/S elegize/DGS elementalize/S Elizabethanize/S emblematicize/S emblematization emblematize/DGS emblemize/S embolization emboweled emboweling emotionalization/MS emotionalize/DGS emotionize/S empaneled empaneling empathize/DGS emphasization/AM emulsionize/S enamelist/S enamor/DGMS enamored/MPS enamorment/MS enarbor/MS encarnalization encarnalize/DGS encolor/DGMS energization energize/GRZ Englishize/S engram/MS engrandize/S engrandizement/MS enhypostatize/S enolization/MS enolize/S ensepulcher/MS ensorceled ensorcels enthrallment/MS enthronization/MS enthronize/S entomologize/DGS envapor/MS envenomization/M Epicurize/S epigrammatization epigrammatize/DGRS Episcopalianize/S epitaphize/S epithetize/S epitomization/MS epoxidize/DGRS equestrianize/S ergotized ergotizes eroticization eroticize/DGRS Eskimoized/MS esophagus Essenize/S essentialize/S esterization/MS esterize/S esthesia esthesiometer/MS esthesis eternalization/MS eternalize/DGS eternize/DGS etherealization/MS etherealize/DGS etherization/MS etherize/DGRSZ ethicization ethicize/DGS ethnicize/S etiology/MS etymologization etymologize/DGS euhemerize eulogization/MS euphemize/DGRS euphonization euphonize/DGS Europeanize/GS evangelization/MS evangelize/DGRSZ eventualize/S evolutionize/S excursionize/S exhibitionize/S existentialize/S experimentalize/S experimentize/S extemporization/MS exteriorization/MS exteriorize/DGS externalize/DGS facsimilize/S factorize/DGS fanaticize/DGS faradization/MS faradize/DGRSZ fascisticization/MS fascisticize/S fascistization/MS fascistize/DGS fashionize/S fatalize/S favorless/S fecundize/S federalization/MS femalize/S feminization/MS feminize/DGS femtometer/MS ferreled ferreling ferritization/MS fertilizable/MSU fertilizational/MS fervorless/S fetalization/MS fetishization/MS fetishize/DGS feudalizable/MS feudalization/MS feudalize/DGS fiberization/M fiberize/DGRSZ fiberizer/MS fiberless/S fibrize/DGRSZ fictionalization fictionalize/DGS fictionization/MS fictionize/S figurize/S filmize/S fiscalization/MS fiscalize/S flamboyantize/S flanneled flanneling flavorful/Y flavorless/S flavorsome flavory Fletcherize/S floralize/S fluidization/MS fluidize/DGRS fluoridization/MS fluoridize/S fluorosulfuric focalization/MS focalize/DGS foreignization/MS foreignize/S formalizable formularization/S formularize/DGRS formulization/S formulize/DGS forumize/S fossiled fossilizable/MS fossilization/MS fossilize/GS fractionalization/M fractionalize/DGS fractionization/MS fractionize/S fragmentize/DGRS Francize/S Franklinization/MS fraternization/MS Frenchize/S frictionize/S frivoled frivoler frivoling fuelizer/MS functionalize/S functionize/S funeralize/S funneler futilize/S futurize/S Gaelicization/MS Gaelicize/S gallantize/S Gallicization Gallicize/DGS gamboled gamboling gangplow gardenize/S gaveled gaveler gaveling gelatinizability/MS gelatinizable/MSU gelatinization/MS gelatinize/DGRSZ generalizability generalizational genialize/S genteelize/S gentilization/MS gentilize/SU gentlemanize/SU geologize/DGS geometricize/S geometrize/DGS germanization/MS germanize/GRSZ ghettoization/MS ghettoize/DGS giantize/S gimbaling glacialize/S glamorization/S globalization/S globalize/DGS glottalize/S gluttonize/S glycerinize/S glycerolize/S glycogenize/S gnosticize/RSZ goddize/S goiter/S gonorrhea gonorrheal gorgonize/DGS gormandize/DGRS gospelize/S Gothicize/DGRSZ gourmandize/DGS governmentalize/DGS grammaticize/S grangerize/DGRS granitization/MS granitize/S granulize/S graphitizable graphitization/MS graphitize/S Grecianize/S grecize/DG Greekize/S grueled grueler/S gutturalization/MS gutturalize/DGS gynecocrat gynecocratic gynecologic/S gynecology/MS gyrostabilizer/MS habitualize/S hamletization/MS hamletize/S handseled handseling Hanoverianize/S Hanoverize/S hanseled hanseling harborage/S harborful harborless/S harmonizable/MS Harvardize/S Harveyize/S hatcheled hatcheling Hattize/S hazardize/S heathenization heathenize/DGS heavenize/S Hebraicize/S hebraization/S hebraize/DGS hectoliter hectometer/MS Hegelianize/S Hellenization/S Hellenize/DGS heparinize hepatize/DGS heraldize/S hereticize/S heroinize/S heroization/MS heroize/DGS heroizes/U hiccup/DGMS hirseled hirseling Hispanicization Hispanicize/DGS historicize/DGS Hollywoodize/S homeopathic homeopathically homeopathy/MS homeostasis homeostatic homeotypic hominization/M hominized homolog homologization homologize/DGRS honorability/MS honorableship/MS honorless/S hoodlumize/S hooliganize/S Hoosierize/S Hooverize/S horizontalization/MS horizontalize/S hormonize/S horrorize/S hostilize/S hotelization/MS hotelize/S houseled/U houseling/S hoveled hoveler/S hoveling hucksterize/S humanitarianize/S humanization/MS humoral humorize/S humorless/PS humorsome hurricanize/S hyalinization/MS hyalinize/S hybridizable/MS hybridization/MS hybridize/DGRSZ hybridizes/A hydrogenization/MS hydrogenize/DGS hydrolyzable/MS hydrolyze/MS hydrosulfate hydrosulfide hydrosulfite hydrosulfurous hydroxylization/MS hydroxylize/S hygienization/MS hygienize/S hyperbolize/DGS hypercatharsises hypercivilization/MS hypercivilized/MS hypercriticize/S hyperemphasize/S hyperesthesia hyperesthetic hyperimmunization/MS hyperimmunize/S hyperinsulinization/MS hyperinsulinize/S hyperoxygenize/S hyperparasitize/S hyperpolarization hyperpolarize/DGS hyperrealize/S hypersensitization/MS hypersensitize/DGS hyperspiritualizing/MS hyperthyroidization/MS hyperthyroidize/S hypervitalization/MS hypervitalize/S hyphenization/MS hyphenize/S hypnotizability/MS hypnotizable/MSU hypnotization/MS hypocenter hyposensitization/M hyposensitize hypostatization/MS hypostatize/S hyposulfite hyposulfurous hysterectomize/DGS ichneumonized/MS idiotize/S idolatrize/DGS idolization/MS Iliadize/S illegalization illegalize/DGS illegitimatize/S Illuminize/S immaterialization immaterialize/DGS immobilization/MS immoralize/S immortalizable/MS immortalization/MS immortalize/GRSZ immortalizes/U immunize/DGS impactionize/S impaneled impaneling imperialization/MS imperialize/S imperiling impersonalization/MS impersonalize/GS indigenization indigenize/DGS individualization/MS indraft industrialize/AS infantilization infantilize/DGS inferiorize/S infernalize/S infidelize/S infinitize/S informalize inhumanize initializable/U insolubilize institutionize/S instrumentalize/S insularize/S insurrectionize/S integralization/MS integralize/S intellectualization/MS intellectualize/DGRSZ intercivilization/MS intercolonization/MS intercrystallization/MS intercrystallize/S interhybridize/S interiorization interiorize/DGS interjectionalize/S interjectionize/S internationalize/GS interorganizational intraorganization/MS iodization iodize/DGRSZ Ionicization/MS Ionicize/S ionizable/MS ionization/MS ionization's/U ionizations/U Iranize/S Irishize/S ironize/S irrationalize/S irregularize/S Islamization/MS Islamize/DGS isochronization isochronize/DGS isoimmunization/MS isoimmunize/S isomerization/MS isomerize/DGS isomerizeparabolization Israelitize/S Italianization/MS Italianize/DGRSZ italicization/MS Jacobinize Japanization/MS Japanize/DGS jargonization/MS jargonize/DGS jasperize/S jeopardization Jesuitize/DGS jewelery/S jobcenter/S Jonathanization/MS journalization/MS jovialize/S judicialize/S juvenilize/S kaolinization/MS kaolinize/S kenneled/U kenneling/U keratinization keratinize/DGS kerneled kerneling ketonization/MS ketonize/S kiloliter/MS kinesthesia kyanize/DGS labelable labialization/MS labialize/DGS labializes/U labilization/MS labilize/S laborability/MS laborable/MSU laborhood/MS laborism/MS laborist/MS laborite/MS laborless/S laconize/DGS lactonized laicization/S laicize/DGS lapeled latentize/S lateralization/MS lateralize/S laterization/MS Latinization/MS Latinize/DGRSZ laureling leatherize/S legitimatize/DGS legitimization/MS legitimization's/A lethalize/S leukemia lexiconize/S libelant/S libeled libelee/S libeling libelist licenseless/S lichenization/MS lichenize/S lignitize/S Lilliputianize/S linearization/MS linenize/RSZ lingualize/S lionizable/MS lionization/MS liquidization liquidize/DGRSZ Listerize/S literalization/MS literalize/DRSZ lithographize/S localizable/MSU logicalization/MS logicalize/S logicize/DGS logorrhea/MS Londonization/MS Londonize/S louver/DS loyalize/S lumbarization/MS lunatize/S lusterless lusterware luteinization/M luteinize/DGS Lutheranize/RSZ lyophilization lyophilize/DGRS lyricize/DGS lysogenization lysogenize/DGS macadamization macadamize/DGS macarize/DGS machinization/MS machinize/S magicalize/S magnetizability/MS magnetizable/MS magnetize/GRSZ magnetizes/A mahoganize/DGS majorize/S Malayize/S malleablize/S malodor mandarinize/S Manhattanize/S mannerize/S marbleize/S marginalization marginalize/DGS marketization/M marketize/DGRS marsupialization/MS marsupialize/S martialization/MS martialize/S martyrization/MS martyrize/DGRSZ marveler masculinization/MS masculinize/DGS materialization/MS maternalize/S mathematicize/S mathematization matronize/DGS maudlinize/S mechanicalization/MS mechanicalize/S mechanizable medalist/S medalize/S medialization/MS medialize/S mediatization/MS mediatize/DGS medicalization/M medicalize/DGS medievalize/S Mediterraneanization/MS Mediterraneanize/S mediumization/MS mediumize/S melanization/M melanize/DGS melodization melodize/DGRS melodramatization melodramatize/DGS memorialization/MS memorialize/GRSZ memorizable/MS Mendelize/S mentalization/MS mentalize/S mercerization/MS mercerize/DGRSZ mercurialization/MS mercurialize/S mesmerizability/MS mesmerizable/MS mesmerization/MS mesmerize/GRSZ mesmerizes/U metabolizable/MS metabolize/GS metacenter/S metalize/DGS metallicize/S metamerization/MS metamerized/MS metaphonize/S metaphorize/S metaphysicize/S metastasize/DGS meteorization/MS meteorize/S meterstick/MS methodization/MS methodize/DGRSZ metricize/DGS metropolitanize/S Mexicanize/S microliter/MS micromillimeter/MS microminiaturization/M microminiaturize/DGRSZ micronization/MS micronize/DGS micropolarization/MS microscopize/S Midlandize/S militarization/S militarize/DGS millionize/S Miltonize/DGS mineralizable/MS mineralization/AMS mineralize/GRSZ mineralizes/A miraculize/DGS Mirandize/DGS mirrorize/S misalphabetize/S misanthropize/DGS misauthorization/MS misauthorize/S misbaptize/S miscanonize/S miscolor/DGMS misemphasization misemphasize/DGS misendeavor/MS mislabeled mislabeling mislabor/DGMS misorganization/MS misorganize/S misrealize/S misrecognize/S missionarize/S missionization missionize/DGRSZ mobilizable/MS modalize/S modernizable/MS Mohammedanization/MS Mohammedanize/DGS moisturization moisturize/DGRSZ molarization/S Molochize/S monarchize/RSZ monasticize/S mongrelization/S mongrelize/DGRS monochordize/S monologize/DGS monometalism monometalist monopolizable/MS monotonize/S monumentalization/MS monumentalize/DGS moralization/MS moralize/DGRSZ moralizing/Y moralizingly/S Moravianized/MS morbidize/S morphinization/MS morphinize/S morseled morseling morselization/MS morselize/S mortalize/S mortarize/S Moslemize/S motorization/MS multifibered/MS municipalization/MS municipalize/DGRSZ muscularize/S museumize/S musicalization/MS musicalize/S mutualization/MS mutualize/DGS myelinization/MS mysticize/SU mythicization mythicize/DGRSZ mythize/S mythologization/A mythologize/DGRS nakedize/S nanometer/MS Napoleonize/S narcotization narcotize/DG nasalize/GS naturalize/GRSZ naturalizes/U naturize/S nebularization/MS nebularize/S nebulization/S nebulize/DGRS necrotize/DGS nectarize/S Negroization/MS Negroize/S neighborless/S neighborlike/MSU neighborship/MS neologization neologize/DGS neuroticize/S Newmanize/S newspaperized/MS nickelization/MS nickelize/S nicotinize/S nightingalize/S Nipponize/S niter nitridization/MS nitridize/S nitrogenization/MS nitrogenize/DGS nodulize/S nomadization/MS nomadize/DGS nominalize/GS nonanesthetized nonapostatizing/MS noncanonization/MS noncartelized/MS noncatechizable/MS noncivilized/MS noncoloring/MS noncomputerized noncrystallizable/MS noncrystallized/MS noncrystallizing/MS nondefense/MS nondemobilization/MS nondialyzing/MS nondimensionalize/D nonfavorite/MS nonfulfillment/MS nongalvanized/MS nongelatinizing/MS nonhydrolyzable/MS nonimmunized/MS nonionized/MS nonionizing/MS nonlocalized/MS nonmagnetizable/MS nonnitrogenized/MS nonorganization/MS nonoxidizable/MS nonoxidizing/MS nonparlor/MS nonpenalized/MS nonphosphorized/MS nonpolarizable/MS nonpolarized nonpolarizing/MS nonrationalized/MS nonrealization/MS nonrecognized/MS nonschematized/MS nonsensitized/MS nonspecialized/MS nonstandardized/MS nonstylized/MS nonsympathizer/MS nonsynthesized/MS nontemporizing/MS nonutilized/MS nonvisualized/MS nonvolatilized/MS nonvulcanizable/MS normalizable Normanization/MS Normanize/DGRSZ northernize/S nosize notarization/S nothingize/S nounize/S novelization/MS novelize/GRSZ nuptialize/S obelize/DGS objectivize/AS objectization/MS objectize/S oblivionize/S Occidentalization/MS Occidentalize/DGS ocherous odorful odorize/DGRS odorless/S offenseless/SY officialization/MS officialize/S Olympianize/S onionized/MS opaled opalize/S operatize/S optionalize/S oralization/MS oralize/S orangize/S oratorize/S organizability/MS organizationist/AMS orientalization/MS orientalize/DGS orientization/MS orientize/S ornamentalize/S orphanize/S orthocenter orthogonalize/GS orthopedically orthopedist ostracizable/MS ostracization/MS ostracize/GRSZ Ottomanization/MS Ottomanize/S outcaviled outcaviling outclamor/MS outhumor/DGMS outhyperbolize/S outlabor/MS outrivaled outrivaling outsavor/GMS outsplendor/MS outtyrannize/S ovalization/MS ovalize/S ovariectomized overagonize/S overbrutalize/S overcapitalization/MS overcapitalize/DGS overcentralization/MS overcentralize/S overcivilization/MS overcivilize/S overclamor/MS overcolor/MS overcriticize/S overdoctrinize/S overemotionalize/S overemphasization/MS overfavor/MS overfavorable/MS overfavorably/S overfertilization overgeneralize/DGS overglamorize/DGS overhonor/MS overhumanize/S overindustrialization/MS overindustrialize/S overlabor/MS overnationalization/MS overrapturize/S overrationalize/S oversentimentalize/S overspecialization/MS overspecialize/DS oversystematize/S overunionized/MS overurbanization/MS overwomanize/S oxidizability/MS oxidizable/MSU oxidization/MS oxidizement/MS oxygenizable/MS oxygenize/RSZ oxygenizement/MS oxygenizes/A oxysulfide ozonization/MS ozonize/DGRSZ packetization paeanize/S paganization/AMS paganize/DGRSZ paganizer/AS paganizes/AU palatization/MS palatize/S palladiumize/S palletization/S palletize/GRS pamperize/S pamphletize/S panderize/S pantheonization/MS pantheonize/S papalization/MS papalize/RSZ parabolization parabolize/DGS paraffinize/S paragraphize/S paralyzation parasitization parasitize/DGS parathyroidectomize/DGS parceler parchmentize/S parenthesization parfocalization parfocalize Parisianization/MS Parisianize/S parochialization/MS parochialize/S parrotize/S parsonize/S partialize/S particularization/MS partisanize/S pasteurize/DGRS Pasteurizers pastoralize/S pastorize/S paternalize/S patronizable/MSU patronization/MS patternize/S Paulinize/S pauperization/MS pauperize/DGRSZ pavior Paynize/S pearlization pearlize/DGS peasantize/S pectization pectize/DGS peculiarize/S pedagog pedaler/S pedantize/S pedestaled pedestaling pedestrianization pedestrianize/DGS pelletization/S pelletize/DGRS pemmicanization/MS pemmicanize/S penalizable/MS penalization/MS penciler/S peptizable/MS peptization/MS peptize/DRSZ peptonization peptonize/DGS percussionize/S perennialize/S perfectivize/S periled periling periodicalize/S periodization/S periodize/DGS peroxidize/S peroxidizement/MS peroxysulfuric Persianization/MS Persianize/S personization/MS personize/S persulfate persulfuric Peruvianize/S petrolization/MS petrolize/S phagocytize/S phantomize/RSZ phenolization/MS phenolize/S phenomenalization/MS phenomenalize/S philanthropize/S Philistinize/S philosophization/MS phlebotomization phlebotomize/DGS phoneticization/MS phoneticize/S phosphatization/MS phosphatize/DGS phosphorize/AS photocatalyzer/MS photographize/S photoionization/MS photoisomerization/MS photolabeled photolabeler photolabeling photolyzable photolyze/DGS photopolymerization/MS photosensitization/MS photosensitize/DGRSZ photosynthesize/DGS piaster picometer/MS pictorialization/MS pictorialize/DGS picturization/MS picturize/DGS pidginization pidginize/DGS pigmentize/S pilgrimize/S pillarize/S piratize/S pistoled pistoling plagiarization/MS plasmolyze plasticization/MS plasticize/DGRSZ plasticizer/MS platinization/MS platitudinization platitudinize/DGS platonization platonize/DGS plebeianize/S plowable plowboy/S plowhead plowmen/M plowstaff poeticization poeticize/DGS poetization/MS poetize/DGRSZ pogromize/S polarizability/MS polarizable/MSU polemicize/DGS polemize/DGS policize/RSZ politicalize/S politicization politicize/GRSZ politize/S pollenizer pollinize/DGRS polychromatize/S polychromize/S polygamize/S polymerization/AM polymerize/AS polysulfide polysulfurization/MS pommeled pommeling porcelainization/MS porcelainize/DGS portionize/S positivize/S posterize/S postsynchronization posturize/S potentialization/MS potentialize/S potentize/S powderization/MS powderize/RSZ practicalization/MS practicalize/RSZ preacherize/S preanesthetic/MS prebaptize/S precancelation precisionize/S precivilization/MS precolor/GJMS precolorable/MS preconization/MS preconize/RSZ precriticize/S predefense/MS preemphasization/M preemphasize/DGRSZ prefavor/MS prefavorable/MS prefavorably/S prefavorite/MS prefertilization/MS prefertilize/S preflavor/GJMS pregalvanize/S prehumor/MS prelabor/MS prelatize/S prelocalization/MS preludize/S premonopolize/S preoffense/MS preorganization/MS preorganize/S preoxidize/DGS prerealization/MS prerealize/S prerecognize/S Presbyterianize/S prespecialize/S presplendor/MS pressurization/A prestandardization/MS prestandardize/S presympathize/S preutilizable/MS preutilization/MS preutilize/S priorization/S priorize/DGS privatization/A privatize/ADG problemize/S processionize/S Procrusteanize/S proctorization/MS proctorize/S prodigalize/S profanize/S professionalization/MS professionalize/DGS professionize/S programist/MS programistic/S proletarianize/GS prologize prologuize/RSZ prolusionize/S propagandize/DGS prophetize/S propositionize/S propretor proselytization/MS protectionize/S Protestantize/S protocoled protocoling protocolization/MS protocolize/S proverbialize/S proverbize/S provincialization/MS provincialize/S Prussianization/MS Prussianize/DGRSZ pseudoanemia/MS pseudoanemic/S pseudoedema/MS pseudographize/S psychoanalyze/RSZ psychoanalyzer/MS psychologization psychologize/DGS puebloization/MS puebloize/S Pullmanize/S pulpitize/S pulverizable/MS pulverization/MS pummeler pummeling pupilize/S puppetize/S Puritanize/RSZ pyorrheal pyramidize/S pyridinize/S pyritization/MS pyritize/S pyrolyzable pyrolyzate pyrosulfate pyrosulfuric Pythagoreanize/S pythonize/S Quakerization/MS Quakerize/S quarrelous quarterization/MS quininize/S racemization racemize/DGS racialization/MS racialize/DGS radialization/MS radialize/S radicalization/MS radicalize/DGS radicalizes/U radiosterilize/GS radiumization/MS radiumize/S rapturize/S rascalize/S rationalizable/MS raveled raveler/SU raveling/S reacclimatize reactualize realisticize/S reanimalize/S reapologize reauthorize rebaptization/MS rebrutalize recapitalize recarbonize recausticize/S recentralize reciprocalize/S recivilize recognizee recolonize recolor/GM reconnoiter/DGMRSZ reconnoiterer/MS recontextualization recontextualize/DGS recriticize refavor/M refertilize reflectorize/DGS reforestization/M reforestize/S regalize/S regalvanize regionalization/MS regionalize/DGS regularization/MS regularize/DRSZ reharmonize rehonor/M rehumanization rehumanize rehybridize/S reindustrialization reindustrialize/GS reinitialization reinstitutionalization reinstitutionalize reitemize relativization/MS relativize/DGS relegitimization/M relegitimize/DGS religionize/S remagnetize/S rematerialize rememorize remilitarization remilitarize remineralize/S remobilize remythologization/M remythologize/DGS rencounter renormalization renormalize/G reobjectivization/MS reorganizational reoxidize reoxygenize/S repaganize/RSZ repatronize repersonalize rephosphorization/MS repolarization repolarize/GS repolymerization/MS repressurization/M repressurize/DGS reprivatization/MS reprivatize/DGS republicanization/MS republicanize/DGRSZ repulverize resensitize/S resepulcher resinize/S resolemnize/S restabilization/M restabilize/DGS restandardize resterilize restigmatize/S resurrectionize/S resymbolize resynchronization resynchronize/G resynthesize retheorize/DGS retinize/S reutilize revaporize/S revelationize/SU revisualize revivalize/S revolatilize/S revolutionizement/MS rhapsodize/DGS rhythmicize/S rhythmizable/MS rhythmization/MS rhythmize/S ridiculize/S ritualization ritualize/GS rivaless/S rivalize/S robotization/MS robotize/DGRS roentgenize Romanization/MS Romanize/DGRSZ romanticization routinization/MS routinize/S roweled roweling royalization/MS royalize/AS rubberization rubberize/GS rubricize/S ruffianize/S ruggedization/M ruggedize/DGS rumormonger/MS ruralization/MS ruralize/DGS russianization Russianization's Russianizations russianize Russianized Russianizes Russianizing rusticize/S Sabbathize/S saberlike/MS sabertooth sacralization/MS sacralize/DGS sacramentize/S sailorizing/MS salinization/M salinize/DGS saltpeter/MS sandaled sandaling Sanforized sapientize/S satanize/S satinize/S satirizable/MS savagize/S saviorhood/MS saviorship/MS savorless/S savorous Saxonization/MS Saxonize/S scandaled scandaling scandalization/MS scandalize/RSZ scandalizes/U scenarioization/MS scenarioize/S scenarization/MS scenarize/S scepterless/S schedulize/S schematization/MS schematize/DGRSZ schismatize/DGS sclerotization sclerotized scripturalize/S scrutinization/MS seborrhea seborrheic sectarianization sectarianize/DGS sectarianizes/U sectionalization/MS sectionalize/GS sectionize/S secularize/GRSZ secularizes/U securitization securitize/DGS semicarbonize/S semicivilization/MS semicivilized/MS semifossilized/MS semihonor/MS semihumanized/MS semimercerized/MS semimineralized/MS seminarize/S seminationalization/MS semiorganized/MS semioxidized/MS semioxygenized/MS semiprofessionalized/MS Semiticize/S Semitization/MS Semitize/S semivulcanized/MS senilize/S sensitization/AMS sensitize/GRSZ sensitizes/AU sensize/S sensualization/MS sensualize/DGS sentimentalization/MS sentineled sentineling sepaled septicization/MS sepulchralize/S serenize/S sermonize/DGRSZ serpentinization/MS serpentinize/S serpentize/S servilize/S severalize/S severization/MS severize/S sexualization/MS sexualize/S Shakespearize/S shepherdize/S Shintoize/S siderealize/S signalization signalize/DG silicatization/MS silicidize/S siliconization siliconize/DGS silverize/RSZ similarize/S similize/S simonize singularization/MS singularize/S sinicize/DGS sirenize/S sisterize/S skeletonization/MS skeletonize/DGRSZ skepticize/S Slavicize/S Slavization/MS Slavize/S Slavonicize/S slenderize/DGS sloganize/DGS snobsniveling soberize/DGS sockdologizing solarization/MS solarize/DGS soldierize/S solecize/DGS solemnization/MS solemnize/DGRSZ solemnizes/AU soliloquization soliloquize/DGJRSZ soliloquizing/MSY solmization solubilization/I solubilize/DGS solutize/RSZ sonantized/MS sonnetize/S southernize/S sovietization/MS sovietize/S Sovietized Sovietizing Spaniardization/MS Spaniardize/S Spanishize/S Spartanize/S spatialization/MS spatialize/S specificize/S specimenize/S specterlike/MSU spheroidize/S spiralization/MS spiralize/S spiritize/S spiritualization/MS spiritualize/DGRSZ spirochetal spirochete/MS spirochetosis splenectomized stabilizable stallionize/S stalwartize/S standardizable/MS stapedectomized statisticize/S stencilize sterilizability/MS sterilizable/MS stigmatize/GRSZ stigmatizes/A strobilization structuralization/MS structuralize/S strychninization/MS strychninize/S stylize/GRSZ subarmor/MS subcenter suberization/MS suberize/DGS subflavor/MS subjectivization subjectivize/S sublimize/S submillimeter subminiaturization subminiaturize/DGS subpulverizer/MS subsidizable/MS subspecialize/S substandardize/S substantialize/SU substantivize/S subterraneanize/S subtilization/MS subtilize/RSZ subtotaled subtotaling suburbanize/S subvitalized/MS succorable/MSU succorless/S suggestionize/S sulfa sulfadiazine/M sulfamethoxazole sulfanilamide sulfatase sulfathiazole sulfatide/S sulfatize/S sulfhydryl sulfinpyrazone sulfinyl sulfitic sulfizoxazole sulfonate/DN sulfone sulfonic sulfonium sulfonmethane sulfonyl sulfonylurea sulforaphane sulfoxide sulfurate sulfureous/PY sulfuret sulfuretted sulfurization/MS sulfurize/S sulfuryl sultanize/S summerize/S supercanonization/MS supercarbonization/MS supercarbonize/S supercivilization/MS supercivilized/MS superemphasize/S superficialize/S superhumanize/S supernaturalize/SU superorganization/MS superorganize/S supersensitization/MS superspecialize/S supersubtilized/MS supersulfurize/S surgerize/S sycophantize/S syllogize sylvanize/S symmetrization/MS symmetrize/DGS symptomize/S synagog synchronizable/MS syncretize/DGS syndicalize/S synesthesia/M synesthete/MS synesthetic synonymize/S synopsize synthesization/MS Syrianize/S systemizable/MSU systemize/RSZ taboret/S tabularization/MS tabularize/S taffetize/DGS tailorization/MS tailorize/S Talmudization/MS Talmudize/S tambura Tammanyize/S tandemize/S tantalization/MS tariffize/S tartarization/MS tartarize/DS tasseled tasseling tassels tavernize/S Taylorize/S teaseler/S teazeled teazeling technicalization technicalize/SU technologize/DGS teetotaled teetotaling telesthesia telesthetic tellurize/DGS templize/S temporalize/DGS temporization/MS tenderization tenderize/DGRS tendriled tenementization/MS tenementize/S terminalization/MS terminalized/MS ternize/S terrestrialize/S territorialization/MS territorialize/S terrorization/MS testimonialization/MS testimonialize/RSZ tetanization tetanize/DGS teutonize textualization/M textualize/DGS texturization/AM texturize/ADGS theaterless/S theaterlike/MS theatricalization/MS theatricalize/DGS theatricize/S theolog theologization theologize/DGRS thermalization/M thermalize/DGS thermoanesthesia/MS thermometerize/S thermopolymerization/MS thiosulfate thiosulfuric thronize/S thymectomize thyroidectomized thyroidization/MS Timonize/S tinselier tinseliest tonicize/S torporize/S Toryize/S totalitarianize totalization/MS totalizator totalize/DGRSZ totemization/MS tourize/S tractorization/MS tractorize/S traditionalize/S traditionize/S tragicize/S traitorize/S trammeled trammeler/S trammeling tranquilization/AMS transcendentalize/S transistorization transparentize/DGS traumatization traumatize/DGS triangularize/DGS trichinize trillionize/S trimerization/MS trisulfide trivialization tropicalization/MS tropicalize/DGS troweled troweling trypsinize/S tuberculinization/MS tuberculinize/S tuberization/MS tuberize/S tubulization/MS Turkize/S Tuscanize/S tutorization/MS tutorize/S Tylerize/S ultracentralizer/MS ultrahonorable/MS ultraminiaturized ultraspecialization/MS ultrastandardization/MS unagonize unalcoholized/MS unanimalized/MS unantagonizable/MS unapostatized/MS unauthorize unbaptize unbrutalize unbrutize/S uncanonize/S uncantonized/MS uncatechized/MPS uncatholicize/S uncelestialized/MS unchloridized/MS unchristianize/DS uncircularized/MS uncivilize uncolonize unconventionalize/S uncurricularized/MS undemocratize undercapitalization/MS undercapitalize/DGS undercolor/DGJMS underemphasization/M underemphasize/DGS underlaborer/MS underorganization/MS underoxidize/S underpublicize/DGS underrealize/S undersavior/MS underutilize/GS undervitalized/MS undiscolored/M unenamored/MS unequalize unevangelized/MS unfavoring/M unfeudalize/DS ungalvanized/MS ungelatinized/MS ungospelized/MS ungraphitized/MS unharbor/DM unharmonize unheroize/S unhonorable/M unhypnotize uniformization/MS uniformize/S unilateralization/MS unilateralize/S unimmortalize/S unindividualize Unitarianize/S unitization unitize/GS universalization/MS unlabialize/S unlaboring/M unlocalize unmechanize unmediatized/MS unmercerized/MS unmesmerize/S unmetalized/MS unmethodized/MS unmethodizing/MS unmissionized/MS unmodernize unmonopolize/GJ unmoralize/DGJS unmunicipalized/MS unmutualized/MS unnaturalizable/MS unnaturalize/S unnitrogenized/MS unnormalize/G unoptimize/G unoxygenized/MS unpaganize/S unparagonized/MS unparalyzed/MS unparticularized/MS unparticularizing/MS unpauperized/MS unphilosophize unphosphatized/MS unplagiarized/MS unpoeticized/MS unpoetize/DS unpolymerized/MS unpopularize unprotestantize/S unpulverize unradicalize/S unrancored/MS unrealizable/MS unrealize/GJ unreconnoitered/MS unromanticized/MS unroyalized/MS unsatirize/D unscandalize/S unscepter/D unschematized/MS unsectarianize/S unsecularize/S unsensitize/S unsensualize/DS unsentimentalize unsepulcher/D unsignalized/MS unsolemnize/DS unspiritualize/DS unstoicize/S unsulfurized/MS unsupernaturalize/DS unsymmetrized/MS unsympathizability/MS unsympathizable/MS untantalizing/MS untartarized/MS untemporizing/M untheorizable/MS unvaporized/MS unvitalized/MS unvitriolized/MS unvolatilize/DS unvulgarize/DS unwesternized/MS unwomanize urbanize/GS utilitarianize/S utilizability/S utilizable/MSU Utopianize/S utopianizer/MS vaccinization/MS vacuumize/DGS vagabondize/RSZ vagrantize/S valorization/AMS valorize/ADGS vampirize/S vandalization/MS vaporability/MS vaporable/MS vaporish/P vaporizable/MS vaporize/DGRSZ vaporizes/A vaporless/S vaporlike/MS vapory/RT vascularization/MS vascularize/DGS vassalization vassalize/DGS Vaticanization/MS Vaticanize/S vectorizable/U vectorize/DRSZ vegetablize/S velarization venalization/MS venalize/S venomization/MS venomize/S ventriloquize/DGS verbalization/MS vermeiled vermeiles vermeiling vermilionize/S vernacularization/MS vernacularize/S vernalization/MS vernalize/DGS versicolor/D versionize/S vestryize/S veteranize/S vialed vialing victimizable/MS victimization/MS Victorianize/S victualage victualed victualess victualing Vietnamization Vietnamize/DGS vigorless visionize/S vitalization/MS vitalization's/A vitalizations/A vitalize/DGJRSZ vitalizing/MSY vitaminization vitaminize/S vitriolizable/MS vitriolization/MS vitriolize/RSZ vocationalization/MS vocationalize/S volatilizable/MS volatilize/DGRSZ volatilizes/AU voltize/S volumization/M volumize/DGS vowelization/MS vowelize/DGS vulcanizable/MS vulcanizate/NX vulcanization/MS vulcanize/GRSZ vulgarization/MS vulgarize/DGRSZ Wagnerize/S weeviled westernization/MS westernize/DGS Whitmanize/S winterization/MS winterize/DGS womanization/MS woodcockize/S woolenization/MS woolenize/S woolie woolybutt zeroize/DGS ispell-3.4.02/languages/english/PaxHeaders.22185/Makefile0000644000000000000000000000013212466001033017660 xustar0030 mtime=1423442459.569090321 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/english/Makefile0000444003214100001440000004001612466001033020732 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.33 2015-02-08 16:40:59-08 geoff Exp $ # # Copyright 1993, 2001, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This Makefile is an example of how to build dictionaries for a # complex language with many variants. It supports both American and # British English and four dictionary source files, and will build up # to 8 dictionares from those 4 files by combining them with an # optional installation-specific file. # # If you are building a new Makefile for your own language, this is # probably not the right place to start. Instead, you should select # the "deutsch" Makefile, which is moderately complex, or one of the # simple Makefiles for another language distributed with ispell. # # $Log: Makefile,v $ # Revision 1.33 2015-02-08 16:40:59-08 geoff # Get rid of the old munchlist-suppressing code and of references to english.5. # # Revision 1.32 2015-02-08 01:11:55-08 geoff # Support DESTDIR. # # Revision 1.31 2015-02-08 00:53:31-08 geoff # Remove english.5 from the distribution # # Revision 1.30 2008-02-21 22:19:19-08 geoff # Use munchlist to build all dictionaries, to avoid locale problems. # (We used to avoid munchlist because of performance, but 20 years of # hardware advances have turned a multi-hour process into a 15-second # one. Yay for Moore's law!) # # Revision 1.29 2005/04/26 22:55:07 geoff # Add code to protect against POSIX's astoundingly stupid decision to break # backwards compatibility for the sort command. # # Revision 1.28 2005/04/13 22:58:43 geoff # Update license. Allow section-5 manuals to go into section 4 on # systems that prefer it that way. # # Revision 1.27 2002/06/06 23:21:30 geoff # Don't assume munchlist is in the PATH # # Revision 1.26 2001/07/25 21:51:47 geoff # *** empty log message *** # # Revision 1.25 2001/07/23 20:43:37 geoff # *** empty log message *** # # Revision 1.24 1999/01/07 01:23:16 geoff # Update the copyright. Get rid of the old shar-based dictioary building. # # Revision 1.23 1995/08/05 23:19:50 geoff # Add tests to detect and suppress accidentally-generated zero-length # dictionaries. # # Revision 1.22 1994/08/31 05:58:43 geoff # Create directories before installing into them, and be sure to set the # proper modes on manual pages. # # Revision 1.21 1994/05/25 04:29:30 geoff # Get rid of all references to DEFHASH and defhash. # # Revision 1.20 1994/05/24 04:47:33 geoff # Work around an RS-6000 shell deficiency in environment setting # # Revision 1.19 1994/05/17 06:37:36 geoff # Fix the remove-on-abort code for the derived dictionaries to be more # robust. # # Revision 1.18 1994/02/23 04:52:30 geoff # Remove dictionaries being built if make is aborted early. # # Revision 1.17 1994/02/22 06:09:06 geoff # Add SHELLDEBUG. # # Revision 1.16 1994/02/13 23:55:20 geoff # Get rid of the temporary line that zapped "english..4" for people who # had 3.1.00. # # Revision 1.15 1994/02/07 08:01:57 geoff # Allow multiple variants and extradicts # # Revision 1.14 1994/02/07 07:08:10 geoff # Install english.4 with the right name, removing the wrong one if it exists # # Revision 1.13 1994/02/07 06:18:18 geoff # Add dummy else clauses to shell tests to handle Ultrix problems. Add an # eval to all sort commands to make sure that MAKE_SORTTMP is handled # correctly on all systems. # # Revision 1.12 1994/01/25 08:50:34 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # SHELL = /bin/sh MAKE = make CONFIG = ../../config.sh PATHADDER = ../.. BUILDHASH = ../../buildhash MUNCHLIST = ../../munchlist # The following variables should be set by the superior Makefile, # based on the LANGUAGES variable in config.X. # # There are four progressively-larger English dictionaries distributed # with ispell. These are named english.sml, english.med, english.lrg, # and english.xlg. For each of these, you can also build a "plus" # version (english.sml+, etc.) which is created by combining the # distributed version with an "extra" dictionary defined by EXTRADICT, # usually /usr/share/dict/words. The "plus" versions of dictionaries # require lots of time and temporary file space; make sure you have # set TMPDIR appropriately. # # The dictionaries to be built are listed in the MASTERDICTS variable, # separated by spaces. The hash files to be built (and installed) are # listed in the HASHFILES variable. Hash files are named by taking # the suffix of the dictionary (e.g., "med+"), and adding ".hash". As # a general rule, the dictionaries needed to build the HASHFILES must # be listed in the MASTERDICTS variable. # # British/American variants are supported by the VARIANTS variable. # You should set VARIANTS to one of "american", "british", or # "altamer". The latter is a file of alternate American spellings, # often British-derived. I recommend against its use. I also # recommend against selecting more than one variant, because it tends # to cause inconsistent or incorrect spellings to be hidden, although # there is nothing to prevent such an unwise decision. # # If you change AFFIXES for english, you should consider also changing # DEFLANG (in config.X) to match. # MASTERDICTS = Use_LANGUAGES_from_config.X HASHFILES = Use_LANGUAGES_from_config.X VARIANTS = Use_LANGUAGES_from_config.X EXTRADICT = Use_LANGUAGES_from_config.X # # The following variables may be overridden by the superior Makefile, # based on the LANGUAGES variable in config.X. # AFFIXES = english.aff # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: $(CONFIG) @set $(SHELLDEBUG); \ if [ ! -r english.0 ]; \ then \ $(MAKE) SHELLDEBUG=$(SHELLDEBUG) dictcomponents; \ else \ : ; \ fi @set $(SHELLDEBUG); \ for dict in $(MASTERDICTS); do \ if [ ! -r $$dict ]; \ then \ $(MAKE) 'VARIANTS=$(VARIANTS)' \ 'EXTRADICT=$(EXTRADICT)' \ SHELLDEBUG=$(SHELLDEBUG) $$dict; \ else \ : ; \ fi; \ done $(MAKE) SHELLDEBUG=$(SHELLDEBUG) $(HASHFILES) # Note the fooling around with LIBDIR. It might be a relative path, # relative to the top of the ispell source tree. So we have to cd to # ../.. before referring to $LIBDIR. There must be a better way... # install: all $(CONFIG) @. $(CONFIG); \ set -x; \ cd ../..; \ [ -d $(DESTDIR)$$LIBDIR ] || \ $(MAKE) -f Makefile NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ cd $(DESTDIR)$$LIBDIR; rm -f english.aff $(HASHFILES) @. $(CONFIG); \ set -x; \ cp english.aff $(HASHFILES) \ `cd ../..; cd $(DESTDIR)$$LIBDIR; pwd` @. $(CONFIG); \ set -x; \ cd ../..; cd $(DESTDIR)$$LIBDIR; \ chmod 644 english.aff $(HASHFILES) # # Dependencies to build extra hash files # allhashes: normhashes plushashes normhashes: sml.hash med.hash lrg.hash xlg.hash plushashes: sml+.hash med+.hash lrg+.hash xlg+.hash # # Note that we don't use $(MAKE) in the following dependencies. There # is a good reason for this -- if we did, "make -n" would still run # buildhash. # sml.hash: $(CONFIG) $(BUILDHASH) sml.hash: $(AFFIXES) sml.hash: english.sml rm -f sml.hash @set +e; \ . $(CONFIG); \ set -ex; \ $(BUILDHASH) english.sml $(AFFIXES) $@ sml+.hash: $(CONFIG) $(BUILDHASH) sml+.hash: $(AFFIXES) sml+.hash: english.sml+ rm -f sml+.hash @set +e; \ . $(CONFIG); \ set -ex; \ $(BUILDHASH) english.sml+ $(AFFIXES) $@ med.hash: $(BUILDHASH) $(CONFIG) med.hash: $(AFFIXES) med.hash: english.med rm -f med.hash @set +e; \ . $(CONFIG); \ set -ex; \ $(BUILDHASH) english.med $(AFFIXES) $@ med+.hash: $(BUILDHASH) $(CONFIG) med+.hash: $(AFFIXES) med+.hash: english.med+ rm -f med+.hash @set +e; \ . $(CONFIG); \ set -ex; \ $(BUILDHASH) english.med+ $(AFFIXES) $@ lrg.hash: $(BUILDHASH) $(CONFIG) lrg.hash: $(AFFIXES) lrg.hash: english.lrg rm -f lrg.hash @set +e; \ . $(CONFIG); \ set -ex; \ $(BUILDHASH) english.lrg $(AFFIXES) $@ lrg+.hash: $(BUILDHASH) $(CONFIG) lrg+.hash: $(AFFIXES) lrg+.hash: english.lrg+ rm -f lrg+.hash @set +e; \ . $(CONFIG); \ set -ex; \ $(BUILDHASH) english.lrg+ $(AFFIXES) $@ xlg.hash: $(BUILDHASH) $(CONFIG) xlg.hash: $(AFFIXES) xlg.hash: english.xlg rm -f xlg.hash @set +e; \ . $(CONFIG); \ set -ex; \ $(BUILDHASH) english.xlg $(AFFIXES) $@ xlg+.hash: $(BUILDHASH) $(CONFIG) xlg+.hash: $(AFFIXES) xlg+.hash: english.xlg+ rm -f xlg+.hash @set +e; \ . $(CONFIG); \ set -ex; \ $(BUILDHASH) english.xlg+ $(AFFIXES) $@ # # The eight dictionaries, english.sml through english.xlg+, are # built by the following dependencies. We used to use some # Makefile tricks to avoid running munchlist unnecessarily, but # that leads to mistakes, and modern machines run munchlist fast # enough that it's no longer worth suppressing. # alldicts: normdicts plusdicts normdicts: english.sml normdicts: english.med normdicts: english.lrg normdicts: english.xlg plusdicts: english.sml+ plusdicts: english.med+ plusdicts: english.lrg+ plusdicts: english.xlg+ dictcomponents: english.sml: $(CONFIG) english.sml: english.0 english.sml: american.0 english.sml: altamer.0 english.sml: british.0 @dicts=""; \ set $(SHELLDEBUG); \ for i in english $(VARIANTS); do \ dicts="$$dicts $$i.0"; \ done; \ trap "rm -f english.sml" 1 2 15; \ set -x; \ PATH=$(PATHADDER):$$PATH; \ export PATH; \ $(MUNCHLIST) -v -l $(AFFIXES) $$dicts \ > english.sml \ || rm -f english.sml test -s english.sml \ || (echo 'error: zero-length dictionary generated'; \ rm -f english.sml; exit 1) english.sml+: $(CONFIG) $(EXTRADICT) english.sml+: english.0 english.sml+: american.0 english.sml+: altamer.0 english.sml+: british.0 @dicts="$(EXTRADICT)"; \ set $(SHELLDEBUG); \ for i in english $(VARIANTS); do \ dicts="$$dicts $$i.0"; \ done; \ trap "rm -f english.sml+" 1 2 15; \ set -x; \ PATH=$(PATHADDER):$$PATH; \ export PATH; \ $(MUNCHLIST) -v -l $(AFFIXES) $$dicts \ > english.sml+ \ || rm -f english.sml+ test -s english.sml+ \ || (echo 'error: zero-length dictionary generated'; \ rm -f english.sml+; exit 1) english.med: $(CONFIG) english.med: english.0 english.med: american.0 english.med: altamer.0 english.med: british.0 english.med: english.1 english.med: american.1 english.med: altamer.1 english.med: british.1 @dicts=""; \ set $(SHELLDEBUG); \ for i in english $(VARIANTS); do \ dicts="$$dicts $$i.[01]"; \ done; \ trap "rm -f english.med" 1 2 15; \ set -x; \ PATH=$(PATHADDER):$$PATH; \ export PATH; \ $(MUNCHLIST) -v -l $(AFFIXES) $$dicts \ > english.med \ || rm -f english.med test -s english.med \ || (echo 'error: zero-length dictionary generated'; \ rm -f english.med; exit 1) english.med+: $(CONFIG) $(EXTRADICT) english.med+: english.0 english.med+: american.0 english.med+: altamer.0 english.med+: british.0 english.med+: english.1 english.med+: american.1 english.med+: altamer.1 english.med+: british.1 @dicts="$(EXTRADICT)"; \ set $(SHELLDEBUG); \ for i in english $(VARIANTS); do \ dicts="$$dicts $$i.[01]"; \ done; \ trap "rm -f english.med+" 1 2 15; \ set -x; \ PATH=$(PATHADDER):$$PATH; \ export PATH; \ $(MUNCHLIST) -v -l $(AFFIXES) $$dicts \ > english.med+ \ || rm -f english.med+ test -s english.med+ \ || (echo 'error: zero-length dictionary generated'; \ rm -f english.med+; exit 1) english.lrg: $(CONFIG) english.lrg: english.0 english.lrg: american.0 english.lrg: altamer.0 english.lrg: british.0 english.lrg: english.1 english.lrg: american.1 english.lrg: altamer.1 english.lrg: british.1 english.lrg: english.2 english.lrg: american.2 english.lrg: altamer.2 english.lrg: british.2 @dicts=""; \ set $(SHELLDEBUG); \ for i in english $(VARIANTS); do \ dicts="$$dicts $$i.[012]"; \ done; \ trap "rm -f english.lrg" 1 2 15; \ set -x; \ PATH=$(PATHADDER):$$PATH; \ export PATH; \ $(MUNCHLIST) -v -l $(AFFIXES) $$dicts \ > english.lrg \ || rm -f english.lrg test -s english.lrg \ || (echo 'error: zero-length dictionary generated'; \ rm -f english.lrg; exit 1) english.lrg+: $(CONFIG) $(EXTRADICT) english.lrg+: english.0 english.lrg+: american.0 english.lrg+: altamer.0 english.lrg+: british.0 english.lrg+: english.1 english.lrg+: american.1 english.lrg+: altamer.1 english.lrg+: british.1 english.lrg+: english.2 english.lrg+: american.2 english.lrg+: altamer.2 english.lrg+: british.2 @dicts="$(EXTRADICT)"; \ set $(SHELLDEBUG); \ for i in english $(VARIANTS); do \ dicts="$$dicts $$i.[012]"; \ done; \ trap "rm -f english.lrg+" 1 2 15; \ set -x; \ PATH=$(PATHADDER):$$PATH; \ export PATH; \ $(MUNCHLIST) -v -l $(AFFIXES) $$dicts \ > english.lrg+ \ || rm -f english.lrg+ test -s english.lrg+ \ || (echo 'error: zero-length dictionary generated'; \ rm -f english.lrg+; exit 1) english.xlg: $(CONFIG) english.xlg: english.0 english.xlg: american.0 english.xlg: altamer.0 english.xlg: british.0 english.xlg: english.1 english.xlg: american.1 english.xlg: altamer.1 english.xlg: british.1 english.xlg: english.2 english.xlg: american.2 english.xlg: altamer.2 english.xlg: british.2 english.xlg: english.3 @dicts=""; \ set $(SHELLDEBUG); \ for i in english $(VARIANTS); do \ dicts="$$dicts $$i.[0123]"; \ done; \ trap "rm -f english.xlg" 1 2 15; \ set -x; \ PATH=$(PATHADDER):$$PATH; \ export PATH; \ $(MUNCHLIST) -v -l $(AFFIXES) $$dicts \ > english.xlg \ || rm -f english.xlg test -s english.xlg \ || (echo 'error: zero-length dictionary generated'; \ rm -f english.xlg; exit 1) english.xlg+: $(CONFIG) $(EXTRADICT) english.xlg+: english.0 english.xlg+: american.0 english.xlg+: altamer.0 english.xlg+: british.0 english.xlg+: english.1 english.xlg+: american.1 english.xlg+: altamer.1 english.xlg+: british.1 english.xlg+: english.2 english.xlg+: american.2 english.xlg+: altamer.2 english.xlg+: british.2 english.xlg+: english.3 @dicts="$(EXTRADICT)"; \ set $(SHELLDEBUG); \ for i in english $(VARIANTS); do \ dicts="$$dicts $$i.[0123]"; \ done; \ trap "rm -f english.xlg+" 1 2 15; \ set -x; \ PATH=$(PATHADDER):$$PATH; \ export PATH; \ $(MUNCHLIST) -v -l $(AFFIXES) $$dicts \ > english.xlg+ \ || rm -f english.xlg+ test -s english.xlg+ \ || (echo 'error: zero-length dictionary generated'; \ rm -f english.xlg+; exit 1) clean: rm -f core *.hash *.stat *.cnt *.words # # The following target allows you to clean out the combined # dictionary files. # dictclean: rm -f english.sml english.sml+ english.med english.med+ rm -f english.lrg english.lrg+ english.xlg english.xlg+ ispell-3.4.02/languages/english/PaxHeaders.22185/american.00000644000000000000000000000013213770761352020100 xustar0030 mtime=1608770282.540154092 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/english/american.00000444003214100001440000002137213770761352021156 0ustar00geofffaculty00000000000000acclimatization/AMS acclimatized/U accouterment/MS actualization/AMS aerosolize/DGS agonize/DGRSZ agonized/Y agonizing/Y alphabetize/DGRSZ aluminum/MS amenorrhea amortize/DGS amortized/U amphitheater/MS analog/MS analyzable/U analyze/ADGRSZ analyzed/AU anemia/MS anemic/S anesthesia/MS anesthetic/MS anesthetically anesthetize/DGRSZ anesthetizer/MS anodize/DGS anonymize/DGS antagonize/DGRSZ antagonized/U antagonizing/U apologize/DGRSZ apologizes/A apologizing/U appall/S appareled appetizer appetizing/UY arbor/DMS archaize/DGRSZ ardor/MS arithmetize/DS armor/DGMRSZ armored/U armorer/MS armory/DMS atomization/MS atomize/DGRSZ authorization/AMS authorize/DGRSZ authorizes/AU autodialer/S axiomatization/MS axiomatize/DGS Balkanize/DGS baptize/DGRSZ baptized/U baptizes/U barreled barreling bastardize/DGS bastardized/U bedeviled bedeviling behavior/DMS behavioral/Y behaviorism/MS behavioristic/S behoove/DGJMS behooving/MSY belabor/DGMS beveled beveling/S bowdlerize/DGRS brutalize/DGS brutalized/U brutalizes/AU burglarize/DGS busheled busheling/S caliber/S canaled canaling canceled/U canceler canceling candor/MS cannibalize/DGS canonicalization canonicalize/DGS capitalization/AMS capitalize/DGRSZ capitalized/AU capitalizes/A carbonization/AMS carbonize/DGRSZ carbonizer/AS carbonizes/A catalog/DGMRS categorization/MS categorize/DGRSZ categorized/AU center/DGJMRSZ centerpiece/MS centimeter/MS centralization/AMS centralize/DGRSZ centralizes/A channeled channeler/MS channeling characterizable/MS characterization/MS characterize/DGRSZ characterized/U checkbook/MS chiseled chiseler/S civilization/AMS civilize/DGRSZ civilized/PU civilizes/AU clamor/DGRSZ clamorer/MS cognizance/AI cognizant/I colonization/AMS colonize/DGRSZ colonized/U colonizes/AU color/DGJMRSZ colored/AU coloreds/U colorer/MS colorful/PY colorless/PY colors/A columnize/DGS compartmentalize/DGS computerize/DGS conceptualization/MS conceptualize/DGRS conceptualizing/A counseled counseling counselor/MS criticize/DGRSZ criticized/U criticizes/A criticizing/UY criticizingly/S crystallize/DGRSZ crystallized/AU crystallizes/A customizable customization/MS customize/DGRSZ decentralization/MS decentralized defense/MSU defenseless/PY demeanor/MS demoralize/DGRSZ demoralizing/Y dialed/A dialer/MS dialers/A dialing/AS dichotomize/DGS digitize/DGRSZ digitizer/MS dishonor/DGRSZ dishonored/U dishonorer/MS disorganized/U draftsman dueled dueler/S dueling/S economize/DGRSZ economizing/U editorialize/DGRS enameled enameler/S enameling/S endeavor/DGMRSZ endeavored/U endeavorer/MS enroll/S enrollment/MS epitomize/DGRSZ epitomized/U equaled/U equaling equalization/MS equalize/DGJRSZ equalized/U equalizer/MS equalizes/U esthetic/MS esthetically eviler evilest factorization/MS familiarization/MS familiarize/DGRSZ familiarized/U familiarizing/Y fantasize/DGRS favor/DGJMRSZ favorable/MPSU favorably/U favored/MPSY favored's/U favorer/MS favoring/MSY favorings/U favorite/MSU favors/A fertilization/AMS fertilize/DGRSZ fertilized/U fertilizes/A fervor/MS fiber/DMS fiberglass finalization/S finalize/DGS flavor/DGJMRSZ flavored/U flavorer/MS formalization/MS formalize/DGRSZ formalized/U formalizes/I fueled/A fueler/S fueling/A fulfill/S fulfillment/MS funneled funneling generalization/MS generalize/DGRSZ generalized/U glamorize/DGRSZ glamorized/U gospeler/S graveled graveling groveled groveler/S groveling/Y harbor/DGMRSZ harborer/MS harmonize/DGRSZ harmonized/U harmonizes/AU honor/DGRSZ honorable/MPS honorables/U honorably/SU honored/U honorer/MS honors/A hospitalize/DGS humor/DGMRSZ humored/U hypothesize/DGRSZ idealization/MS idealize/DGRSZ idealized/U imperiled individualize/DGRSZ individualized/U individualizes/U individualizing/Y industrialization/MS industrialization's/A initialed initialer initialing initialization/MS initialize/DGRSZ initialized/AU initializer/MS institutionalize/DGS internalization/MS internalize/DGS italicize/DGS italicized/U itemization/MS itemize/DGRSZ itemized/U itemizes/A jeopardize/DGS jeweled jeweling jewelry/MS journalize/DGRSZ journalized/U kidnaped kidnaper/MS kidnaping/MS kilometer/MS labeled/AU labeler/MS labelers/A labeling/A labor/DGJRSZ labored/MPY labored's/U laborer/MS laboring/MSY laborings/U laureled legalization/MS legalize/DGS legalized/U leveled/U leveler/S levelest leveling/U liberalize/DGRSZ liberalized/U license's linearizable linearize/DGNS liter/S localization/MS localize/DGRSZ localized/U localizes/U luster/DGS magnetization/AMS maneuver/DGRS marshaled marshaler marshaling marveled marveling marvelous/PY materialize/DGRSZ materializes/A maximize/DGRSZ mechanization/MS mechanize/DGRSZ mechanized/U mechanizes/U medaled medaling memorization/MS memorize/DGRSZ memorized/U memorizes/A metaled metaling millimeter/MS miniaturization/S miniaturize/DGS minimization/MS minimize/DGRSZ minimized/U miter/DGR modeled/A modeler/S modeling/S modernize/DGRSZ modernized/U modernizes/U modularization/M modularize/DGS motorize/DGS motorized/U multileveled nationalization/MS nationalize/ADGRSZ nationalized/AU naturalization/MS neighbor/DGJMRSYZ neighbored/U neighborer/MS neighborhood/MS neighborly/PU neutralize/DGRSZ neutralized/U nickeled nickeling normalization/MS normalize/DGRSZ normalized/AU normalizes/AU notarize/DGS odor/DMS offense/MS optimization/MS optimize/DGRSZ optimized/U optimizer/MS optimizes/U organizable/MSU organization/AMS organizational/MSY organize/ADGRSZ oxidize/DGJRSZ oxidized/U oxidizes/A pajama/S paneled paneling/S panelist/MS paralleled/U paralleling parallelization/MS parallelize/DGRSZ paralyze/DGRSZ paralyzed/Y paralyzedly/S paralyzer/MS paralyzing/Y paralyzingly/S parameterizable parameterization/MS parameterize/DGS parameterized/U parceled/U parceling parenthesized parlor/MS patronize/DGJRSZ patronized/U patronizes/A patronizing/MSY penalize/DGS penalized/U penciled penciling/S personalization/MS personalize/DGS petaled philosophize/DGRSZ philosophized/U philosophizes/U plow/DGRS plowed/U plowman pluralization/MS pluralize/DGRSZ polarization/MS polarization's/A popularization/MS popularize/DGRSZ popularizes/U practiced/U practicer practicing preinitialize/DGS pressurize/DGRSZ pretense/NSVX prioritize/DGJRSZ productize/DGRSZ proselytize/DGRSZ publicize/DGS pulverize/DGRSZ pulverized/U pulverizes/AU quantization/MS quantize/DGRSZ quantizer/MS quarreled quarreler/S quarreling queuing randomize/DGRS rationalize/DGRSZ realizable/MPS realizably/S realization/MS realize/DGJRSZ realized/U realizing/MSY recognizability recognizable/U recognizably recognize/DGRSZ recognized/Y recognizedly/S recognizing/UY recognizingly/S redialer/S reinitialize/DGS relabeler/S remodeling reorganized/U reprogram/S reveled reveler/S reveling/S revolutionize/DGRSZ rigor/MS rivaled/U rivaling ruble/MS rumor/DGMRSZ rumored/U rumorer/MS saber/DGMS sabered/U sanitize/DGRS savior/MS savor/DGRSZ savorer/MS savorily/SU savoring/Y savoringly/S savory/MPRSTY scepter/DGMS scepters/U scrutinize/DGRSZ scrutinized/U scrutinizing/UY scrutinizingly/S sepulcher/DMS sepulchers/AU sequentialize/DGS serialization/MS serialize/DGRSZ serializer/MS shoveled shoveler/S shoveling shriveled shriveling signaled signaler/S signaling socialize/DGRS socialized/U specialization/MS specialize/DGRSZ specialized/U specializing/U specter/DMS spiraled spiraling splendor/MS squirreled squirreling stabilize/DGRSZ standardization/AMS standardize/DGRSZ standardized/U standardizes/A stenciled stenciler/S stenciling sterilization/MS sterilize/DGRSZ sterilized/U sterilizes/A stylized subsidize/DGRSZ subsidized/U succor/DGRSZ succored/U succorer/MS sulfate/DGS sulfur/DG sulfuric summarization/MS summarize/DGRSZ summarized/U symboled symboling symbolization/AMS symbolize/DGRSZ symbolized/U symbolizes/A sympathize/DGJRSZ sympathized/U sympathizing/MSUY synchronization/MS synchronizations/A synchronize/DGRSZ synchronized/AU synchronizes/A synthesize/DGRSZ synthesized/U synthesizes/A systematize/DGRSZ systematized/U systematizing/U tantalize/DGRSZ tantalized/U tantalizing/PY tantalizingly/S tantalizingness/S terrorize/DGRSZ terrorized/U theater/MS theorization/MS theorize/DGRSZ tire's titer/S totaled totaler/MS totaling toweled toweling/S tranquility tranquilize/ADGJRSZ tranquilized/AU tranquilizer/AMS tranquilizing/AMSY transistorize/DGS traveled traveler/MS traveling/S trivialize/DGS troweler/S tumor/DMS tunneled tunneler/S tunneling/S unauthorized/PY uncivilized/PY uncolored/PSY unfavored/M unionization unionize/DGRSZ unlabored/M unorganized/PY unpatronizing/MY unraveled unraveling unrecognized unsavored/PY unsystematized/Y utilization/A utilize/DGRSZ utilizes/A valor/MS vandalize/DGS vapor/DGJMRSZ vaporer/MS vaporing/MSY vectorization vectorizing verbalize/DGRSZ verbalized/U victimize/DGRSZ victimized/U victualer/S vigor/MS visualize/DGRSZ visualized/U visualizes/A weaseled weaseling womanize/DGRSZ womanized/U womanizes/U woolen/S wooly/PRS worshiped worshiper/MS worshiping ispell-3.4.02/languages/PaxHeaders.22185/espanol0000644000000000000000000000013213776416114016172 xustar0030 mtime=1610226764.421065341 30 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/languages/espanol/0000755003214100001440000000000013776416114017322 5ustar00geofffaculty00000000000000ispell-3.4.02/languages/espanol/PaxHeaders.22185/Makefile0000644000000000000000000000013212465624133017703 xustar0030 mtime=1423386715.375462996 30 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/languages/espanol/Makefile0000444003214100001440000001114212465624133020753 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.5 2015-02-08 01:11:55-08 geoff Exp $ # # Copyright 1993, 2001, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This makefile is an example of how you might write a makefile for a # simple language which has only a single dictionary available. For # an example of a complex makefile, look at the makefile for English. # # $Log: Makefile,v $ # Revision 1.5 2015-02-08 01:11:55-08 geoff # Support DESTDIR. # # Revision 1.4 2005-04-14 06:27:40-07 geoff # Update license. Allow LIBDIR to be relative. Be sure to get copies # of buildhash and fix8bit from the source tree. Drop unsq. # # Revision 1.6 1994/02/07 06:07:57 geoff # Add a dummy else clause to shell if-test for Ultrix # # Revision 1.5 1994/01/25 07:12:44 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # SHELL = /bin/sh MAKE = make CONFIG = ../../config.sh PATHADDER = ../.. BUILDHASH = ../../buildhash FIX8BIT = ../fix8bit # # The following variables make it easy to adapt this Makefile to # numerous languages. # LANGUAGE = espanol DICTIONARY = $(LANGUAGE).words HASHFILE = $(LANGUAGE).hash # # The following variables may be overridden by the superior Makefile, # based on the LANGUAGES variable in config.X. # AFFIXES = $(LANGUAGE).aff # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: $(HASHFILE) install: all $(CONFIG) @. $(CONFIG); \ set -x; \ cd ../..; \ [ -d $(DESTDIR)$$LIBDIR ] || \ $(MAKE) -f Makefile NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ cd $(DESTDIR)$$LIBDIR; rm -f $(LANGUAGE).aff $(HASHFILE) @. $(CONFIG); \ set -x; \ cp $(LANGUAGE).aff $(HASHFILE) \ `cd ../..; cd $(DESTDIR)$$LIBDIR; pwd` @. $(CONFIG); \ set -x; \ cd ../..; cd $(DESTDIR)$$LIBDIR; \ chmod 644 $(LANGUAGE).aff $(HASHFILE) $(HASHFILE): $(BUILDHASH) $(AFFIXES) $(DICTIONARY) rm -f $(HASHFILE) munchlist -v -l $(AFFIXES) $(DICTIONARY) > $(LANGUAGE).words+ $(BUILDHASH) $(LANGUAGE).words+ $(AFFIXES) $(HASHFILE) build: $(BUILDHASH) -s $(LANGUAGE).words+ $(AFFIXES) $(HASHFILE) $(LANGUAGE)-alt.aff: $(LANGUAGE)-alt.7bit $(FIX8BIT) $(FIX8BIT) -8 < $(LANGUAGE)-alt.7bit > $(LANGUAGE)-alt.aff $(FIX8BIT): ../fix8bit.c cd ..; $(MAKE) fix8bit # # The following dependency can be executed when ispell is unpacked, # to unpack the dictionaries. # unpack: $(AFFIXES) clean: rm -f core *.hash *.stat *.cnt # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # kitclean: # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # dictclean: ispell-3.4.02/languages/PaxHeaders.22185/Makefile0000644000000000000000000000007410227330312016232 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/Makefile0000444003214100001440000001136010227330312017277 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.6 2005/04/13 23:52:42 geoff Exp $ # # Copyright 1993, 2001, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # $Log: Makefile,v $ # Revision 1.6 2005/04/13 23:52:42 geoff # Update the license. Integrate Ed Avis's changes. # # Revision 1.5.1.1 2002/06/21 00:35:55 geoff # Edward Avis's changes # # Revision 1.3 2001/11/07 18:59:26 epa98 # Rewrite of fix8bit.c prompted by SuSE's ispell-3.2.06-languages.patch. # I wanted to make sure the patch wouldn't break anything, so I wrote a # test suite, but doing that I found lots of other things that were # wrong, so I started trying to fix those... # # Makefile: fixed dependencies for fix8bit, added 'test' target. The # test suite checks fix8bit's pushback routines, runs test_fix8bit (see # below) and checks a couple of additional properties: fix8bit -8 | # fix8bit -7 == cat; fix8bit -7 | fix8bit -7 == fix8bit -7. # # fix8bit.c: rewrote to8bit() to better handle cases when the # backslashed sequence turns out to be illegal. The initial backslash # is printed and the remaining characters are pushed back to be read # again. This means that for example \\x41 will print as \A, in the # same way that !\x41 produces !A. It also handles escape sequences # cut off by EOF properly (again they are printed unchanged). This uses # a mini pushback library which has a test suite if you give main() the # argument --test-pushback. Also fixed the original problem with hex # sequences being miscomputed, which SuSE wrote the patch for. Added a # warning if the input already contains 8-bit chars (that would stop # -8 | -7 being identity). # # test_fix8bit: new file. This is a Perl script to run fix8bit -7 and # fix8bit -8 on every input file in test_data/ and check the results # against the expected results also in that directory. # # test_data/: new directory. Contains test cases, some written by hand # and some randomly generated by rand_gen. rand_gen tries to make 'well # behaved' input that doesn't muck up fix8bit -8 | fix8bit -7 or other # commands - but there are three flags you can use to tell it not to. # The random test cases have not been checked by hand, so they should be # used in addition to human-written ones. # # Revision 1.2 2001/10/05 14:22:30 epa98 # Imported 3.2.06.epa1 release. This was previously developed using # sporadic RCS for certain files, but I'm not really bothered about # rolling back beyond this release. # # Revision 1.5 2001/07/25 21:51:47 geoff # *** empty log message *** # # Revision 1.4 2001/07/23 20:43:38 geoff # *** empty log message *** # # Revision 1.3 1994/01/25 07:12:25 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # SHELL = /bin/sh MAKE = make CONFIG = ../config.sh FIX8BIT = ../fix8bit all: fix8bit install: fix8bit: $(CONFIG) fix8bit.c @. $(CONFIG); \ set -x; \ $$CC $$CFLAGS -o fix8bit fix8bit.c # Note that individual languages are cleaned from the top-level Makefile. clean: rm -f core *.log fix8bit ispell-3.4.02/languages/PaxHeaders.22185/altamer0000644000000000000000000000013213776416114016156 xustar0030 mtime=1610226764.417065334 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/altamer/0000755003214100001440000000000013776416114017306 5ustar00geofffaculty00000000000000ispell-3.4.02/languages/altamer/PaxHeaders.22185/Makefile0000644000000000000000000000013212466001162017657 xustar0030 mtime=1423442546.603735112 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/altamer/Makefile0000444003214100001440000003057712466001162020744 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.10 2015-02-08 16:42:26-08 geoff Exp $ # # Copyright 1994, 2001, 2015, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This Makefile allows a single installation to build an alternate # American variant of ispell's English dictionary. It depends on the # languages/english directory for most of its input files. # # $Log: Makefile,v $ # Revision 1.10 2015-02-08 16:42:26-08 geoff # Support DESTDIR. Get rid of the old munchlist-suppressing code and # references to english.5. Use symbolic links instead of hard links; # symbolic links are safer. # # Revision 1.9 2015-02-08 01:11:55-08 geoff # Support DESTDIR. # # Revision 1.8 2005-04-14 14:27:39-07 geoff # Build english.5 as part of installation. # # Revision 1.7 2005/04/14 13:25:20 geoff # Update license. Drop unsq. Changes from Ed Avis: Allow LIBDIR to be # a relative path. Allow symbolic links as a configuration option. # # Revision 1.6 2001/07/25 21:51:48 geoff # *** empty log message *** # # Revision 1.5 2001/07/23 20:43:38 geoff # *** empty log message *** # # Revision 1.4 1999/01/07 01:23:22 geoff # Update the copyright. Get rid of the old shar-based dictioary building. # # Revision 1.3 1994/08/31 05:58:56 geoff # Create directories before installing into them, and be sure to set the # proper modes on manual pages. # # Revision 1.2 1994/05/17 06:37:43 geoff # Explicitly specify the affix files with a path so that initial # installation will work correctly. # # Revision 1.1 1994/04/27 02:46:22 geoff # Initial revision # # SHELL = /bin/sh MAKE = make CONFIG = ../../config.sh PATHADDER = ../.. BUILDHASH = ../../buildhash # The following variables should be set by the superior Makefile, # based on the LANGUAGES variable in config.X. # # There are four progressively-larger English dictionaries distributed # with ispell. These are named english.sml, english.med, english.lrg, # and english.xlg. For each of these, you can also build a "plus" # version (english.sml+, etc.) which is created by combining the # distributed version with an "extra" dictionary defined by EXTRADICT, # usually /usr/share/dict/words. The "plus" versions of dictionaries # require lots of time and temporary file space; make sure you have # set TMPDIR appropriately. # # The dictionaries to be built are listed in the MASTERDICTS variable, # separated by spaces. The hash files to be built (and installed) are # listed in the HASHFILES variable. Hash files are named as # "altamer.hash", where is the suffix of dictionary (e.g., # "med+"). The first-listed hash file will also be installed under # the name "altamer.hash". As a general rule, the dictionaries # needed to build the HASHFILES must be listed in the MASTERDICTS # variable. # # If you change AFFIXES for english, you should consider also changing # DEFLANG (in config.X) to match. # MASTERDICTS = Use_LANGUAGES_from_config.X HASHFILES = Use_LANGUAGES_from_config.X EXTRADICT = Use_LANGUAGES_from_config.X # # The following variables may be overridden by the superior Makefile, # based on the LANGUAGES variable in config.X. # AFFIXES = english.aff LANGUAGE = altamer # # DICTSRC specifies where the dictionary sources are found. You # should not have to change this. # DICTSRC = ../english # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: $(CONFIG) @set $(SHELLDEBUG); \ if [ ! -r english.0 ]; \ then \ $(MAKE) SHELLDEBUG=$(SHELLDEBUG) dictcomponents; \ else \ : ; \ fi @set $(SHELLDEBUG); \ for dict in $(MASTERDICTS); do \ if [ ! -r $$dict ]; \ then \ $(MAKE) \ 'EXTRADICT=$(EXTRADICT)' 'DICTSRC=$(DICTSRC)' \ SHELLDEBUG=$(SHELLDEBUG) $$dict; \ else \ : ; \ fi; \ done $(MAKE) SHELLDEBUG=$(SHELLDEBUG) $(HASHFILES) # Note the fooling around with LIBDIR. It might be a relative path, # relative to the top of the ispell source tree. So we have to cd to # ../.. before referring to $LIBDIR. There must be a better way... # install: all $(CONFIG) @. $(CONFIG); \ set -x; \ cd ../..; \ [ -d $(DESTDIR)$$LIBDIR ] || \ $(MAKE) -f Makefile NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ cd $(DESTDIR)$$LIBDIR; rm -f english.aff $(HASHFILES) $(LANGUAGE).hash @. $(CONFIG); \ set -x; \ cp $(DICTSRC)/english.aff $(HASHFILES) \ `cd ../..; cd $(DESTDIR)$$LIBDIR; pwd` @. $(CONFIG); \ set -x; \ cd ../..; cd $(DESTDIR)$$LIBDIR; \ chmod 644 english.aff $(HASHFILES); \ for i in $(HASHFILES); do \ $$LINK -s $$i $(LANGUAGE).hash; \ break; \ done # # Dependencies to build extra hash files # allhashes: normhashes plushashes normhashes: altamersml.hash altamermed.hash normhashes: altamerlrg.hash altamerxlg.hash plushashes: altamersml+.hash altamermed+.hash plushashes: altamerlrg+.hash altamerxlg+.hash altamersml.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) altamer.sml rm -f altamersml.hash $(BUILDHASH) altamer.sml $(DICTSRC)/$(AFFIXES) altamersml.hash altamersml+.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) altamer.sml+ rm -f altamersml+.hash $(BUILDHASH) altamer.sml+ $(DICTSRC)/$(AFFIXES) altamersml+.hash altamermed.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) altamer.med rm -f altamermed.hash $(BUILDHASH) altamer.med $(DICTSRC)/$(AFFIXES) altamermed.hash altamermed+.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) altamer.med+ rm -f altamermed+.hash $(BUILDHASH) altamer.med+ $(DICTSRC)/$(AFFIXES) altamermed+.hash altamerlrg.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) altamer.lrg rm -f altamerlrg.hash $(BUILDHASH) altamer.lrg $(DICTSRC)/$(AFFIXES) altamerlrg.hash altamerlrg+.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) altamer.lrg+ rm -f altamerlrg+.hash $(BUILDHASH) altamer.lrg+ $(DICTSRC)/$(AFFIXES) altamerlrg+.hash altamerxlg.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) altamer.xlg rm -f altamerxlg.hash $(BUILDHASH) altamer.xlg $(DICTSRC)/$(AFFIXES) altamerxlg.hash altamerxlg+.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) altamer.xlg+ rm -f altamerxlg+.hash $(BUILDHASH) altamer.xlg+ $(DICTSRC)/$(AFFIXES) altamerxlg+.hash # # The eight dictionaries, altamer.sml through altamer.xlg+, are # built by the following dependencies. We used to use some # Makefile tricks to avoid running munchlist unnecessarily, but # that leads to mistakes, and modern machines run munchlist fast # enough that it's no longer worth suppressing. # alldicts: normdicts plusdicts normdicts: altamer.sml normdicts: altamer.med normdicts: altamer.lrg normdicts: altamer.xlg plusdicts: altamer.sml+ plusdicts: altamer.med+ plusdicts: altamer.lrg+ plusdicts: altamer.xlg+ altamer.sml: english.sml rm -f altamer.sml @. $(CONFIG); \ set -x; \ $$LINK -s english.sml altamer.sml english.sml: $(CONFIG) english.sml: english.0 english.sml: altamer.0 $(MAKE) -f $(DICTSRC)/Makefile \ 'VARIANTS=american altamer' \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.sml altamer.sml+: english.sml+ rm -f altamer.sml+ @. $(CONFIG); \ set -x; \ $$LINK -s english.sml+ altamer.sml+ english.sml+: $(CONFIG) english.sml+: english.0 english.sml+: altamer.0 $(MAKE) -f $(DICTSRC)/Makefile \ 'VARIANTS=american altamer' \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.sml+ altamer.med: english.med rm -f altamer.med @. $(CONFIG); \ set -x; \ $$LINK -s english.med altamer.med english.med: $(CONFIG) english.med: english.0 english.med: altamer.0 $(MAKE) -f $(DICTSRC)/Makefile \ 'VARIANTS=american altamer' \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.med altamer.med+: english.med+ rm -f altamer.med+ @. $(CONFIG); \ set -x; \ $$LINK -s english.med+ altamer.med+ english.med+: $(CONFIG) english.med+: english.0 english.med+: altamer.0 $(MAKE) -f $(DICTSRC)/Makefile \ 'VARIANTS=american altamer' \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.med+ altamer.lrg: english.lrg rm -f altamer.lrg @. $(CONFIG); \ set -x; \ $$LINK -s english.lrg altamer.lrg english.lrg: $(CONFIG) english.lrg: english.0 english.lrg: altamer.0 $(MAKE) -f $(DICTSRC)/Makefile \ 'VARIANTS=american altamer' \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.lrg altamer.lrg+: english.lrg+ rm -f altamer.lrg+ @. $(CONFIG); \ set -x; \ $$LINK -s english.lrg+ altamer.lrg+ english.lrg+: $(CONFIG) english.lrg+: english.0 english.lrg+: altamer.0 $(MAKE) -f $(DICTSRC)/Makefile \ 'VARIANTS=american altamer' \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.lrg+ altamer.xlg: english.xlg rm -f altamer.xlg @. $(CONFIG); \ set -x; \ $$LINK -s english.xlg altamer.xlg english.xlg: $(CONFIG) english.xlg: english.0 english.xlg: altamer.0 $(MAKE) -f $(DICTSRC)/Makefile \ 'VARIANTS=american altamer' \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.xlg altamer.xlg+: english.xlg+ rm -f altamer.xlg+ @. $(CONFIG); \ set -x; \ $$LINK -s english.xlg+ altamer.xlg+ english.xlg+: $(CONFIG) english.xlg+: english.0 english.xlg+: altamer.0 $(MAKE) -f $(DICTSRC)/Makefile \ 'VARIANTS=american altamer' \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.xlg+ # # Dependencies to create the components of the dictionaries, # preferably by linking. We create some components that we'll # never use because the master English Makefile requires them. # dictcomponents: english.0 dictcomponents: english.1 dictcomponents: english.2 dictcomponents: english.3 dictcomponents: american.0 dictcomponents: american.1 dictcomponents: american.2 dictcomponents: altamer.0 dictcomponents: altamer.1 dictcomponents: altamer.2 dictcomponents: british.0 dictcomponents: british.1 dictcomponents: british.2 english.0 english.1 english.2 english.3 \ american.0 american.1 american.2 \ altamer.0 altamer.1 altamer.2 \ british.0 british.1 british.2: rm -f english.[0-3] american.[0-2] altamer.[012] british.[012] @set $(SHELLDEBUG); \ . $(CONFIG); \ for i in english.0 english.1 english.2 english.3 \ american.0 american.1 american.2 altamer.0 altamer.1 altamer.2 \ british.0 british.1 british.2; do \ $$LINK -s $(DICTSRC)/$$i . || $$LINK $(DICTSRC)/$$i . \ || cp $(DICTSRC)/$$i .; \ done clean: rm -f core *.hash *.stat *.cnt # # The following target allows you to clean out the combined # dictionary files. # dictclean: rm -f english.[0-3] american.[0-3] altamer.[0-3] british.[0-3] rm -f *.sml *.sml+ *.med *.med+ *.lrg *.lrg+ *.xlg *.xlg+ ispell-3.4.02/languages/PaxHeaders.22185/Where0000644000000000000000000000007407504564601015605 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/Where0000444003214100001440000000177107504564601016657 0ustar00geofffaculty00000000000000Ispell is distributed with dictionaries and affix files for the British and American variants of the English language. For other languages, you will need to download a dictionary and affix file for each language. (Affix files for languages other than English are no longer distributed with ispell, due to the difficulty of keeping them up to date.) If you install your dictionaries and affix files into the proper directories with correct Makefiles, you can add extra languages to the "LANGUAGES" variable in local.h and your extra dictionaries will be created automatically. To help you with this task, ispell is distributed with sample Makefiles for several common languages. To find dictionaries and affix files, visit the ispell dictionaries web page at: http://www.lasr.cs.ucla.edu/geoff/ispell-dictionaries.html This page is expected to move in the future, but a forwarding page will remain. More ispell information can be found at the ispell home page: http://www.lasr.cs.ucla.edu/geoff/ispell.html ispell-3.4.02/languages/PaxHeaders.22185/deutsch0000644000000000000000000000013213776416114016170 xustar0030 mtime=1610226764.417065334 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/deutsch/0000755003214100001440000000000013776416114017320 5ustar00geofffaculty00000000000000ispell-3.4.02/languages/deutsch/PaxHeaders.22185/Makefile0000644000000000000000000000013212465624133017701 xustar0030 mtime=1423386715.366462936 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/deutsch/Makefile0000444003214100001440000001426412465624133020761 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.15 2015-02-08 01:11:55-08 geoff Exp $ # # Copyright 1993, 2001, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This makefile is an example of how you might write a makefile for a # simple language which has only a single dictionary available. For # an example of a complex makefile, look at the makefile for English. # # $Log: Makefile,v $ # Revision 1.15 2015-02-08 01:11:55-08 geoff # Support DESTDIR. # # Revision 1.14 2005-04-13 17:05:48-07 geoff # Update license. Drop unsq. Allow LIBDIR to be a relative path. # # Revision 1.13 2001/07/25 21:51:47 geoff # *** empty log message *** # # Revision 1.12 2001/07/23 20:43:37 geoff # *** empty log message *** # # Revision 1.11 1994/08/31 05:58:47 geoff # Create directories before installing into them. # # Revision 1.10 1994/05/25 04:29:34 geoff # Purge Martin Schulz's obsolete e-mail address from the file. # # Revision 1.9 1994/02/22 06:09:08 geoff # Add SHELLDEBUG. # # Revision 1.8 1994/02/07 06:18:03 geoff # Use MAKE_SORTTMP when building the dictionary # # Revision 1.7 1994/02/07 06:07:57 geoff # Add a dummy else clause to shell if-test for Ultrix # # Revision 1.6 1994/01/25 07:12:30 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # SHELL = /bin/sh MAKE = make CONFIG = ../../config.sh PATHADDER = ../.. BUILDHASH = ../../buildhash FIX8BIT = ../fix8bit # The following variables should be set by the superior Makefile, # based on the LANGUAGES variable in config.X. # # The German dictionary I use is due to Martin Schulz, Moncton, New # Brunswick, Canada. It is not distributed with ispell due to its # size, but is available for ftp (see the languages/Where file for # locations). # # Martin's dictionary has been broken up into a number of sub-files # which can be combined to make a master dictionary. See the files # README or LIESMICH for more information on what these sub-files # contain. # # The DICTOPTIONS variable should be set to a list of one or more files, # separated by spaces, and selected from the following options: # # abkuerz.txt abweichend.txt compeng.txt elektronik.txt # geographie.txt infoabk.txt informatik.txt namen.txt # seltenes.txt technik.txt zusammen.txt # # # If you change DICTOPTIONS in your local.h file, you will have to do # "make dictclean" to clear out the old dictionary before you re-make. # DICTALWAYS = adjektive.txt worte.txt verben.txt DICTOPTIONS = Use_LANGUAGES_from_config.X # # The following variables may be overridden by the superior Makefile, # based on the LANGUAGES variable in config.X. Note that selection of # the affix file is closely related to the dictionary chosen; don't # change the affix file unless you know what you are doing! # AFFIXES = deutsch.aff # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: deutsch.hash install: all $(CONFIG) @. $(CONFIG); \ set -x; \ cd ../..; \ [ -d $(DESTDIR)$$LIBDIR ] || \ $(MAKE) -f Makefile NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ cd $(DESTDIR)$$LIBDIR; rm -f deutsch.aff deutsch.hash @. $(CONFIG); \ set -x; \ cp deutsch.aff deutsch.hash \ `cd ../..; cd $(DESTDIR)$$LIBDIR; pwd` @. $(CONFIG); \ set -x; \ cd ../..; cd $(DESTDIR)$$LIBDIR; \ chmod 644 deutsch.aff deutsch.hash deutsch.hash: $(BUILDHASH) $(AFFIXES) deutsch.dict rm -f deutsch.hash $(BUILDHASH) deutsch.dict $(AFFIXES) deutsch.hash $(AFFIXES): deutsch.7bit $(FIX8BIT) $(FIX8BIT) -8 < deutsch.7bit > $(AFFIXES) deutsch-alt.aff: deutsch-alt.7bit $(FIX8BIT) $(FIX8BIT) -8 < deutsch-alt.7bit > deutsch-alt.aff $(FIX8BIT): ../fix8bit.c cd ..; $(MAKE) fix8bit deutsch.dict: $(DICTALWAYS) $(DICTOPTIONS) . $(CONFIG); \ eval sort -f -o deutsch.dict $$MAKE_SORTTMP \ $(DICTALWAYS) $(DICTOPTIONS) # # The following dependency can be executed when ispell is unpacked, # to unpack the dictionaries. # unpack: $(AFFIXES) clean: rm -f core *.hash *.stat *.cnt # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # kitclean: # # The following target allows you to clean out the combined # dictionary file. # dictclean: rm -f deutsch.dict # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # dictclean: ispell-3.4.02/languages/PaxHeaders.22185/dansk0000644000000000000000000000013213776416114015631 xustar0030 mtime=1610226764.417065334 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/dansk/0000755003214100001440000000000013776416114016761 5ustar00geofffaculty00000000000000ispell-3.4.02/languages/dansk/PaxHeaders.22185/Makefile0000644000000000000000000000013212465624133017342 xustar0030 mtime=1423386715.361462902 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/languages/dansk/Makefile0000444003214100001440000001116412465624133020416 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.11 2015-02-08 01:11:55-08 geoff Exp $ # # Copyright 1993, 2001, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This makefile is an example of how you might write a makefile for a # simple language which has only a single dictionary available. For # an example of a complex makefile, look at the makefile for English. # # $Log: Makefile,v $ # Revision 1.11 2015-02-08 01:11:55-08 geoff # Support DESTDIR. # # Revision 1.10 2005-04-13 17:08:01-07 geoff # Update license. Drop unsq. Allow LIBDIR to be a relative path. # # Revision 1.9 2001/07/25 21:51:48 geoff # *** empty log message *** # # Revision 1.8 2001/07/23 20:43:38 geoff # *** empty log message *** # # Revision 1.7 1994/08/31 05:59:01 geoff # Create directories before installing into them. # # Revision 1.6 1994/02/22 06:09:15 geoff # Add SHELLDEBUG. # # Revision 1.5 1994/02/07 06:07:57 geoff # Add a dummy else clause to shell if-test for Ultrix # # Revision 1.4 1994/01/25 07:12:28 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # SHELL = /bin/sh MAKE = make CONFIG = ../../config.sh PATHADDER = ../.. BUILDHASH = ../../buildhash FIX8BIT = ../fix8bit # # The following variables make it easy to adapt this Makefile to # numerous languages. # LANGUAGE = dansk DICTIONARY = $(LANGUAGE).sml HASHFILE = $(LANGUAGE).hash # # The following variables may be overridden by the superior Makefile, # based on the LANGUAGES variable in config.X. # AFFIXES = $(LANGUAGE).aff # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: $(HASHFILE) install: all $(CONFIG) @. $(CONFIG); \ set -x; \ cd ../..; \ [ -d $(DESTDIR)$$LIBDIR ] || \ $(MAKE) -f Makefile NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ @. $(CONFIG); \ set -x; \ cp $(LANGUAGE).aff $(HASHFILE) \ `cd ../..; cd $(DESTDIR)$$LIBDIR; pwd` @. $(CONFIG); \ set -x; \ cd ../..; cd $(DESTDIR)$$LIBDIR; \ chmod 644 $(LANGUAGE).aff $(HASHFILE) $(HASHFILE): $(BUILDHASH) $(AFFIXES) $(DICTIONARY) rm -f $(HASHFILE) $(BUILDHASH) $(DICTIONARY) $(AFFIXES) $(HASHFILE) $(AFFIXES): $(LANGUAGE).7bit $(FIX8BIT) $(FIX8BIT) -8 < $(LANGUAGE).7bit > $(AFFIXES) $(FIX8BIT): ../fix8bit.c cd ..; $(MAKE) fix8bit # # The following dependency can be executed when ispell is unpacked, # to unpack the dictionaries. # unpack: $(AFFIXES) clean: rm -f core *.hash *.stat *.cnt # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # kitclean: # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # dictclean: ispell-3.4.02/PaxHeaders.22185/makedict.sh0000644000000000000000000000007410227500137014745 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/makedict.sh0000555003214100001440000000651010227500137016016 0ustar00geofffaculty00000000000000: Use /bin/sh # # $Id: makedict.sh,v 1.13 2005/04/14 14:38:23 geoff Exp $ # # Copyright 1987, 1988, 1989, 1992, 1993, 1999, 2001, Geoff Kuenning, # Claremont, CA. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # Make a beginning dictionary file for ispell, using an existing # speller. # # Usage: # # makedict file-list # # The specified files are collected, split into words, and run through # the system speller (usually spell(1)). Any words that the speller # accepts will be written to the standard output for use in making # an ispell dictionary. Usually, you will want to run the output # of this script through "munchlist" to get a final dictionary. # # $Log: makedict.sh,v $ # Revision 1.13 2005/04/14 14:38:23 geoff # Update license. # # Revision 1.12 2001/07/25 21:51:46 geoff # Minor license update. # # Revision 1.11 2001/07/23 20:24:04 geoff # Update the copyright and the license. # # Revision 1.10 1999/01/07 01:22:58 geoff # Update the copyright. # # Revision 1.9 1994/01/25 07:11:53 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # # This program must produce a list of INCORRECTLY spelled words on standard # output, given a list of words on standard input. If you don't have a # speller, but do have a lot of correctly-spelled files, try /bin/true. # SPELLPROG="${SPELLPROG-spell}" TMP=${TMPDIR-/tmp}/mkdict$$ case "$#" in 0) set X - shift ;; esac trap "/bin/rm ${TMP}; exit 1" 1 2 15 cat "$@" | deroff | tr -cs "[A-Z][a-z]'" '[\012*]' | sort -uf -o ${TMP} $SPELLPROG < ${TMP} | comm -13 - ${TMP} /bin/rm ${TMP} ispell-3.4.02/PaxHeaders.22185/deformatters0000644000000000000000000000013213776416114015262 xustar0030 mtime=1610226764.421065341 30 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/deformatters/0000755003214100001440000000000013776416114016412 5ustar00geofffaculty00000000000000ispell-3.4.02/deformatters/PaxHeaders.22185/defmt-c.c0000644000000000000000000000007407504567631017032 xustar0030 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/deformatters/defmt-c.c0000644003214100001440000001637307504567631020112 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: deformat-c.c,v 1.3 2001/07/25 21:51:48 geoff Exp geoff $"; #endif /* * Simple deformatter for C/C++ strings and comments. * * Copyright 2001, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * Since the new ANSI C9X standard supports //-style comments, this * deformatter does not distinguish between the languages. There are * some pathological cases where it might produce the wrong result on * older C programs, but since those programs will become illegal * under C9X, it's not worth supporting them. * * This deformatter is rather stupid; it shouldn't be run on programs * that have syntax errors. */ /* * $Log: deformat-c.c,v $ * Revision 1.3 2001/07/25 21:51:48 geoff * *** empty log message *** * * Revision 1.2 2001/07/23 20:43:38 geoff * *** empty log message *** * * Revision 1.1 2001/06/07 07:23:54 geoff * Initial revision * */ #include #ifndef NO_FCNTL_H #include #if defined(O_BINARY) && O_BINARY #include #define SET_BINARY(fd) do \ { \ if (!isatty (fd)) \ setmode (fd, O_BINARY); \ } while (0) #else #define SET_BINARY(fd) /* Nothing needed */ #endif /* O_BINARY */ #endif /* NO_FCNTL_H */ int main (); /* Filter to select C/C++ comments */ static int igetchar (); /* Read one character from stdin */ static int do_slashstar (); /* Handle C-style comments */ static int do_slashslash (); /* Handle C++-style comments */ static int do_singlequote (); /* Handle single-quoted strings */ static int do_doublequote (); /* Handle double-quoted strings */ int main (argc, argv) int argc; /* Argument count */ char * argv[]; /* Argument vector */ { int c; /* Next character read from stdin */ /* * Since the deformatter needs to produce exactly one character * of output for each character of input, we need to preserve * the end-of-line format (Unix Newline or DOS CR-LF) of the * input file. This means we must do binary I/O. */ SET_BINARY (fileno (stdin)); SET_BINARY (fileno (stdout)); while ((c = igetchar ()) != EOF) { if (c == '/') { putchar (' '); if ((c = igetchar ()) == EOF) break; else if (c == '*') { if (do_slashstar()) break; } else if (c == '/') { if (do_slashslash()) break; } else putchar (' '); } else if (c == '\'') { if (do_singlequote()) break; } else if (c == '"') { if (do_doublequote()) break; } else if (c == '\n' || c == '\r') putchar (c); else putchar (' '); } return 0; } /* * Like getchar, except on MSDOS, where it knows about ^Z. */ static int igetchar () { int c = getchar (); #ifdef MSDOS if (c == '\032') /* ^Z is a kind of ``software EOF'' */ c = EOF;; #endif return c; } /* * Handle C-style comments, passing their contents through unchanged. */ static int do_slashstar () { int c; /* Next character from stdin */ putchar (' '); /* Create blank to cover for the star */ while ((c = igetchar ()) != EOF) { if (c != '*') putchar (c); else { if ((c = igetchar ()) == EOF) return 1; /* EOF hit, caller must terminate loop */ if (c == '/') { putchar (' '); putchar (' '); return 0; /* Done with comment, continue deformatting */ } putchar ('*'); putchar (c); } } return 1; /* EOF hit, caller must terminate loop */ } /* * Handle C++-style comments, passing their contents through unchanged. */ static int do_slashslash () { int c; /* Next character from stdin */ putchar (' '); /* Create blank to cover for 2nd slash */ while ((c = igetchar ()) != EOF) { putchar (c); if (c == '\n') return 0; /* End of comment, continue deformatting */ } return 1; /* EOF hit, caller must terminate loop */ } /* * Handle single-quoted strings by whiting them out (but not getting confused * if they contain embedded slashes or double quotes). */ static int do_singlequote () { int c; /* Next character from stdin */ putchar (' '); /* Create blank to cover for the quote */ while ((c = igetchar ()) != EOF) { putchar (' '); if (c == '\'') return 0; /* End of quotes, continue deformatting */ else if (c == '\\') { if ((c = igetchar ()) == EOF) return 1; putchar (' '); } } return 1; /* EOF hit, caller must terminate loop */ } /* * Handle double-quoted strings, passing their contents through unchanged. */ static int do_doublequote () { int c; /* Next character from stdin */ putchar (' '); /* Create blank to cover for the quote */ while ((c = igetchar ()) != EOF) { if (c == '"') { putchar (' '); return 0; /* End of quotes, continue deformatting */ } else if (c == '\\') { /* * Backslashed stuff is tricky to handle, because it might * contain a magic nroff or TeX character, but in that case * a doubled backslash would have to be converted to single. * That's too hard, so we'll settle for just passing the double * backslash through. If you want to spell-check that kind of * sequence, you'll have to create a new character-set type in * your affix file. */ putchar ('\\'); if ((c = igetchar ()) == EOF) return 1; putchar (c); } else putchar (c); } return 1; /* EOF hit, caller must terminate loop */ } ispell-3.4.02/deformatters/PaxHeaders.22185/README0000644000000000000000000000007410227330506016210 xustar0030 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/deformatters/README0000444003214100001440000000044710227330506017261 0ustar00geofffaculty00000000000000The enclosed programs are sample deformatters provided primarily to show how to write filters for use with ispell's -F switch. They allow ispell to be used to check C and C++ programs as well as shell scripts (and any other languages that use # for comments and both quote styles for strings). ispell-3.4.02/deformatters/PaxHeaders.22185/defmt-sh.c0000644000000000000000000000007407504567672017227 xustar0030 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/deformatters/defmt-sh.c0000644003214100001440000001346107504567672020302 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: deformat-sh.c,v 1.4 2001/07/25 21:51:48 geoff Exp geoff $"; #endif /* * Simple deformatter for sh/bash scripts. * * Copyright 2001, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */ /* * $Log: deformat-sh.c,v $ * Revision 1.4 2001/07/25 21:51:48 geoff * *** empty log message *** * * Revision 1.3 2001/07/23 20:43:38 geoff * *** empty log message *** * * Revision 1.2 2001/06/07 08:03:54 geoff * Don't interpret $# as a comment introduction. * * Revision 1.1 2001/06/07 07:23:54 geoff * Initial revision * */ #include #ifndef NO_FCNTL_H #include #if defined(O_BINARY) && O_BINARY #include #define SET_BINARY(fd) do \ { \ if (!isatty (fd)) \ setmode (fd, O_BINARY); \ } while (0) #else #define SET_BINARY(fd) /* Nothing needed */ #endif /* O_BINARY */ #endif /* NO_FCNTL_H */ int main (); /* Filter to select sh/bash comments */ static int igetchar (); /* Read one character from stdin */ static int do_comment (); /* Handle comments */ static int do_quote (); /* Handle quoted strings */ int main (argc, argv) int argc; /* Argument count */ char * argv[]; /* Argument vector */ { int c; /* Next character read from stdin */ /* * Since the deformatter needs to produce exactly one character * of output for each character of input, we need to preserve * the end-of-line format (Unix Newline or DOS CR-LF) of the * input file. This means we must do binary I/O. */ SET_BINARY (fileno (stdin)); SET_BINARY (fileno (stdout)); while ((c = igetchar ()) != EOF) { if (c == '\\') { putchar (' '); if ((c = igetchar ()) == EOF) break; if (c == '\n' || c == '\r') putchar (c); else putchar (' '); } else if (c == '#') { if (do_comment()) break; } else if (c == '\'' || c == '"') { if (do_quote(c)) break; } else if (c == '$') { /* * $ might be followed by #, in which case it's not a comment * start. So we skip the character immediately after the $. */ putchar (' '); if ((c = igetchar ()) == EOF) break; putchar (' '); } else if (c == '\n' || c == '\r') putchar (c); else putchar (' '); } return 0; } /* * Like getchar, except on MSDOS, where it knows about ^Z. */ static int igetchar () { int c = getchar (); #ifdef MSDOS if (c == '\032') /* ^Z is a kind of ``software EOF'' */ c = EOF;; #endif return c; } /* * Handle shell comments, passing their contents through unchanged. */ static int do_comment () { int c; /* Next character from stdin */ putchar (' '); /* Create blank to cover for pound sign */ while ((c = igetchar ()) != EOF) { putchar (c); if (c == '\n') return 0; /* End of comment, continue deformatting */ } return 1; /* EOF hit, caller must terminate loop */ } /* * Handle quoted strings, passing their contents through unchanged. */ static int do_quote(qc) int qc; /* Character that started the quote section */ { int c; /* Next character from stdin */ putchar (' '); /* Create blank to cover for the quote */ while ((c = igetchar ()) != EOF) { if (c == qc) { putchar (' '); return 0; /* End of quotes, continue deformatting */ } else if (c == '\\') { /* * Backslashed stuff is tricky to handle, because it might * contain a magic nroff or TeX character, but in that case * a doubled backslash would have to be converted to single. * That's too hard, so we'll settle for just passing the double * backslash through. If you want to spell-check that kind of * sequence, you'll have to create a new character-set type in * your affix file. */ putchar ('\\'); if ((c = igetchar ()) == EOF) return 1; putchar (c); } else putchar (c); } return 1; /* EOF hit, caller must terminate loop */ } ispell-3.4.02/deformatters/PaxHeaders.22185/Makefile0000644000000000000000000000013212465624061016773 xustar0030 mtime=1423386673.988273506 30 atime=1610226764.421065341 30 ctime=1610226764.421065341 ispell-3.4.02/deformatters/Makefile0000444003214100001440000000661512465624061020054 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.9 2015-02-08 01:11:13-08 geoff Exp $ # # Copyright 2001, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # # $Log: Makefile,v $ # Revision 1.9 2015-02-08 01:11:13-08 geoff # Support DESTDIR # # Revision 1.8 2015-02-08 00:56:20-08 geoff # Change executable names and fix a few misuses of make. # # Revision 1.7 2005/05/01 23:04:58 geoff # Add EXEEXT to executables for DOS portability (courtesy of Eli Zaretskii). # # Revision 1.6 2004/06/02 06:30:28 geoff # Add .c: and .o: rules so proper flags are always used. # # Revision 1.5 2004/06/02 06:28:12 geoff # Minor license update # # Revision 1.4 2001/09/06 00:35:18 geoff # Shorten names so that the deformatters can be built on MS-DOS. # # Revision 1.3 2001/07/25 21:51:48 geoff # *** empty log message *** # # Revision 1.2 2001/07/23 20:43:38 geoff # *** empty log message *** # # Revision 1.1 2001/06/07 07:23:54 geoff # Initial revision # # SHELL = /bin/sh MAKE = make PROGRAMS = defmt-c$(EXEEXT) defmt-sh$(EXEEXT) all: $(PROGRAMS) defmt-c: defmt-c.o @. ../config.sh; \ set -x; \ $$CC $$CFLAGS -o $@ $< defmt-sh: defmt-sh.o @. ../config.sh; \ set -x; \ $$CC $$CFLAGS -o $@ $< .c.o: @. ../config.sh; \ set -x; \ $$CC $$CFLAGS -c $< install: all @. ../config.sh; \ set -x; \ rm -f $(DESTDIR)$$BINDIR/defmt-c $(DESTDIR)$$BINDIR/defmt-sh @. ../config.sh; \ set -x; \ $$INSTALL $(PROGRAMS) $(DESTDIR)$$BINDIR @. ../config.sh; \ set -x; \ cd $(DESTDIR)$$BINDIR; \ strip $(PROGRAMS); \ chmod 755 $(PROGRAMS) clean: rm -f *.o core a.out mon.out $(PROGRAMS) realclean veryclean: clean ispell-3.4.02/PaxHeaders.22185/parse.y0000644000000000000000000000013213776416103014142 xustar0030 mtime=1610226755.277053695 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/parse.y0000444003214100001440000015255013776416103015223 0ustar00geofffaculty00000000000000%{ #ifndef lint static char Rcs_Id[] = "$Id: parse.y,v 1.67 2021-01-09 13:12:35-08 geoff Exp $"; #endif /* * Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: parse.y,v $ * Revision 1.67 2021-01-09 13:12:35-08 geoff * Fix some warnings generated by the new version of bison. Change * addstringchar to sort stringchars with the character type as the major * key and the character itself as the secondary key. * * Revision 1.66 2020-12-30 22:33:41-08 geoff * Add support for character-set options. * * Revision 1.65 2005-04-20 16:16:32-07 geoff * Rename some variables to make them more meaningful. Add (disabled) * code to detect cases where not all alternate string characters are * defined. Add (disabled) code to detect duplicate alternate string * character definitions. Rewrite the code that assigns group numbers to * string chracters, making it faster and more robust. * * Revision 1.64 2005/04/14 14:38:23 geoff * Update license. Get rid of a stray semicolon that's been there for * over a decade. For 64 mask bits, allow the non-alphabetic flag * characters that fall between 'Z' and 'a'. * * Revision 1.63 2002/06/20 23:46:16 geoff * Fix a bug in flag checking when using 64 mask bits. * * Revision 1.62 2001/09/06 00:30:29 geoff * Changes from Eli Zaretskii to support DJGPP compilation. * * Revision 1.61 2001/07/25 21:51:46 geoff * Minor license update. * * Revision 1.60 2001/07/23 20:24:04 geoff * Update the copyright and the license. * * Revision 1.59 2000/08/22 10:52:25 geoff * Fix a whole bunch of signed/unsigned discrepancies. * * Revision 1.58 2000/02/07 22:16:53 geoff * Fix a minor typo in a synonym * * Revision 1.57 1999/01/18 03:28:40 geoff * Turn many char declarations into unsigned char, so that we won't have * sign-extension problems. * * Revision 1.56 1999/01/07 01:23:11 geoff * Update the copyright. * * Revision 1.55 1999/01/03 01:46:41 geoff * Add support for the "plain" deformatters. * * Revision 1.54 1997/12/02 06:25:04 geoff * Get rid of some compile options that really shouldn't be optional. * * Revision 1.53 1995/11/08 05:09:22 geoff * Allow html/sgml as a deformatter type. * * Revision 1.52 1994/11/21 07:03:03 geoff * Get rid of the last vestiges of the "+" flag option. * * Revision 1.51 1994/11/02 06:56:13 geoff * Remove the anyword feature, which I've decided is a bad idea. * * Revision 1.50 1994/10/25 05:46:22 geoff * Add support for the "+" (any word) flag modifier. * * Revision 1.49 1994/09/16 04:48:30 geoff * Allow more than 128 string characters, by using different types in the * appropriate places. * * Revision 1.48 1994/05/24 05:31:25 geoff * Remember to convert the flag bit from a character to a bit number * before putting it in the hash file. * * Revision 1.47 1994/05/24 04:54:33 geoff * Improve the error checking for affix flag names, detecting bad flags * and duplicates. * * Revision 1.46 1994/05/22 01:38:02 geoff * Don't force flags to uppercase if lowercase flags are legal * * Revision 1.45 1994/05/17 06:44:17 geoff * Add support for controlled compound formation and the COMPOUNDONLY * option to affix flags. * * Revision 1.44 1994/02/07 05:51:03 geoff * Fix a place where atoi got the wrong argument type (lint error only) * * Revision 1.43 1994/01/25 07:12:01 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include #include "config.h" #include "ispell.h" #include "proto.h" #include "msgs.h" %} %union { int simple; /* Simple char or lval from yylex */ struct { unsigned char * set; /* Character set */ int complement; /* NZ if it is a complement set */ } charset; unsigned char * string; /* String */ ichar_t * istr; /* Internal string */ struct flagent * entry; /* Flag entry */ } %{ static int yylex P ((void)); /* Trivial lexical analyzer */ static int kwanalyze P ((int backslashed, unsigned char * str)); /* Analyze a possible keyword */ static void getqstring P ((void)); /* Get (double-)quoted string */ static void getrange P ((void)); /* Get a lexical character range */ static int backch P ((void)); /* Process a backslashed character */ static void yyerror P ((char * msg)); /* Print out an error message */ int yyopen P ((char * file)); /* Open a table file */ void yyinit P ((void)); /* Initialize for parsing */ static int grabchar P ((void)); /* Get a character and track line number */ static void ungrabchar P ((int ch)); /* Unget a character, tracking line numbers */ static int sufcmp P ((struct flagent * flag1, struct flagent * flag2)); /* Compare suffix flags for qsort */ static int precmp P ((struct flagent * flag1, struct flagent * flag2)); /* Compare prefix flags for qsort */ static int addstringchar P ((unsigned char * str, int lower, int upper)); /* Add a string character to the table */ static int stringcharcmp P ((unsigned char * a, unsigned char * b)); /* Strcmp() done right, for Sun 4's */ #ifdef TBLDEBUG static void tbldump P ((struct flagent * flagp, int numflags)); /* Dump a flag table */ static void entdump P ((struct flagent * flagp)); /* Dump one flag entry */ static void setdump P ((unsigned char * setp, int mask)); /* Dump a set specification */ static void subsetdump P ((unsigned char * setp, int mask, int dumpval)); /* Dump part of a set spec */ #endif struct kwtab { char * kw; /* Syntactic keyword */ int val; /* Lexical value */ }; #define TBLINC 10 /* Size to allocate table by */ static FILE * aff_file = NULL; /* Input file pointer */ static int centnum; /* Number of entries in curents */ static int centsize = 0; /* Size of alloc'ed space in curents */ static int ctypechars; /* Size of string in current strtype */ static int ctypenum = 0; /* Number of entries in chartypes */ static int ctypesize = 0; /* Size of alloc'ed spc in chartypes */ static struct flagent * curents; /* Current flag entry collection */ static char * fname = "(stdin)"; /* Current file name */ static char lexungrab[MAXSTRINGCHARLEN * 2]; /* Spc for ungrabch */ static int lineno = 1; /* Current line number in file */ static int nbasestrings = 0; /* Number of base stringchars */ static struct flagent * table; /* Current table being built */ static int tblnum; /* Numer of entries in table */ static int tblsize = 0; /* Size of the flag table */ static int ungrablen; /* Size of ungrab area */ %} %token '-' %token '>' %token ',' %token ':' %token '.' %token '*' %token '~' %token ALLAFFIXES %token ALTSTRINGCHAR %token ALTSTRINGTYPE %token BOUNDARYCHARS %token COMPOUNDMIN %token COMPOUNDWORDS %token CONTROLLED %token DEFSTRINGTYPE %token FLAG %token FLAGMARKER %token NROFFCHARS %token OFF %token ON %token OPTIONS %token PREFIXES %token RANGE %token SUFFIXES %token STRING %token STRINGCHAR %token TEXCHARS %token WORDCHARS %type file %type headers %type option_group %type main_charset %type charset_options %type charset_group %type altchar_group %type charset_stmt %type option_stmt %type charset_option_group %type charset_option %type altchar_stmt %type altchar_spec_group %type altchar_spec %type deftype_stmt %type stringtype_info %type filesuf_list %type filesuf %type char_set %type tables %type prefix_table %type suffix_table %type table %type flagdef %type flagoptions %type flagoption %type error %type on_or_off %type rules %type affix_rule %type cond_or_null %type conditions %type ichar_string %% file : headers tables | tables ; headers : option_group main_charset | option_group main_charset altchar_group | main_charset | main_charset altchar_group ; option_group : option_stmt | option_group option_stmt ; main_charset : deftype_stmt charset_options charset_group | deftype_stmt charset_group | charset_options charset_group | charset_group ; charset_group : charset_stmt { nbasestrings = hashheader.nstrchars; } | charset_group charset_stmt { nbasestrings = hashheader.nstrchars; } ; deftype_stmt : DEFSTRINGTYPE stringtype_info ; altchar_group : altchar_stmt /* * The following error message is disabled (if 0) * because (a) the test doesn't work right with * PARSE_Y_MULTIPLE_STRINGS disabled, and (b) I'm * not convinced that it's always a mistake to * leave some alternates undefined. */ { #if 0 if (hashheader.nstrchars != ctypenum * nbasestrings) yyerror (PARSE_Y_WRONG_STRING_COUNT); #endif /* 0 */ } | altchar_group altchar_stmt /* * The following error message is disabled (if 0) * because (a) the test doesn't work right with * PARSE_Y_MULTIPLE_STRINGS disabled, and (b) I'm * not convinced that it's always a mistake to * leave some alternates undefined. */ { #if 0 if (hashheader.nstrchars != ctypenum * nbasestrings) yyerror (PARSE_Y_WRONG_STRING_COUNT); #endif /* 0 */ } ; charset_options : OPTIONS charset_option_group ; charset_option_group : charset_option | charset_option_group charset_option ; charset_option : STRING { static struct { char* name; int value; } choices[] = { {"raw_display", RAW_DISPLAY}, {"squeeze_strings", SQUEEZE_STRINGS}, }; unsigned int i; for (i = 0; i < sizeof choices / sizeof choices[0]; i++) { if (strcmp ((char *) $1, choices[i].name) == 0) break; } if (i >= sizeof choices / sizeof choices[0]) { yyerror (PARSE_Y_BAD_OPTION); exit (1); } /* * The current stringchar group is in defstringgroup */ chartypes[defstringgroup].options |= choices[i].value; } ; charset_stmt : WORDCHARS char_set char_set { int nextlower; int nextupper; for (nextlower = SET_SIZE + hashheader.nstrchars; --nextlower > SET_SIZE; ) { if ($2.set[nextlower] != 0 || $3.set[nextlower] != 0) { yyerror (PARSE_Y_NO_WORD_STRINGS); break; } } for (nextlower = 0; nextlower < SET_SIZE; nextlower++) { hashheader.wordchars[nextlower] |= $2.set[nextlower] | $3.set[nextlower]; hashheader.lowerchars[nextlower] |= $2.set[nextlower]; hashheader.upperchars[nextlower] |= $3.set[nextlower]; } for (nextlower = nextupper = 0; nextlower < SET_SIZE; nextlower++) { if ($2.set[nextlower]) { for ( ; nextupper < SET_SIZE && !$3.set[nextupper]; nextupper++) ; if (nextupper == SET_SIZE) yyerror (PARSE_Y_UNMATCHED); else { hashheader.lowerconv[nextupper] = (ichar_t) nextlower; hashheader.upperconv[nextlower] = (ichar_t) nextupper; hashheader.sortorder[nextupper] = hashheader.sortval++; hashheader.sortorder[nextlower] = hashheader.sortval++; nextupper++; } } } for ( ; nextupper < SET_SIZE; nextupper++) { if ($3.set[nextupper]) yyerror (PARSE_Y_UNMATCHED); } free ($2.set); free ($3.set); } | WORDCHARS char_set { int i; for (i = SET_SIZE + hashheader.nstrchars; --i > SET_SIZE; ) { if ($2.set[i] != 0) { yyerror (PARSE_Y_NO_WORD_STRINGS); break; } } for (i = 0; i < SET_SIZE; i++) { if ($2.set[i]) { hashheader.wordchars[i] = 1; hashheader.sortorder[i] = hashheader.sortval++; } } free ($2.set); } | BOUNDARYCHARS char_set char_set { int nextlower; int nextupper; for (nextlower = SET_SIZE + hashheader.nstrchars; --nextlower > SET_SIZE; ) { if ($2.set[nextlower] != 0 || $3.set[nextlower] != 0) { yyerror (PARSE_Y_NO_BOUNDARY_STRINGS); break; } } for (nextlower = 0; nextlower < SET_SIZE; nextlower++) { hashheader.boundarychars[nextlower] |= $2.set[nextlower] | $3.set[nextlower]; hashheader.lowerchars[nextlower] |= $2.set[nextlower]; hashheader.upperchars[nextlower] |= $3.set[nextlower]; } for (nextlower = nextupper = 0; nextlower < SET_SIZE; nextlower++) { if ($2.set[nextlower]) { for ( ; nextupper < SET_SIZE && !$3.set[nextupper]; nextupper++) ; if (nextupper == SET_SIZE) yyerror (PARSE_Y_UNMATCHED); else { hashheader.lowerconv[nextupper] = (ichar_t) nextlower; hashheader.upperconv[nextlower] = (ichar_t) nextupper; hashheader.sortorder[nextupper] = hashheader.sortval++; hashheader.sortorder[nextlower] = hashheader.sortval++; nextupper++; } } } for ( ; nextupper < SET_SIZE; nextupper++) { if ($3.set[nextupper]) yyerror (PARSE_Y_UNMATCHED); } free ($2.set); free ($3.set); } | BOUNDARYCHARS char_set { int i; for (i = SET_SIZE + hashheader.nstrchars; --i > SET_SIZE; ) { if ($2.set[i] != 0) { yyerror (PARSE_Y_NO_BOUNDARY_STRINGS); break; } } for (i = 0; i < SET_SIZE; i++) { if ($2.set[i]) { hashheader.boundarychars[i] = 1; hashheader.sortorder[i] = hashheader.sortval++; } } free ($2.set); } | STRINGCHAR STRING { int len; len = strlen ((char *) $2); if (len > MAXSTRINGCHARLEN) yyerror (PARSE_Y_LONG_STRING); else if (len == 0) yyerror (PARSE_Y_NULL_STRING); else if (hashheader.nstrchars >= MAXSTRINGCHARS) yyerror (PARSE_Y_MANY_STRINGS); else (void) addstringchar ($2, 0, 0); free ((char *) $2); } | STRINGCHAR STRING STRING { int lcslot; unsigned int len; int ucslot; len = strlen ((char *) $2); if (strlen ((char *) $3) != len) yyerror (PARSE_Y_LENGTH_MISMATCH); else if (len > MAXSTRINGCHARLEN) yyerror (PARSE_Y_LONG_STRING); else if (len == 0) yyerror (PARSE_Y_NULL_STRING); else if (hashheader.nstrchars >= MAXSTRINGCHARS) yyerror (PARSE_Y_MANY_STRINGS); else { /* * Add the uppercase character first, so that * it will sort first. */ lcslot = ucslot = addstringchar ($3, 0, 1); if (ucslot >= 0) lcslot = addstringchar ($2, 1, 0); if (ucslot >= 0 && lcslot >= 0) { if (ucslot >= lcslot) ucslot++; hashheader.lowerconv[ucslot] = (ichar_t) lcslot; hashheader.upperconv[lcslot] = (ichar_t) ucslot; } } free ((char *) $2); free ((char *) $3); } ; altchar_stmt : ALTSTRINGTYPE stringtype_info | ALTSTRINGTYPE stringtype_info charset_options | ALTSTRINGTYPE stringtype_info altchar_spec_group | ALTSTRINGTYPE stringtype_info charset_options altchar_spec_group ; stringtype_info : STRING STRING filesuf_list { chartypes[ctypenum].name = (unsigned char *) $1; chartypes[ctypenum].deformatter = (char *) $2; chartypes[ctypenum].options = 0; /* * Implement a few common synonyms. This should * be generalized. */ if (strcmp ((char *) $2, "none") == 0) (void) strcpy ((char *) $2, "plain"); else if (strcmp ((char *) $2, "TeX") == 0) (void) strcpy ((char *) $2, "tex"); else if (strcmp ((char *) $2, "troff") == 0) (void) strcpy ((char *) $2, "nroff"); else if (strcmp ((char *) $2, "HTML") == 0 || strcmp ((char *) $2, "html") == 0 || strcmp ((char *) $2, "SGML") == 0) (void) strcpy ((char *) $2, "sgml"); /* * Someday, we'll accept generalized deformatters. * Then we can get rid of this test. */ if (strcmp ((char *) $2, "plain") != 0 && strcmp ((char *) $2, "nroff") != 0 && strcmp ((char *) $2, "tex") != 0 && strcmp ((char *) $2, "sgml") != 0) yyerror (PARSE_Y_BAD_DEFORMATTER); ctypenum++; hashheader.nstrchartype = ctypenum; } ; filesuf_list : filesuf { if (ctypenum >= ctypesize) { if (ctypesize == 0) chartypes = (struct strchartype *) malloc (TBLINC * sizeof (struct strchartype)); else chartypes = (struct strchartype *) realloc ((char *) chartypes, (ctypesize + TBLINC) * sizeof (struct strchartype)); if (chartypes == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } ctypesize += TBLINC; } ctypechars = TBLINC * (strlen ((char *) $1) + 1) + 1; chartypes[ctypenum].suffixes = malloc ((unsigned int) ctypechars); if (chartypes[ctypenum].suffixes == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } (void) strcpy (chartypes[ctypenum].suffixes, (char *) $1); chartypes[ctypenum].suffixes [strlen ((char *) $1) + 1] = '\0'; free ((char *) $1); } | filesuf_list filesuf { char * nexttype; int offset; for (nexttype = chartypes[ctypenum].suffixes; *nexttype != '\0'; nexttype += strlen (nexttype) + 1) ; offset = nexttype - chartypes[ctypenum].suffixes; if ((int) (offset + strlen ((char *) $2) + 1) >= ctypechars) { ctypechars += TBLINC * (strlen ((char *) $2) + 1); chartypes[ctypenum].suffixes = realloc (chartypes[ctypenum].suffixes, (unsigned int) ctypechars); if (chartypes[ctypenum].suffixes == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } nexttype = chartypes[ctypenum].suffixes + offset; } (void) strcpy (nexttype, (char *) $2); nexttype[strlen ((char *) $2) + 1] = '\0'; free ((char *) $2); } ; filesuf : STRING ; altchar_spec_group : altchar_spec | altchar_spec_group altchar_spec ; altchar_spec : ALTSTRINGCHAR STRING STRING { unsigned int len; int slot; defstringgroup = ctypenum - 1; len = strlen ((char *) $2); if (len > MAXSTRINGCHARLEN) yyerror (PARSE_Y_LONG_STRING); else if (len == 0) yyerror (PARSE_Y_NULL_STRING); else if (hashheader.nstrchars >= MAXSTRINGCHARS) yyerror (PARSE_Y_MANY_STRINGS); #if 0 /* * The following error message is disabled (if 0) * because it turns out some languages (e.g., * German) actually need to have multiple * alternate stringchars mapping to the same base * stringchar. */ else if (isstringch ($2, 0)) yyerror (PARSE_Y_MULTIPLE_STRINGS); #endif /* 0 */ else if (!isstringch ($3, 1)) yyerror (PARSE_Y_NO_SUCH_STRING); else { slot = addstringchar ($2, 0, 0) - SET_SIZE; if (laststringch >= (unsigned int) slot) laststringch++; hashheader.stringdups[slot] = laststringch; } free ((char *) $2); free ((char *) $3); } ; option_stmt : NROFFCHARS STRING { if (strlen ((char *) $2) == sizeof (hashheader.nrchars)) (void) bcopy ((char *) $2, hashheader.nrchars, sizeof (hashheader.nrchars)); else yyerror (PARSE_Y_WRONG_NROFF); free ((char *) $2); } | TEXCHARS STRING { if (strlen ((char *) $2) == sizeof (hashheader.texchars)) (void) bcopy ((char *) $2, hashheader.texchars, sizeof (hashheader.texchars)); else yyerror (PARSE_Y_WRONG_TEX); free ((char *) $2); } | COMPOUNDMIN STRING { unsigned char * digitp; /* Pointer to next digit */ for (digitp = $2; *digitp != '\0'; digitp++) { if (*digitp <= '0' || *digitp >= '9') { yyerror (PARSE_Y_BAD_NUMBER); break; } } hashheader.compoundmin = atoi ((char *) $2); } | COMPOUNDWORDS on_or_off { hashheader.compoundflag = $2; } | COMPOUNDWORDS CONTROLLED STRING { if (strlen ((char *) $3) != 1) yyerror (PARSE_Y_LONG_FLAG); else if (hashheader.compoundbit >= 0) yyerror (PARSE_Y_DOUBLE_COMPOUND); else { hashheader.compoundbit = (unsigned char) $3[0]; #if MASKBITS <= 128 hashheader.compoundbit &= 0x7f; #endif /* MASKBITS */ #if MASKBITS <= 32 if (islower (hashheader.compoundbit)) hashheader.compoundbit = toupper (hashheader.compoundbit); #endif /* MASKBITS */ #if MASKBITS <= 64 if (hashheader.compoundbit < 'A' || hashheader.compoundbit > 'z') yyerror (PARSE_Y_BAD_FLAG); #endif /* MASKBITS */ hashheader.compoundbit = CHARTOBIT (hashheader.compoundbit); } hashheader.compoundflag = COMPOUND_CONTROLLED; } | ALLAFFIXES on_or_off { hashheader.defhardflag = $2; } | FLAGMARKER STRING { if (strlen ((char *) $2) != 1) yyerror (PARSE_Y_LONG_FLAG); else hashheader.flagmarker = $2[0]; free ((char *) $2); } ; char_set : '.' { int i; unsigned char * set; set = (unsigned char *) malloc (SET_SIZE + MAXSTRINGCHARS); if (set == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } $$.set = set; for (i = SET_SIZE + MAXSTRINGCHARS; --i >= 0; ) *set++ = 1; $$.complement = 0; } | STRING { unsigned int setlen; $$.set = (unsigned char *) malloc (SET_SIZE + MAXSTRINGCHARS); if ($$.set == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } (void) bzero ($$.set, SET_SIZE + MAXSTRINGCHARS); if (l1_isstringch ($1, setlen, 1)) { if (setlen != strlen ((char *) $1)) yyerror (PARSE_Y_NEED_BLANK); $$.set[SET_SIZE + laststringch] = 1; } else { if (strlen ((char *) $1) != 1) yyerror (PARSE_Y_NEED_BLANK); $$.set[*$1] = 1; } free ((char *) $1); $$.complement = 0; } | RANGE ; on_or_off : ON { $$ = 1; } | OFF { $$ = 0; } ; tables : prefix_table suffix_table | suffix_table prefix_table | prefix_table | suffix_table ; prefix_table : PREFIXES table { pflaglist = table; numpflags = tblnum; /* * Sort the flag table. This is critical so * that ispell can build a correct index * table. The idea is to put similar affixes * together. */ qsort ((char *) table, (unsigned) tblnum, sizeof (*table), (int (*) P ((const void *, const void *))) precmp); #ifdef TBLDEBUG (void) fprintf (stderr, "prefixes\n"); tbldump (table, tblnum); #endif tblsize = 0; } ; suffix_table : SUFFIXES table { sflaglist = table; numsflags = tblnum; /* * See comments on the prefix sort. */ qsort ((char *) table, (unsigned) tblnum, sizeof (*table), (int (*) P ((const void *, const void *))) sufcmp); #ifdef TBLDEBUG (void) fprintf (stderr, "suffixes\n"); tbldump (table, tblnum); #endif tblsize = 0; } ; table : flagdef { if (tblsize == 0) { tblsize = centnum + TBLINC; tblnum = 0; table = (struct flagent *) malloc (tblsize * (sizeof (struct flagent))); if (table == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } } else if (tblnum + centnum >= tblsize) { tblsize = tblnum + centnum + TBLINC; table = (struct flagent *) realloc ((char *) table, tblsize * (sizeof (struct flagent))); if (table == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } } for (tblnum = 0; tblnum < centnum; tblnum++) table[tblnum] = curents[tblnum]; centnum = 0; } | table flagdef { int i; if (tblnum + centnum >= tblsize) { tblsize = tblnum + centnum + TBLINC; table = (struct flagent *) realloc ((char *) table, tblsize * (sizeof (struct flagent))); if (table == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } } for (i = 0; i < centnum; i++) table[tblnum + i] = curents[i]; tblnum += centnum; centnum = 0; } ; flagdef : FLAG STRING ':' rules { int flagbit; int i; if (strlen ((char *) $2) != 1) yyerror (PARSE_Y_LONG_FLAG); flagbit = (unsigned char) $2[0]; #if MASKBITS <= 128 flagbit &= 0x7f; #endif /* MASKBITS */ #if MASKBITS <= 32 if (islower (flagbit)) flagbit = toupper (flagbit); #endif /* MASKBITS */ #if MASKBITS <= 64 if (flagbit < 'A' || flagbit > 'z') yyerror (PARSE_Y_BAD_FLAG); #endif /* MASKBITS */ flagbit = CHARTOBIT (flagbit); for (i = 0; i < tblnum; i++) { if (table[i].flagbit == flagbit) yyerror (PARSE_Y_DUP_FLAG); } for (i = 0; i < centnum; i++) { curents[i].flagbit = flagbit; curents[i].flagflags = 0; } free ((char *) $2); } | FLAG flagoptions STRING ':' rules { int flagbit; int i; if (strlen ((char *) $3) != 1) yyerror (PARSE_Y_LONG_FLAG); flagbit = (unsigned char) $3[0]; #if MASKBITS <= 128 flagbit &= 0x7f; #endif /* MASKBITS */ #if MASKBITS <= 32 if (islower (flagbit)) flagbit = toupper (flagbit); #endif /* MASKBITS */ #if MASKBITS <= 64 if (flagbit < 'A' || flagbit > 'z') yyerror (PARSE_Y_BAD_FLAG); #endif /* MASKBITS */ flagbit = CHARTOBIT (flagbit); for (i = 0; i < tblnum; i++) { if (table[i].flagbit == flagbit) yyerror (PARSE_Y_DUP_FLAG); } for (i = 0; i < centnum; i++) { curents[i].flagbit = flagbit; curents[i].flagflags = $2; } free ((char *) $3); } | error { $$ = 0; } ; flagoptions : flagoption | flagoptions flagoption { $$ = $1 | $2; } ; flagoption : '*' { $$ = FF_CROSSPRODUCT; } | '~' { $$ = FF_COMPOUNDONLY; } ; rules : affix_rule { if (centsize == 0) { curents = (struct flagent *) malloc (TBLINC * (sizeof (struct flagent))); if (curents == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } centsize = TBLINC; } curents[0] = *$1; centnum = 1; free ((char *) $1); $$ = 0; } | rules affix_rule { if (centnum >= centsize) { centsize += TBLINC; curents = (struct flagent *) realloc ((char *) curents, centsize * (sizeof (struct flagent))); if (curents == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } } curents[centnum] = *$2; centnum++; free ((char *) $2); } ; affix_rule : cond_or_null '>' ichar_string { int i; $1->stripl = 0; $1->strip = NULL; $1->affl = icharlen ($3); $1->affix = $3; upcase ($3); /* * As a special optimization (and a * concession to those who prefer the syntax * that way), convert any single condition * that accepts all characters into no * condition at all. */ if ($1->numconds == 1) { for (i = SET_SIZE + hashheader.nstrchars; --i >= 0; ) { if (($1->conds[i] & 1) == 0) break; } if (i < 0) $1->numconds = 0; } $$ = $1; } | cond_or_null '>' '-' ichar_string ',' ichar_string { int i; $1->stripl = icharlen ($4); $1->strip = $4; upcase ($4); $1->affl = icharlen ($6); $1->affix = $6; upcase ($6); /* * Convert the syntax ". > -xxx,yyy" into * " > -xxx,yyy", as in the code just above. */ if ($1->numconds == 1) { for (i = SET_SIZE + hashheader.nstrchars; --i >= 0; ) { if (($1->conds[i] & 1) == 0) break; } if (i < 0) $1->numconds = 0; } $$ = $1; } | cond_or_null '>' '-' ichar_string ',' '-' { int i; $1->stripl = icharlen ($4); $1->strip = $4; upcase ($4); $1->affl = 0; $1->affix = NULL; /* * Convert the syntax ". > -xxx," into * " > -xxx,", as in the code just above. */ if ($1->numconds == 1) { for (i = SET_SIZE + hashheader.nstrchars; --i >= 0; ) { if (($1->conds[i] & 1) == 0) break; } if (i < 0) $1->numconds = 0; } $$ = $1; } | cond_or_null '>' '-' ',' '-' { int i; $1->stripl = 0; $1->strip = NULL; $1->affl = 0; $1->affix = NULL; /* * Convert the syntax ". > -,-" into * " > -,-", as in the code just above. */ if ($1->numconds == 1) { for (i = SET_SIZE + hashheader.nstrchars; --i >= 0; ) { if (($1->conds[i] & 1) == 0) break; } if (i < 0) $1->numconds = 0; } $$ = $1; } ; cond_or_null : /* Empty */ { struct flagent * ent; ent = (struct flagent *) malloc (sizeof (struct flagent)); if (ent == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } ent->numconds = 0; (void) bzero (ent->conds, SET_SIZE + MAXSTRINGCHARS); $$ = ent; } | conditions ; conditions : char_set { struct flagent * ent; int i; ent = (struct flagent *) malloc (sizeof (struct flagent)); if (ent == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } ent->numconds = 1; (void) bzero (ent->conds, SET_SIZE + MAXSTRINGCHARS); /* * Copy conditions to the new entry, making * sure that uppercase versions are generated * for lowercase input. */ for (i = SET_SIZE + MAXSTRINGCHARS; --i >= 0; ) { if ($1.set[i]) { ent->conds[i] = 1; if (!$1.complement) ent->conds[mytoupper ((ichar_t) i)] = 1; } } if ($1.complement) { for (i = SET_SIZE + MAXSTRINGCHARS; --i >= 0; ) { if ($1.set[i] == 0) ent->conds[mytoupper ((ichar_t) i)] = 0; } } free ($1.set); $$ = ent; } | conditions char_set { int i; int mask; if ($1->numconds >= 8) { yyerror (PARSE_Y_MANY_CONDS); $1->numconds = 7; } mask = 1 << $1->numconds; $1->numconds++; for (i = SET_SIZE + MAXSTRINGCHARS; --i >= 0; ) { if ($2.set[i]) { $1->conds[i] |= mask; if (!$2.complement) $1->conds[mytoupper ((ichar_t) i)] |= mask; } } if ($2.complement) { mask = ~mask; for (i = SET_SIZE + MAXSTRINGCHARS; --i >= 0; ) { if ($2.set[i] == 0) $1->conds[mytoupper ((ichar_t) i)] &= mask; } } free ($2.set); } ; ichar_string : STRING { ichar_t *tichar; tichar = strtosichar ($1, 1); $$ = (ichar_t *) malloc (sizeof (ichar_t) * (icharlen (tichar) + 1)); if ($$ == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } (void) icharcpy ($$, tichar); free ((char *) $1); } ; %% static struct kwtab /* Table of built-in keywords */ keywords[] = { {"allaffixes", ALLAFFIXES}, {"altstringchar", ALTSTRINGCHAR}, {"altstringtype", ALTSTRINGTYPE}, {"boundarychars", BOUNDARYCHARS}, {"compoundmin", COMPOUNDMIN}, {"compoundwords", COMPOUNDWORDS}, {"controlled", CONTROLLED}, {"defstringtype", DEFSTRINGTYPE}, {"flag", FLAG}, {"flagmarker", FLAGMARKER}, {"nroffchars", NROFFCHARS}, {"troffchars", NROFFCHARS}, {"on", ON}, {"off", OFF}, {"options", OPTIONS}, {"prefixes", PREFIXES}, {"stringchar", STRINGCHAR}, {"suffixes", SUFFIXES}, {"TeXchars", TEXCHARS}, {"texchars", TEXCHARS}, {"wordchars", WORDCHARS}, {NULL, 0} }; /* * Trivial lexical analyzer. */ static int yylex () { int backslashed; /* NZ if backslash appeared */ register int ch; /* Next character seen */ register unsigned char * lexp; /* Pointer into lexstring */ unsigned char lexstring[256]; /* Space for collecting strings */ while ((ch = grabchar ()) != EOF && (isspace (ch) || ch == '#')) { /* Skip whitespace and comments */ if (ch == '#') { while ((ch = grabchar ()) != EOF && ch != '\n') ; } } switch (ch) { case EOF: return EOF; case '"': getqstring (); return STRING; case '-': case '>': case ',': case ':': case '.': case '*': case '~': yylval.simple = ch; return ch; case '[': /* Beginning of a range set ] */ getrange (); /* Get the range */ return RANGE; } /* * We get here if the character is an ordinary one; note that * this includes backslashes. */ backslashed = 0; lexp = lexstring; for ( ; ; ) { switch (ch) { case EOF: *lexp = '\0'; return kwanalyze (backslashed, lexstring); case '\\': backslashed = 1; ch = backch (); *lexp++ = (unsigned char) ch; break; case ' ': case '\t': case '\n': case '\f': case '\r': *lexp = '\0'; return kwanalyze (backslashed, lexstring); case '#': case '>': case ':': case '-': case ',': case '[': /* ] */ ungrabchar (ch); *lexp = '\0'; return kwanalyze (backslashed, lexstring); default: *lexp++ = (unsigned char) ch; break; } ch = grabchar (); } } static int kwanalyze (backslashed, str) int backslashed; /* NZ if string had a backslash */ register unsigned char * str; /* String to analyze */ { register struct kwtab * kwptr; /* Pointer into keyword table */ yylval.simple = 0; if (!backslashed) /* Backslash means not keyword */ { for (kwptr = keywords; kwptr->kw != NULL; kwptr++) { if (strcmp (kwptr->kw, (char *) str) == 0) return (yylval.simple = kwptr->val); } } yylval.string = (unsigned char *) malloc ((unsigned) strlen ((char *) str) + 1); if (yylval.string == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } (void) strcpy ((char *) yylval.string, (char *) str); return STRING; } /* * Analyze a string in double quotes. The leading quote has already * been processed. */ static void getqstring () { register int ch; /* Next character read */ char lexstring[256]; /* Room to collect the string */ register char * lexp; /* Pointer into lexstring */ for (lexp = lexstring; (ch = grabchar ()) != EOF && ch != '"' && lexp < &lexstring[sizeof lexstring - 1]; ) { if (ch == '\\') ch = backch (); *lexp++ = (unsigned char) ch; } *lexp++ = '\0'; if (ch == EOF) yyerror (PARSE_Y_EOF); else if (ch != '"') { yyerror (PARSE_Y_LONG_QUOTE); while ((ch = grabchar ()) != EOF && ch != '"') { if (ch == '\\') ch = backch (); } } yylval.string = (unsigned char *) malloc ((unsigned) (lexp - lexstring)); if (yylval.string == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } (void) strcpy ((char *) yylval.string, (char *) lexstring); } /* * Analyze a range (e.g., [A-Za-z]). The left square bracket * has already been processed. */ static void getrange () /* Parse a range set */ { register int ch; /* Next character read */ register int lastch; /* Previous char, for ranges */ unsigned char stringch[MAXSTRINGCHARLEN]; int stringchlen; yylval.charset.set = malloc (SET_SIZE + MAXSTRINGCHARS); if (yylval.charset.set == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } /* Start with a null set */ (void) bzero (yylval.charset.set, SET_SIZE + MAXSTRINGCHARS); yylval.charset.complement = 0; lastch = -1; ch = grabchar (); if (ch == '^') { yylval.charset.complement = 1; ch = grabchar (); } /* [ */ if (ch == ']') { /* [[ */ lastch = ']'; yylval.charset.set[']'] = 1; } else ungrabchar (ch); /* [ */ while ((ch = grabchar ()) != EOF && ch != ']') { if (isstringstart (ch)) /* Handle a possible string character */ { stringch[0] = (unsigned char) ch; for (stringchlen = 1; stringchlen < MAXSTRINGCHARLEN; stringchlen++) { stringch[stringchlen] = '\0'; if (isstringch (stringch, 1)) { yylval.charset.set[SET_SIZE + laststringch] = 1; stringchlen = 0; break; } ch = grabchar (); if (ch == EOF) break; else stringch[stringchlen] = (unsigned char) ch; } if (stringchlen == 0) { lastch = -1; /* String characters can't be ranges */ continue; /* We found a string character */ } /* * Not a string character - put it back */ while (--stringchlen > 0) ungrabchar (stringch[stringchlen] & 0xFF); ch = stringch[0] & 0xFF; } if (ch == '\\') { lastch = ch = backch (); yylval.charset.set[ch] = 1; continue; } if (ch == '-') /* Handle a range */ { if (lastch == -1) { lastch = ch = '-'; /* Not really a range */ yylval.charset.set['-'] = 1; } else { ch = grabchar (); /* [ */ if (ch == EOF || ch == ']') { lastch = ch = '-'; /* Not really range */ yylval.charset.set['-'] = 1; if (ch != EOF) ungrabchar (ch); } else { if (ch == '\\') ch = backch (); while (lastch <= ch) yylval.charset.set[lastch++] = 1; lastch = -1; } } } else { lastch = ch; yylval.charset.set[ch] = 1; } } if (yylval.charset.complement) { for (ch = 0; ch < SET_SIZE + MAXSTRINGCHARS; ch++) yylval.charset.set[ch] = !yylval.charset.set[ch]; } } static int backch () /* Process post-backslash characters */ { register int ch; /* Next character read */ register int octval; /* Budding octal value */ ch = grabchar (); if (ch == EOF) return '\\'; else if (ch >= '0' && ch <= '7') { octval = ch - '0'; ch = grabchar (); if (ch >= '0' && ch <= '7') { octval = (octval << 3) + ch - '0'; ch = grabchar (); if (ch >= '0' && ch <= '7') octval = (octval << 3) + ch - '0'; else ungrabchar (ch); } else if (ch != EOF) ungrabchar (ch); ch = octval; } else if (ch == 'x') { ch = grabchar (); octval = 0; if ((ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F')) { if (ch >= '0' && ch <= '9') octval = ch - '0'; else if (ch >= 'a' && ch <= 'f') octval = ch - 'a' + 0xA; else if (ch >= 'A' && ch <= 'F') octval = ch - 'A' + 0xA; ch = grabchar (); octval <<= 4; if (ch >= '0' && ch <= '9') octval |= ch -'0'; else if (ch >= 'a' && ch <= 'f') octval |= ch - 'a' + 0xA; else if (ch >= 'A' && ch <= 'F') octval |= ch - 'A' + 0xA; else if (ch != EOF) { octval >>= 4; ungrabchar (ch); } } else if (ch != EOF) ungrabchar (ch); ch = octval; } else { switch (ch) { case 'n': ch = '\n'; break; case 'f': ch = '\f'; break; case 'r': ch = '\r'; break; case 'b': ch = '\b'; break; case 't': ch = '\t'; break; case 'v': ch = '\v'; break; } } return ch; } static void yyerror (str) char * str; /* Error string */ { (void) fflush (stdout); (void) fprintf (stderr, PARSE_Y_ERROR_FORMAT(fname, lineno, str)); (void) fflush (stderr); } int yyopen (file) register char * file; /* File name to be opened */ { fname = malloc ((unsigned) strlen (file) + 1); if (fname == NULL) { (void) fprintf (stderr, PARSE_Y_MALLOC_TROUBLE); exit (1); } (void) strcpy (fname, file); aff_file = fopen (file, "r"); if (aff_file == NULL) { (void) fprintf (stderr, CANT_OPEN, file, MAYBE_CR (stderr)); perror (""); return 1; } lineno = 1; return 0; } void yyinit () { register unsigned int i; /* Loop counter */ if (aff_file == NULL) aff_file = stdin; /* Must be dynamically initialized on Amigas */ for (i = 0; i < SET_SIZE + MAXSTRINGCHARS; i++) { hashheader.lowerconv[i] = (ichar_t) i; hashheader.upperconv[i] = (ichar_t) i; hashheader.wordchars[i] = 0; hashheader.lowerchars[i] = 0; hashheader.upperchars[i] = 0; hashheader.boundarychars[i] = 0; /* * The default sort order is a big value so that there is room * to insert "underneath" it. In this way, special characters * will sort last, but in ASCII order. */ hashheader.sortorder[i] = i + 1 + 2 * SET_SIZE; } for (i = 0; i < SET_SIZE; i++) hashheader.stringstarts[i] = 0; for (i = 0; i < MAXSTRINGCHARS; i++) { hashheader.stringdups[i] = i; hashheader.groupnos[i] = 0; } hashheader.sortval = 1; /* This is so 0 can mean uninitialized */ (void) bcopy (NRSPECIAL, hashheader.nrchars, sizeof hashheader.nrchars); (void) bcopy (TEXSPECIAL, hashheader.texchars, sizeof hashheader.texchars); hashheader.compoundflag = COMPOUND_NEVER; /* Dflt is report missing blks */ hashheader.defhardflag = 0; /* Default is to try hard only if failures */ hashheader.nstrchars = 0; /* No string characters to start with */ hashheader.flagmarker = '/'; /* Default flag marker is slash */ hashheader.compoundmin = 3; /* Dflt is at least 3 chars in cmpnd parts */ hashheader.compoundbit = -1; /* Dflt is no compound bit */ /* Set up magic numbers and compile options */ hashheader.magic = hashheader.magic2 = MAGIC; hashheader.compileoptions = COMPILEOPTIONS; hashheader.maxstringchars = MAXSTRINGCHARS; hashheader.maxstringcharlen = MAXSTRINGCHARLEN; } static int grabchar () /* Get a character and count lines */ { int ch; /* Next input character */ if (ungrablen > 0) ch = lexungrab[--ungrablen] & 0xFF; else ch = getc (aff_file); if (ch == '\n') lineno++; return ch; } static void ungrabchar (ch) /* Unget a character, tracking line numbers */ int ch; /* Character to put back */ { if (ch == '\n') lineno--; if (ch != EOF) { if (ungrablen == sizeof (lexungrab)) yyerror (PARSE_Y_UNGRAB_PROBLEM); else lexungrab[ungrablen++] = (char) ch; } } static int sufcmp (flag1, flag2) /* Compare suffix flags for qsort */ register struct flagent * flag1; /* Flags to be compared */ register struct flagent * flag2; /* ... */ { register ichar_t * cp1; /* Pointer into flag1's suffix */ register ichar_t * cp2; /* Pointer into flag2's suffix */ if (flag1->affl == 0 || flag2->affl == 0) return flag1->affl - flag2->affl; cp1 = flag1->affix + flag1->affl; cp2 = flag2->affix + flag2->affl; while (*--cp1 == *--cp2 && cp1 > flag1->affix && cp2 > flag2->affix) ; if (*cp1 == *cp2) { if (cp1 == flag1->affix) { if (cp2 == flag2->affix) return 0; else return -1; } else return 1; } return *cp1 - *cp2; } static int precmp (flag1, flag2) /* Compare prefix flags for qsort */ register struct flagent * flag1; /* Flags to be compared */ register struct flagent * flag2; /* ... */ { if (flag1->affl == 0 || flag2->affl == 0) return flag1->affl - flag2->affl; else return icharcmp (flag1->affix, flag2->affix); } /* * Add a string character to the table, inserting it in order and * updating the table of duplicate string characters. */ static int addstringchar (str, lower, upper) register unsigned char * str; /* String character to be added */ int lower; /* NZ if a lower string */ int upper; /* NZ if an upper string */ { int len; /* Length of the string */ register unsigned int mslot; /* Slot being moved or modified */ register unsigned int slot; /* Where to put it */ len = strlen ((char *) str); if (len > MAXSTRINGCHARLEN) { yyerror (PARSE_Y_LONG_STRING); } else if (len == 0) { yyerror (PARSE_Y_NULL_STRING); return -1; } else if (hashheader.nstrchars >= MAXSTRINGCHARS) { yyerror (PARSE_Y_MANY_STRINGS); return -1; } /* * Find where to put the new character */ for (slot = 0; slot < hashheader.nstrchars; slot++) { if (hashheader.groupnos[slot] >= ctypenum) break; else if (hashheader.groupnos[slot] == ctypenum - 1 && stringcharcmp (&hashheader.stringchars[slot][0], str) > 0) break; } /* * Fix all duplicate numbers to reflect the new slot. */ for (mslot = 0; mslot < hashheader.nstrchars; mslot++) { if (hashheader.stringdups[mslot] >= slot) hashheader.stringdups[mslot]++; } /* * Fix all characters before it so that their case conversion reflects * the new locations of the characters that will follow the new one. */ slot += SET_SIZE; for (mslot = SET_SIZE; mslot < slot; mslot++) { if (hashheader.lowerconv[mslot] >= (ichar_t) slot) hashheader.lowerconv[mslot]++; if (hashheader.upperconv[mslot] >= (ichar_t) slot) hashheader.upperconv[mslot]++; } /* * Slide up all the other characters to make room for the new one, also * making the appropriate changes in the case-conversion tables. */ for (mslot = hashheader.nstrchars + SET_SIZE; --mslot >= slot; ) { (void) strcpy ( (char *) &hashheader.stringchars[mslot + 1 - SET_SIZE][0], (char *) &hashheader.stringchars[mslot - SET_SIZE][0]); hashheader.lowerchars[mslot + 1] = hashheader.lowerchars[mslot]; hashheader.upperchars[mslot + 1] = hashheader.upperchars[mslot]; hashheader.wordchars[mslot + 1] = hashheader.wordchars[mslot]; hashheader.boundarychars[mslot + 1] = hashheader.boundarychars[mslot]; if (hashheader.lowerconv[mslot] >= (ichar_t) slot) hashheader.lowerconv[mslot]++; if (hashheader.upperconv[mslot] >= (ichar_t) slot) hashheader.upperconv[mslot]++; hashheader.lowerconv[mslot + 1] = hashheader.lowerconv[mslot]; hashheader.upperconv[mslot + 1] = hashheader.upperconv[mslot]; hashheader.sortorder[mslot + 1] = hashheader.sortorder[mslot]; hashheader.stringdups[mslot + 1 - SET_SIZE] = hashheader.stringdups[mslot - SET_SIZE]; hashheader.groupnos[mslot + 1 - SET_SIZE] = hashheader.groupnos[mslot - SET_SIZE]; } /* * Insert the new string character into the slot we made. The * caller may choose to change the case-conversion field. */ (void) strcpy ((char *) &hashheader.stringchars[slot - SET_SIZE][0], (char *) str); hashheader.lowerchars[slot] = (unsigned char) lower; hashheader.upperchars[slot] = (unsigned char) upper; hashheader.wordchars[slot] = 1; hashheader.boundarychars[slot] = 0; hashheader.sortorder[slot] = hashheader.sortval++; hashheader.lowerconv[slot] = (ichar_t) slot; hashheader.upperconv[slot] = (ichar_t) slot; hashheader.stringdups[slot - SET_SIZE] = slot - SET_SIZE; hashheader.groupnos[slot - SET_SIZE] = ctypenum - 1; /* * Add the first character of the string to the string-starts table, and * bump the count. */ hashheader.stringstarts[str[0]] = 1; hashheader.nstrchars++; return slot; } /* * This routine is a reimplemention of strcmp(), needed because we use * unsigned characters internally. (Actually, the idiots at Sun thought * that this would be a good idea for the default strcmp, which is really, * really stupid. But I can't count on using their broken implementation, * so I have to do it myself in any case.) */ static int stringcharcmp (a, b) register unsigned char * a; register unsigned char * b; { while (*a != '\0') { if (*a++ != *b++) return *--a - *--b; } return *a - *b; } #ifdef TBLDEBUG static void tbldump (flagp, numflags) /* Dump a flag table */ register struct flagent * flagp; /* First flag entry to dump */ register int numflags; /* Number of flags to dump */ { while (--numflags >= 0) entdump (flagp++); } static void entdump (flagp) /* Dump one flag entry */ register struct flagent * flagp; /* Flag entry to dump */ { register int cond; /* Condition number */ (void) fprintf (stderr, "flag %s%c:\t", (flagp->flagflags & FF_CROSSPRODUCT) ? "*" : "", BITTOCHAR (flagp->flagbit)); for (cond = 0; cond < flagp->numconds; cond++) { setdump (flagp->conds, 1 << cond); if (cond < flagp->numconds - 1) (void) putc (' ', stderr); } if (cond == 0) /* No conditions at all? */ (void) putc ('.', stderr); (void) fprintf (stderr, "\t> "); (void) putc ('\t', stderr); if (flagp->stripl) (void) fprintf (stderr, "-%s,", ichartosstr (flagp->strip, 1)); (void) fprintf (stderr, "%s\n", flagp->affl ? ichartosstr (flagp->affix, 1) : "-"); } static void setdump (setp, mask) /* Dump a set specification */ register unsigned char * setp; /* Set to be dumped */ register int mask; /* Mask for bit to be dumped */ { register int cnum; /* Next character's number */ register int firstnz; /* Number of first NZ character */ register int numnz; /* Number of NZ characters */ numnz = 0; for (cnum = SET_SIZE + hashheader.nstrchars; --cnum >= 0; ) { if (setp[cnum] & mask) { numnz++; firstnz = cnum; } } if (numnz == 1) { if (cnum < SET_SIZE) (void) putc (firstnz, stderr); else (void) fputs ((char *) hashheader.stringchars[cnum - SET_SIZE], stderr); } else if (numnz == SET_SIZE) (void) putc ('.', stderr); else if (numnz > SET_SIZE / 2) { (void) fprintf (stderr, "[^"); subsetdump (setp, mask, 0); (void) putc (']', stderr); } else { (void) putc ('[', stderr); subsetdump (setp, mask, mask); (void) putc (']', stderr); } } static void subsetdump (setp, mask, dumpval) /* Dump part of a set spec */ register unsigned char * setp; /* Set to be dumped */ register int mask; /* Mask for bit to be dumped */ register int dumpval; /* Value to be printed */ { register int cnum; /* Next character's number */ register int rangestart; /* Value starting a range */ for (cnum = 0; cnum < SET_SIZE; setp++, cnum++) { if (((*setp ^ dumpval) & mask) == 0) { for (rangestart = cnum; cnum < SET_SIZE; setp++, cnum++) { if ((*setp ^ dumpval) & mask) break; } if (cnum == rangestart + 1) (void) putc (rangestart, stderr); else if (cnum <= rangestart + 3) { while (rangestart < cnum) { (void) putc (rangestart, stderr); rangestart++; } } else (void) fprintf (stderr, "%c-%c", rangestart, cnum - 1); } } for ( ; cnum < SET_SIZE + hashheader.nstrchars; setp++, cnum++) { if (((*setp ^ dumpval) & mask) == 0) (void) fputs ((char *) hashheader.stringchars[cnum - SET_SIZE], stderr); } } #endif ispell-3.4.02/PaxHeaders.22185/iwhich0000644000000000000000000000007410227505246014034 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/iwhich0000555003214100001440000000264410227505246015111 0ustar00geofffaculty00000000000000: Use /bin/sh # # $Id: iwhich,v 1.2 1995/10/11 02:31:58 geoff Exp $ # # Report which version of a command is in use. This version of # "which" doesn't handle shell aliases, but it makes up for that with # the "-a" (report all copies) switch and the fact that it returns a # nonzero shell status if the command isn't found. # USAGE='Usage: which [-a] command[s]' # # For each command, the full pathname of the version that will be # selected from $PATH is reported. If the -a switch is given, # versions in $PATH that are overridden by earlier $PATH entries will # also be reported. The exit status is nonzero if none of the # commands are found anywhere in $PATH. # # $Log: iwhich,v $ # Revision 1.2 1995/10/11 02:31:58 geoff # Work around a buggy version of Ultrix test # # Revision 1.1 1995/01/15 00:13:54 geoff # Initial revision # # opath=$PATH PATH=/bin:/usr/bin all=no while [ $# -gt 0 ] do case "$1" in -a) all=yes shift ;; -*) echo "$USAGE" 1>&2 exit 2 ;; *) break ;; esac done case $# in 0) echo "$USAGE" 1>&2 exit 2 ;; esac opath=`echo "$opath" | sed 's/^:/.:/ s/::/:.:/g s/:$/:./ s/:/ /g'` found=false for file do for i in $opath do if [ \( -x $i/$file \) -a \( ! -d $i/$file \) ] then echo $i/$file found=true case "$all" in no) break ;; esac fi done done if $found then exit 0 else exit 1 fi ispell-3.4.02/PaxHeaders.22185/good.c0000644000000000000000000000007410227500137013724 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/good.c0000444003214100001440000002712410227500137014776 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: good.c,v 1.51 2005/04/14 14:38:23 geoff Exp $"; #endif /* * good.c - see if a word or its root word * is in the dictionary. * * Pace Willisson, 1983 * * Copyright 1992, 1993, 1999, 2001, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: good.c,v $ * Revision 1.51 2005/04/14 14:38:23 geoff * Update license. * * Revision 1.50 2001/07/25 21:51:45 geoff * Minor license update. * * Revision 1.49 2001/07/23 20:24:03 geoff * Update the copyright and the license. * * Revision 1.48 2000/08/22 10:52:25 geoff * Fix some compiler warnings. * * Revision 1.47 1999/01/18 03:28:33 geoff * Turn some char declarations into unsigned char, so that we won't have * sign-extension problems. * * Revision 1.46 1999/01/07 01:22:36 geoff * Update the copyright. * * Revision 1.45 1997/12/03 06:08:38 geoff * In crunch mode, print the root capitalized if a prefix was stripped * from a capitalized word. For example, if the input word was * "Uncapitalized" in English, print "Capitalized/U". * * Revision 1.44 1997/12/02 06:24:42 geoff * Get rid of some compile options that really shouldn't be optional. * * Revision 1.43 1994/11/02 06:56:05 geoff * Remove the anyword feature, which I've decided is a bad idea. * * Revision 1.42 1994/10/25 05:45:59 geoff * Add support for an affix that will work with any word, even if there's * no explicit flag. * * Revision 1.41 1994/05/24 06:23:06 geoff * Let tgood decide capitalization questions, rather than doing it ourselves. * * Revision 1.40 1994/05/17 06:44:10 geoff * Add support for controlled compound formation and the COMPOUNDONLY * option to affix flags. * * Revision 1.39 1994/01/25 07:11:31 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include #include "config.h" #include "ispell.h" #include "proto.h" int good P ((ichar_t * word, int ignoreflagbits, int allhits, int pfxopts, int sfxopts)); int cap_ok P ((ichar_t * word, struct success * hit, int len)); static int entryhasaffixes P ((struct dent * dent, struct success * hit)); void flagpr P ((ichar_t * word, int preflag, int prestrip, int preadd, int sufflag, int sufadd)); static ichar_t * orig_word; int good (w, ignoreflagbits, allhits, pfxopts, sfxopts) ichar_t * w; /* Word to look up */ int ignoreflagbits; /* NZ to ignore affix flags in dict */ int allhits; /* NZ to ignore case, get every hit */ int pfxopts; /* Options to apply to prefixes */ int sfxopts; /* Options to apply to suffixes */ { ichar_t nword[INPUTWORDLEN + MAXAFFIXLEN]; register ichar_t * p; register ichar_t * q; register int n; register struct dent * dp; /* ** Make an uppercase copy of the word we are checking. */ for (p = w, q = nword; *p; ) *q++ = mytoupper (*p++); *q = 0; n = q - nword; numhits = 0; if (cflag) { (void) printf ("%s", (char *) ichartosstr (w, 0)); orig_word = w; } else if ((dp = lookup (nword, 1)) != NULL) { hits[0].dictent = dp; hits[0].prefix = NULL; hits[0].suffix = NULL; if (allhits || cap_ok (w, &hits[0], n)) numhits = 1; /* * If we're looking for compounds, and this root doesn't * participate in compound formation, undo the hit. */ if (compoundflag == COMPOUND_CONTROLLED && ((pfxopts | sfxopts) & FF_COMPOUNDONLY) != 0 && hashheader.compoundbit >= 0 && TSTMASKBIT (dp->mask, hashheader.compoundbit) == 0) numhits = 0; } if (numhits && !allhits) return 1; /* try stripping off affixes */ chk_aff (w, nword, n, ignoreflagbits, allhits, pfxopts, sfxopts); if (cflag) (void) putchar ('\n'); return numhits; } int cap_ok (word, hit, len) register ichar_t * word; register struct success * hit; int len; { register ichar_t * dword; register ichar_t * w; register struct dent * dent; ichar_t dentword[INPUTWORDLEN + MAXAFFIXLEN]; int preadd; int prestrip; int sufadd; ichar_t * limit; long thiscap; long dentcap; thiscap = whatcap (word); /* ** All caps is always legal, regardless of affixes. */ preadd = prestrip = sufadd = 0; if (thiscap == ALLCAPS) return 1; else if (thiscap == FOLLOWCASE) { /* Set up some constants for the while(1) loop below */ if (hit->prefix) { preadd = hit->prefix->affl; prestrip = hit->prefix->stripl; } else preadd = prestrip = 0; sufadd = hit->suffix ? hit->suffix->affl : 0; } /* ** Search the variants for one that matches what we have. Note ** that thiscap can't be ALLCAPS, since we already returned ** for that case. */ dent = hit->dictent; for ( ; ; ) { dentcap = captype (dent->flagfield); if (dentcap != thiscap) { if (dentcap == ANYCASE && thiscap == CAPITALIZED && entryhasaffixes (dent, hit)) return 1; } else /* captypes match */ { if (thiscap != FOLLOWCASE) { if (entryhasaffixes (dent, hit)) return 1; } else { /* ** Make sure followcase matches exactly. ** Life is made more difficult by the ** possibility of affixes. Start with ** the prefix. */ (void) strtoichar (dentword, dent->word, INPUTWORDLEN, 1); dword = dentword; limit = word + preadd; if (myupper (dword[prestrip])) { for (w = word; w < limit; w++) { if (mylower (*w)) goto doublecontinue; } } else { for (w = word; w < limit; w++) { if (myupper (*w)) goto doublecontinue; } } dword += prestrip; /* Do root part of word */ limit = dword + len - preadd - sufadd; while (dword < limit) { if (*dword++ != *w++) goto doublecontinue; } /* Do suffix */ dword = limit - 1; if (myupper (*dword)) { for ( ; *w; w++) { if (mylower (*w)) goto doublecontinue; } } else { for ( ; *w; w++) { if (myupper (*w)) goto doublecontinue; } } /* ** All failure paths go to "doublecontinue," ** so if we get here it must match. */ if (entryhasaffixes (dent, hit)) return 1; doublecontinue: ; } } if ((dent->flagfield & MOREVARIANTS) == 0) break; dent = dent->next; } /* No matches found */ return 0; } /* ** See if this particular capitalization (dent) is legal with these ** particular affixes. */ static int entryhasaffixes (dent, hit) register struct dent * dent; register struct success * hit; { if (hit->prefix && !TSTMASKBIT (dent->mask, hit->prefix->flagbit)) return 0; if (hit->suffix && !TSTMASKBIT (dent->mask, hit->suffix->flagbit)) return 0; return 1; /* Yes, these affixes are legal */ } /* * Print a word and its flag, making sure the case of the output matches * the case of the original found in "orig_word". */ void flagpr (word, preflag, prestrip, preadd, sufflag, sufadd) register ichar_t * word; /* (Modified) word to print */ int preflag; /* Prefix flag (if any) */ int prestrip; /* Lth of pfx stripped off orig_word */ int preadd; /* Length of prefix added to w */ int sufflag; /* Suffix flag (if any) */ int sufadd; /* Length of suffix added to w */ { register int i; /* Handy loop counter */ register ichar_t * origp; /* Pointer into orig_word */ int orig_len; /* Length of orig_word */ orig_len = icharlen (orig_word); /* * We refuse to print if the cases outside the modification * points don't match those just inside. This prevents things * like "OEM's" from being turned into "OEM/S" which expands * only to "OEM'S". But for prefix flags, we ignore the case of * the first character of the word, because capitalization of the * root is legal. */ if (preflag > 0) { origp = orig_word + preadd; if (myupper (*origp)) { for (origp = orig_word + 1; origp < orig_word + preadd; origp++) { if (mylower (*origp)) return; } } else { for (origp = orig_word + 1; origp < orig_word + preadd; origp++) { if (myupper (*origp)) return; } } } if (sufflag > 0) { origp = orig_word + orig_len - sufadd; if (myupper (origp[-1])) { for ( ; *origp != 0; origp++) { if (mylower (*origp)) return; } } else { origp = orig_word + orig_len - sufadd; for ( ; *origp != 0; origp++) { if (myupper (*origp)) return; } } } /* * The cases are ok. Put out the word, being careful that the * prefix/suffix cases match those in the original, and that the * unchanged characters from the original actually match it. */ (void) putchar (' '); origp = orig_word + preadd; if (myupper (*origp)) { for (i = prestrip; --i >= 0; ) (void) fputs (printichar ((int) *word++), stdout); } else { i = prestrip; if (i > 0 && myupper (orig_word[0])) { --i; (void) fputs (printichar ((int) mytoupper (*word++)), stdout); } while (--i >= 0) (void) fputs (printichar ((int) mytolower (*word++)), stdout); } i = orig_len - preadd - sufadd; if (prestrip == 0 && myupper (orig_word[0])) { --i; (void) fputs (printichar ((int) mytoupper (*origp++)), stdout); word++; } for ( ; --i >= 0; word++) (void) fputs (printichar ((int) *origp++), stdout); if (origp > orig_word) origp--; if (myupper (*origp)) (void) fputs ((char *) ichartosstr (word, 0), stdout); else { while (*word) { (void) fputs (printichar ((int) mytolower (*word++)), stdout); } } /* * Now put out the flags */ (void) putchar (hashheader.flagmarker); if (preflag > 0) (void) putchar (preflag); if (sufflag > 0) (void) putchar (sufflag); } ispell-3.4.02/PaxHeaders.22185/zapdups.X0000644000000000000000000000013212465617735014465 xustar0030 mtime=1423384541.163511067 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/zapdups.X0000555003214100001440000001470112465617735015544 0ustar00geofffaculty00000000000000!!POUNDBANG!! # # $Id: zapdups.X,v 1.13 2015-02-08 00:35:41-08 geoff Exp $ # # Copyright 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # Report or get rid of duplicates in various components of a dictionary. # # Usage: # # zapdups [-d [-n]] [-l langfile] dict-0 dict-1 ... # # Dictionaries starting with dict-1 (not dict-0!) are examined, # looking for words that appear in any earlier dictionary. If any # duplicates are found, they are reported to the standard output. # # If the -d switch is specified, duplicates are removed from later # dictionaries. The modification is done in-place. This switch # should normally be used after examining the output of an earlier # run. The -d switch takes a long time to run, because it uses # munchlist to reduce the dictionary once duplicates are removed. # The -n switch can be used to suppress the running of munchlist, to # save time. # # If the -l switch is specified, the language tables are gotten from # the specified file; otherwise they come from $LIBDIR/!!DEFLANG!!. # # $Log: zapdups.X,v $ # Revision 1.13 2015-02-08 00:35:41-08 geoff # Be a bit more paranoid about creating temporary files. # # Revision 1.12 2005/04/27 01:18:35 geoff # Work around idiotic POSIX incompatibilities in sort. Add secure # temp-file handling. # # Revision 1.11 2005/04/14 14:38:23 geoff # Update license. Protect against modernized (i.e., incompatible) and # internationalized sort commands. Don't use /usr/tmp. # # Revision 1.10 2001/09/06 00:30:29 geoff # Changes from Eli Zaretskii to support DJGPP compilation. # # Revision 1.9 2001/07/25 21:51:47 geoff # Minor license update. # # Revision 1.8 2001/07/23 20:24:04 geoff # Update the copyright and the license. # # Revision 1.7 1999/01/07 01:58:10 geoff # Update the copyright. # # Revision 1.6 1995/01/08 23:23:58 geoff # Support variable hashfile suffixes for DOS purposes. # # Revision 1.5 1994/01/25 07:12:24 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # # # The following is necessary so that some internationalized versions of # sort(1) don't confuse things by sorting into a nonstandard order. # LANG=C LOCALE=C LC_ALL=C LC_COLLATE=C LC_CTYPE=C export LANG LOCALE LC_COLLATE LC_CTYPE # # The following aren't strictly necessary, but I've been made paranoid # by problems with the stuff above. It can't hurt to set them to a # sensible value. LC_MESSAGES=C LC_MONETARY=C LC_NUMERIC=C LC_TIME=C export LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME LIBDIR=!!LIBDIR!! TDIR=${TMPDIR-/tmp} TEMPDIR=`mktemp -d ${TDIR}/zapdXXXXXXXXXX 2>/dev/null` || (umask 077; mkdir "$TDIR/zapd$$" || (echo "Can't create temp directory: ${TDIR}/zapd$$" 1>&2; exit 1); TEMPDIR="$TDIR/zapd$$") TMP=${TEMPDIR}/zapd SORTTMP="-T ${TDIR}" # !!SORTTMP!! USAGE="zapdups [-d [-n]] [-l langfile] dict-0 dict-1 ..." delete=no munchit=yes langtabs=${LIBDIR}/!!DEFLANG!! while : do case "$1" in -d) delete=yes shift ;; -l) langtabs="$2" shift; shift ;; -n) munchit=no shift ;; -*) echo "$USAGE" 1>&2 exit 1 ;; *) break ;; esac done if [ $# -lt 2 ] then echo "$USAGE" 1>&2 exit 1 fi FAKEHASH=${TMP}!!HASHSUFFIX!! FAKEDICT=$TMP.b SEEN=$TMP.c LATEST=$TMP.d DUPS=$TMP.e trap "rm -rf $TEMPDIR; exit 1" 1 2 15 trap "rm -rf $TEMPDIR; exit 0" 13 # # Create a dummy dictionary to hold a compiled copy of the language # tables. # echo 'QQQQQQQQ' > $FAKEDICT buildhash -s $FAKEDICT $langtabs $FAKEHASH \ || (echo "Couldn't create fake hash file" 1>&2; rm -rf $TEMPDIR; exit 1) \ || exit 1 rm -f ${FAKEDICT}* nl=' ' # # Expand dictionary 0 into a temp file # ispell -e -d $FAKEHASH < "$1" \ | tr ' ' "$nl" \ | sort $SORTTMP -u \ | sed -e 's@$@ '"$1@" \ > $SEEN shift # # For each subsequent dictionary: # # (1) Expand it into a temp file # (2) Use join to report the duplicates # (3) If we are editing, use comm to remove the duplicates # (4) Add the expanded dictionary (sans duplicates) to the list # of words already seen. # for dict do ispell -e -d $FAKEHASH < "$dict" \ | tr ' ' "$nl" \ | sort $SORTTMP -u \ | sed -e 's@$@ '"$dict@" \ > $LATEST join '-t ' $SEEN $LATEST > $DUPS if [ -s $DUPS ] then cat $DUPS if [ $delete = yes ] then sed -e "s@ .* $dict@ $dict@" $DUPS \ | comm -23 $LATEST - \ | sed -e "s@ $dict@@" \ | if [ $munchit = yes ] then munchlist -l "$langtabs" > "$dict" else sort $SORTTMP -u -o "$dict" fi fi fi # We must do a shift so that $# remains correct shift if [ $# -gt 0 ] then sort $SORTTMP -u -o $SEEN $LATEST $SEEN fi done \ | sort -u rm -rf $TEMPDIR ispell-3.4.02/PaxHeaders.22185/munchlist.X0000644000000000000000000000013212465617735015005 xustar0030 mtime=1423384541.149510902 30 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/munchlist.X0000555003214100001440000007551412465617735016075 0ustar00geofffaculty00000000000000!!POUNDBANG!! # # $Id: munchlist.X,v 1.70 2015-02-08 00:35:41-08 geoff Exp $ # # Copyright 1987, 1988, 1989, 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, # Claremont, CA. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # Given a list of words for ispell, generate a reduced list # in which all possible affixes have been collapsed. The reduced # list will match the same list as the original. # # Usage: # # munchlist [-l lang] [-c lang] [-s hashfile] [-D] [-w chars] [-v] \ # [file] ... # # Options: # # -l lang Specifies the language table to be used. The default # is "$LIBDIR/!!DEFLANG!!". # -c lang Specifies "conversion" language table. If this option is # given, the input file(s) will be assumed to be described by # this table, rather than the table given in the -l option. # This may be used to convert between incompatible language # tables. (When in doubt, use this option -- it doesn't # hurt, and it may save you from creating a dictionary that has # illegal words in it). The default is no conversion. # -T suff Specifies that the source word lists are in the format # of a "suff"-suffixed file, rather than in the # canonical form. For example, "-T tex" specifies that # string characters in the word lists are in TeX format. # The string character conversions are taken from the language # table specified by the "-l" switch. # -s Remove any words that are already covered by the # dictionary in 'hashfile'. The words will be removed # only if all affixes are covered. This option should not be # specified when the main dictionary is being munched. # 'Hashfile' must have been created with the language # table given in the -l option, but this is not checked. # -D Leave temporary files for debugging purposes # -w Passed on to ispell (specify chars that are part of a word) # Unfortunately, special characters must be quoted twice # rather than once when invoking this script. Also, since # buildhash doesn't accept this option, the final ispell -l # step ignores it, making it somewhat less than useful. # -v Report progress to stderr. # # The given input files are merged, then processed by 'ispell -c' # to generate possible affix lists; these are then combined # and reduced. The final result is written to standard output. # # For portability to older systems, I have avoided getopt. # # Geoff Kuenning # 2/28/87 # # $Log: munchlist.X,v $ # Revision 1.70 2015-02-08 00:35:41-08 geoff # Be a bit more paranoid about creating temporary files. Fix a problem # with detecting a new-style sort that refuses to be backwards # compatible (and yes, it's still cretinism to break backwards # compatibility--but I have to put up with the cretins). # # Revision 1.69 2005/04/28 14:46:51 geoff # Remove references to the now-obsolete count file. # # Revision 1.68 2005/04/27 01:18:34 geoff # Work around idiotic POSIX incompatibilities in sort. Add secure # temp-file handling. # # Revision 1.67 2005/04/14 23:11:36 geoff # Pass the -w switch to icombine. # # Revision 1.66 2005/04/14 21:25:52 geoff # Make the temporary-file handling safer (using mktemp, if it exists). # # Revision 1.65 2005/04/14 14:39:33 geoff # Use /tmp as the default temp directory # # Revision 1.64 2005/04/14 14:38:23 geoff # Update license. Protect against modernized (i.e., incompatible) and # internationalized sort commands. Change the debugging names of the # minimal-affixes count and stat files. # # Revision 1.63 2002/06/20 23:46:16 geoff # Add yet more locale definitions so that we won't run into bugs caused # by sorting inconsistencies. # # Revision 1.62 2001/09/06 00:30:28 geoff # Many changes from Eli Zaretskii to support DJGPP compilation. # # Revision 1.61 2001/07/25 21:51:46 geoff # Minor license update. # # Revision 1.60 2001/07/23 20:24:04 geoff # Update the copyright and the license. # # Revision 1.59 2001/06/07 08:02:18 geoff # Fix a copule of typos in comments. # # Revision 1.58 2000/11/14 07:27:04 geoff # Don't generate an extra dot when attempting to preserve the count # files in -D mode. # # Revision 1.57 2000/10/06 23:59:48 geoff # Don't assume dot is in the path # # Revision 1.56 1999/01/07 01:22:42 geoff # Update the copyright. # # Revision 1.55 1997/12/02 06:25:01 geoff # Start the cross-expansions loop count at 1, not zero. # # Revision 1.54 1997/12/01 00:53:52 geoff # Abort the munchlist cross-product loop if it goes over 100 passes. # # Revision 1.53 1995/01/08 23:23:36 geoff # Support variable hashfile suffixes for DOS purposes. # # Revision 1.52 1994/12/27 23:08:46 geoff # Dynamically determine how to pass backslashes to 'tr' so that it'll # work on any machine. Define LC_CTYPE to work around yet more # internationalized sort programs. Work around a bug in GNU uniq that # uses the wrong separator between counts and duplicated lines. # # Revision 1.51 1994/11/21 07:02:54 geoff # Correctly quote the arguments to 'tr' when detecting systems with # unsigned sorts. Be sure to provide a zero exit status on all systems, # even if MUNCHDEBUG is not set. # # Revision 1.50 1994/10/25 05:46:05 geoff # Export values for LANG and LOCALE in an attempt to override some # stupidly-internationalized sort programs. # # Revision 1.49 1994/10/04 03:51:30 geoff # Add the MUNCHMAIL feature. If the MUNCHMAIL environment variable is # set to an email address, debugging information about the munchlist run # will automatically be collected and mailed to that address. # # Revision 1.48 1994/05/17 06:32:06 geoff # Don't look for affix tables in LIBDIR if the name contains a slash # # Revision 1.47 1994/04/27 02:50:48 geoff # Fix some cosmetic flaws in the verbose-mode messages. # # Revision 1.46 1994/01/25 07:11:59 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # LIBDIR=!!LIBDIR!! TDIR=${TMPDIR-/tmp} MUNCHDIR=`mktemp -d ${TDIR}/munchXXXXXXXXXX 2>/dev/null` || (umask 077; mkdir "$TDIR/munch$$" || (echo "Can't create temp directory: ${TDIR}/munch$$" 1>&2; exit 1); MUNCHDIR="$TDIR/munch$$") TMP=${MUNCHDIR}/munch. MAILDEBUGDIR=${MUNCHDIR-/tmp} if [ "X$MUNCHMAIL" != X ] then exec 2> ${MAILDEBUGDIR}/munchlist.mail echo "munchlist $*" 1>&2 set -vx fi SORTTMP="-T ${TDIR}" # !!SORTTMP!! DBDIR=${MUNCHDEBUGDIR-$MAILDEBUGDIR} # Detect MS-DOS systems and arrange to use their silly suffix system if [ -z "$COMSPEC$ComSpec" ] then EXE="" else EXE=".exe" fi # # Set up some program names. This prefers the versions that are in # the same directory as munchlist was run from; if that can't be # figured out, it prefers local versions and finally ones chosen from # $PATH. # # This code could be simplified by using the dirname command, but it's # not available everywhere. For the same reason, we use -r rather than # -x to test for executable files. # case "$0" in */*) bindir=`expr "$0" : '\(.*\)/[^/]*'` ;; *) bindir='.' ;; esac if [ -r $bindir/buildhash$EXE ] then BUILDHASH=$bindir/buildhash$EXE elif [ -r ./buildhash$EXE ] then BUILDHASH=./buildhash$EXE else BUILDHASH=buildhash fi if [ -r $bindir/icombine$EXE ] then COMBINE=$bindir/icombine$EXE elif [ -r ./icombine$EXE ] then COMBINE=./icombine$EXE else COMBINE=icombine fi if [ -r $bindir/ijoin$EXE ] then JOIN=$bindir/ijoin$EXE elif [ -r ./ijoin$EXE ] then JOIN=./ijoin$EXE else JOIN=ijoin fi if [ -r $bindir/ispell$EXE ] then ISPELL=$bindir/ispell$EXE elif [ -r ./ispell$EXE ] then ISPELL=./ispell$EXE else ISPELL=ispell fi # In one of the most incredibly stupid decisions of all time, some # genius decided to break backwards compatibility by "deprecating" the # old-style sort switches even though it was trivial to recognize both # styles. The result is that that thousands of people (like me) will # have to rewrite shell scripts to tolerate that stupidity. (It's not # that the new syntax is bad--it's definitely easier to understand. # But that doesn't excuse breaking compatibility.) # # Detect whether sort accepts old-style switches. if sort +0 /dev/null >/dev/null 2>&1 then CRETIN_SORT=false else CRETIN_SORT=true fi # # The following is necessary so that some internationalized versions of # sort(1) don't confuse things by sorting into a nonstandard order. # LANG=C LOCALE=C LC_ALL=C LC_COLLATE=C LC_CTYPE=C export LANG LOCALE LC_COLLATE LC_CTYPE # # The following aren't strictly necessary, but I've been made paranoid # by problems with the stuff above. It can't hurt to set them to a # sensible value. LC_MESSAGES=C LC_MONETARY=C LC_NUMERIC=C LC_TIME=C export LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME debug=no dictopt= langtabs=${LIBDIR}/!!DEFLANG!! convtabs= strip=no icflags= verbose=false # The following value of "wchars" is necessary to prevent ispell from # receiving a null argument if -w is not specified. As long as "A" is # a member of the existing character set, ispell will ignore the argument. wchars=-wA while [ $# != 0 ] do case "$1" in -l) case "$2" in */*) langtabs=$2 ;; *) if [ -r "$2" ] then langtabs="$2" else langtabs="${LIBDIR}/$2" fi ;; esac if [ ! -r "$langtabs" ] then echo "Can't open language table '$2'" 1>&2 rm -rf $MUNCHDIR exit 1 fi shift ;; -c) if [ -r "$2" ] then convtabs="$2" elif [ -r "${LIBDIR}/$2" ] then convtabs="${LIBDIR}/$2" else echo "Can't open conversion language table '$2'" 1>&2 rm -rf $MUNCHDIR exit 1 fi shift ;; -s) dictopt="-d $2" strip=yes shift ;; -D) debug=yes ;; -T) icflags="-T $2" shift ;; -v) verbose=true ;; -w) wchars="-w$2" shift ;; --) shift break ;; -) break ;; -*) echo 'Usage: munchlist [-l lang] [-c lang] [-T suff] [-s hashfile] [-D] [-w chars] [-v] [file] ...' \ 1>&2 rm -rf $MUNCHDIR exit 2 ;; *) break ;; esac shift done if [ "X$MUNCHMAIL" != X ] then verbose=true debug=yes fi trap "rm -rf $MUNCHDIR; exit 1" 1 2 13 15 # # Names of temporary files. This is just to make the code a little easier # to read. # EXPANDEDINPUT=${TMP}a STRIPPEDINPUT=${TMP}b CRUNCHEDINPUT=${TMP}c PRODUCTLIST=${TMP}d EXPANDEDPAIRS=${TMP}e LEGALFLAGLIST=${TMP}f JOINEDPAIRS=${TMP}g MINIMALAFFIXES=${TMP}h CROSSROOTS=${TMP}i CROSSEXPANDED=${TMP}j CROSSPAIRS=${TMP}k CROSSILLEGAL=${TMP}l ILLEGALCOMBOS=${TMP}m FAKEDICT=${TMP}n # Ispell insists that hash files have a "!!HASHSUFFIX!!" suffix FAKEHASH=${TMP}o!!HASHSUFFIX!! AWKSCRIPT=${TMP}p if [ "$debug" = yes ] then touch $EXPANDEDINPUT $STRIPPEDINPUT $CRUNCHEDINPUT $PRODUCTLIST \ $EXPANDEDPAIRS $LEGALFLAGLIST $JOINEDPAIRS $MINIMALAFFIXES \ $CROSSROOTS $CROSSEXPANDED $CROSSPAIRS $CROSSILLEGAL $ILLEGALCOMBOS \ $FAKEDICT $FAKEHASH $AWKSCRIPT rm -f ${DBDIR}/EXPANDEDINPUT ${DBDIR}/STRIPPEDINPUT \ ${DBDIR}/CRUNCHEDINPUT ${DBDIR}/PRODUCTLIST ${DBDIR}/EXPANDEDPAIRS \ ${DBDIR}/LEGALFLAGLIST ${DBDIR}/JOINEDPAIRS ${DBDIR}/MINIMALAFFIXES \ ${DBDIR}/CROSSROOTS ${DBDIR}/CROSSEXPANDED ${DBDIR}/CROSSPAIRS \ ${DBDIR}/CROSSILLEGAL ${DBDIR}/ILLEGALCOMBOS ${DBDIR}/FAKEDICT \ ${DBDIR}/FAKEHASH!!HASHSUFFIX!! ${DBDIR}/AWKSCRIPT \ ${DBDIR}/CROSSROOTS.[0-9]* ${DBDIR}/CROSSEXP.[0-9]* \ ${DBDIR}/CROSSPAIRS.[0-9]* ${DBDIR}/CROSSILLEGAL.[0-9]* ln $EXPANDEDINPUT ${DBDIR}/EXPANDEDINPUT ln $STRIPPEDINPUT ${DBDIR}/STRIPPEDINPUT ln $CRUNCHEDINPUT ${DBDIR}/CRUNCHEDINPUT ln $PRODUCTLIST ${DBDIR}/PRODUCTLIST ln $EXPANDEDPAIRS ${DBDIR}/EXPANDEDPAIRS ln $LEGALFLAGLIST ${DBDIR}/LEGALFLAGLIST ln $JOINEDPAIRS ${DBDIR}/JOINEDPAIRS ln $MINIMALAFFIXES ${DBDIR}/MINIMALAFFIXES ln $CROSSROOTS ${DBDIR}/CROSSROOTS ln $CROSSEXPANDED ${DBDIR}/CROSSEXPANDED ln $CROSSPAIRS ${DBDIR}/CROSSPAIRS ln $CROSSILLEGAL ${DBDIR}/CROSSILLEGAL ln $ILLEGALCOMBOS ${DBDIR}/ILLEGALCOMBOS ln $FAKEDICT ${DBDIR}/FAKEDICT ln $FAKEHASH ${DBDIR}/FAKEHASH!!HASHSUFFIX!! ln $AWKSCRIPT ${DBDIR}/AWKSCRIPT fi # # Create a dummy dictionary to hold a compiled copy of the language # table. Initially, it holds the conversion table, if it exists. # case "X$convtabs" in X) convtabs="$langtabs" ;; esac echo 'QQQQQQQQ' > $FAKEDICT $BUILDHASH -s $FAKEDICT $convtabs $FAKEHASH \ || (echo "Couldn't create fake hash file" 1>&2; rm -rf $MUNCHDIR; exit 1) \ || exit 1 # # Figure out how 'sort' sorts signed fields, for arguments to ijoin. # This is a little bit of a tricky pipe, but the result is that SIGNED # is set to "-s" if characters with the top bit set sort before those # without, and "-u" if the reverse is true. How does it work? The # first "tr" step generates two lines, one containing "-u", the other # with the same but with the high-order bit set. The second "tr" # changes the high-bit "-u" back to "-s". If the high-bit "-u" was # sorted first, the sed step will select "-s" for SIGNED; otherwise # it'll pick "-u". We have to be careful about backslash quoting # conventions, because some systems differ. # backslash=\\ for i in 0 1 2 3 do if [ `echo a | tr "${backslash}141" b` = b ] then break fi backslash="$backslash$backslash" done SIGNED=`echo '-s -u' | tr s "${backslash}365" | sort | tr "${backslash}365" s | sed -e 1q` # # Collect all the input and expand all the affix options ($ISPELL -e), # and preserve (sorted) for later joining in EXPANDEDINPUT. The icombine # step is to make sure that unneeded capitalizations (e.g., Farmer and farmer) # are weeded out. The first sort must be folded for icombine; the second # must be unfolded for join. # $verbose && echo "Collecting input." 1>&2 if $CRETIN_SORT then sortopts='-k 1f,1 -k 1' else sortopts='+0f -1 +0' fi if [ $# -eq 0 ] then $ISPELL "$wchars" -e1 -d $FAKEHASH -p /dev/null | tr " " ' ' else cat "$@" | $ISPELL "$wchars" -e1 -d $FAKEHASH -p /dev/null | tr " " ' ' fi \ | sort $SORTTMP -u $sortopts \ | $COMBINE $icflags "$wchars" $langtabs \ | sort $SORTTMP -u > $EXPANDEDINPUT # # If a conversion table existed, recreate the fake hash file with the # "real" language table. # case "$convtabs" in $langtabs) ;; *) $BUILDHASH -s $FAKEDICT $langtabs $FAKEHASH \ || (echo "Couldn't create fake hash file" 1>&2; \ rm -rf $MUNCHDIR; exit 1) \ || exit 1 ;; esac rm -f ${FAKEDICT}* # # If the -s (strip) option was specified, remove all # expanded words that are covered by the dictionary. This produces # the final list of expanded words that this dictionary must cover. # Leave the list in STRIPPEDINPUT. # if [ "X$strip" = "Xno" ] then rm -f $STRIPPEDINPUT ln $EXPANDEDINPUT $STRIPPEDINPUT if [ "$debug" = yes ] then rm -f ${DBDIR}/STRIPPEDINPUT ln $STRIPPEDINPUT ${DBDIR}/STRIPPEDINPUT fi else $verbose && echo "Stripping words already in the dictionary." 1>&2 $ISPELL "$wchars" -l $dictopt -p /dev/null < $EXPANDEDINPUT \ > $STRIPPEDINPUT fi # # Figure out what the flag-marking character is. # $verbose && echo "Finding flag marker." 1>&2 flagmarker=`$ISPELL -D -d $FAKEHASH \ | sed -n -e '/^flagmarker/s/flagmarker //p'` case "$flagmarker" in \\*) flagmarker=`expr "$flagmarker" : '.\(.\)'` ;; esac # # Munch the input to generate roots and affixes ($ISPELL -c). We are # only interested in words that have at least one affix (egrep $flagmarker); # the next step will pick up the rest. Some of the roots are illegal. We # use join to restrict the output to those root words that are found # in the original dictionary. # $verbose && echo "Generating roots and affixes." 1>&2 if $CRETIN_SORT then sortopts='-k 1,1 -k 2' else sortopts='+0 -1 +1' fi $ISPELL "$wchars" -c -W0 -d $FAKEHASH -p /dev/null < $STRIPPEDINPUT \ | tr " " ' ' \ | egrep "$flagmarker" | sort $SORTTMP -u "-t$flagmarker" $sortopts \ | $JOIN $SIGNED "-t$flagmarker" - $EXPANDEDINPUT > $CRUNCHEDINPUT # # We now have a list of legal roots, and of affixes that apply to the # root words. However, it is possible for some affix flags to generate more # than one output word. For example, with the flag table entry # # flag R: . > ER # . > ERS # # the input "BOTHER" will generate an entry "BOTH/R" in CRUNCHEDINPUT. But # this will accept "BOTHER" and "BOTHERS" in the dictionary, which is # wrong (in this case, though it's good English). # # To cure this problem, we first have to know which flags generate which # expansions. We use $ISPELL -e3 to expand the flags (the second e causes # the root and flag to be included in the output), and get pairs # suitable for joining. In the example above, we would get # # BOTH/R BOTHER # BOTH/R BOTHERS # # We save this in EXPANDEDPAIRS for the next step. # $verbose && echo 'Expanding dictionary into EXPANDEDPAIRS.' 1>&2 if $CRETIN_SORT then sortopts='-k 2' else sortopts='+1' fi $ISPELL "$wchars" -e3 -d $FAKEHASH -p /dev/null < $CRUNCHEDINPUT \ | sort $SORTTMP $sortopts > $EXPANDEDPAIRS # # Now we want to extract the lines in EXPANDEDPAIRS in which the second field # is *not* listed in the original dictionary EXPANDEDINPUT; these illegal # lines contain the flags we cannot include without accepting illegal words. # It is somewhat easier to extract those which actually are listed (with # join), and then use comm to strip these from EXPANDEDPAIRS to get the # illegal expansions, together with the flags that generate them (we must # re-sort EXPANDEDPAIRS before running comm). Sed # gets rid of the expansion and uniq gets rid of duplicates. Comm then # selects the remainder of the list from CRUNCHEDINPUT and puts it in # LEGALFLAGLIST. The final step is to use a sort and icombine to put # the list into a one-entry-per-root format. # # BTW, I thought of using cut for the sed step (on systems that have it), # but it turns out that sed is faster! # $JOIN -j1 2 -o 1.1 1.2 $SIGNED $EXPANDEDPAIRS $EXPANDEDINPUT \ | sort $SORTTMP -u > $JOINEDPAIRS sort $SORTTMP -o $EXPANDEDPAIRS $EXPANDEDPAIRS sort $SORTTMP -o $CRUNCHEDINPUT $CRUNCHEDINPUT $verbose && echo 'Creating list of legal roots/flags.' 1>&2 if $CRETIN_SORT then sortopts='-k 1f,1 -k 1' else sortopts='+0f -1 +0' fi comm -13 $JOINEDPAIRS $EXPANDEDPAIRS \ | (sed -e 's; .*$;;' ; rm -f $JOINEDPAIRS $EXPANDEDPAIRS) \ | uniq \ | (comm -13 - $CRUNCHEDINPUT ; rm -f $CRUNCHEDINPUT) \ | sort $SORTTMP -u "-t$flagmarker" $sortopts \ | $COMBINE "$wchars" $langtabs > $LEGALFLAGLIST # # LEGALFLAGLIST now contains root/flag combinations that, when expanded, # produce only words from EXPANDEDPAIRS. However, there is still a # problem if the language tables have any cross-product flags. A legal # root may appear in LEGALFLAGLIST with two flags that participate # in cross-products. When such a dictionary entry is expanded, # the cross-products will generate some extra words that may not # be in EXPANDEDPAIRS. We need to remove these from LEGALFLAGLIST. # # The first step is to collect the names of the flags that participate # in cross-products. Ispell will dump the language tables for us, and # sed is a pretty handy way to strip out extra information. We use # uniq -c and a numerical sort to put the flags in approximate order of how # "productive" they are (in terms of how likely they are to generate a lot # of output words). The least-productive flags are given last and will # be removed first. # $verbose \ && echo 'Creating list of flags that participate in cross-products.' 1>&2 if $CRETIN_SORT then sortopts='-k 1rn,1 -k 3' else sortopts='+0rn -1 +2' fi $ISPELL -D -d $FAKEHASH \ | sed -n -e '1,$s/:.*$// /^flagmarker/d /^prefixes/,/^suffixes/s/^ flag \*/p /p /^suffixes/,$s/^ flag \*/s /p' \ | sort $SORTTMP \ | uniq -c \ | tr ' ' ' ' \ | sort $SORTTMP $sortopts > $PRODUCTLIST if [ `egrep ' p ' $PRODUCTLIST | wc -l` -gt 0 \ -a `egrep ' s ' $PRODUCTLIST | wc -l` -gt 0 ] then # # The language tables allow cross products. See if LEGALFLAGLIST has # any roots with multiple cross-product flags. Put them in CROSSROOTS. # $verbose && echo 'Finding prefix and suffix flags.' 1>&2 preflags=`sed -n -e 's/^[ 0-9]*p //p' $PRODUCTLIST | tr -d ' '` sufflags=`sed -n -e 's/^[ 0-9]*s //p' $PRODUCTLIST | tr -d ' '` egrep "$flagmarker.*[$preflags].*[$sufflags]|$flagmarker.*[$sufflags].*[$preflags]" \ $LEGALFLAGLIST \ > $CROSSROOTS # # We will need an awk script; it's so big that it core-dumps my shell # under certain conditions. The rationale behind the script is commented # where the script is used. Note that you may want to change this # script for languages other than English. # case "$flagmarker" in /) sedchar=: ;; *) sedchar=/ ;; esac $verbose && echo 'Creating awk script.' 1>&2 sed -e "s/PREFLAGS/$preflags/" -e "s/SUFFLAGS/$sufflags/" \ -e "s;ILLEGALCOMBOS;$ILLEGALCOMBOS;" \ -e "s${sedchar}FLAGMARKER${sedchar}$flagmarker${sedchar}" \ > $AWKSCRIPT << 'ENDOFAWKSCRIPT' BEGIN \ { preflags = "PREFLAGS" sufflags = "SUFFLAGS" illegalcombos = "ILLEGALCOMBOS" flagmarker = "FLAGMARKER" pflaglen = length (preflags) for (i = 1; i <= pflaglen; i++) pflags[i] = substr (preflags, i, 1); sflaglen = length (sufflags) for (i = 1; i <= sflaglen; i++) sflags[i] = substr (sufflags, i, 1); } { len = length ($2) pnew2 = "" snew2 = "" pbad = "" sbad = "" sufs = 0 pres = 0 for (i = 1; i <= len; i++) { curflag = substr ($2, i, 1) for (j = 1; j <= pflaglen; j++) { if (pflags[j] == curflag) { pres++ pnew2 = substr ($2, 1, i - 1) substr ($2, i + 1) pbad = curflag } } for (j = 1; j <= sflaglen; j++) { if (sflags[j] == curflag) { sufs++ snew2 = substr ($2, 1, i - 1) substr ($2, i + 1) sbad = curflag } } } if (pres == 1) { print $1 flagmarker pnew2 print $1 flagmarker pbad >> illegalcombos } else if (sufs == 1) { print $1 flagmarker snew2 print $1 flagmarker sbad >> illegalcombos } else if (pres > 0) { print $1 flagmarker pnew2 print $1 flagmarker pbad >> illegalcombos } else { print $1 flagmarker snew2 print $1 flagmarker sbad >> illegalcombos } } ENDOFAWKSCRIPT : > $ILLEGALCOMBOS dbnum=1 while [ -s $CROSSROOTS ] do # # CROSSROOTS contains the roots whose cross-product expansions # might be illegal. We now need to locate the actual illegal ones. # We do this in much the same way we created LEGALFLAGLIST from # CRUNCHEDINPUT. First we make CROSSEXPANDED, which is analogous # to EXPANDEDPAIRS. # $verbose && echo "Creating cross expansions (pass $dbnum)." 1>&2 if $CRETIN_SORT then sortopts='-k 2' else sortopts='+1' fi $ISPELL "$wchars" -e3 -d $FAKEHASH -p /dev/null < $CROSSROOTS \ | sort $SORTTMP $sortopts > $CROSSEXPANDED # # Now we join CROSSEXPANDED against EXPANDEDINPUT to produce # CROSSPAIRS, and then comm that against CROSSEXPANDED to # get CROSSILLEGAL, the list of illegal cross-product flag # combinations. # $JOIN -j1 2 -o 1.1 1.2 $SIGNED $CROSSEXPANDED $EXPANDEDINPUT \ | sort $SORTTMP -u > $CROSSPAIRS sort $SORTTMP -u -o $CROSSEXPANDED $CROSSEXPANDED $verbose \ && echo "Finding illegal cross expansions (pass $dbnum)." 1>&2 comm -13 $CROSSPAIRS $CROSSEXPANDED \ | sed -e 's; .*$;;' \ | uniq > $CROSSILLEGAL if [ "$debug" = yes ] then mv $CROSSROOTS $DBDIR/CROSSROOTS.$dbnum ln $CROSSEXPANDED $DBDIR/CROSSEXP.$dbnum ln $CROSSPAIRS $DBDIR/CROSSPAIRS.$dbnum ln $CROSSILLEGAL $DBDIR/CROSSILLEGAL.$dbnum fi # # Now it is time to try to clear up the illegalities. For # each word in the illegal list, remove one of the cross-product # flags. The flag chosen is selected in an attempt to cure the # problem quickly, as follows: (1) if there is only one suffix # flag or only one prefix flag, we remove that. (2) If there is # a prefix flag, we remove the "least desirable" (according to # the order of preflags). (This may be pro-English prejudice, # and you might want to change this if your language is prefix-heavy). # (3) Otherwise we remove the least-desirable suffix flag # # The output of the awk script becomes the new CROSSROOTS. In # addition, we add the rejected flags to ILLEGALCOMBOS (this is done # inside the awk script) so they can be removed from LEGALFLAGLIST # later. # awk "-F$flagmarker" -f $AWKSCRIPT $CROSSILLEGAL > $CROSSROOTS if [ "$debug" = yes ] then rm -f $CROSSEXPANDED $CROSSPAIRS $CROSSILLEGAL fi dbnum=`expr $dbnum + 1` if [ $dbnum -gt 100 ] then echo "Too many passes, aborting cross-product loop. Munchlist failed." 1>&2 if [ "X$MUNCHMAIL" != X ] then ( ls -ld ${DBDIR}/[A-Z]* cat ${MAILDEBUGDIR}/munchlist.mail ) | mail -s 'Munchlist debug output' "$MUNCHMAIL" rm -f ${MAILDEBUGDIR}/munchlist.mail fi rm -rf $MUNCHDIR exit 1 fi done rm -f $CROSSEXPANDED $CROSSPAIRS $CROSSILLEGAL $AWKSCRIPT # # Now we have, in ILLEGALCOMBOS, a list of root/flag combinations # that must be removed from LEGALFLAGLIST to get the final list # of truly legal flags. ILLEGALCOMBOS has one flag per line, so # by turning LEGALFLAGLIST into this form (sed), it's an # easy task for comm. We have to recombine flags again after the # extraction, to get all flags for a given root on the same line so that # cross-products will come out right. # if [ -s $ILLEGALCOMBOS ] then sort $SORTTMP -u -o $ILLEGALCOMBOS $ILLEGALCOMBOS $verbose && echo 'Finding roots of cross expansions.' 1>&2 if $CRETIN_SORT then sortopts='-k 1f,1 -k 1' else sortopts='+0f -1 +0' fi sort $SORTTMP $LEGALFLAGLIST \ | sed -e '/\/../{ s;^\(.*\)/\(.\)\(.*\);\1/\2\ \1/\3; P D }' \ | comm -23 - $ILLEGALCOMBOS \ | sort $SORTTMP -u "-t$flagmarker" $sortopts \ | $COMBINE "$wchars" $langtabs > $CROSSROOTS mv $CROSSROOTS $LEGALFLAGLIST if [ "$debug" = yes ] then rm -f ${DBDIR}/LEGALFLAGLIST1 ln $LEGALFLAGLIST ${DBDIR}/LEGALFLAGLIST1 fi fi fi rm -f $PRODUCTLIST $CROSSROOTS $ILLEGALCOMBOS $EXPANDEDINPUT # # We now have (in LEGALFLAGLIST) a list of roots and flags which will # accept words taken from EXPANDEDINPUT and no others (though some of # EXPANDEDINPUT is not covered by this list). However, many of the # expanded words can be generated in more than one way. For example, # "bather" can be generated from "bath/R" and "bathe/R". This wastes # unnecessary space in the raw dictionary and, in some cases, in the # hash file as well. The solution is to list the various ways of # getting a given word and choose exactly one. All other things being # equal, we want to choose the one with the highest expansion length # to root length ratio. The $ISPELL -e4 option takes care of this by # providing us with a field to sort on. # # The ispell/awk combination is similar to the ispell/sed pipe used to # generate EXPANDEDPAIRS, except that ispell adds an extra field # giving the sort order. The first sort gets things in order so the # first root listed is the one we want, and the second sort (-um) then # selects that first root. Sed strips the expansion from the root, # and a final sort -u generates MINIMALAFFIXES, the final list of # affixes that (more or less) minimally covers what it can from # EXPANDEDINPUT. # $verbose && echo 'Eliminating non-optimal affixes.' 1>&2 if $CRETIN_SORT then sortopts1='-k 2,2 -k 2rn,3 -k 1,1' sortopts2='-k 2,2' sortopts3='-k 1f,1 -k 1' else sortopts1='+1 -2 +2rn -3 +0 -1' sortopts2='+1 -2' sortopts3='+0f -1 +0' fi $ISPELL "$wchars" -e4 -d $FAKEHASH -p /dev/null < $LEGALFLAGLIST \ | sort $SORTTMP $sortopts1 \ | sort $SORTTMP -um $sortopts2 \ | sed -e 's; .*$;;' \ | sort $SORTTMP -u "-t$flagmarker" $sortopts3 > $MINIMALAFFIXES rm -f $LEGALFLAGLIST # # Now we're almost done. MINIMALAFFIXES covers some (with luck, most) # of the words in STRIPPEDINPUT. Now we must create a list of the remaining # words (those omitted by MINIMALAFFIXES) and add it to MINIMALAFFIXES. # The best way to do this is to actually build a partial dictionary from # MINIMALAFFIXES in FAKEHASH, and then use $ISPELL -l to list the words that # are not covered by this dictionary. This must then be combined with the # reduced version of MINIMALAFFIXES and sorted to produce the final result. # $verbose && echo "Generating output word list." 1>&2 if $CRETIN_SORT then sortopts='-k 1f,1 -k 1' else sortopts='+0f -1 +0' fi if [ -s $MINIMALAFFIXES ] then $BUILDHASH -s $MINIMALAFFIXES $langtabs $FAKEHASH > /dev/null \ || (echo "Couldn't create intermediate hash file" 1>&2; rm -rf $MUNCHDIR; exit 1) \ || exit 1 if [ "$debug" = yes ] then rm -f ${DBDIR}/MINIMALAFFIXES!!STATSUFFIX!! ln $MINIMALAFFIXES!!STATSUFFIX!! ${DBDIR}/MINIMALAFFIXES.!!STATSUFFIX!! fi ($ISPELL "$wchars" -l -d $FAKEHASH -p /dev/null < $STRIPPEDINPUT; \ $COMBINE "$wchars" $langtabs < $MINIMALAFFIXES) \ | sort $SORTTMP "-t$flagmarker" -u $sortopts else # MINIMALAFFIXES is empty; just produce a sorted version of STRIPPEDINPUT sort $SORTTMP "-t$flagmarker" -u $sortopts $STRIPPEDINPUT fi if [ "X$MUNCHMAIL" != X ] then ( ls -ld ${DBDIR}/[A-Z]* cat ${MAILDEBUGDIR}/munchlist.mail ) | mail -s 'Munchlist debug output' "$MUNCHMAIL" rm -f ${MAILDEBUGDIR}/munchlist.mail fi rm -rf $MUNCHDIR exit 0 ispell-3.4.02/PaxHeaders.22185/fields.c0000644000000000000000000000007410227500137014242 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/fields.c0000444003214100001440000002631010227500137015310 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: fields.c,v 1.11 2005/04/14 14:38:23 geoff Exp $"; #endif /* * $Log: fields.c,v $ * Revision 1.11 2005/04/14 14:38:23 geoff * Make maxf unsigned. * * Revision 1.10 1999/01/06 20:57:19 geoff * Include ispell.h so proto.h will work * * Revision 1.9 1999/01/05 20:46:38 geoff * Get declarations from proto.h * * Revision 1.8 1998/07/06 04:56:19 geoff * Make strlen return an unsigned int * * Revision 1.7 1994/01/06 05:26:37 geoff * Get rid of all references to System V string routines, for portability * (sigh). * * Revision 1.6 1994/01/05 20:13:43 geoff * Add the maxf parameter * * Revision 1.5 1994/01/04 02:40:21 geoff * Make the increments settable (field_line_inc and field_field_inc). * Add support for the FLD_NOSHRINK flag. * * Revision 1.4 1993/09/27 17:48:02 geoff * Fix some lint complaints and some parenthesization errors. * * Revision 1.3 1993/09/09 01:11:11 geoff * Add a return value to fieldwrite. Add support for backquotes and for * unstripped backslashes. * * Revision 1.2 1993/08/26 00:02:50 geoff * Fix a stupid null-pointer bug * * Revision 1.1 1993/08/25 21:32:05 geoff * Initial revision * */ #include #include "config.h" #include "fields.h" #include "ispell.h" #include "proto.h" field_t * fieldread P ((FILE * file, char * delims, int flags, unsigned int maxf)); /* Read a line with fields from a file */ field_t * fieldmake P ((char * line, int allocated, char * delims, int flags, unsigned int maxf)); /* Make a field structure from a line */ static field_t * fieldparse P ((field_t * fieldp, char * line, char * delims, int flags, unsigned int maxf)); /* Parse the fields in a line */ static int fieldbackch P ((char * str, char ** out, int strip)); /* Process backslash sequences */ int fieldwrite P ((FILE * file, field_t * fieldp, int delim)); /* Write a line with fields to a file */ void fieldfree P ((field_t * fieldp)); /* Free a field returned by fieldread */ unsigned int field_field_inc = 20; /* Increment to increase # fields by */ unsigned int field_line_inc = 512; /* Incr to increase line length by */ #ifndef USG #define strchr index #endif /* USG */ /* * Read one line of the given file into a buffer, break it up into * fields, and return them to the caller. The field_t structure * returned must eventually be freed with fieldfree. */ field_t * fieldread (file, delims, flags, maxf) FILE * file; /* File to read lines from */ char * delims; /* Characters to use for field delimiters */ int flags; /* Option flags; see fields.h */ unsigned int maxf; /* Maximum number of fields to parse */ { register char * linebuf; /* Buffer to hold the line read in */ int linemax; /* Maximum line buffer size */ int linesize; /* Current line buffer size */ linebuf = (char *) malloc (field_line_inc); if (linebuf == NULL) return NULL; linemax = field_line_inc; linesize = 0; /* * Read in the line. */ while (fgets (&linebuf[linesize], linemax - linesize, file) != NULL) { linesize += strlen (&linebuf[linesize]); if (linebuf[linesize - 1] == '\n') break; else { linemax += field_line_inc; linebuf = (char *) realloc (linebuf, linemax); if (linebuf == NULL) return NULL; } } if (linesize == 0) { free (linebuf); return NULL; } return fieldmake (linebuf, 1, delims, flags, maxf); } field_t * fieldmake (line, allocated, delims, flags, maxf) char * line; /* Line to make into a field structure */ int allocated; /* NZ if line allocated with malloc */ char * delims; /* Characters to use for field delimiters */ int flags; /* Option flags; see fields.h */ unsigned int maxf; /* Maximum number of fields to parse */ { register field_t * fieldp; /* Structure describing the fields */ int linesize; /* Current line buffer size */ fieldp = (field_t *) malloc (sizeof (field_t)); if (fieldp == NULL) return NULL; fieldp->nfields = 0; fieldp->linebuf = allocated ? line : NULL; fieldp->fields = NULL; fieldp->hadnl = 0; linesize = strlen (line); if (line[linesize - 1] == '\n') { line[--linesize] = '\0'; fieldp->hadnl = 1; } /* * Shrink the line buffer if necessary. */ if (allocated && (flags & FLD_NOSHRINK) == 0) { line = fieldp->linebuf = (char *) realloc (fieldp->linebuf, linesize + 1); if (fieldp->linebuf == NULL) { fieldfree (fieldp); return NULL; } } return fieldparse (fieldp, line, delims, flags, maxf); } static field_t * fieldparse (fieldp, line, delims, flags, maxf) register field_t * fieldp; /* Field structure to parse into */ register char * line; /* Line to be parsed */ char * delims; /* Characters to use for field delimiters */ int flags; /* Option flags; see fields.h */ unsigned int maxf; /* Maximum number of fields to parse */ { unsigned int fieldmax; /* Max size of fields array */ char * lineout; /* Where to store xlated char in line */ char quote; /* Quote character in use */ fieldp->nfields = 0; fieldmax = (maxf != 0 && maxf < field_field_inc) ? maxf + 2 : field_field_inc; fieldp->fields = (char **) malloc (fieldmax * sizeof (char *)); if (fieldp->fields == NULL) { fieldfree (fieldp); return NULL; } if ((flags & (FLD_SHQUOTES | FLD_SNGLQUOTES | FLD_BACKQUOTES | FLD_DBLQUOTES)) == FLD_SHQUOTES) flags |= FLD_SNGLQUOTES | FLD_BACKQUOTES | FLD_DBLQUOTES; while (1) { if (flags & FLD_RUNS) { while (*line != '\0' && strchr (delims, *line) != NULL) line++; /* Skip runs of delimiters */ if (*line == '\0') break; } fieldp->fields[fieldp->nfields] = lineout = line; /* * Skip to the next delimiter. At the end of skipping, "line" will * point to either a delimiter or a null byte. */ if (flags & (FLD_SHQUOTES | FLD_SNGLQUOTES | FLD_BACKQUOTES | FLD_DBLQUOTES | FLD_BACKSLASH)) { while (*line != '\0') { if (strchr (delims, *line) != NULL) break; else if (((flags & FLD_SNGLQUOTES) && *line == '\'') || ((flags & FLD_BACKQUOTES) && *line == '`') || ((flags & FLD_DBLQUOTES) && *line == '"')) { if ((flags & FLD_SHQUOTES) == 0 && line != fieldp->fields[fieldp->nfields]) quote = '\0'; else quote = *line; } else quote = '\0'; if (quote == '\0') { if (*line == '\\' && (flags & FLD_BACKSLASH)) { line++; if (*line == '\0') break; line += fieldbackch (line, &lineout, flags & FLD_STRIPQUOTES); } else *lineout++ = *line++; } else { /* Process quoted string */ if ((flags & FLD_STRIPQUOTES) == 0) *lineout++ = quote; ++line; while (*line != '\0') { if (*line == quote) { if ((flags & FLD_STRIPQUOTES) == 0) *lineout++ = quote; line++; /* Go on past quote */ if ((flags & FLD_SHQUOTES) == 0) { while (*line != '\0' && strchr (delims, *line) == NULL) line++; /* Skip to delimiter */ } break; } else if (*line == '\\') { if (flags & FLD_BACKSLASH) { line++; if (*line == '\0') break; else line += fieldbackch (line, &lineout, flags & FLD_STRIPQUOTES); } else { *lineout++ = '\\'; if (*++line == '\0') break; *lineout++ = *line; } } else *lineout++ = *line++; } } } } else { while (*line != '\0' && strchr (delims, *line) == NULL) line++; /* Skip to delimiter */ lineout = line; } fieldp->nfields++; if (*line++ == '\0') break; if (maxf != 0 && fieldp->nfields > maxf) break; *lineout = '\0'; if (fieldp->nfields >= fieldmax) { fieldmax += field_field_inc; fieldp->fields = (char **) realloc (fieldp->fields, fieldmax * sizeof (char *)); if (fieldp->fields == NULL) { fieldfree (fieldp); return NULL; } } } /* * Shrink the field pointers and return the field structure. */ if ((flags & FLD_NOSHRINK) == 0 && fieldp->nfields >= fieldmax) { fieldp->fields = (char **) realloc (fieldp->fields, (fieldp->nfields + 1) * sizeof (char *)); if (fieldp->fields == NULL) { fieldfree (fieldp); return NULL; } } fieldp->fields[fieldp->nfields] = NULL; return fieldp; } static int fieldbackch (str, out, strip) register char * str; /* First char of backslash sequence */ register char ** out; /* Where to store result */ int strip; /* NZ to convert the sequence */ { register int ch; /* Character being developed */ char * origstr; /* Original value of str */ if (!strip) { *(*out)++ = '\\'; if (*str != 'x' && *str != 'X' && (*str < '0' || *str > '7')) { *(*out)++ = *str; return *str != '\0'; } } switch (*str) { case '\0': *(*out)++ = '\0'; return 0; case 'a': *(*out)++ = '\007'; return 1; case 'b': *(*out)++ = '\b'; return 1; case 'f': *(*out)++ = '\f'; return 1; case 'n': *(*out)++ = '\n'; return 1; case 'r': *(*out)++ = '\r'; return 1; case 'v': *(*out)++ = '\v'; return 1; case 'X': case 'x': /* Hexadecimal sequence */ origstr = str++; ch = 0; if (*str >= '0' && *str <= '9') ch = *str++ - '0'; else if (*str >= 'a' && *str <= 'f') ch = *str++ - 'a' + 0xa; else if (*str >= 'A' && *str <= 'F') ch = *str++ - 'A' + 0xa; if (*str >= '0' && *str <= '9') ch = (ch << 4) | (*str++ - '0'); else if (*str >= 'a' && *str <= 'f') ch = (ch << 4) | (*str++ - 'a' + 0xa); else if (*str >= 'A' && *str <= 'F') ch = (ch << 4) | (*str++ - 'A' + 0xa); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': /* Octal sequence */ origstr = str; ch = *str++ - '0'; if (*str >= '0' && *str <= '7') ch = (ch << 3) | (*str++ - '0'); if (*str >= '0' && *str <= '7') ch = (ch << 3) | (*str++ - '0'); break; default: *(*out)++ = *str; return 1; } if (strip) { *(*out)++ = ch; return str - origstr; } else { for (ch = 0; origstr < str; ch++) *(*out)++ = *origstr++; return ch; } } int fieldwrite (file, fieldp, delim) FILE * file; /* File to write to */ register field_t * fieldp; /* Field structure to write */ int delim; /* Delimiter to place between fields */ { int error; /* NZ if an error occurs */ register unsigned int fieldno; /* Number of field being written */ error = 0; for (fieldno = 0; fieldno < fieldp->nfields; fieldno++) { if (fieldno != 0) error |= putc (delim, file) == EOF; error |= fputs (fieldp->fields[fieldno], file) == EOF; } if (fieldp->hadnl) error |= putc ('\n', file) == EOF; return error; } void fieldfree (fieldp) register field_t * fieldp; /* Field structure to free */ { if (fieldp == NULL) return; if (fieldp->linebuf != NULL) free ((char *) fieldp->linebuf); if (fieldp->fields != NULL) free ((char *) fieldp->fields); free ((char *) fieldp); } ispell-3.4.02/PaxHeaders.22185/icombine.c0000644000000000000000000000007410231561320014555 xustar0030 atime=1610226764.417065334 30 ctime=1610226764.417065334 ispell-3.4.02/icombine.c0000444003214100001440000001741510231561320015631 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: icombine.c,v 2.33 2005/04/20 23:16:32 geoff Exp $"; #endif #define MAIN /* * icombine: combine multiple ispell dictionary entries into a single * entry with the options of all entries * * The original version of this program was written by Gary Puckering at * Cognos, Inc. The current version is a complete replacement, created by * reducing Pace Willisson's buildhash program. By using routines common * to buildhash and ispell, we can be sure that the rules for combining * capitalizations are compatible. * * Copyright 1992, 1993, 1999, 2001, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: icombine.c,v $ * Revision 2.33 2005/04/20 23:16:32 geoff * Rename some variables to make them more meaningful. * * Revision 2.32 2005/04/14 23:11:36 geoff * Add the -w switch. * * Revision 2.31 2005/04/14 14:38:23 geoff * Update license. * * Revision 2.30 2001/07/25 21:51:46 geoff * Minor license update. * * Revision 2.29 2001/07/23 20:24:03 geoff * Update the copyright and the license. * * Revision 2.28 2000/08/22 10:52:25 geoff * Fix some compiler warnings. * * Revision 2.27 1999/01/07 01:22:44 geoff * Update the copyright. * * Revision 2.26 1999/01/03 01:46:30 geoff * Add support for sgml and plain deformatter types. * * Revision 2.25 1997/12/02 06:24:45 geoff * Get rid of some compile options that really shouldn't be optional. * * Revision 2.24 1994/01/25 07:11:35 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include #include "config.h" #include "ispell.h" #include "proto.h" #include "msgs.h" char * Lfile; /* Language-description file */ int main P ((int argc, char * argv[])); static void usage P ((void)); VOID * mymalloc P ((unsigned int size)); VOID * myrealloc P ((VOID * ptr, unsigned int size, unsigned int oldsize)); void myfree P ((VOID * ptr)); static void combinedict P ((void)); static void combineout P ((void)); int main (argc, argv) int argc; char * argv[]; { char * argp; char * preftype = NULL; char * wchars = NULL; while (argc > 1 && argv[1][0] == '-') { argc--; argv++; switch (argv[0][1]) { case 'T': argp = (*argv)+2; if (*argp == '\0') { argv++; argc--; if (argc == 0) usage (); argp = *argv; } preftype = argp; break; case 'w': wchars = (*argv) + 2; if (*wchars == '\0') { argv++; argc--; if (argc == 0) usage (); wchars = *argv; } break; break; default: usage (); break; } } if (argc > 1) /* Figure out what language to use */ Lfile = argv[1]; else Lfile = DEFLANG; if (yyopen (Lfile)) /* Open the language file */ return 1; yyinit (); /* Set up for the parse */ if (yyparse ()) /* Parse the language tables */ exit (1); initckch (wchars); if (preftype != NULL) { defstringgroup = findfiletype (preftype, 1, (int *) NULL); if (defstringgroup < 0 && strcmp (preftype, "plain") != 0 && strcmp (preftype, "tex") != 0 && strcmp (preftype, "nroff") != 0 && strcmp (preftype, "sgml") != 0) { (void) fprintf (stderr, ICOMBINE_C_BAD_TYPE, preftype); exit (1); } } if (defstringgroup < 0) defstringgroup = 0; combinedict (); /* Combine words */ return 0; } static void usage () { (void) fprintf (stderr, ICOMBINE_C_USAGE); exit (1); } VOID * mymalloc (size) unsigned int size; { return malloc (size); } /* ARGSUSED */ VOID * myrealloc (ptr, size, oldsize) VOID * ptr; unsigned int size; unsigned int oldsize; { return realloc (ptr, size); } void myfree (ptr) VOID * ptr; { free (ptr); } static void combinedict () { struct dent d; register struct dent * dp; unsigned char lbuf[INPUTWORDLEN + MAXAFFIXLEN + 2 * MASKBITS]; ichar_t ucbuf[INPUTWORDLEN + MAXAFFIXLEN + 2 * MASKBITS]; ichar_t lastbuf[INPUTWORDLEN + MAXAFFIXLEN + 2 * MASKBITS]; lastbuf[0] = '\0'; hashtbl = (struct dent *) mymalloc (sizeof (struct dent)); hashtbl->flagfield = 0; hashtbl->word = 0; while (fgets ((char *) lbuf, sizeof lbuf, stdin) != NULL) { if (ichartostr (lbuf, strtosichar (lbuf, 0), sizeof lbuf, 1)) (void) fprintf (stderr, WORD_TOO_LONG (lbuf)); if (makedent (ichartosstr (strtosichar (lbuf, 0), 1), ICHARTOSSTR_SIZE, &d) < 0) continue; if (strtoichar (ucbuf, d.word, sizeof ucbuf, 1)) (void) fprintf (stderr, WORD_TOO_LONG (lbuf)); upcase (ucbuf); if (icharcmp (ucbuf, lastbuf) != 0) { /* ** We have a new word. Put the old one out. */ combineout (); (void) icharcpy (lastbuf, ucbuf); } dp = hashtbl; if ((dp->flagfield & USED) == 0) { *dp = d; /* ** If it's a followcase word, we need to make this a ** special dummy entry, and add a second with the ** correct capitalization. */ if (captype (d.flagfield) == FOLLOWCASE) { if (addvheader (dp)) exit (1); } } else { /* ** A different capitalization is already in ** the dictionary. Combine capitalizations. */ if (combinecaps (dp, &d) < 0) exit (1); } } combineout (); } static void combineout () { register struct dent * ndp; register struct dent * tdp; /* ** Put out the dictionary entry on stdout in text format, ** freeing it as we go. **/ if (hashtbl->flagfield & USED) { for (tdp = hashtbl; tdp != NULL; tdp = ndp) { toutent (stdout, tdp, 0); myfree (tdp->word); ndp = tdp->next; while (tdp->flagfield & MOREVARIANTS) { if (tdp != hashtbl) myfree ((char *) tdp); tdp = ndp; if (tdp->word) myfree (tdp->word); ndp = tdp->next; } if (tdp != hashtbl) myfree ((char *) tdp); } } hashtbl->flagfield = 0; hashtbl->word = NULL; }