Diff for /loncom/interface/lonhelp.pm between versions 1.20 and 1.23

version 1.20, 2006/03/15 21:55:58 version 1.23, 2006/03/18 13:22:07
Line 81  $search: <input type="text" name="search Line 81  $search: <input type="text" name="search
     </body>      </body>
 $htmlend  $htmlend
 FOOTER  FOOTER
     }     } else {
     $r->print(<<ENDBODY);         $r->print(<<ENDBODY);
     <!-- END -->      <!-- END -->
     </body>      </body>
 $htmlend  $htmlend
 ENDBODY  ENDBODY
      }
 }  }
   
 # Render takes a tex fragment, transforms it for TtH, and returns the  # Render takes a tex fragment, transforms it for TtH, and returns the
Line 142  sub render { Line 143  sub render {
     return $tex;      return $tex;
 }  }
   
   sub listmatches {
       my ($docroot,$term) =@_;
       my $output='';
       opendir(DIR,$docroot.'/adm/help/tex/');
       foreach my $filename (sort readdir(DIR)) {
    if ($filename=~/\.tex$/) {
       open(FH,$docroot.'/adm/help/tex/'.$filename);
       my $quote='';
       while (my $line=<FH>) {
    if ($line=~/\Q$term\E/i) {
       $line=~s/\\\w+//gs;
       $line=~s/\{//gs;
       $line=~s/\}//gs;
       $line=~s/\\/ /gs;
       $line=~s/(\Q$term\E)/\<b\>$1\<\/b\>/gsi;
       $quote.='<br />...'.$line.'...';
    }
       }
       close(FH);
       if ($quote) {
    my $title=$filename;
                   $title=~s/\_/ /gs;
                   $title=~s/\.tex$//;
                   $filename=~s/\.tex$/\.hlp/;
    $output.='<li><a href="/adm/help/tex/'.$filename.'">'.$title.'</a>'.$quote.'</li>';
       }
    }
       }
       closedir(DIR);
       return ($output?'<ul>'.$output.'</ul>':&mt('"[_1]" not found',$term));
   }
   
 sub handler {  sub handler {
      my $r = shift;       my $r = shift;
   
      my $docroot = $r->dir_config('lonDocRoot');       my $docroot = $r->dir_config('lonDocRoot');
      my $serverroot = $ENV{'HTTP_HOST'};       my $serverroot = $ENV{'HTTP_HOST'};
   
      my $filenames = &Apache::lonnet::unescape(substr ($ENV{'REQUEST_URI'} ,   
     rindex($ENV{'REQUEST_URI'}, '/') + 1, -4));  
   
      # Security check on the file; the whole filename must consist  
      # of nothing but alphanums, ' ,, or ., or the file  
      # will be "not found", no matter what.  
        
      return HTTP_NOT_FOUND if ($filenames !~ /\A[-0-9a-zA-z_'',:.]+\Z/);  
   
      &Apache::lonlocal::get_language_handle($r);       &Apache::lonlocal::get_language_handle($r);
        my $text='';
      # Join together the tex files, return HTTP_NOT_FOUND if any of       if ($env{'form.searchterm'}=~/\w/) {
      # them are not found  
      my $tex = '';  
      # Since in insertlist.tab I want to specify multiple files,  
      # and insertlist.tab also uses commas, I need something else  
      # so replace : with ,  
      $filenames =~ s/:/,/g;  
      my @files = split(/,/, $filenames);  
        
      for my $filename (@files) {  
  if (-e $docroot.'/adm/help/tex/'.  
      &Apache::lonlocal::current_language().'/'.  
      $filename.'.tex') {  
      $filename=&Apache::lonlocal::current_language().'/'.$filename;  
  }  
  (my $file = Apache::File->new($docroot  
    . '/adm/help/tex/'.$filename.'.tex'))  
      or return HTTP_NOT_FOUND;  
  $tex .= join('', <$file>);  
      }  
   
      if ($env{'browser.mathml'}) {  
  &Apache::loncommon::content_type($r,'text/xml');  
  &tth::ttminit();  
  if ($env{'browser.unicode'}) {  
      &tth::ttmoptions('-L -u1');  
  } else {  
      &tth::ttmoptions('-L -u0');  
  }  
      } else {  
  &Apache::loncommon::content_type($r,"text/html");   &Apache::loncommon::content_type($r,"text/html");
  &tth::tthinit();   $text=&listmatches($docroot,$env{'form.searchterm'});
  if ($env{'browser.unicode'}) {       } else {
      &tth::tthoptions('-L -u1');   my $filenames = &Apache::lonnet::unescape(substr ($ENV{'REQUEST_URI'} , 
      rindex($ENV{'REQUEST_URI'}, '/') + 1, -4));
     
    # Security check on the file; the whole filename must consist
    # of nothing but alphanums, ' ,, or ., or the file
    # will be "not found", no matter what.
     
    return HTTP_NOT_FOUND if ($filenames !~ /\A[-0-9a-zA-z_'',:.]+\Z/);
     
    # Join together the tex files, return HTTP_NOT_FOUND if any of
    # them are not found
    my $tex = '';
    # Since in insertlist.tab I want to specify multiple files,
    # and insertlist.tab also uses commas, I need something else
    # so replace : with ,
    $filenames =~ s/:/,/g;
    my @files = split(/,/, $filenames);
     
    for my $filename (@files) {
        if (-e $docroot.'/adm/help/tex/'.
    &Apache::lonlocal::current_language().'/'.
    $filename.'.tex') {
    $filename=&Apache::lonlocal::current_language().'/'.$filename;
        }
        (my $file = Apache::File->new($docroot
      . '/adm/help/tex/'.$filename.'.tex'))
            or return HTTP_NOT_FOUND;
        $tex .= join('', <$file>);
    }
     
    if ($env{'browser.mathml'}) {
        &Apache::loncommon::content_type($r,'text/xml');
        &tth::ttminit();
        if ($env{'browser.unicode'}) {
    &tth::ttmoptions('-L -u1');
        } else {
    &tth::ttmoptions('-L -u0');
        }
  } else {   } else {
      &tth::tthoptions('-L -u0');       &Apache::loncommon::content_type($r,"text/html");
        &tth::tthinit();
        if ($env{'browser.unicode'}) {
    &tth::tthoptions('-L -u1');
        } else {
    &tth::tthoptions('-L -u0');
        }
  }   }
    $text = &render($tex, $docroot, $serverroot);
      }       }
   
      $r->send_http_header;       $r->send_http_header;
      my $text = &render($tex, $docroot, $serverroot);  
      &servetext($r,$text);       &servetext($r,$text);
      return OK;       return OK;
 }  }

Removed from v.1.20  
changed lines
  Added in v.1.23


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