[sword-svn] r319 - trunk/modules/conf

refdoc at crosswire.org refdoc at crosswire.org
Fri Apr 15 13:42:24 MST 2011


Author: refdoc
Date: 2011-04-15 13:42:24 -0700 (Fri, 15 Apr 2011)
New Revision: 319

Added:
   trunk/modules/conf/confmaker.pl
Log:
This simple Perl script reads an OSIS file and produces a preliminary conf file from its encoded features


Added: trunk/modules/conf/confmaker.pl
===================================================================
--- trunk/modules/conf/confmaker.pl	                        (rev 0)
+++ trunk/modules/conf/confmaker.pl	2011-04-15 20:42:24 UTC (rev 319)
@@ -0,0 +1,169 @@
+#!/usr/bin/perl
+## confmaker.pl - provides a initial conf file for a new module by analysing  given OSIS xml file. 
+## The programme searches for relevant tags and creates the GlobalOptionFilter entries and other relevant conf entries
+
+## Licensed under the standard BSD license:
+
+# Copyright (c) 2002-2009 CrossWire Bible Society <http://www.crosswire.org/>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+#        notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above copyright
+#       notice, this list of conditions and the following disclaimer in
+#       the documentation and/or other materials provided with the
+#       distribution.
+#     * Neither the name of the CrossWire Bible Society nor the names of
+#       its contributors may be used to endorse or promote products
+#       derived from this software without specific prior written
+#       permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+## For general inquiries, comments, suggestions, bug reports, etc. email:
+## sword-support at crosswire.org
+
+#########################################################################
+use XML::LibXML;
+use I18N::LangTags::List;
+
+
+## Obtain arguments
+if (scalar(@ARGV) < 1) {
+    print "\nconfmaker.pl -- - provides a initial conf file for a new module by analysing  given OSIS xml file. \n Syntax: confmaker.pl <osis XML file> [-o conf output file] \n";
+    print "- Arguments in braces < > are required. Arguments in brackets [ ] are optional.\n";
+    print "- If no -o option is specified for the output filename, the default output file is: \n\t<osisWork>.conf\n";
+    print "- The script can currently produce a valid conf file for OSIS bibles, but not for any other import formats.\n";
+    exit (-1);
+}
+
+$file = @ARGV[0];
+
+$nextarg = 1;
+
+if (@ARGV[$nextarg] eq "-o") {
+    $outputFilename = "@ARGV[$nextarg+1]";
+    $nextarg += 2;
+}
+else {
+    $outputFilename = "$file.conf";
+}
+open (OUTF, , ">:utf8", "$outputFilename") or die "Could not open file @ARGV[2] for writing.";
+
+my $parser = XML::LibXML->new();
+my $doc = $parser->parse_file($file);
+
+
+
+## obtain name, type and language
+
+my @elements = $doc->getElementsByTagName('osisText');
+
+my $doc_name = @elements[0]->getAttribute('osisIDWork');
+my $doc_type = @elements[0]->getAttribute('osisRefWork');
+my $doc_lang = @elements[0]->getAttribute('xml:lang');
+
+
+
+
+##GlobalOptionsFilter - prepare
+
+my @doc_features = ('title', 'note', 'reference', 'q', 'figure', 'rdg');
+my @word_features = ('lemma', 'gloss', 'morph',);
+
+
+my %doc_filters = ( 'title' => "OSISHeadings",
+             'note'  => "OSISFootnotes",
+             'reference' => "OSISScripRef",
+             'gloss' => "OSISRuby",
+             'lemma' => "OSISStrongs",
+             'morph' => "OSISMorph",
+             'q'  => "OSISRedLetterWords",
+             'rdg' => 'OSISVariants',
+            );
+            
+my %doc_feature = ( 'lemma' => 'StrongsNumbers',
+                    'figure' => 'Images',
+                  );
+            
+my %doc_has_feature;
+
+## GlobalOptionsFilter - search for
+            
+foreach (@doc_features) {
+   my @elements = $doc->getElementsByTagName($_);
+   if (@elements>0) { $doc_has_feature{$_}=true } ;
+   }
+
+ at elements = $doc->getElementsByTagName('w');
+
+foreach my $f(@word_features) {
+
+  foreach my $e(@elements) {
+   if ($e->hasAttribute($f)) {
+    $doc_has_feature{$f}=true;
+    last;
+   }
+  }
+ 
+}   
+
+
+   
+# Assemble and print out
+
+print OUTF "[".$doc_name."]\n";
+print OUTF "Path = modules/texts/rawtext/".$doc_name."\n";
+print OUTF "Description = This is the ".$doc_name." Bible in ".I18N::LangTags::List::name($doc_lang)." language\n";
+
+if ($doc_type =~ m/Bible/) { print OUTF "ModDrv = rawText\n"}
+else {print OUTF "ModDrv = rawUnknown\n"}
+
+print OUTF "Lang = ".$doc_lang."\n";
+
+foreach (@doc_features) {
+   if ($doc_has_feature{$_}) { 
+      print OUTF "GlobalOptionFilter = ".$doc_filters{$_}."\n"
+      }
+   }   
+foreach (@word_features) {
+   if ($doc_has_feature{$_}) { 
+      print OUTF "GlobalOptionFilter = ".$doc_filters{$_}."\n"
+      }
+   }   
+foreach (@doc_features) {
+   if ($doc_has_feature{$_} && exists $doc_feature{$_}) { 
+      print OUTF "Feature = ".$doc_feature{$_}."\n"
+      }
+   }   
+foreach (@word_features) {
+   if ($doc_has_feature{$_} && exists $doc_feature{$_}) { 
+      print OUTF "Feature = ".$doc_feature{$_}."\n"
+      }
+   }   
+
+
+
+
+print OUTF "DistributionLicense = copyrighted. Do not distribute\n";
+print OUTF "About = This is the ".$doc_name." Bible in ".I18N::LangTags::List::name($doc_lang)." language\n";
+print OUTF "Description = This is the ".$doc_name." Bible in ".I18N::LangTags::List::name($doc_lang)." language\n";
+print OUTF "Encoding = UTF-8\n";
+print OUTF "SourceType = OSIS\n";
+print OUTF "Version = 1.0\n";
+print OUTF "History = 1.0 First release\n";
+print OUTF "LCSH = ".$doc_type.".".I18N::LangTags::List::name($doc_lang)."\n";


Property changes on: trunk/modules/conf/confmaker.pl
___________________________________________________________________
Added: svn:executable
   + *




More information about the sword-cvs mailing list