--- loncom/interface/loncommon.pm 2012/08/07 09:25:39 1.1089 +++ loncom/interface/loncommon.pm 2012/08/14 10:22:25 1.1091 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.1089 2012/08/07 09:25:39 foxr Exp $ +# $Id: loncommon.pm,v 1.1091 2012/08/14 10:22:25 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -70,6 +70,7 @@ use Apache::lonclonecourse(); use LONCAPA qw(:DEFAULT :match); use DateTime::TimeZone; use DateTime::Locale::Catalog; +use Text::Aspell; # ---------------------------------------------- Designs use vars qw(%defaultdesign); @@ -3015,13 +3016,77 @@ sub get_related_words { untie %thesaurus_db; return @Words; } +############################################################### +# +# Spell checking +# =pod +=head1 Spell checking + +=over 4 + +=item * &check_spelling($wordlist $language) + +Takes a string containing words and feeds it to an external +spellcheck program via a pipeline. Returns a string containing +them mis-spelled words. + +Parameters: + +=over 4 + +=item - $wordlist + +String that will be fed into the spellcheck program. + +=item - $language + +Language string that specifies the language for which the spell +check will be performed. + =back +=back + +Note: This sub assumes that aspell is installed. + + =cut + +=pod + +=back + +=cut + +sub check_spelling { + my ($wordlist, $language) = @_; + my @misspellings; + + # Generate the speller and set the langauge. + # if explicitly selected: + + my $speller = Text::Aspell->new; + if ($language) { + $speller->set_option('lang', $language); + } + + # Turn the word list into an array of words by splittingon whitespace + + my @words = split(/\s+/, $wordlist); + + foreach my $word (@words) { + if(! $speller->check($word)) { + push(@misspellings, $word); + } + } + return join(' ', @misspellings); + +} + # -------------------------------------------------------------- Plaintext name =pod