
######################################################################
# (c) Michael Schilli 1999
######################################################################
###############################################################
  package LinkTrans;
###############################################################
use HTML::Parser;                 # Parser für HTML
use HTML::Entities;               # Codiert Sonderzeichen

@ISA = qw(HTML::Parser);          # Basisklasse: HTML::Parser

###############################################################
# Konstruktor: LinkTrans->new(\&callback);
###############################################################
sub new {        
  my ($class, $callback) = @_;
                                      # Konstruktor der
  my $self = $class->SUPER::new();    # Basisklasse aufrufen

                                      # Eigene Instanzvariablen:
  $self->{href_callback} = $callback; # Callback-Funktion für 
                                      # URLs
  $self->{linktrans_result} = "";     # Ergebnisstring
  $self;                              # Objektreferenz 
                                      # zurückreichen
}

###############################################################
# ... wird für Dinge wie "<!DOCTYPE ...>" aufgerufen
###############################################################
sub declaration {
  my ($self, $declaration) = @_;
  $self->{linktrans_result} .= "<!$declaration>"; # Übernehmen
}

###############################################################
# ... wird für jedes Start-Tag wie z.B. "<A HREF=...>" 
#     aufgerufen.
###############################################################
sub start {
  my ($self, $tag, $attrhr, $attrseq, $origtext) = @_;

  $self->{linktrans_result} .= "<$tag";   # Tagnamen kopieren

  foreach $key (keys %$attrhr) {          # Über Attribut-Keys 
                                          # iterieren
    my $val = $attrhr->{$key};

    if($tag eq "a"   && $key eq "href" || # Für '<A HREF' oder
       $tag eq "img" && $key eq "src") {  # '<IMG SRC' Callback 
                                          # aufrufen und Wert 
                                          # ersetzen
        $val = $self->{href_callback}->($val); 
    }
                                      # Sonderzeichen maskieren
    $val = HTML::Entities::encode($val, '<>&"');
    $self->{linktrans_result} .= " $key=\"$val\"";   # Anhängen
  }

  $self->{linktrans_result} .= ">";       # Abschluß
}

###############################################################
# ... wird für jedes End-Tag wie z.B. "</A>" aufgerufen
###############################################################
sub end {
  my ($self, $tag) = @_;
  $self->{linktrans_result} .= "</$tag>"; # Einfach übernehmen
}

###############################################################
# ... wird für jedes Textstück (keine Tags) aufgerufen
###############################################################
sub text {
  my ($self, $text) = @_;
  $self->{linktrans_result} .= "$text";   # Einfach übernehmen
}

###############################################################
# ... wird für jeden Kommentar "<!-- ... -->" aufgerufen
###############################################################
sub comment {
  my ($self, $comment) = @_;              # Einfach übernehmen
  $self->{linktrans_result} .= "<!-- $comment -->";
}

###############################################################
# Ergebnis zurückliefern
###############################################################
sub get_result {
  my ($self) = @_;
  $self->{linktrans_result};
}

1;
