summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Little <chrislit@crosswire.org>2009-11-06 08:24:23 +0000
committerChris Little <chrislit@crosswire.org>2009-11-06 08:24:23 +0000
commit3a9511049e97df830a4842e3e8a190f795446de9 (patch)
tree6c0d8718f2f5381ca0e28ba3fbfe3ee421ca446c
parent97e84f438a61c05750281c55f52734ded4852299 (diff)
downloadsword-tools-3a9511049e97df830a4842e3e8a190f795446de9.tar.gz
added mdb (actually csv exported from mdb) converter
git-svn-id: https://www.crosswire.org/svn/sword-tools/trunk@229 07627401-56e2-0310-80f4-f8cd0041bdcd
-rw-r--r--modules/perlconverters/mdb2osis.pl147
1 files changed, 147 insertions, 0 deletions
diff --git a/modules/perlconverters/mdb2osis.pl b/modules/perlconverters/mdb2osis.pl
new file mode 100644
index 0000000..08d03de
--- /dev/null
+++ b/modules/perlconverters/mdb2osis.pl
@@ -0,0 +1,147 @@
+#!/usr/bin/perl
+
+## MDB Bible database (Access/Jet/e-Sword < 9) to OSIS (2.1.1) converter
+
+## Licensed under the standard BSD license:
+
+# Copyright (c) 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@crosswire.org
+
+#########################################################################
+
+$version = "1.0";
+$osisVersion = "2.1.1";
+
+$date = '$Date: 2009-10-30 19:13:37 -0700 (Fri, 30 Oct 2009) $';
+$rev = '$Rev: 228 $';
+
+$date =~ s/^.+?(\d{4}-\d{2}-\d{2}).+/$1/;
+$rev =~ s/^.+?(\d+).+/$1/g;
+
+use utf8;
+use Encoding;
+
+@OSISbook = (
+#OT
+ "Gen", "Exod", "Lev", "Num", "Deut", "Josh", "Judg", "Ruth", "1Sam", "2Sam", "1Kgs", "2Kgs", "1Chr", "2Chr", "Ezra", "Neh", "Esth", "Job", "Ps", "Prov", "Eccl", "Song", "Isa", "Jer", "Lam", "Ezek", "Dan", "Hos", "Joel", "Amos", "Obad", "Jonah", "Mic", "Nah", "Hab", "Zeph", "Hag", "Zech", "Mal",
+
+#NT
+"Matt", "Mark", "Luke", "John", "Acts", "Rom", "1Cor", "2Cor", "Gal", "Eph", "Phil", "Col", "1Thess", "2Thess", "1Tim", "2Tim", "Titus", "Phlm", "Heb", "Jas", "1Pet", "2Pet", "1John", "2John", "3John", "Jude", "Rev",
+
+#Apocrypha
+#"Tob", "Jdt", "AddEsth", "Wis", "Sir", "Bar", "EpJer", "PrAzar", "Sus", "Bel", "1Macc", "2Macc", "3Macc", "4Macc", "1Esd", "2Esd", "PrMan", "Ps151", "PssSol", "Odes"
+);
+
+if (scalar(@ARGV) < 2) {
+ print "mdb2osis.pl -- MDB Bible to OSIS $osisVersion converter version $version\nRevision $rev ($date)\nSyntax: mdb2osis.pl <osisWork> <input filename> [-o OSIS-file]\nThis converter expects MDBs exported as CSVs by mdbview.\n";
+ exit (-1);
+}
+
+$osisWork = $ARGV[0];
+
+if ($ARGV[2] eq "-o") {
+ $outputFilename = "$ARGV[3];"
+}
+else {
+ $outputFilename = "$osisWork.osis.xml";
+}
+open (OUTF, ">:utf8", "$outputFilename") or die "Could not open file $ARGV[2] for writing.";
+
+print OUTF "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<osis xmlns=\"http://www.bibletechnologies.net/2003/OSIS/namespace\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.bibletechnologies.net/2003/OSIS/namespace http://www.bibletechnologies.net/osisCore.$osisVersion.xsd\">\n<osisText osisRefWork=\"Bible\" xml:lang=\"en\" osisIDWork=\"$osisWork\">\n<header>\n<work osisWork=\"$osisWork\"\/>\n<\/header>\n";
+
+open (INF, "<:encoding(cp1252)", $ARGV[1]);
+@data = <INF>;
+close (INF);
+
+$book = "";
+$chap = "";
+$vers = "";
+
+sub processText {
+ my $t = @_[0];
+
+ $t =~ s/\&\#([0-7]+);/chr(oct($1))/eg;
+
+ $t =~ s/\{\\cf6 (.+?)\}/<q who="Jesus">$1<\/q>/g;
+
+ return $t;
+}
+
+foreach $line (@data) {
+ if ($line =~ /(\d+),(\d+),(\d+),(\d+),(.*)/) {
+
+ $ord = $1;
+
+ $nBook = $2;
+ $nChap = $3;
+ $vers = $4;
+ $text = $5;
+
+ $text = processText($text);
+
+ $oBook = @OSISbook[$nBook-1];
+ if ($oBook eq "") {
+ print "Error unknown book: $book\n";
+ }
+
+ $text =~ s/\s*$//g;
+
+ if ($book ne $nBook) {
+ if ($book ne "") {
+ print OUTF "<\/chapter>\n";
+ $chap = "";
+ print OUTF "<\/div>\n";
+ }
+ print OUTF "<div type=\"book\" osisID=\"$oBook\">\n";
+ }
+
+ if ($chap ne $nChap) {
+ if ($chap ne "") {
+ print OUTF "<\/chapter>\n";
+ }
+ print OUTF "<chapter osisID=\"$oBook.$nChap\">\n";
+ }
+
+ print OUTF "<verse osisID=\"$oBook.$nChap.$vers\">$text<\/verse>\n";
+
+ $book = $nBook;
+ $chap = $nChap;
+ }
+}
+
+print OUTF "<\/chapter>\n";
+print OUTF "<\/div>\n";
+print OUTF "<\/osisText>\n";
+print OUTF "<\/osis>\n";
+
+close (OUTF);