For another project I'm working on I needed to add an option to ispell and I made a release of the new version. Then I decided to incorporate some of the bugfixes made downstream by SuSE Linux. This is not the official ispell distribution, which remains at 3.2.06, but it may be useful to some.

New option: -e5

To reduce disk and memory usage ispell stores its word lists as a list of base words each of which can have optional suffixes and affixes. For example, instead of storing separate words for abject, abjectness and abjectly, Ispell's English wordlists have a single entry abject/PY, where the /P flag is defined as -ness and /Y as -ly. You can run ispell noninteractively and ask it to expand these definitions with the -e option, where you give the base word and flags on standard input and ispell prints all the possible expansions. In ispell 3.2.06 there are four variants of this option, -e1 to -e4.

This patched version of ispell supports an additional expansion option -e5 which prints out how each expansion was formed. Alongside the expanded word it prints the base word and the flags that were used for that particular expansion. For example:

abandon+S abandons
abandon+R abandoner
abandon+G abandoning
abandon+D abandoned

Improved licence

This release also changes the copying conditions to remove the clause 4 added recently, which the maintainer Geoff Kuenning decided was a mistake. He has given permission to distribute Ispell with this clause taken out, so it's now pretty much a straight BSD licence.

Security fixes

The 'munchlist' and 'findaffix' shell scripts (the former of which is used in the build process) used temporary files in an insecure way, allowing others to overwrite your files using symlinks. This is now fixed, I hope. Based on a patch from Jeremy C. Reed.

Portability fixes

I have incorporated some of the fixes made to ispell-3.2.06 by SuSE Linux, although not those that were Linux-specific. However this release is not the same as ispell-3.2.06 plus SuSE patches, because for many of the fixes I chose to go with a more general solution. (For example there is now a configuration variable MANFFSECT to say whether you want the 'file format' manual pages to go in section 4 or 5. Which could be considered overkill, but is probably necessary since somebody out there is probably still using a system that uses section 4.) The file README.SuSE in the tarball explains what I did with each patch.

New option: -o

The -o option tells ispell not to use any 'deformatters' for TeX, troff or HTML, but to just check the input as plain text. The default configuration of ispell (for historical reasons) is to strip out nroff markup, and previously there was no way to turn this off once installed!

Dictionary fixes

I've made several small changes to the english wordlists, in particular to fix inconsistencies between british and american spellings. Check the ChangeLog for the full arcane details. (The releases epa3, epa4 and epa5 release were solely concerned with dictionary fixes.)


I have written test suites for some of the noninteractive uses of ispell, to test things like suffix expansion and stripping out nroff/TeX/HTML markup. There are also now some tests for the build system itself (to make sure manual page crossreferences are correct, for example). This is why 'make test' takes such a long time unless you have a fast machine. However I have not thoroughly tested the interactive mode of ispell! The code for interactive use has not changed at all since 3.2.06, so I think I can get away with this, but I recommend a brief test drive before you replace your existing ispell with this version.

Changes in this release (within the 'epa' series)

The latest release is 3.2.06.epa7. Compared to the previous version (3.2.06.epa6) this fixes security holes in findaffix and munchlist.


  • ispell-3.2.07.epa7.tar.bz2
  • Browse the files
  • ChangeLog (generated from CVS, so not much good. I can try to sort out anonymous CVS access if anyone is interested.)
  • Why?

    I need the new expansion output for a spelling changer project I've been working on; for example, I need to look up a word like unrealised and find out that its base word is realise. Having done that the spelling can be changed to realize and the suffixes and affixes readded to get unrealized. This way the conversion tables need only one or two entries to cover all the words formed from this base.

    I've contacted the ispell maintainer, Geoff Kuenning, with some patches, and while he's in favour of adding the feature at some point, a new ispell release isn't expected for a long time. So I've made this unofficial release as a stopgap. It is not a fork of the project. The change to the licence conditions is similar: new releases of ispell will not have the clause 4 that requires distribution sites to add a link to the ispell page, but 3.2.06 still does have it. The fixes from SuSE seemed like a good thing to include (originally I hoped to get this new version included in the distribution).

    Future plans

    Make ispell obey $LANG to choose its dictionary.

    Edward Avis
    Last modified: Sun Nov 9 18:39:57 GMT 2003