--- loncom/interface/loncommon.pm 2012/07/07 21:58:14 1.1086 +++ loncom/interface/loncommon.pm 2012/08/07 10:52:17 1.1090 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.1086 2012/07/07 21:58:14 raeburn Exp $ +# $Id: loncommon.pm,v 1.1090 2012/08/07 10:52:17 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -154,6 +154,7 @@ sub ssi_with_retries { # ----------------------------------------------- Filetypes/Languages/Copyright my %language; my %supported_language; +my %supported_codes; my %latex_language; # For choosing hyphenation in my %latex_language_bykey; # for choosing hyphenation from metadata my %cprtag; @@ -188,14 +189,15 @@ BEGIN { while (my $line = <$fh>) { next if ($line=~/^\#/); chomp($line); - my ($key,$two,$country,$three,$enc,$val,$sup,$latex)=(split(/\t/,$line)); + my ($key,$code,$country,$three,$enc,$val,$sup,$latex)=(split(/\t/,$line)); $language{$key}=$val.' - '.$enc; if ($sup) { $supported_language{$key}=$sup; + $supported_codes{$key} = $code; } if ($latex) { $latex_language_bykey{$key} = $latex; - $latex_language{$two} = $latex; + $latex_language{$code} = $latex; } } close($fh); @@ -657,7 +659,7 @@ if (!Array.prototype.indexOf) { var n = 0; if (arguments.length > 0) { n = Number(arguments[1]); - if (n !== n) { // shortcut for verifying if it's NaN + if (n !== n) { // shortcut for verifying if it is NaN n = 0; } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) { n = (n > 0 || -1) * Math.floor(Math.abs(n)); @@ -995,6 +997,33 @@ sub select_language { =pod + +=item * &list_languages() + +Returns an array reference that is suitable for use in language prompters. +Each array element is itself a two element array. The first element +is the language code. The second element a descsriptiuon of the +language itself. This is suitable for use in e.g. +&Apache::edit::select_arg (once dereferenced that is). + +=cut + +sub list_languages { + my @lang_choices; + + foreach my $id (&languageids()) { + my $code = &supportedlanguagecode($id); + if ($code) { + my $selector = $supported_codes{$id}; + my $description = &plainlanguagedescription($id); + push (@lang_choices, [$selector, $description]); + } + } + return \@lang_choices; +} + +=pod + =item * &linked_select_forms(...) linked_select_forms returns a string containing a block @@ -2986,6 +3015,45 @@ 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 @@ -2993,6 +3061,45 @@ sub get_related_words { =cut +sub check_spelling { + my ($wordlist, $language) = @_; + + # Format the command. If $language is null then + # don't request a language - Note that's dangerous + # because there's no assurance the server is running the intended default + # language. + + my $langswitch = ''; + if ($language) { + $langswitch = "--lang=$language"; + } + + my $aspell_command = "aspell -a $language"; + my $full_command = "echo $wordlist | $aspell_command"; + + my $ispell_result = `$full_command`; + + # The result is several lines of text. + # the first line will start with @(#). Other wise + # There's an error. With an error our fallback is to declare + # all the words are correctly spelled (return empty string). + + my @misspellings; + my @lines = split(/\n/, $ispell_result); + my $heading = shift(@lines); # header + if ($heading =~ /^\@\(#\) /) { + foreach my $word (split(/\s+/, $wordlist)) { + my $spellok = pop(@lines); + if (!($spellok =~ /^\*/)) { + push(@misspellings, $word); + } + } + return join(' ', (@misspellings)); # empty if all words ok. + } else { + return ""; + } +} + # -------------------------------------------------------------- Plaintext name =pod @@ -11258,7 +11365,7 @@ sub process_extracted_files { my ($outtext,$errtext) = &LONCAPA::map::storemap('/uploaded/'.$docudom.'/'. $docuname.'/'.$folders{$outer}. - '.'.$containers{$outer},1); + '.'.$containers{$outer},1,1); $newseqid{$i} = $newidx; unless ($errtext) { $result .= '
  • '.&mt('Folder: [_1] added to course',$docstitle).'
  • '."\n"; @@ -11291,7 +11398,7 @@ sub process_extracted_files { my ($outtext,$errtext)= &LONCAPA::map::storemap('/uploaded/'.$docudom.'/'. $docuname.'/'.$folders{$outer}. - '.'.$containers{$outer},1); + '.'.$containers{$outer},1,1); unless ($errtext) { if (-e "$prefix$dir/$docstype/$mapinner{$outer}/$newidx/$title") { $result .= '
  • '.&mt('File: [_1] added to course',$docstitle).'
  • '."\n";