Diff for /loncom/interface/lonspeller.pm between versions 1.5 and 1.17

version 1.5, 2004/07/23 19:47:57 version 1.17, 2006/07/03 13:40:42
Line 33  package Apache::lonspeller; Line 33  package Apache::lonspeller;
 use Apache::Constants qw(:common);  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 HTML::LCParser;
 use strict;  use strict;
   
 my $speller;  my $speller;
   my $insidelink;
   
 sub spellcheck_language {  sub spellcheck_language {
     if ($ENV{'form.lang'}) { return $ENV{'form.lang'}; }      if ($env{'form.lang'}) { return $env{'form.lang'}; }
     if (&mt('spellcheck_lang') ne 'spellcheck_lang') {      if (&mt('spellcheck_lang') ne 'spellcheck_lang') {
  return &mt('spellcheck_lang');   return &mt('spellcheck_lang');
     }      }
Line 51  sub set_language { Line 54  sub set_language {
     $speller->set_option('lang',$lang);      $speller->set_option('lang',$lang);
 }  }
   
   {
       my $uniq;
       sub get_uniq {
    return ++$uniq;
       }
   }
   
 sub textsection {  sub textsection {
     my $input=shift;      my $input=shift;
     my $output='';      my $output='';
     &set_language();      &set_language();
     foreach my $word (split(/\W+/,$input)) {      foreach my $word (split(/\b/,$input)) {
  if ($speller->check($word)) {   if (($word=~/\W/) || ($word=~/^(lt|gt|nbsp|amp)$/i)
     $output.=$word.' ';      || ($speller->check($word))) {
       $output.=$word;
  } else {   } else {
     my $suggestions=join(' ',$speller->suggest($word));      my $suggestions=join(' ',$speller->suggest($word));
     &Apache::lonnet::logthis($suggestions);      $suggestions = &Apache::loncommon::js_ready($suggestions);
     $suggestions=~s/\'/\\\'/gs;      if (($suggestions) && (!$insidelink)) {
     if ($suggestions) {   my $start_page=
  $output.='<a href="javascript:alert('."'".      &Apache::loncommon::start_page('Speller Suggestions',undef,
     $suggestions."');".     {'only_body'   => 1,
     '">';      'js_ready'    => 1,
       'bgcolor'     => '#FFFFFF'});
    my $end_page=
       &Apache::loncommon::end_page({'js_ready'    => 1,});
    my $num = &get_uniq();
    my $info  ='<h3>'.$word.'</h3>'.$suggestions;
    $output .= "<script type=\"text/javascript\">
   //<!--
    function LONCAPA_lonspeller_$num() {
       spellwin=open(".&Apache::lonhtmlcommon::javascript_nothing().",'spellwin','width=140,height=280,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no');
       spellwin.".&Apache::lonhtmlcommon::javascript_docopen().";
       spellwin.document.writeln('$start_page $info $end_page');
       spellwin.document.close();
       spellwin.focus();
   }
   //-->
   </script><a href=\"javascript:LONCAPA_lonspeller_$num();void(0);\">";
     }      }
     $output.='<font color="red">'.$word.'</font>';      $output.='<font color="red">'.$word.'</font>';
     if ($suggestions) { $output.='</a>'; }      if (($suggestions) && (!$insidelink)) { $output.='</a>'; }
     $output.=' ';  
  }   }
     }      }
     return $output;      return $output;
Line 80  sub markeduptext { Line 106  sub markeduptext {
     my $input=shift;      my $input=shift;
     my $output='';      my $output='';
     my $parser=HTML::LCParser->new(\$input);      my $parser=HTML::LCParser->new(\$input);
       $insidelink=0;
     my $token;      my $token;
     while ($token=$parser->get_token) {      while ($token=$parser->get_token) {
  if ($token->[0] eq 'T') {   if ($token->[0] eq 'T') {
     $output.=&textsection($token->[1]);      $output.=&textsection($token->[1]);
  } elsif ($token->[0] eq 'S') {   } elsif ($token->[0] eq 'S') {
     $output.=$token->[4];      $output.=$token->[4];
     if ($token->[1] eq 'm') {      foreach my $tag ('m','script') {
  $output.=$parser->get_text('/m');   if ($token->[1] eq $tag) {
       $output.=$parser->get_text('/'.$tag);
    }
       }
       if ($token->[1] eq 'a') {
    $insidelink=1;
     }      }
  } elsif ($token->[0] eq 'E') {   } elsif ($token->[0] eq 'E') {
     $output.=$token->[2];      $output.=$token->[2];
       if ($token->[1] eq 'a') {
    $insidelink=0;
       }
  }   }
     }      }
       $insidelink=0;
     return $output;      return $output;
 }  }
   
Line 100  sub initspeller { Line 136  sub initspeller {
     unless (defined($speller)) {      unless (defined($speller)) {
  $speller = Text::Aspell->new;   $speller = Text::Aspell->new;
  $speller->set_option('lang','en_US');   $speller->set_option('lang','en_US');
  $speller->set_option('sug-mode','fast');  
     }      }
       $insidelink=0;
 }  }
   
 sub handler {  sub handler {
Line 113  sub handler { Line 149  sub handler {
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'});      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'});
   
     &initspeller();      &initspeller();
     $r->print('<html><head><title>'.      my $start_page = 
       &mt('Spell Checker').   &Apache::loncommon::start_page('Spell Checker',undef,
       '</title></head><body bgcolor="#DDDDDD">'.         {'only_body' => 1,
       &markeduptext($ENV{'form.text'}).   'bgcolor'   => '#DDDDDD'});
       '</body></html>');      $r->print($start_page.
         &Apache::lontexconvert::msgtexconverted(
        &markeduptext($env{'form.text'})).
         &Apache::loncommon::end_page());
     return OK;      return OK;
 }  }
   

Removed from v.1.5  
changed lines
  Added in v.1.17


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