#!/usr/bin/perl ## adds crossreferences to an OSIS file. # The underlying list of crossreferences come from a 16th century Dutch Bible. ## Licensed under the standard BSD license: # Copyright (c) 2010 CrossWire Bible Society # 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 ######################################################################### use XML::DOM; use Text::CSV; sub vs2osis { my $return = `vs2osisref "$_[0]" "$_[1]" $_[2]`; $return =~ s/\n$//; $return; } sub insertref { my $doc=$ARGV[0] #insert the xref in the right place in the OSIS document } $version = "1.0"; $osisVersion = "2.1.1"; $date = '$Date: 2010-08-04 05:46:26 +0000 (Tue, 04 Aug 2009) $'; $rev = '$Rev: 231 $'; my %xrefList; if (scalar(@ARGV) < 2) { print "xrefadd.pl -- adds crossreferences to OSIS files. \t It expects as input a valid OSIS file and a file with crossreferences formatted as follows: \t A space-separated list of OSISrefs, the first of which on each row will be the place where the remainder of the row will be inserted as xrefs. \n \t Usage: xrefadd.pl [-o ] [-l ].\n"; exit (-1); } if ($ARGV[2] eq "-o") { $outputFilename = "$ARGV[3]"; } else { $outputFilename = "$ARGV[0].fixed"; } if ($ARGV[2] eq "-l") { $locale = "$ARGV[3];" } elsif ($ARGV[4] eq "-l") { $locale = "$ARGV[5];" } else { $locale = "en"; } $osis = new XML::DOM; $osis->parsefile($ARGV[0]); open (INF, "<", $ARGV[1]); @xref = ; close (INF); foreach (@xref) { if (my $csv->parse($_)) { my @columns = $csv->fields(); $xrefList{$columns[0]} = shift(@columns); } else { my $err = $csv->error_input; print "Failed to parse line: $err"; } } for my $elem ($osis->getElementsByTagName("verse")) { if ($xrefList{$elem->getAttributeByName("sID"}) $osis->printToFile ($outputFilename) or die ("$outputFilename could not get opened to write");