home *** CD-ROM | disk | FTP | other *** search
/ CD Actual Thematic 7: Programming / CDAT7.iso / Share / Editores / Perl5 / perl / lib / site / Tk / HTML.pm < prev    next >
Encoding:
Perl POD Document  |  1997-08-10  |  4.9 KB  |  199 lines

  1. package Tk::HTML;
  2. require Tk::ROText;
  3. require Tk::HTML::Handler;
  4.  
  5. use Carp;
  6. @ISA = qw(Tk::Derived Tk::ROText);
  7. use strict;
  8.  
  9. Construct Tk::Widget 'HTMLText';
  10.  
  11. sub Font
  12. {
  13.  my ($w,%fld)     = @_;
  14.  $fld{'family'}   = 'times'   unless (exists $fld{'family'});
  15.  $fld{'weight'}   = 'medium'  unless (exists $fld{'weight'});
  16.  $fld{'slant'}    = 'r'       unless (exists $fld{'slant'});
  17.  $fld{'size'}     = 140       unless (exists $fld{'size'});
  18.  $fld{'spacing'}  = '*'       unless (exists $fld{'spacing'});
  19.  $fld{'registry'} = 'iso8859' unless (exists $fld{'registry'});
  20.  $fld{'encoding'} = '1'       unless (exists $fld{'encoding'});
  21.  $fld{'slant'}    = substr($fld{'slant'},0,1);
  22.  my $name = "-*-$fld{'family'}-$fld{'weight'}-$fld{'slant'}-*-*-*-$fld{'size'}-*-*-$fld{'spacing'}-*-$fld{'registry'}-$fld{'encoding'}";
  23.  return $name;
  24. }
  25.  
  26. sub call_ISINDEX 
  27. {
  28.  my($w,$e) = @_;
  29.  my $method = "GET";
  30.  my $url;
  31.  if(defined $w->{'base'}) { $url = $w->{'base'}; } else { $url = $w->url; }
  32.  my $query = Tk::HTML::Form::encode($w,$e->get);
  33.  $w->HREF("$url?$query",'GET');
  34. }
  35.  
  36. sub FindImage
  37. {
  38.  my ($w,$src,$l) = @_;
  39.  $src = $w->HREF($src,'GET');
  40.  my $img;
  41.  eval {local $SIG{__DIE__}; require Tk::Pixmap; $img = $w->Pixmap(-data => $src) };
  42.  eval {local $SIG{__DIE__}; require Tk::Bitmap; $img = $w->Bitmap(-data => $src) } if ($@);
  43.  eval {local $SIG{__DIE__}; require Tk::Photo;  $img = $w->Photo(-data => $src)  } if ($@);
  44.  if ($@)
  45.   {
  46.    warn "$@";
  47.   }
  48.  else
  49.   {
  50.    $l->configure(-image => $img);
  51.   }
  52. }
  53.  
  54. sub IMG_CLICK 
  55. {
  56.  my($w,$c,$t,$aref,$n) = @_;
  57.  my $Ev = $c->XEvent;
  58.  my $cor = $c->cget(-borderwidth);
  59.  if($t eq "ISMAP") 
  60.   {
  61.    $w->HREF($aref . "?" . ($Ev->x - $cor) . "," . ($Ev->y - $cor),'GET');
  62.   } 
  63.  elsif ($t eq "AREF")
  64.   {
  65.    $w->HREF($aref,'GET');
  66.   }
  67.  else 
  68.   {
  69.    my $s = "$n.x=" . ($Ev->x - $cor) . "&$n.y=" . ($Ev->y - $cor);
  70.    $aref->Submit($s);
  71.   }
  72. }
  73.  
  74. sub HTML::dump {
  75.   my($a,$b) = @_;
  76.   ${($a->configure(-textvariable))[4]} = $b;
  77. }
  78.  
  79. sub plain
  80. {
  81.  my ($w,$text) = @_; 
  82.  my $var = \$w->{Configure}{-plain};
  83.  if (@_ > 1)
  84.   {
  85.    $$var = $text;
  86.    $w->delete('0.0','end');
  87.    $w->insert('end',$text);
  88.   }
  89.  return $$var;
  90. }
  91.  
  92. sub fragment
  93. {
  94.  my ($w,$tag) = @_;
  95.  my @info = $w->tagRanges($tag);
  96.  if ($w->tagRanges($tag))
  97.   {
  98.    $w->yview($tag.'.first');
  99.   }
  100.  else
  101.   {
  102.    warn "No tag `$tag'";
  103.   }
  104. }
  105.  
  106. sub parse
  107. {
  108.  my ($w,$html) = @_;
  109.  unless (ref $html)
  110.   {
  111.    my $s = Tk::timeofday();
  112.    print STDERR "Parsing ...";
  113.    local $HTML::Parse::IGNORE_UNKNOWN = 0;
  114.    my $obj = HTML::Parse::parse_html($html);
  115.    $obj->{'_source_'} = $html;
  116.    printf STDERR " %.3g seconds\n",Tk::timeofday()-$s;
  117.    return $obj;
  118.   }
  119.  return $html;
  120. }
  121.  
  122. sub html
  123. {
  124.  my ($w,$html,$frag) = @_; 
  125.  my $var = \$w->{Configure}{-html};
  126.  if (@_ > 1)
  127.   {
  128.    $$var = $w->parse($html);
  129.    my $s = Tk::timeofday();
  130.    print STDERR "Rendering ...";
  131.    my $h = new Tk::HTML::Handler widget => $w;
  132.    $$var->traverse(sub { $h->traverse(@_) });
  133.    printf STDERR " %.3g seconds\n",Tk::timeofday()-$s;
  134.    $w->fragment($frag) if (defined $frag);
  135.   }
  136.  return $$var;
  137. }
  138.  
  139. sub file
  140. {
  141.  my ($w,$file) = @_; 
  142.  my $var = \$w->{Configure}{-file};
  143.  if (@_ > 1)
  144.   {
  145.    open($file,"<$file") || croak "Cannot open $file:$!";
  146.    $$var = $file;
  147.    $w->html(join('',<$file>));
  148.    close($file);
  149.   }
  150.  return $$var;
  151. }
  152.  
  153. sub ClassInit
  154. {
  155.  my ($class,$mw) = @_;
  156.  $mw->bind($class,'<b>','Back');
  157.  $mw->bind($class,'<space>',['yview','scroll',1,'pages']);
  158.  $mw->bind($class,'<BackSpace>',['yview','scroll',-1,'pages']);
  159.  return $class->SUPER::ClassInit($mw);
  160. }
  161.  
  162. sub base
  163. {
  164.  
  165. }
  166.  
  167. sub InitObject
  168. {
  169.  my ($w,$args) = @_;
  170.  $w->SUPER::InitObject($args);
  171.  
  172.  $args->{-wrap} = 'word';
  173.  $args->{-width} = 80;
  174.  $args->{-height} = 40;
  175.  $args->{-font} = $w->Font(family => 'courier');
  176.  
  177.  $w->tagConfigure('symbol', -font => $w->Font(family => 'symbol', size => 180,  encoding => '*', registry => '*'));
  178.  $w->tagConfigure('text', -font => $w->Font(family => 'times'));
  179.  $w->tagConfigure('CODE',-font => $w->Font(family => 'courier', weight => 'bold'));
  180.  $w->tagConfigure('KBD',-font => $w->Font(family => 'courier'));
  181.  $w->tagConfigure('VAR',-font => $w->Font(family => 'helvetica',slant => 'o', weight => 'bold'));
  182.  $w->tagConfigure('B',-font => $w->Font(family => 'times', weight => 'bold' ));
  183.  $w->tagConfigure('H1',-font => $w->Font(family => 'times', weight => 'bold', size => 180));
  184.  $w->tagConfigure('H2',-font => $w->Font(family => 'times', weight => 'bold', size => 140));
  185.  $w->tagConfigure('I',-font => $w->Font(family => 'times',slant => 'i', weight => 'bold' ));
  186.  $w->tagConfigure('BLOCKQUOTE', -font => $w->Font(family => 'helvetica',slant => 'o', weight => 'bold'),
  187.          -lmargin1 => 35, -lmargin2 => 30, -rmargin => 30);
  188.  $w->tagConfigure('ADDRESS', -font => $w->Font(family => 'times',slant => 'i'));
  189.  $w->tagConfigure('HREF',-underline => 1, -font => $w->Font(family => 'times',slant => 'i', weight => 'bold' ));
  190.  $w->tagConfigure('CENTER',-justify => 'center');
  191.  $w->{Configure} = {};
  192.  $w->ConfigSpecs('-showlink' => ['CALLBACK',undef,undef,undef]);
  193. }
  194.  
  195. 1;
  196.  
  197. __END__
  198.  
  199.