Mi finfaris la kreilon por dict-vortaro.
#!/usr/bin/perl
use utf8;
binmode STDOUT, ":utf8";
$unua_vortonumero = 2;
$lasta_vortonumero = 50925;
if (scalar(@ARGV) != 1) {
print "Unua parametro: dosierujo de la html dosieroj\n";
exit;
}
$origino = $ARGV[0];
# States
$s_komenco = 0;
$s_nomo = 1;
$s_antaŭdifinoj = 2;
$s_difinoj = 3;
$s_fino = 4;
sub elhtmligi {
$ĉeno = $_[0];
$ĉeno =~ s/<u><i><b>/[/g;
$ĉeno =~ s/<\/b><\/i><\/u>/]/g;
$ĉeno =~ s/ĉ/ĉ/g;
$ĉeno =~ s/ĉ/ĉ/g;
$ĉeno =~ s/ĝ/ĝ/g;
$ĉeno =~ s/ĥ/ĥ/g;
$ĉeno =~ s/ĵ/ĵ/g;
$ĉeno =~ s/ŝ/ŝ/g;
$ĉeno =~ s/ŭ/ŭ/g;
$ĉeno =~ s/Ĉ/Ĉ/g;
$ĉeno =~ s/Ĝ/Ĝ/g;
$ĉeno =~ s/Ĥ/Ĥ/g;
$ĉeno =~ s/Ĵ/Ĵ/g;
$ĉeno =~ s/Ŝ/Ŝ/g;
$ĉeno =~ s/Ţ/Ŭ/g;
return $ĉeno;
}
sub procezi_dosieron {
my $nomo = $_[0];
my $stato = $s_komenco;
my $linio;
open ($dosiero, "<:utf8", $nomo) or die "DIED: File not found";
while(<$dosiero>) {
$linio = $_;
if ($stato == $s_komenco) {
if ($linio eq
"<table cellpadding=\"2\" cellspacing=\"2\">\n") {
$stato = $s_nomo;
}
} elsif ($stato == $s_nomo) {
$linio =~ /font [^>]*>([^<]+)<\/b><\/td><\/tr>/;
# Ni skribas la kapvorton
print ":" . $1 . ":";
$stato = $s_antaŭdifinoj;
} elsif ($stato == $s_antaŭdifinoj) {
if ($linio eq
"<table cellpadding=\"1\" cellspacing=\"2\">\n") {
$stato = $s_difinoj;
}
} elsif ($stato == $s_difinoj) {
if ($linio eq "</table>\n") {
$stato = $s_fino;
last;
}
if ($linio =~ /^\t<tr>.*font size=\"1\"><i>([0-9]+).*size=\"2\">(.*)<\/td><\/tr>\n/) {
# Ni skribas la linion de difino/traduko
print $1 . ". " . elhtmligi($2) . "\n";
}
}
}
if ($stato != $s_fino && $stato != $s_komenco) {
die;
}
close $dosiero;
}
sub krei_dosiernomon {
my $num = $_[0];
return "$origino/diego$num.html";
}
for $i ($unua_vortonumero .. $lasta_vortonumero) {
$nomo = krei_dosiernomon($i);
procezi_dosieron($nomo);
}