[sword-svn] r59 - trunk/modules/mt-lxx-parallel

mgruner at crosswire.org mgruner at crosswire.org
Fri Jan 13 13:08:59 MST 2006


Author: mgruner
Date: 2006-01-13 13:08:47 -0700 (Fri, 13 Jan 2006)
New Revision: 59

Modified:
   trunk/modules/mt-lxx-parallel/convert.pl
Log:
more progress
fixed hebrew final letters


Modified: trunk/modules/mt-lxx-parallel/convert.pl
===================================================================
--- trunk/modules/mt-lxx-parallel/convert.pl	2005-12-15 20:09:28 UTC (rev 58)
+++ trunk/modules/mt-lxx-parallel/convert.pl	2006-01-13 20:08:47 UTC (rev 59)
@@ -35,18 +35,13 @@
 "+" =>chr(0x05D8), #HEBREW LETTER TET
 "Y" =>chr(0x05D9), #HEBREW LETTER YOD
 "I" =>chr(0x05D9), #HEBREW LETTER YOD	# TODO: this occured in a retranslation (KI)
-#"K" =>chr(0x05DA), #HEBREW LETTER FINAL KAF  # TODO: HANDLE FINAL LETTERS
 "K" =>chr(0x05DB), #HEBREW LETTER KAF
 "L" =>chr(0x05DC), #HEBREW LETTER LAMED
-#chr(0x6D)=>chr(0x05DD), #HEBREW LETTER FINAL MEM
 "M" =>chr(0x05DE), #HEBREW LETTER MEM
-#"N" =>chr(0x05DF), #HEBREW LETTER FINAL NUN
 "N" =>chr(0x05E0), #HEBREW LETTER NUN
 "S" =>chr(0x05E1), #HEBREW LETTER SAMEKH
 "(" =>chr(0x05E2), #HEBREW LETTER AYIN
-#"P" =>chr(0x05E3), #HEBREW LETTER FINAL PE
 "P" =>chr(0x05E4), #HEBREW LETTER PE
-#"C" =>chr(0x05E5), #HEBREW LETTER FINAL TSADI
 "C" =>chr(0x05E6), #HEBREW LETTER TSADI
 "Q" =>chr(0x05E7), #HEBREW LETTER QOF / KOF
 "R" =>chr(0x05E8), #HEBREW LETTER RESH
@@ -58,20 +53,23 @@
 "-" =>chr(0x05BE), #MAQQEF
 
 # Special stuff
-"*" =>"(ketiv)", # TODO:FIX
-"**" =>"(qere)", #
+"*" =>"*<note type=\"textual\">Ketiv.</note>", # TODO:FIX
+"**" =>"**<note type=\"textual\">Qere.</note>", #
 "/" => $MorphologicalDivisionMarker,
 
 "," => ",", #separate words in colB
-
 "?" => "<note type=\"textual\">Uncertain.</note>" #HACK
+);
 
-#"{" => "{",	# TODO: CHECK IF NECCESSARY
-#	"}" => "}",
-#"." => ".",
-
+my %final_hebrew2utf8 = (
+"K" =>chr(0x05DA), #HEBREW LETTER FINAL KAF  # TODO: HANDLE FINAL LETTERS
+"M"=>chr(0x05DD), #HEBREW LETTER FINAL MEM
+"N" =>chr(0x05DF), #HEBREW LETTER FINAL NUN
+"P" =>chr(0x05E3), #HEBREW LETTER FINAL PE
+"C" =>chr(0x05E5), #HEBREW LETTER FINAL TSADI
 );
 
+
 my $greekLetters = "A-Z#3\(\)+=|\\/";
 
 my %greek2utf8 = (
@@ -112,7 +110,6 @@
 "C" =>chr(0x03BE), #GREEK SMALL LETTER XI
 "O" =>chr(0x03BF), #GREEK SMALL LETTER OMICRON
 "P" =>chr(0x03C0), #GREEK SMALL LETTER PI
-"#3"=>chr(0x03DF), #GREEK SMALL LETTER KOPPA
 "R" =>chr(0x03C1), #GREEK SMALL LETTER RHO
 "S" =>chr(0x03C3), #GREEK SMALL LETTER SIGMA
 "J" =>chr(0x03C2), #GREEK SM LETT FINAL SIGMA / SM LETT SIGMA END OF WORD
@@ -124,6 +121,11 @@
 "W" =>chr(0x03C9), #GREEK SMALL LETTER OMEGA
 );
 
+sub createNote(){ my $noteText = shift; return("<note type=\"textual\">$noteText</note> "); }
+sub openNote(){   my $noteText = shift;	return("<note type=\"textual\">$noteText "); }
+sub closeNote(){  my $noteText = shift;	return("$noteText</note> "); }
+
+
 my %notes = (
 "{#}" => "Asterized passage (in Job).",
 "{g}" => "Reference to difference between the text of Rahlfs and that of the relevant Göttingen edition.",
@@ -286,10 +288,6 @@
 
 );
 
-sub createNote(){ my $noteText = shift; return("<note type=\"textual\">$noteText</note> "); }
-sub openNote(){   my $noteText = shift;	return("<note type=\"textual\">$noteText "); }
-sub closeNote(){  my $noteText = shift;	return("$noteText</note> "); }
-
 sub translateHebrewNote(){
 	my $origNote = shift;
 
@@ -391,15 +389,45 @@
 
 sub translateHebrewLetters(){ #will return unicode hebrew without morph separation
 	my $hebrew = shift;
+	my $lastIndex = length( $hebrew )-1;
 	my $result;
+	my $letter;
 	(not $hebrew) and die "Hebrew string empty...\n";
 
-	foreach my $i (0..length( $hebrew )-1 ){
-		$result .= $hebrew2utf8{ substr($hebrew,$i,1) } || die("Could not find Hebrew letter $hebrew\n");
+	foreach my $i (0..$lastIndex ){
+		$letter = substr($hebrew,$i,1);
+		if ($i == $lastIndex && $letter =~ m/(K|M|N|P|C)/){
+			$result .= $final_hebrew2utf8{ $letter } || die("Could not find FINAL Hebrew letter $hebrew\n");
+# 			printf("successfully inserted $final_hebrew2utf8{ $letter }\n");
+		}
+		else{
+			$result .= $hebrew2utf8{ $letter } || die("Could not find Hebrew letter $hebrew\n");
+		}
 	}
 	return $result;
 }
 
+sub translateHebrewWordorNote(){ #will return unicode hebrew with morph separation
+	my $hebrew = shift;
+
+	if (not $hebrew) { die("Hebrew string empty.") };
+
+# 	print("TranslateHebrew of: $hebrew\n");
+
+	$hebrew =~ s/^mn$/.mn/;	#Ezek 24:17, error?
+
+	( $notes{ $hebrew } ) and return &translateHebrewNote( $hebrew ); # exact match first
+
+	( $hebrew =~ m/^[^$hebrewLetters]/ ) and return &translateHebrewNote( $hebrew );
+	( $hebrew =~ m/^([$hebrewLetters]+)(\[.+\])/ ) and 
+		return &translateHebrewWordorNote( $1 ) . &translateHebrewNote( $2 );
+	( $hebrew =~ m/[}]$/ ) and return &translateHebrewNote( $hebrew );
+
+	#NOW WE ASSUME IT IS A HEBREW WORD
+	return $MorphologicalSegmentStart . &translateHebrewLetters( $hebrew ) . $MorphologicalSegmentEnd;
+}
+
+
 sub translateGreekNote(){
 	my $origNote = shift;
 
@@ -513,33 +541,17 @@
 	die("Note $origNote not found.\n");
 }
 
-sub translateHebrewWordorNote(){ #will return unicode hebrew with morph separation
-	my $hebrew = shift;
+sub translateGreekLetters(){
+	my $greek = shift;
+	my $lastIndex = length( $greek )-1;
+	my $result;
+	(not $greek) and die "Greek string empty...\n";
 
-	if (not $hebrew) { die("Hebrew string empty.") };
-
-# 	print("TranslateHebrew of: $hebrew\n");
-
-	$hebrew =~ s/^mn$/.mn/;	#Ezek 24:17, error?
-
-	( $notes{ $hebrew } ) and return &translateHebrewNote( $hebrew ); # exact match first
-
-	( $hebrew =~ m/^[^$hebrewLetters]/ ) and return &translateHebrewNote( $hebrew );
-	( $hebrew =~ m/^([$hebrewLetters]+)(\[.+\])/ ) and 
-		return &translateHebrewWordorNote( $1 ) . &translateHebrewNote( $2 );
-	( $hebrew =~ m/[}]$/ ) and return &translateHebrewNote( $hebrew );
-
-	my $length = length($hebrew);
-	my $index = 0;
-	my $result = $MorphologicalSegmentStart;
-	CHAR_LOOP: while ( $index < $length ) {
-		my $hsubstr = substr( $hebrew, $index, 1);
-		$hebrew2utf8{ $hsubstr } || die("could not find Hebrew: $hsubstr of word $hebrew at index $index length $length\n");
-		$result .= $hebrew2utf8{ $hsubstr };
-		++$index;
+	foreach my $i (0..$lastIndex ){
+		$result .= $greek2utf8{ substr($greek,$i,1) } || die("Could not find Greek letters in $greek\n");
 	}
-	$result .= $MorphologicalSegmentEnd;
 	return $result;
+
 }
 
 sub translateGreekWordorNote(){
@@ -560,24 +572,7 @@
 	( $greek =~ m/^([^.]+)\.\.\.([^.]+)$/) and # TODO: occurs e.g.  {..bla1 bla2...bla3 #TODO: format output
 		return( &translateGreekWordorNote($1) . "..." . &translateGreekWordorNote($2) );
 
-
-	my $length = length($greek);
-	my $index = 0;
-	my $result;
-	CHAR_LOOP: while ( $index < $length ) {
-		my $gsubstr = substr( $greek, $index, 1);
-		if ($greek2utf8{ $gsubstr } ){
-			$result .= $greek2utf8{ $gsubstr };
-		}
-		elsif ( $greek2utf8{ substr( $greek, $index, 2) } ){	#for the #3 letter
-			$result .= $greek2utf8{ substr( $greek, $index, 2) };
-		}
-		else{ 
-			die("Could not find greek: $gsubstr.\n") 
-		}
-		++$index;
-	}
-	return $result;
+	return &translateGreekLetters( $greek );
 }
 
 my $colBContent;



More information about the sword-cvs mailing list