vortaro.pl
author viric@llimona
Sat, 17 Mar 2007 02:40:40 +0100
changeset 5 9d50eeadcc33
parent 2 ba9cb8ffbe7e
permissions -rwxr-xr-x
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/&#265;/ĉ/g;

	$ĉeno =~ s/&#265;/ĉ/g;
	$ĉeno =~ s/&#285;/ĝ/g;
	$ĉeno =~ s/&#293;/ĥ/g;
	$ĉeno =~ s/&#309;/ĵ/g;
	$ĉeno =~ s/&#349;/ŝ/g;
	$ĉeno =~ s/&#365;/ŭ/g;

	$ĉeno =~ s/&#264;/Ĉ/g;
	$ĉeno =~ s/&#284;/Ĝ/g;
	$ĉeno =~ s/&#292;/Ĥ/g;
	$ĉeno =~ s/&#308;/Ĵ/g;
	$ĉeno =~ s/&#348;/Ŝ/g;
	$ĉeno =~ s/&#354;/Ŭ/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);
}