Benutzer:Jan Bartels/bookmarks2wiki.pl: Unterschied zwischen den Versionen
K (Kategorie hinzugefügt) |
K (kleine Korrekturen am Script sowie Ergänzungen im Text) |
||
Zeile 47: | Zeile 47: | ||
sub printheadline | sub printheadline | ||
{ | { | ||
− | + | my $headline = shift(); | |
− | + | my $level = shift(); | |
− | printfooter(); | + | printfooter(); |
− | + | my $markup = '=' x $level; | |
chomp( $headline ); | chomp( $headline ); | ||
Zeile 69: | Zeile 69: | ||
sub printsectioncomment | sub printsectioncomment | ||
{ | { | ||
− | + | my $comment = shift(); | |
chomp( $comment ); | chomp( $comment ); | ||
print OUTPUT <<EOSC; | print OUTPUT <<EOSC; | ||
Zeile 84: | Zeile 84: | ||
sub printheader | sub printheader | ||
{ | { | ||
− | + | return unless ( $printheader ); | |
− | + | $printheader = 0; | |
$printfooter = 1; | $printfooter = 1; | ||
Zeile 101: | Zeile 101: | ||
{ | { | ||
$printheader = 1; | $printheader = 1; | ||
− | + | return unless ( $printfooter ); | |
$printfooter = 0; | $printfooter = 0; | ||
Zeile 117: | Zeile 117: | ||
sub printlink | sub printlink | ||
{ | { | ||
− | + | my $link = shift(); | |
my $href = $link->{ href }; | my $href = $link->{ href }; | ||
Zeile 125: | Zeile 125: | ||
my $comment = $link->{ comment }; | my $comment = $link->{ comment }; | ||
− | + | $comment =~ s/\s+\n/ /mg; | |
− | + | $comment =~ s/\s+$//m; | |
− | + | $comment =~ s/\[(.*?)\]//; | |
− | + | my $special; | |
− | + | $special = "<br/>$1" if ( defined( $1 ) ); | |
− | + | my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime; | |
printheader(); # ggf. Tabellenkopf ausgeben | printheader(); # ggf. Tabellenkopf ausgeben | ||
Zeile 143: | Zeile 143: | ||
! [$href $text] | ! [$href $text] | ||
| $comment | | $comment | ||
− | | $date $special | + | | $date$special |
EOTL | EOTL | ||
} | } | ||
Zeile 368: | Zeile 368: | ||
</pre> | </pre> | ||
− | Um das Script unter Windows "drag & drop"-fähig zu machen, erstellt man sich eine Batch-Datei bookmarks2wiki.bat mit folgendem Inhalt: | + | Das Script wird mit der zu konvertierenden Bookmarkdatei als Parameter gestartet: |
+ | |||
+ | <pre> | ||
+ | perl bookmarks2wiki.pl bookmarkdatei.html | ||
+ | </pre> | ||
+ | |||
+ | Daraus erzeugt das Script die Datei bookmarkdatei.wiki als Ergebnis. Um das Script unter Windows "drag & drop"-fähig zu machen, erstellt man sich eine Batch-Datei bookmarks2wiki.bat mit folgendem Inhalt: | ||
<pre> | <pre> |
Aktuelle Version vom 9. März 2006, 21:09 Uhr
Die Linklisten auf DER_MOBA sind mit Hilfe des Perl-Scripts bookmarks2wiki.pl aus den Bookmark-Dateien vom Netscape-Browser konvertiert worden.
Aus den Ordnernamen generiert das Script Überschriften, die ggf. von Fließtext gefolgt werden. Wenn man dort optisch was ändern will, muß man die Zeilen zwischen
print OUTPUT <<MARKE; Dieser Text wird ausgegeben MARKE
in den beiden Unterroutinen (sub printheadline und sub printsectioncomment) anpassen. Zwischen der print-Zeile und der abschließende Marke steht wiki-Code drin, wobei z. T. die Inhalte von perl-Variablen (das sind die Dinger mit $ am Anfang) ausgegeben werden. Außerdem gibt es noch die Unterroutinen, die die Tabelle anlegen: sub printheader, sub printfooter und sub printlink.
use strict; require HTML::TokeParser; if ( $#ARGV != 0 ) { print <<USAGE; Usage: perl bookmarks2wiki.pl datei.html liest datei.hmtl ein und erzeugt datei.wiki. USAGE exit(1); } my $file = $ARGV[0]; #my $file = 'Bookmarks.html'; my $outputfile = $file . "\.wiki"; $outputfile =~ s/\.html\.wiki$/\.wiki/i; #my $outputfile = 'wikilinks.txt'; #my $outputfile = '-'; # Standardausgabe my $p = HTML::TokeParser->new($file) || die "Can't open: $!"; my $printheader = 1; my $printfooter = 0; # # Ueberschriftenzeile ausgeben # sub printheadline { my $headline = shift(); my $level = shift(); printfooter(); my $markup = '=' x $level; chomp( $headline ); print OUTPUT <<EOHL; $markup $headline $markup EOHL } # # Fliesstext zu Ueberschrift ausgeben # sub printsectioncomment { my $comment = shift(); chomp( $comment ); print OUTPUT <<EOSC; $comment EOSC } # # Tabellenkopf ausgeben # sub printheader { return unless ( $printheader ); $printheader = 0; $printfooter = 1; print OUTPUT <<EOH; {| {{Linktabelle}} {{Linkheader}} EOH } # # Tabellenfuss ausgeben # sub printfooter { $printheader = 1; return unless ( $printfooter ); $printfooter = 0; print OUTPUT <<EOF; {{Linkheader}} |} EOF } # # Tabellenzeile ausgeben # sub printlink { my $link = shift(); my $href = $link->{ href }; my $text = $link->{ text }; chomp( $text ); my $comment = $link->{ comment }; $comment =~ s/\s+\n/ /mg; $comment =~ s/\s+$//m; $comment =~ s/\[(.*?)\]//; my $special; $special = "<br/>$1" if ( defined( $1 ) ); my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime; printheader(); # ggf. Tabellenkopf ausgeben my $date = sprintf( "%02d.%02d.%04d", $mday, $mon + 1, $year + 1900 ); print OUTPUT <<EOTL; {{Linkzeile}} ! [$href $text] | $comment | $date$special EOTL } # # Link parsen # sub parselink { my $href; my $text; while (my $token = $p->get_token) { if ( $$token[0] eq 'S' ) { # Starttoken if ( $$token[1] eq 'a' ) { $href = $$token[2]->{href}; while (my $token = $p->get_token) { if ( $$token[0] eq 'T' ) { # Text $text .= $$token[1]; } if ( $$token[0] eq 'E' ) { # Endtoken if ( $$token[1] eq 'a' ) { return ( href => $href, text => $text, comment => ' ' ); } } } } } } } # # Linkkommentar parsen # sub parsecomment { my $text; while (my $token = $p->get_token) { if ( $$token[0] eq 'T' ) { # Text $text .= $$token[1]; } if ( $$token[0] eq 'S' ) { # naechstes Starttoken $p->unget_token( $token ); return $text; } if ( $$token[0] eq 'E' ) { # naechstes Starttoken $p->unget_token( $token ); return $text; } } } # # Linkliste bis Sektionsende parsen und ausgeben # sub parselinklist { my $level = shift(); $printheader = 1; my $link; while (my $token = $p->get_token) { if ( $$token[0] eq 'S' ) { # Starttoken if ( $$token[1] eq 'dt' ) { printlink( $link ) if ( defined( $link ) ); $token = $p->get_token; if ( $$token[0] eq 'S' ) { if ( $$token[1] eq 'a' ) { # Link $p->unget_token( $token ); $link = { parselink() }; } if ( $$token[1] eq 'h3' ) { # geschachtelte Sektion $p->unget_token( $token ); parseheadline( $level ); undef $link; } } next; } if ( $$token[1] eq 'dd' ) { if ( defined( $link ) ) { $link->{comment} = parsecomment(); } next; } } if ( $$token[0] eq 'E' ) { # Endtoken if ( $$token[1] eq 'dl' ) { printlink( $link ) if ( defined( $link ) ); printfooter(); return; } } } } # # Sektionsueberschrift parsen und ausgeben # sub parseheadline { my $level = shift(); my $headline; while (my $token = $p->get_token) { if ( $$token[0] eq 'S' ) { # Starttoken if ( $$token[1] eq 'h3' ) { while (my $token = $p->get_token) { $headline .= $$token[1] if ( $$token[0] eq 'T' ); if ( $$token[0] eq 'E' && $$token[1] eq 'h3' ) { printheadline( $headline, $level ); last; } } next; } if ( $$token[1] eq 'dd' ) # Fließtext { my $text; while (my $token = $p->get_token) { if ( $$token[0] eq 'T' ) { # Text $text .= $$token[1]; } if ( $$token[0] eq 'S' && $$token[1] eq 'dl' ) { # naechstes Starttoken $p->unget_token( $token ); printsectioncomment( $text ); last; } } next; } if ( $$token[1] eq 'dl' ) # Linkliste beginnt { $p->unget_token( $token ); parselinklist( $level + 1 ); return; } } } } # # Datei parsen # sub parsebody { while (my $token = $p->get_token) { if ( $$token[0] eq 'S' ) { # Starttoken if ( $$token[1] eq 'h1' ) { parseheadline( 0 ); next; } } } } open( OUTPUT, ">$outputfile" ) || die "Can't open: $!"; print OUTPUT "<!-- Konvertiert von $ARGV[0] -->\n"; parsebody(); close( OUTPUT );
Das Script wird mit der zu konvertierenden Bookmarkdatei als Parameter gestartet:
perl bookmarks2wiki.pl bookmarkdatei.html
Daraus erzeugt das Script die Datei bookmarkdatei.wiki als Ergebnis. Um das Script unter Windows "drag & drop"-fähig zu machen, erstellt man sich eine Batch-Datei bookmarks2wiki.bat mit folgendem Inhalt:
perl "C:\Eigene Dateien\der_moba\bookmarks2wiki.pl" "%1"
Eine zu konvertierende Bookmarkdatei kann man nun im Explorer auf die Batchdatei ziehen. Die Pfadangabe zu dem Perl-Script muß gegebenenfalls angepaßt werden. Das Perl-Script ist unter Windows und Mac getestet und sollte auch unter Linux laufen.