Diff for /loncom/interface/lonspeller.pm between versions 1.1 and 1.14

version 1.1, 2004/07/22 16:17:43 version 1.14, 2006/03/23 22:32:11
Line 30 Line 30
   
 package Apache::lonspeller;  package Apache::lonspeller;
   
   use Apache::Constants qw(:common);
 use Text::Aspell;  use Text::Aspell;
 use Apache::lonlocal;  use Apache::lonlocal;
   use Apache::lonnet;
   use Apache::lontexconvert();
   use HTML::LCParser;
 use strict;  use strict;
   
 sub getspeller {  my $speller;
     my $speller = Text::Aspell->new;  my $insidelink;
     $speller->set_option('lang','en_US');  
     $speller->set_option('sug-mode','fast');  sub spellcheck_language {
     return $speller;      if ($env{'form.lang'}) { return $env{'form.lang'}; }
       if (&mt('spellcheck_lang') ne 'spellcheck_lang') {
    return &mt('spellcheck_lang');
       }
       return 'en_US';
   }
   
   sub set_language {
       my $lang=&spellcheck_language();
       $speller->set_option('lang',$lang);
   }
   
   sub textsection {
       my $input=shift;
       my $output='';
       &set_language();
       foreach my $word (split(/\b/,$input)) {
    if (($word=~/\W/) || ($word=~/^(lt|gt|nbsp|amp)$/i)
       || ($speller->check($word))) {
       $output.=$word;
    } else {
       my $suggestions=join(' ',$speller->suggest($word));
       $suggestions=~s/\'/\\\'/gs;
       if (($suggestions) && (!$insidelink)) {
    my $start_page=
       &Apache::loncommon::start_page('Speller Suggestions',undef,
      {'only_body' => 1,
       'js_ready'  => 1,
       'bgcolor'   => '#FFFFFF'});
    my $end_page=
       &Apache::loncommon::end_page({'js_ready'  => 1});
    $output.='<a href="javascript:spellwin=window.open('.
       &Apache::lonhtmlcommon::javascript_nothing().
       ',\'spellwin\',\'height=140,width=280,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no\');'.
                       'spellwin.'.&Apache::lonhtmlcommon::javascript_docopen().';spellwin.document.writeln(\''.$start_page.'<h3>'.$word.
                       '</h3>'.$suggestions.$end_page.'\');spellwin.document.close();spellwin.focus()">';
       }
       $output.='<font color="red">'.$word.'</font>';
       if (($suggestions) && (!$insidelink)) { $output.='</a>'; }
    }
       }
       return $output;
   }
   
   
   sub markeduptext {
       my $input=shift;
       my $output='';
       my $parser=HTML::LCParser->new(\$input);
       $insidelink=0;
       my $token;
       while ($token=$parser->get_token) {
    if ($token->[0] eq 'T') {
       $output.=&textsection($token->[1]);
    } elsif ($token->[0] eq 'S') {
       $output.=$token->[4];
       foreach my $tag ('m','script') {
    if ($token->[1] eq $tag) {
       $output.=$parser->get_text('/'.$tag);
    }
       }
       if ($token->[1] eq 'a') {
    $insidelink=1;
       }
    } elsif ($token->[0] eq 'E') {
       $output.=$token->[2];
       if ($token->[1] eq 'a') {
    $insidelink=0;
       }
    }
       }
       $insidelink=0;
       return $output;
   }
   
   sub initspeller {
       unless (defined($speller)) {
    $speller = Text::Aspell->new;
    $speller->set_option('lang','en_US');
       }
       $insidelink=0;
   }
   
   sub handler {
       my $r = shift;
       &Apache::loncommon::content_type($r,'text/html');
       $r->send_http_header;
       return OK if $r->header_only;
   
       &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'});
   
       &initspeller();
       my $start_page = 
    &Apache::loncommon::start_page('Spell Checker',undef,
          {'only_body' => 1,
    'bgcolor'   => '#DDDDDD'});
       $r->print($start_page.
         &Apache::lontexconvert::msgtexconverted(
        &markeduptext($env{'form.text'})).
         &Apache::loncommon::end_page());
       return OK;
   }
   
   BEGIN {
       &initspeller();
 }  }
   
 1;  1;

Removed from v.1.1  
changed lines
  Added in v.1.14


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>