vortaro.pl
changeset 5 9d50eeadcc33
parent 2 ba9cb8ffbe7e
--- a/vortaro.pl	Wed Mar 14 14:37:48 2007 +0100
+++ b/vortaro.pl	Sat Mar 17 02:40:40 2007 +0100
@@ -2,10 +2,12 @@
 
 use utf8;
 
-$maks_vortoj = 1;
+binmode STDOUT, ":utf8";
 
-$celdosierujo = "prova";
-if ($#ARGV != 1) {
+$unua_vortonumero = 2;
+$lasta_vortonumero = 50925;
+
+if (scalar(@ARGV) != 1) {
 	print "Unua parametro: dosierujo de la html dosieroj\n";
 	exit;
 }
@@ -14,15 +16,41 @@
 # States
 $s_komenco = 0;
 $s_nomo = 1;
-$s_antauxdifinoj = 1;
-$s_difinoj = 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, $nomo or die "DIED: File not found";
+	open ($dosiero, "<:utf8", $nomo) or die "DIED: File not found";
 
 	while(<$dosiero>) {
 		$linio = $_;
@@ -30,12 +58,34 @@
 			if ($linio eq
 			"<table cellpadding=\"2\" cellspacing=\"2\">\n") {
 				$stato = $s_nomo;
-				print "Statosxangxo!";
 			}
 		} elsif ($stato == $s_nomo) {
-			$stato = $s_antauxdifinoj;
+			$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 {
@@ -43,9 +93,8 @@
 	return "$origino/diego$num.html";
 }
 
-for $i (1 .. $maks_vortoj) {
+for $i ($unua_vortonumero .. $lasta_vortonumero) {
 	$nomo = krei_dosiernomon($i);
-	print $nomo
 
 	procezi_dosieron($nomo);
 }