Listing 1

package com.sys_con.ColdFusion;

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.swabunga.spell.engine.SpellDictionary;
import com.swabunga.spell.engine.SpellDictionaryHashMap;
import com.swabunga.spell.event.SpellCheckEvent;
import com.swabunga.spell.event.SpellCheckListener;
import com.swabunga.spell.event.SpellChecker;
import com.swabunga.spell.event.StringWordTokenizer;

/**
* @author Darron Schall (darron@darronschall.com)
*
*/
public class CFSpellCheck {

private SpellDictionary dictionary;
private SpellChecker spellChecker;
private ArrayList errors;
private String textToCheck;

public CFSpellCheck() {
errors = new ArrayList();
}

public ArrayList getErrors() {
return errors;
}

public String getText() {
return textToCheck;
}

public void checkSpelling() {
spellChecker = new SpellChecker(dictionary);
spellChecker.addSpellCheckListener(new SpellCheckListener() {
public void spellingError(SpellCheckEvent event) {
SpellingError s = new
SpellingError(event.getInvalidWord(),
event.getWordContextPosition());
System.out.println("SpellingError - " +
event.getInvalidWord() + " at position " + 
event.getWordContextPosition());

List suggestions = event.getSuggestions();
Iterator suggestedWord = suggestions.iterator();
while (suggestedWord.hasNext()) {
String suggestion = 
suggestedWord.next().toString();
s.addSuggestion(suggestion);
System.out.println(suggestion);
}

errors.add(s);
}
});
spellChecker.checkSpelling(new StringWordTokenizer(textToCheck));
}

public void setDictionary(String dictFile) {
try {
dictionary = new SpellDictionaryHashMap(new
File(dictFile));
} catch (Exception e) {
e.printStackTrace();
}
}

public void setText(String txt) {
textToCheck = txt;
}

public static void main(String args[]) {
CFSpellCheck spellcheck = new CFSpellCheck();
spellcheck.setDictionary("dict/english.0");
spellcheck.setText("This is some text that needs
speel checkin");
System.out.println(spellcheck.getText());
spellcheck.checkSpelling();
System.out.println("... done!");

System.out.println(spellcheck.getErrors());
}

private class SpellingError {
private String word;
private int position;
private ArrayList suggestions;

public SpellingError(String word, int position) {
init(word, position);
}

public void init(String word, int position) {
this.word = word;
this.position = position;
suggestions = new ArrayList();
}

public void addSuggestion(String suggestedWord) {
suggestions.add(suggestedWord);
}

public String getWord() {
return word;
}

public int getPosition() {
return position;
}

public ArrayList getSuggestions() {
return suggestions;
}

public String toString() {
return "word:" + word + " | position:" + position +
" | suggestions: " + suggestions; 
}
}
}

Listing 2

<html>
<head>
<title>CFSpellCheck example</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>

<body>

<br />

<cfscript>
if (StructKeyExists(form, "checkText")) {

CFSpellCheck = CreateObject("java",
"com.sys_con.ColdFusion.CFSpellCheck");
CFSpellCheck.init();
CFSpellCheck.setDictionary("C:/JavaClasses/dict/english.0");
CFSpellCheck.setText(form.checkText);
CFSpellCheck.checkSpelling();

errors = CFSpellCheck.getErrors();

if (ArrayLen(errors)) {
WriteOutput("<b>Errors:</b> <br />");

for (i = 1; i lte ArrayLen(errors); i = i + 1) {
WriteOutput("word: " & errors[i].getWord() & "<br />");
WriteOutput("position: " & errors[i].getPosition() & "<br />");
WriteOutput("suggestions: ");
suggestions = errors[i].getSuggestions();
for (j = 1; j lte ArrayLen(suggestions); j = j + 1) {
WriteOutput(suggestions[j] & "<br />");
}
WriteOutput("<hr />");
}
} else {
WriteOutput("No errors found! <hr />");
}
} else {
form.checkText = "";
}
</cfscript>

<form action="index.cfm" method="post">
<textarea name="checkText" rows="4" cols="40">
<cfoutput>#form.checkText#</cfoutput></textarea>
<input type="submit" value="Check Spelling" />
</form>

</body>
</html>