#!/usr/bin/perl # @canons will contain this list of files, these are in a basic XML format. # Each file lists osisIDs along with the English names associated with the # osisID. These aren't exhaustive, and may or may not overlap (but hopefully # don't). We are only using these to load mappings from osisIDs. @canons = ( "canon.bible.xml", # the Bible, broadly defined # "canon.af.xml", # Apostolic Fathers # "canon.otp.xml", # OT pseudepigrapha # "canon.nta.xml", # NT apocrypha # "canon.lds.xml", # Mormon books # "canon.naghammadi.xml", # Nag Hammadi Library # "canon.qumran.xml", # Qumran mss # "canon.classical.xml", # intended for classical works, currently just Josephus ); @abbrevsQueue = (); foreach $mapfile (@canons) { open MAP, "$mapfile"; while () { $line = $_; $line =~ s///g; $line =~ s/\&/\&/g; if ($line =~ /(.+?)<\/id>/) { $id = $1; $osis{lc($id)} = $id; push @abbrevsQueue, "$id" } elsif ($line =~ /(.+?)<\/name>/) { $name = $1; if ($osis{lc($name)} eq "") { $osis{lc($name)} = $id; push @abbrevsQueue, "$name" } else { if ($warn) { print "ERROR: Duplicate mapping from $id found in $mapfile.\n"; } } if ($idmap{$id} eq "") { $idmap{$id} = $name; } else { # Duplicates most likely indicate alternate names, so ignore them. if ($warn) { print "ERROR: Duplicate mapping from $id found in $mapfile.\n"; } } } } close (MAP); } $abbrevs = "/******************************************************************************\n * canon_abbrevs.h - Canonical text information to be included by VerseKey.cpp\n *\n * Copyright 1998-2009 CrossWire Bible Society (http://www.crosswire.org)\n * CrossWire Bible Society\n * P. O. Box 2528\n * Tempe, AZ 85280-2528\n *\n * This program is free software; you can redistribute it and/or modify it\n * under the terms of the GNU General Public License as published by the\n * Free Software Foundation version 2.\n *\n * This program is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * General Public License for more details.\n *\n */\n\n#ifndef CANON_ABBREVS_H\n#define CANON_ABBREVS_H\n\nSWORD_NAMESPACE_START\n\n\n/******************************************************************************\n * Abbreviations - MUST be in alphabetical order & by PRIORITY\n * RULE: first match of entire key\n * (e.g. key: \"1CH\"; match: \"1CHRONICLES\")\n */\n\nconst struct abbrev builtin_abbrevs\[\] = {\n"; @abbrevsQueue = sort @abbrevsQueue; foreach $a (@abbrevsQueue) { if ($a =~ /^.+\d/) { $abbrevs .= "//"; } $abbrevs .= " {\"" . uc($a) . "\", \"" . $osis{lc($a)} . "\"},\t\t// " . $idmap{$osis{lc($a)}} . "\n"; } $abbrevs .= " {\"\", \"\"}\n};\n\n\nSWORD_NAMESPACE_END\n\n\n#endif\n"; open OUTF, ">canon_abbrevs.h"; print OUTF $abbrevs; close OUTF;