[sword-svn] r2105 - in trunk: . include scripts src/mgr src/modules/comments src/modules/comments/rawcom4 src/modules/common src/modules/texts src/modules/texts/rawtext4 utilities
scribe at www.crosswire.org
scribe at www.crosswire.org
Thu Oct 11 13:59:15 MST 2007
Author: scribe
Date: 2007-10-11 13:59:14 -0700 (Thu, 11 Oct 2007)
New Revision: 2105
Added:
trunk/include/rawcom4.h
trunk/include/rawtext4.h
trunk/include/rawverse4.h
trunk/src/modules/comments/rawcom4/
trunk/src/modules/comments/rawcom4/Makefile.am
trunk/src/modules/comments/rawcom4/rawcom4.cpp
trunk/src/modules/common/rawverse4.cpp
trunk/src/modules/texts/rawtext4/
trunk/src/modules/texts/rawtext4/Makefile.am
trunk/src/modules/texts/rawtext4/rawtext4.cpp
Modified:
trunk/ChangeLog
trunk/include/config.h
trunk/scripts/mkswordtar
trunk/src/mgr/swmgr.cpp
trunk/src/modules/comments/Makefile.am
trunk/src/modules/common/Makefile.am
trunk/src/modules/texts/Makefile.am
trunk/utilities/imp2vs.cpp
Log:
Added new RawText4 and RawCom4 drivers which allow
for a 4 byte record size. Patch submitted by
Doug Rintoul <doug_rintoul at sil dot org>
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2007-10-08 20:36:23 UTC (rev 2104)
+++ trunk/ChangeLog 2007-10-11 20:59:14 UTC (rev 2105)
@@ -1,5 +1,10 @@
API ChangeLog
+11-Oct-2007 Troy A. Griffitts <scribe at crosswire.org>
+ Added new RawText4 and RawCom4 drivers which allow
+ for a 4 byte record size. Patch submitted by
+ Doug Rintoul <doug_rintoul at sil dot org>
+
6-Oct-2007 Troy A. Griffitts <scribe at crosswire.org>
Added SWBuf::stripPrefix method which works nice
for returning and stripping stuff like
Modified: trunk/include/config.h
===================================================================
--- trunk/include/config.h 2007-10-08 20:36:23 UTC (rev 2104)
+++ trunk/include/config.h 2007-10-11 20:59:14 UTC (rev 2105)
@@ -1,4 +1,4 @@
-/* include/config.h. Generated by configure. */
+/* include/config.h. Generated from config.h.in by configure. */
/* include/config.h.in. Generated from configure.ac by autoheader. */
/* Define to 1 if you have the <dlfcn.h> header file. */
Added: trunk/include/rawcom4.h
===================================================================
--- trunk/include/rawcom4.h (rev 0)
+++ trunk/include/rawcom4.h 2007-10-11 20:59:14 UTC (rev 2105)
@@ -0,0 +1,63 @@
+/******************************************************************************
+ * rawcom.h - code for class 'RawCom4'- a module that reads raw commentary
+ * files: ot and nt using indexs ??.bks ??.cps ??.vss
+ *
+ * $Id: rawcom.h 1864 2005-11-20 06:06:40Z scribe $
+ *
+ * Copyright 1998 CrossWire Bible Society (http://www.crosswire.org)
+ * CrossWire Bible Society
+ * P. O. Box 2528
+ * Tempe, AZ 85280-2528
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation version 2.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ */
+
+#ifndef RAWCOM4_H
+#define RAWCOM4_H
+
+#include <rawverse4.h>
+#include <swcom.h>
+
+#include <defs.h>
+
+SWORD_NAMESPACE_START
+
+class SWDLLEXPORT RawCom4 : public RawVerse4, public SWCom {
+
+
+public:
+
+ RawCom4(const char *ipath, const char *iname = 0, const char *idesc = 0,
+ SWDisplay * idisp = 0, SWTextEncoding encoding = ENC_UNKNOWN,
+ SWTextDirection dir = DIRECTION_LTR, SWTextMarkup markup = FMT_UNKNOWN,
+ const char* ilang = 0);
+ virtual ~RawCom4();
+
+ virtual SWBuf &getRawEntryBuf();
+
+ virtual void increment(int steps);
+ virtual void decrement(int steps) { increment(-steps); }
+
+ // write interface ----------------------------
+ virtual bool isWritable();
+ static char createModule(const char *path) { return RawVerse4::createModule(path); }
+ virtual void setEntry(const char *inbuf, long len = -1); // Modify current module entry
+ virtual void linkEntry(const SWKey *linkKey); // Link current module entry to other module entry
+ virtual void deleteEntry(); // Delete current module entry
+ // end write interface ------------------------
+
+ SWMODULE_OPERATORS
+
+};
+
+SWORD_NAMESPACE_END
+
+#endif
Added: trunk/include/rawtext4.h
===================================================================
--- trunk/include/rawtext4.h (rev 0)
+++ trunk/include/rawtext4.h 2007-10-11 20:59:14 UTC (rev 2105)
@@ -0,0 +1,67 @@
+/******************************************************************************
+ * rawtext.h - code for class 'RawText4'- a module that reads raw text files:
+ * ot and nt using indexs ??.bks ??.cps ??.vss
+ *
+ * $Id: rawtext.h 1864 2005-11-20 06:06:40Z scribe $
+ *
+ * Copyright 1998 CrossWire Bible Society (http://www.crosswire.org)
+ * CrossWire Bible Society
+ * P. O. Box 2528
+ * Tempe, AZ 85280-2528
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation version 2.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ */
+
+#ifndef RAWTEXT4_H
+#define RAWTEXT4_H
+
+#include <rawverse4.h>
+#include <rawstr4.h>
+#include <swtext.h>
+
+#include <defs.h>
+
+SWORD_NAMESPACE_START
+
+class RawStr;
+
+class SWDLLEXPORT RawText4 : public SWText, public RawVerse4 {
+
+ RawStr4 *fastSearch[2];
+
+public:
+
+ RawText4(const char *ipath, const char *iname = 0, const char *idesc = 0, SWDisplay * idisp = 0, SWTextEncoding encoding = ENC_UNKNOWN, SWTextDirection dir = DIRECTION_LTR, SWTextMarkup markup = FMT_UNKNOWN,
+ const char* ilang = 0);
+ virtual ~RawText4();
+ virtual SWBuf &getRawEntryBuf();
+ virtual void increment(int steps = 1);
+ virtual void decrement(int steps = 1) { increment(-steps); }
+ virtual signed char createSearchFramework(
+ void (*percent) (char, void *) = &nullPercent,
+ void *percentUserData = 0);
+ virtual void deleteSearchFramework();
+ virtual bool hasSearchFramework() { return true; }
+ virtual ListKey &search(const char *istr, int searchType = 0, int flags = 0, SWKey * scope = 0, bool * justCheckIfSupported = 0, void (*percent)(char, void *) = &SWModule::nullPercent, void *percentUserData = 0);
+ // write interface ----------------------------
+ virtual bool isWritable();
+ static char createModule(const char *path) { return RawVerse4::createModule(path); }
+ virtual void setEntry(const char *inbuf, long len = -1); // Modify current module entry
+ virtual void linkEntry(const SWKey *linkKey); // Link current module entry to other module entry
+ virtual void deleteEntry(); // Delete current module entry
+ // end write interface ------------------------
+
+ SWMODULE_OPERATORS
+
+};
+
+SWORD_NAMESPACE_END
+#endif
Added: trunk/include/rawverse4.h
===================================================================
--- trunk/include/rawverse4.h (rev 0)
+++ trunk/include/rawverse4.h 2007-10-11 20:59:14 UTC (rev 2105)
@@ -0,0 +1,42 @@
+/******************************************************************************
+ * rawverse.h - code for class 'RawVerse'- a module that reads raw text
+ * files: ot and nt using indexs ??.bks ??.cps ??.vss
+ * and provides lookup and parsing functions based on
+ * class VerseKey
+ */
+
+#ifndef RAWVERSE4_H
+#define RAWVERSE4_H
+
+
+#include <defs.h>
+
+SWORD_NAMESPACE_START
+
+class FileDesc;
+class SWBuf;
+
+class SWDLLEXPORT RawVerse4 {
+
+
+ static int instance; // number of instantiated RawVerse objects or derivitives
+protected:
+ FileDesc *idxfp[2];
+ FileDesc *textfp[2];
+
+ char *path;
+ void prepText(SWBuf &buf);
+ void doSetText(char testmt, long idxoff, const char *buf, long len = -1);
+ void doLinkEntry(char testmt, long destidxoff, long srcidxoff);
+
+public:
+ static const char *nl;
+ RawVerse4(const char *ipath, int fileMode = -1);
+ virtual ~RawVerse4();
+ void findOffset(char testmt, long idxoff, long *start, unsigned long *end);
+ void readText(char testmt, long start, unsigned long size, SWBuf &buf);
+ static char createModule(const char *path);
+};
+
+SWORD_NAMESPACE_END
+#endif
Modified: trunk/scripts/mkswordtar
===================================================================
--- trunk/scripts/mkswordtar 2007-10-08 20:36:23 UTC (rev 2104)
+++ trunk/scripts/mkswordtar 2007-10-11 20:59:14 UTC (rev 2105)
@@ -5,9 +5,6 @@
if test `echo $REV` == `echo $SWORDVER`; then
chmod +x *
- chmod +x ../apps/X11/cheatah/configure
- chmod +x ../apps/X11/cheatah/missing
- #cp sapphire.cpp ../src/modules/common
cd ..; ./autogen.sh
cd ..; tar -v -c -p -s -z --exclude sword-$REV/bin -X sword-$REV/distignore -f sword-$REV.tar.gz sword-$REV/*
else
Modified: trunk/src/mgr/swmgr.cpp
===================================================================
--- trunk/src/mgr/swmgr.cpp 2007-10-08 20:36:23 UTC (rev 2104)
+++ trunk/src/mgr/swmgr.cpp 2007-10-11 20:59:14 UTC (rev 2105)
@@ -32,9 +32,11 @@
#include <swmgr.h>
#include <rawtext.h>
+#include <rawtext4.h>
#include <filemgr.h>
#include <rawgenbook.h>
#include <rawcom.h>
+#include <rawcom4.h>
#include <hrefcom.h>
#include <rawld.h>
#include <rawld4.h>
@@ -803,6 +805,10 @@
newmod = new RawText(datapath.c_str(), name, description.c_str(), 0, enc, direction, markup, lang.c_str());
}
+ if (!stricmp(driver, "RawText4")) {
+ newmod = new RawText4(datapath.c_str(), name, description.c_str(), 0, enc, direction, markup, lang.c_str());
+ }
+
// backward support old drivers
if (!stricmp(driver, "RawGBF")) {
newmod = new RawText(datapath.c_str(), name, description.c_str(), 0, enc, direction, markup, lang.c_str());
@@ -812,6 +818,10 @@
newmod = new RawCom(datapath.c_str(), name, description.c_str(), 0, enc, direction, markup, lang.c_str());
}
+ if (!stricmp(driver, "RawCom4")) {
+ newmod = new RawCom4(datapath.c_str(), name, description.c_str(), 0, enc, direction, markup, lang.c_str());
+ }
+
if (!stricmp(driver, "RawFiles")) {
newmod = new RawFiles(datapath.c_str(), name, description.c_str(), 0, enc, direction, markup, lang.c_str());
}
Modified: trunk/src/modules/comments/Makefile.am
===================================================================
--- trunk/src/modules/comments/Makefile.am 2007-10-08 20:36:23 UTC (rev 2104)
+++ trunk/src/modules/comments/Makefile.am 2007-10-11 20:59:14 UTC (rev 2105)
@@ -3,6 +3,7 @@
libsword_la_SOURCES += $(commentsdir)/swcom.cpp
include ../src/modules/comments/rawcom/Makefile.am
+include ../src/modules/comments/rawcom4/Makefile.am
include ../src/modules/comments/rawfiles/Makefile.am
include ../src/modules/comments/zcom/Makefile.am
include ../src/modules/comments/hrefcom/Makefile.am
Added: trunk/src/modules/comments/rawcom4/Makefile.am
===================================================================
--- trunk/src/modules/comments/rawcom4/Makefile.am (rev 0)
+++ trunk/src/modules/comments/rawcom4/Makefile.am 2007-10-11 20:59:14 UTC (rev 2105)
@@ -0,0 +1,2 @@
+rawcom4dir = $(top_srcdir)/src/modules/comments/rawcom4
+libsword_la_SOURCES += $(rawcom4dir)/rawcom4.cpp
Added: trunk/src/modules/comments/rawcom4/rawcom4.cpp
===================================================================
--- trunk/src/modules/comments/rawcom4/rawcom4.cpp (rev 0)
+++ trunk/src/modules/comments/rawcom4/rawcom4.cpp 2007-10-11 20:59:14 UTC (rev 2105)
@@ -0,0 +1,153 @@
+/******************************************************************************
+ * rawcom4.cpp - code for class 'RawCom4'- a module that reads raw commentary
+ * files: ot and nt using indexs ??.bks ??.cps ??.vss
+ */
+
+
+#include <ctype.h>
+#include <stdio.h>
+#include <fcntl.h>
+
+#include <filemgr.h>
+#include <rawverse4.h>
+#include <rawcom4.h>
+#include <versekey.h>
+
+SWORD_NAMESPACE_START
+
+ /******************************************************************************
+ * RawCom4 Constructor - Initializes data for instance of RawCom4
+ *
+ * ENT: iname - Internal name for module
+ * idesc - Name to display to user for module
+ * idisp - Display object to use for displaying
+ */
+
+RawCom4::RawCom4(const char *ipath, const char *iname, const char *idesc, SWDisplay *idisp, SWTextEncoding encoding, SWTextDirection dir, SWTextMarkup markup, const char* ilang)
+ : RawVerse4(ipath),
+ SWCom(iname, idesc, idisp, encoding, dir, markup, ilang){
+}
+
+
+/******************************************************************************
+ * RawCom4 Destructor - Cleans up instance of RawCom4
+ */
+
+RawCom4::~RawCom4()
+{
+}
+
+
+bool RawCom4::isWritable() {
+ return ((idxfp[0]->getFd() > 0) && ((idxfp[0]->mode & FileMgr::RDWR) == FileMgr::RDWR));
+}
+/******************************************************************************
+ * RawCom4::getRawEntry() - Returns the correct verse when char * cast
+ * is requested
+ *
+ * RET: string buffer with verse
+ */
+
+SWBuf &RawCom4::getRawEntryBuf() {
+ long start = 0;
+ unsigned long size = 0;
+ VerseKey *key = &getVerseKey();
+
+ findOffset(key->Testament(), key->Index(), &start, &size);
+ entrySize = size; // support getEntrySize call
+
+ entryBuf = "";
+ readText(key->Testament(), start, size, entryBuf);
+
+ rawFilter(entryBuf, 0); // hack, decipher
+ rawFilter(entryBuf, key);
+
+// if (!isUnicode())
+ prepText(entryBuf);
+
+ return entryBuf;
+}
+
+
+/******************************************************************************
+ * RawCom4::increment - Increments module key a number of entries
+ *
+ * ENT: steps - Number of entries to jump forward
+ *
+ * RET: *this
+ */
+
+void RawCom4::increment(int steps) {
+ long start;
+ unsigned long size;
+ VerseKey *tmpkey = &getVerseKey();
+
+ findOffset(tmpkey->Testament(), tmpkey->Index(), &start, &size);
+
+ SWKey lastgood = *tmpkey;
+ while (steps) {
+ long laststart = start;
+ unsigned long lastsize = size;
+ SWKey lasttry = *tmpkey;
+ (steps > 0) ? (*key)++ : (*key)--;
+ tmpkey = &getVerseKey();
+
+ if ((error = key->Error())) {
+ *key = lastgood;
+ break;
+ }
+ long index = tmpkey->Index();
+ findOffset(tmpkey->Testament(), index, &start, &size);
+ if (
+ (((laststart != start) || (lastsize != size)) // we're a different entry
+// && (start > 0)
+ && (size)) // and we actually have a size
+ ||(!skipConsecutiveLinks)) { // or we don't want to skip consecutive links
+ steps += (steps < 0) ? 1 : -1;
+ lastgood = *tmpkey;
+ }
+ }
+ error = (error) ? KEYERR_OUTOFBOUNDS : 0;
+}
+
+
+void RawCom4::setEntry(const char *inbuf, long len) {
+ VerseKey *key = &getVerseKey();
+ doSetText(key->Testament(), key->Index(), inbuf, len);
+}
+
+
+void RawCom4::linkEntry(const SWKey *inkey) {
+ VerseKey *destkey = &getVerseKey();
+ const VerseKey *srckey = 0;
+
+ // see if we have a VerseKey * or decendant
+ SWTRY {
+ srckey = SWDYNAMIC_CAST(VerseKey, inkey);
+ }
+ SWCATCH ( ... ) {}
+ // if we don't have a VerseKey * decendant, create our own
+ if (!srckey)
+ srckey = new VerseKey(inkey);
+
+ doLinkEntry(destkey->Testament(), destkey->Index(), srckey->Index());
+
+ if (inkey != srckey) // free our key if we created a VerseKey
+ delete srckey;
+}
+
+
+/******************************************************************************
+ * RawCom4::deleteEntry - deletes this entry
+ *
+ * RET: *this
+ */
+
+void RawCom4::deleteEntry() {
+
+ VerseKey *key = &getVerseKey();
+ doSetText(key->Testament(), key->Index(), "");
+}
+
+
+SWORD_NAMESPACE_END
Modified: trunk/src/modules/common/Makefile.am
===================================================================
--- trunk/src/modules/common/Makefile.am 2007-10-08 20:36:23 UTC (rev 2104)
+++ trunk/src/modules/common/Makefile.am 2007-10-11 20:59:14 UTC (rev 2105)
@@ -12,6 +12,7 @@
endif
libsword_la_SOURCES += $(SWZLIB)
libsword_la_SOURCES += $(commondir)/rawverse.cpp
+libsword_la_SOURCES += $(commondir)/rawverse4.cpp
libsword_la_SOURCES += $(commondir)/swcipher.cpp
libsword_la_SOURCES += $(commondir)/zverse.cpp
libsword_la_SOURCES += $(commondir)/zstr.cpp
Added: trunk/src/modules/common/rawverse4.cpp
===================================================================
--- trunk/src/modules/common/rawverse4.cpp (rev 0)
+++ trunk/src/modules/common/rawverse4.cpp 2007-10-11 20:59:14 UTC (rev 2105)
@@ -0,0 +1,350 @@
+/******************************************************************************
+ * rawverse.cpp - code for class 'RawVerse4'- a module that reads raw text
+ * files: ot and nt using indexs ??.bks ??.cps ??.vss
+ * and provides lookup and parsing functions based on
+ * class VerseKey
+ */
+
+
+#include <ctype.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <errno.h>
+
+#include <utilstr.h>
+#include <rawverse4.h>
+#include <versekey.h>
+#include <sysdata.h>
+#include <filemgr.h>
+#include <swbuf.h>
+
+
+SWORD_NAMESPACE_START
+
+/******************************************************************************
+ * RawVerse4 Statics
+ */
+
+int RawVerse4::instance = 0;
+const char *RawVerse4::nl = "\r\n";
+
+
+/******************************************************************************
+ * RawVerse4 Constructor - Initializes data for instance of RawVerse4
+ *
+ * ENT: ipath - path of the directory where data and index files are located.
+ * be sure to include the trailing separator (e.g. '/' or '\')
+ * (e.g. 'modules/texts/rawtext/webster/')
+ */
+
+RawVerse4::RawVerse4(const char *ipath, int fileMode)
+{
+ SWBuf buf;
+
+ path = 0;
+ stdstr(&path, ipath);
+
+ if ((path[strlen(path)-1] == '/') || (path[strlen(path)-1] == '\\'))
+ path[strlen(path)-1] = 0;
+
+ if (fileMode == -1) { // try read/write if possible
+ fileMode = FileMgr::RDWR;
+ }
+
+ buf.setFormatted("%s/ot.vss", path);
+ idxfp[0] = FileMgr::getSystemFileMgr()->open(buf, fileMode, true);
+
+ buf.setFormatted("%s/nt.vss", path);
+ idxfp[1] = FileMgr::getSystemFileMgr()->open(buf, fileMode, true);
+
+ buf.setFormatted("%s/ot", path);
+ textfp[0] = FileMgr::getSystemFileMgr()->open(buf, fileMode, true);
+
+ buf.setFormatted("%s/nt", path);
+ textfp[1] = FileMgr::getSystemFileMgr()->open(buf, fileMode, true);
+
+ instance++;
+}
+
+
+/******************************************************************************
+ * RawVerse4 Destructor - Cleans up instance of RawVerse4
+ */
+
+RawVerse4::~RawVerse4()
+{
+ int loop1;
+
+ if (path)
+ delete [] path;
+
+ --instance;
+
+ for (loop1 = 0; loop1 < 2; loop1++) {
+ FileMgr::getSystemFileMgr()->close(idxfp[loop1]);
+ FileMgr::getSystemFileMgr()->close(textfp[loop1]);
+ }
+}
+
+
+/******************************************************************************
+ * RawVerse4::findoffset - Finds the offset of the key verse from the indexes
+ *
+ * ENT: testmt - testament to find (0 - Bible/module introduction)
+ * idxoff - offset into .vss
+ * start - address to store the starting offset
+ * size - address to store the size of the entry
+ */
+
+void RawVerse4::findOffset(char testmt, long idxoff, long *start, unsigned long *size) {
+ idxoff *= 8;
+ if (!testmt)
+ testmt = ((idxfp[1]) ? 1:2);
+
+ if (idxfp[testmt-1]->getFd() >= 0) {
+ idxfp[testmt-1]->seek(idxoff, SEEK_SET);
+ idxfp[testmt-1]->read(start, 4);
+ long len = idxfp[testmt-1]->read(size, 4); // read size
+
+ *start = swordtoarch32(*start);
+ *size = swordtoarch32(*size);
+
+ if (len < 2) {
+ *size = (unsigned long)((*start) ? (textfp[testmt-1]->seek(0, SEEK_END) - (long)*start) : 0); // if for some reason we get an error reading size, make size to end of file
+ }
+ }
+ else {
+ *start = 0;
+ *size = 0;
+ }
+}
+
+
+/******************************************************************************
+ * RawVerse4::preptext - Prepares the text before returning it to external
+ * objects
+ *
+ * ENT: buf - buffer where text is stored and where to store the prep'd
+ * text.
+ */
+
+void RawVerse4::prepText(SWBuf &buf) {
+ unsigned int to, from;
+ char space = 0, cr = 0, realdata = 0, nlcnt = 0;
+ char *rawBuf = buf.getRawData();
+ for (to = from = 0; rawBuf[from]; from++) {
+ switch (rawBuf[from]) {
+ case 10:
+ if (!realdata)
+ continue;
+ space = (cr) ? 0 : 1;
+ cr = 0;
+ nlcnt++;
+ if (nlcnt > 1) {
+// *to++ = nl;
+ rawBuf[to++] = 10;
+// *to++ = nl[1];
+// nlcnt = 0;
+ }
+ continue;
+ case 13:
+ if (!realdata)
+ continue;
+// *to++ = nl[0];
+ rawBuf[to++] = 10;
+ space = 0;
+ cr = 1;
+ continue;
+ }
+ realdata = 1;
+ nlcnt = 0;
+ if (space) {
+ space = 0;
+ if (rawBuf[from] != ' ') {
+ rawBuf[to++] = ' ';
+ from--;
+ continue;
+ }
+ }
+ rawBuf[to++] = rawBuf[from];
+ }
+ buf.setSize(to);
+
+ while (to > 1) { // remove trailing excess
+ to--;
+ if ((rawBuf[to] == 10) || (rawBuf[to] == ' '))
+ buf.setSize(to);
+ else break;
+ }
+}
+
+
+/******************************************************************************
+ * RawVerse4::readtext - gets text at a given offset
+ *
+ * ENT: testmt - testament file to search in (0 - Old; 1 - New)
+ * start - starting offset where the text is located in the file
+ * size - size of text entry + 2 (null)(null)
+ * buf - buffer to store text
+ *
+ */
+
+void RawVerse4::readText(char testmt, long start, unsigned long size, SWBuf &buf) {
+ buf = "";
+ buf.setFillByte(0);
+ buf.setSize(size + 1);
+ if (!testmt)
+ testmt = ((idxfp[1]) ? 1:2);
+ if (size) {
+ if (textfp[testmt-1]->getFd() >= 0) {
+ textfp[testmt-1]->seek(start, SEEK_SET);
+ textfp[testmt-1]->read(buf.getRawData(), (int)size);
+ }
+ }
+}
+
+
+/******************************************************************************
+ * RawVerse4::settext - Sets text for current offset
+ *
+ * ENT: testmt - testament to find (0 - Bible/module introduction)
+ * idxoff - offset into .vss
+ * buf - buffer to store
+ * len - length of buffer (0 - null terminated)
+ */
+
+void RawVerse4::doSetText(char testmt, long idxoff, const char *buf, long len)
+{
+ long start, outstart;
+ unsigned long size;
+ unsigned long outsize;
+
+ idxoff *= 8;
+ if (!testmt)
+ testmt = ((idxfp[1]) ? 1:2);
+
+ size = outsize = (len < 0) ? strlen(buf) : len;
+
+ start = outstart = textfp[testmt-1]->seek(0, SEEK_END);
+ idxfp[testmt-1]->seek(idxoff, SEEK_SET);
+
+ if (size) {
+ textfp[testmt-1]->seek(start, SEEK_SET);
+ textfp[testmt-1]->write(buf, (int)size);
+
+ // add a new line to make data file easier to read in an editor
+ textfp[testmt-1]->write(nl, 2);
+ }
+ else {
+ start = 0;
+ }
+
+ outstart = archtosword32(start);
+ outsize = archtosword32(size);
+
+ idxfp[testmt-1]->write(&outstart, 4);
+ idxfp[testmt-1]->write(&outsize, 4);
+
+
+}
+
+
+/******************************************************************************
+ * RawVerse4::linkentry - links one entry to another
+ *
+ * ENT: testmt - testament to find (0 - Bible/module introduction)
+ * destidxoff - dest offset into .vss
+ * srcidxoff - source offset into .vss
+ */
+
+void RawVerse4::doLinkEntry(char testmt, long destidxoff, long srcidxoff) {
+ long start;
+ unsigned long size;
+
+ destidxoff *= 8;
+ srcidxoff *= 8;
+
+ if (!testmt)
+ testmt = ((idxfp[1]) ? 1:2);
+
+ // get source
+ idxfp[testmt-1]->seek(srcidxoff, SEEK_SET);
+ idxfp[testmt-1]->read(&start, 4);
+ idxfp[testmt-1]->read(&size, 4);
+
+ // write dest
+ idxfp[testmt-1]->seek(destidxoff, SEEK_SET);
+ idxfp[testmt-1]->write(&start, 4);
+ idxfp[testmt-1]->write(&size, 4);
+}
+
+
+/******************************************************************************
+ * RawVerse4::CreateModule - Creates new module files
+ *
+ * ENT: path - directory to store module files
+ * RET: error status
+ */
+
+char RawVerse4::createModule(const char *ipath)
+{
+ char *path = 0;
+ char *buf = new char [ strlen (ipath) + 20 ];
+ FileDesc *fd, *fd2;
+
+ stdstr(&path, ipath);
+
+ if ((path[strlen(path)-1] == '/') || (path[strlen(path)-1] == '\\'))
+ path[strlen(path)-1] = 0;
+
+ sprintf(buf, "%s/ot", path);
+ FileMgr::removeFile(buf);
+ fd = FileMgr::getSystemFileMgr()->open(buf, FileMgr::CREAT|FileMgr::WRONLY, FileMgr::IREAD|FileMgr::IWRITE);
+ fd->getFd();
+ FileMgr::getSystemFileMgr()->close(fd);
+
+ sprintf(buf, "%s/nt", path);
+ FileMgr::removeFile(buf);
+ fd = FileMgr::getSystemFileMgr()->open(buf, FileMgr::CREAT|FileMgr::WRONLY, FileMgr::IREAD|FileMgr::IWRITE);
+ fd->getFd();
+ FileMgr::getSystemFileMgr()->close(fd);
+
+ sprintf(buf, "%s/ot.vss", path);
+ FileMgr::removeFile(buf);
+ fd = FileMgr::getSystemFileMgr()->open(buf, FileMgr::CREAT|FileMgr::WRONLY, FileMgr::IREAD|FileMgr::IWRITE);
+ fd->getFd();
+
+ sprintf(buf, "%s/nt.vss", path);
+ FileMgr::removeFile(buf);
+ fd2 = FileMgr::getSystemFileMgr()->open(buf, FileMgr::CREAT|FileMgr::WRONLY, FileMgr::IREAD|FileMgr::IWRITE);
+ fd2->getFd();
+
+ VerseKey vk;
+ vk.Headings(1);
+ long offset = 0;
+ long size = 0;
+ for (vk = TOP; !vk.Error(); vk++) {
+ if (vk.Testament() == 1) {
+ fd->write(&offset, 4);
+ fd->write(&size, 4);
+ }
+ else {
+ fd2->write(&offset, 4);
+ fd2->write(&size, 4);
+ }
+ }
+
+ FileMgr::getSystemFileMgr()->close(fd);
+ FileMgr::getSystemFileMgr()->close(fd2);
+
+ delete [] path;
+ delete [] buf;
+/*
+ RawVerse4 rv(path);
+ VerseKey mykey("Rev 22:21");
+*/
+
+ return 0;
+}
+
+SWORD_NAMESPACE_END
Modified: trunk/src/modules/texts/Makefile.am
===================================================================
--- trunk/src/modules/texts/Makefile.am 2007-10-08 20:36:23 UTC (rev 2104)
+++ trunk/src/modules/texts/Makefile.am 2007-10-11 20:59:14 UTC (rev 2105)
@@ -3,4 +3,5 @@
libsword_la_SOURCES += $(textsdir)/swtext.cpp
include ../src/modules/texts/rawtext/Makefile.am
+include ../src/modules/texts/rawtext4/Makefile.am
include ../src/modules/texts/ztext/Makefile.am
Added: trunk/src/modules/texts/rawtext4/Makefile.am
===================================================================
--- trunk/src/modules/texts/rawtext4/Makefile.am (rev 0)
+++ trunk/src/modules/texts/rawtext4/Makefile.am 2007-10-11 20:59:14 UTC (rev 2105)
@@ -0,0 +1,2 @@
+rawtext4dir = $(top_srcdir)/src/modules/texts/rawtext4
+libsword_la_SOURCES += $(rawtext4dir)/rawtext4.cpp
Added: trunk/src/modules/texts/rawtext4/rawtext4.cpp
===================================================================
--- trunk/src/modules/texts/rawtext4/rawtext4.cpp (rev 0)
+++ trunk/src/modules/texts/rawtext4/rawtext4.cpp 2007-10-11 20:59:14 UTC (rev 2105)
@@ -0,0 +1,548 @@
+/******************************************************************************
+ * rawtext4.cpp - code for class 'RawText4'- a module that reads raw text files:
+ * ot and nt using indexs ??.bks ??.cps ??.vss
+ */
+
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <sysdata.h>
+
+#include <utilstr.h>
+#include <rawverse4.h>
+#include <rawtext4.h>
+#include <rawstr4.h>
+#include <filemgr.h>
+#include <versekey.h>
+#include <stringmgr.h>
+
+#include <regex.h> // GNU
+#include <map>
+#include <list>
+#include <algorithm>
+
+#ifndef USELUCENE
+using std::map;
+using std::list;
+using std::find;
+#endif
+
+SWORD_NAMESPACE_START
+
+#ifndef USELUCENE
+typedef map < SWBuf, list<long> > strlist;
+typedef list<long> longlist;
+#endif
+
+/******************************************************************************
+ * RawText4 Constructor - Initializes data for instance of RawText4
+ *
+ * ENT: iname - Internal name for module
+ * idesc - Name to display to user for module
+ * idisp - Display object to use for displaying
+ */
+
+RawText4::RawText4(const char *ipath, const char *iname, const char *idesc, SWDisplay *idisp, SWTextEncoding enc, SWTextDirection dir, SWTextMarkup mark, const char* ilang)
+ : SWText(iname, idesc, idisp, enc, dir, mark, ilang),
+ RawVerse4(ipath) {
+
+#ifndef USELUCENE
+ SWBuf fname;
+ fname = path;
+ char ch = fname.c_str()[strlen(fname.c_str())-1];
+ if ((ch != '/') && (ch != '\\'))
+ fname += "/";
+
+ for (int loop = 0; loop < 2; loop++) {
+ fastSearch[loop] = 0;
+ SWBuf fastidxname =(fname + ((loop)?"ntwords.dat":"otwords.dat"));
+ if (FileMgr::existsFile(fastidxname.c_str())) {
+ fastidxname = (fname + ((loop)?"ntwords.idx":"otwords.idx"));
+ if (FileMgr::existsFile(fastidxname.c_str()))
+ fastSearch[loop] = new RawStr4((fname + ((loop)?"ntwords":"otwords")).c_str());
+ }
+ }
+#endif
+}
+
+
+/******************************************************************************
+ * RawText4 Destructor - Cleans up instance of RawText4
+ */
+
+RawText4::~RawText4() {
+#ifndef USELUCENE
+ if (fastSearch[0])
+ delete fastSearch[0];
+
+ if (fastSearch[1])
+ delete fastSearch[1];
+#endif
+}
+
+
+bool RawText4::isWritable() {
+ return ((idxfp[0]->getFd() > 0) && ((idxfp[0]->mode & FileMgr::RDWR) == FileMgr::RDWR));
+}
+
+
+/******************************************************************************
+ * RawText4::getRawEntry - Returns the correct verse when char * cast
+ * is requested
+ *
+ * RET: string buffer with verse
+ */
+
+SWBuf &RawText4::getRawEntryBuf() {
+ long start = 0;
+ unsigned long size = 0;
+ VerseKey &key = getVerseKey();
+
+ findOffset(key.Testament(), key.Index(), &start, &size);
+ entrySize = size; // support getEntrySize call
+
+ entryBuf = "";
+ readText(key.Testament(), start, size, entryBuf);
+
+ rawFilter(entryBuf, 0); // hack, decipher
+ rawFilter(entryBuf, &key);
+
+// if (!isUnicode())
+ prepText(entryBuf);
+
+ return entryBuf;
+}
+
+
+signed char RawText4::createSearchFramework(void (*percent)(char, void *), void *percentUserData) {
+#ifndef USELUCENE
+ SWKey *savekey = 0;
+ SWKey *searchkey = 0;
+ SWKey textkey;
+ char *word = 0;
+ char *wordBuf = 0;
+
+ // dictionary holds words associated with a list
+ // containing every module position that contains
+ // the word. [0] Old Testament; [1] NT
+ map < SWBuf, list<long> > dictionary[2];
+
+
+ // save key information so as not to disrupt original
+ // module position
+ if (!key->Persist()) {
+ savekey = CreateKey();
+ *savekey = *key;
+ }
+ else savekey = key;
+
+ searchkey = (key->Persist())?key->clone():0;
+ if (searchkey) {
+ searchkey->Persist(1);
+ setKey(*searchkey);
+ }
+
+ // position module at the beginning
+ *this = TOP;
+
+ VerseKey *lkey = (VerseKey *)key;
+
+ // iterate thru each entry in module
+ while (!Error()) {
+ long index = lkey->Index();
+ wordBuf = (char *)calloc(sizeof(char), strlen(StripText()) + 1);
+ strcpy(wordBuf, StripText());
+
+ // grab each word from the text
+ word = strtok(wordBuf, " !.,?;:()-=+/\\|{}[]\"<>");
+ while (word) {
+
+ // make word upper case
+ toupperstr(word);
+
+ // lookup word in dictionary (or make entry in dictionary
+ // for this word) and add this module position (index) to
+ // the word's associated list of module positions
+ dictionary[lkey->Testament()-1][word].push_back(index);
+ word = strtok(NULL, " !.,?;:()-=+/\\|{}[]\"<>");
+ }
+ free(wordBuf);
+ (*this)++;
+ }
+
+ // reposition module back to where it was before we were called
+ setKey(*savekey);
+
+ if (!savekey->Persist())
+ delete savekey;
+
+ if (searchkey)
+ delete searchkey;
+
+
+ // --------- Let's output an index from our dictionary -----------
+ FileDesc *datfd;
+ FileDesc *idxfd;
+ strlist::iterator it;
+ longlist::iterator it2;
+ unsigned long offset, entryoff;
+ unsigned long size;
+
+ SWBuf fname;
+ fname = path;
+ char ch = fname.c_str()[strlen(fname.c_str())-1];
+ if ((ch != '/') && (ch != '\\'))
+ fname += "/";
+
+ // for old and new testament do...
+ for (int loop = 0; loop < 2; loop++) {
+ datfd = FileMgr::getSystemFileMgr()->open((fname + ((loop)?"ntwords.dat":"otwords.dat")).c_str(), FileMgr::CREAT|FileMgr::WRONLY, 00644);
+ if (datfd->getFd() == -1)
+ return -1;
+ idxfd = FileMgr::getSystemFileMgr()->open((fname + ((loop)?"ntwords.idx":"otwords.idx")).c_str(), FileMgr::CREAT|FileMgr::WRONLY, 00644);
+ if (idxfd->getFd() == -1) {
+ FileMgr::getSystemFileMgr()->close(datfd);
+ return -1;
+ }
+
+ // iterate thru each word in the dictionary
+ for (it = dictionary[loop].begin(); it != dictionary[loop].end(); it++) {
+ printf("%s: ", it->first.c_str());
+
+ // get our current offset in our word.dat file and write this as the start
+ // of the next entry in our database
+ offset = datfd->seek(0, SEEK_CUR);
+ idxfd->write(&offset, 4);
+
+ // write our word out to the word.dat file, delineating with a \n
+ datfd->write(it->first.c_str(), strlen(it->first.c_str()));
+ datfd->write("\n", 1);
+
+ // force our mod position list for this word to be unique (remove
+ // duplicates that may exist if the word was found more than once
+ // in the verse
+ it->second.unique();
+
+ // iterate thru each mod position for this word and output it to
+ // our database
+ unsigned short count = 0;
+ for (it2 = it->second.begin(); it2 != it->second.end(); it2++) {
+ entryoff= *it2;
+ datfd->write(&entryoff, 4);
+ count++;
+ }
+
+ // now see what our new position is in our word.dat file and
+ // determine the size of this database entry
+ size = datfd->seek(0, SEEK_CUR) - offset;
+
+ // store the size of this database entry
+ idxfd->write(&size, 4);
+ printf("%d entries (size: %d)\n", count, size);
+ }
+ FileMgr::getSystemFileMgr()->close(datfd);
+ FileMgr::getSystemFileMgr()->close(idxfd);
+ }
+ return 0;
+#else
+ return SWModule::createSearchFramework(percent, percentUserData);
+#endif
+}
+
+
+void RawText4::deleteSearchFramework() {
+#ifndef USELUCENE
+ SWBuf target = path;
+ char ch = target.c_str()[strlen(target.c_str())-1];
+ if ((ch != '/') && (ch != '\\'))
+ target += "/lucene";
+ FileMgr::removeFile(target + "ntwords.dat");
+ FileMgr::removeFile(target + "otwords.dat");
+ FileMgr::removeFile(target + "ntwords.idx");
+ FileMgr::removeFile(target + "otwords.idx");
+#else
+ SWModule::deleteSearchFramework();
+#endif
+}
+
+
+/******************************************************************************
+ * SWModule::search - Searches a module for a string
+ *
+ * ENT: istr - string for which to search
+ * searchType - type of search to perform
+ * >=0 - regex
+ * -1 - phrase
+ * -2 - multiword
+ * flags - options flags for search
+ * justCheckIfSupported - if set, don't search, only tell if this
+ * function supports requested search.
+ *
+ * RET: ListKey set to verses that contain istr
+ */
+
+ListKey &RawText4::search(const char *istr, int searchType, int flags, SWKey *scope, bool *justCheckIfSupported, void (*percent)(char, void *), void *percentUserData) {
+#ifndef USELUCENE
+ listKey.ClearList();
+
+ if ((fastSearch[0]) && (fastSearch[1])) {
+
+ switch (searchType) {
+ case -2: {
+
+ if ((flags & REG_ICASE) != REG_ICASE) // if haven't chosen to
+ // ignore case
+ break; // can't handle fast case sensitive searches
+
+ // test to see if our scope for this search is bounded by a
+ // VerseKey
+ VerseKey *testKeyType = 0;
+ SWTRY {
+ testKeyType = SWDYNAMIC_CAST(VerseKey, ((scope)?scope:key));
+ }
+ SWCATCH ( ... ) {}
+ // if we don't have a VerseKey * decendant we can't handle
+ // because of scope.
+ // In the future, add bool SWKey::isValid(const char *tryString);
+ if (!testKeyType)
+ break;
+
+
+ // check if we just want to see if search is supported.
+ // If we've gotten this far, then it is supported.
+ if (justCheckIfSupported) {
+ *justCheckIfSupported = true;
+ return listKey;
+ }
+
+ SWKey saveKey = *testKeyType; // save current place
+
+ char error = 0;
+ char **words = 0;
+ char *wordBuf = 0;
+ int wordCount = 0;
+ long start;
+ unsigned long size;
+ char *idxbuf = 0;
+ SWBuf datBuf;
+ list <long> indexes;
+ list <long> indexes2;
+ VerseKey vk;
+ vk = TOP;
+
+ (*percent)(10, percentUserData);
+
+ // toupper our copy of search string
+ stdstr(&wordBuf, istr);
+ toupperstr(wordBuf);
+
+ // get list of individual words
+ words = (char **)calloc(sizeof(char *), 10);
+ int allocWords = 10;
+ words[wordCount] = strtok(wordBuf, " ");
+ while (words[wordCount]) {
+ wordCount++;
+ if (wordCount == allocWords) {
+ allocWords+=10;
+ words = (char **)realloc(words, sizeof(char *)*allocWords);
+ }
+ words[wordCount] = strtok(NULL, " ");
+ }
+
+ (*percent)(20, percentUserData);
+
+ // clear our result set
+ indexes.erase(indexes.begin(), indexes.end());
+
+ // search both old and new testament indexes
+ for (int j = 0; j < 2; j++) {
+ // iterate thru each word the user passed to us.
+ for (int i = 0; i < wordCount; i++) {
+
+ // clear this word's result set
+ indexes2.erase(indexes2.begin(), indexes2.end());
+ error = 0;
+
+ // iterate thru every word in the database that starts
+ // with our search word
+ for (int away = 0; !error; away++) {
+ idxbuf = 0;
+
+ // find our word in the database and jump ahead _away_
+ error = fastSearch[j]->findOffset(words[i], &start, &size, away);
+
+ // get the word from the database
+ fastSearch[j]->getIDXBufDat(start, &idxbuf);
+
+ // check to see if it starts with our target word
+ if (strlen(idxbuf) > strlen(words[i]))
+ idxbuf[strlen(words[i])] = 0;
+// else words[i][strlen(idxbuf)] = 0;
+ if (!strcmp(idxbuf, words[i])) {
+
+ // get data for this word from database
+ delete [] idxbuf;
+ idxbuf = 0;
+ datBuf = "";
+ fastSearch[j]->readText(start, &size, &idxbuf, datBuf);
+
+ // we know that the data consists of sizof(long)
+ // records each a valid module position that constains
+ // this word
+ //
+ // iterate thru each of these module positions
+ long *keyindex = (long *)datBuf.getRawData();
+ while (keyindex < (long *)(datBuf.getRawData() + size - (strlen(idxbuf) + 1))) {
+ if (i) { // if we're not on our first word
+
+ // check to see if this word is already in the result set.
+ // This is our AND functionality
+ if (find(indexes.begin(), indexes.end(), *keyindex) != indexes.end())
+ // add to new result set
+ indexes2.push_back(*keyindex);
+ }
+ else indexes2.push_back(*keyindex);
+ keyindex++;
+ }
+ }
+ else error = 1; // no more matches
+ free(idxbuf);
+ }
+
+ // make new result set final result set
+ indexes = indexes2;
+
+ percent((char)(20 + (float)((j*wordCount)+i)/(wordCount * 2) * 78), percentUserData);
+ }
+
+ // indexes contains our good verses, lets return them in a listKey
+ indexes.sort();
+
+ // iterate thru each good module position that meets the search
+ for (longlist::iterator it = indexes.begin(); it != indexes.end(); it++) {
+
+ // set a temporary verse key to this module position
+ vk.Testament(j+1);
+ vk.Error();
+ vk.Index(*it);
+
+ // check scope
+ // Try to set our scope key to this verse key
+ if (scope) {
+ *testKeyType = vk;
+
+ // check to see if it set ok and if so, add to our return list
+ if (*testKeyType == vk)
+ listKey << (const char *) vk;
+ }
+ else listKey << (const char*) vk;
+ }
+ }
+ (*percent)(98, percentUserData);
+
+ free(words);
+ free(wordBuf);
+
+ *testKeyType = saveKey; // set current place back to original
+
+ listKey = TOP;
+ (*percent)(100, percentUserData);
+ return listKey;
+ }
+
+ default:
+ break;
+ }
+ }
+
+ // check if we just want to see if search is supported
+ if (justCheckIfSupported) {
+ *justCheckIfSupported = false;
+ return listKey;
+ }
+
+#endif
+ // if we don't support this search, fall back to base class
+ return SWModule::search(istr, searchType, flags, scope, justCheckIfSupported, percent, percentUserData);
+}
+
+
+void RawText4::setEntry(const char *inbuf, long len) {
+ VerseKey &key = getVerseKey();
+ doSetText(key.Testament(), key.Index(), inbuf, len);
+}
+
+
+void RawText4::linkEntry(const SWKey *inkey) {
+ VerseKey &destkey = getVerseKey();
+ const VerseKey *srckey = 0;
+
+ // see if we have a VerseKey * or decendant
+ SWTRY {
+ srckey = SWDYNAMIC_CAST(VerseKey, inkey);
+ }
+ SWCATCH ( ... ) {}
+ // if we don't have a VerseKey * decendant, create our own
+ if (!srckey)
+ srckey = new VerseKey(inkey);
+
+ doLinkEntry(destkey.Testament(), destkey.Index(), srckey->Index());
+
+ if (inkey != srckey) // free our key if we created a VerseKey
+ delete srckey;
+}
+
+
+/******************************************************************************
+ * RawText4::deleteEntry - deletes this entry
+ *
+ * RET: *this
+ */
+
+void RawText4::deleteEntry() {
+ VerseKey &key = getVerseKey();
+ doSetText(key.Testament(), key.Index(), "");
+}
+
+/******************************************************************************
+ * RawText4::increment - Increments module key a number of entries
+ *
+ * ENT: increment - Number of entries to jump forward
+ *
+ * RET: *this
+ */
+
+void RawText4::increment(int steps) {
+ long start;
+ unsigned long size;
+ VerseKey *tmpkey = &getVerseKey();
+
+ findOffset(tmpkey->Testament(), tmpkey->Index(), &start, &size);
+
+ SWKey lastgood = *tmpkey;
+ while (steps) {
+ long laststart = start;
+ unsigned long lastsize = size;
+ SWKey lasttry = *tmpkey;
+ (steps > 0) ? (*key)++ : (*key)--;
+ tmpkey = &getVerseKey();
+
+ if ((error = key->Error())) {
+ *key = lastgood;
+ break;
+ }
+ long index = tmpkey->Index();
+ findOffset(tmpkey->Testament(), index, &start, &size);
+ if (
+ (((laststart != start) || (lastsize != size)) // we're a different entry
+// && (start > 0)
+ && (size)) // and we actually have a size
+ ||(!skipConsecutiveLinks)) { // or we don't want to skip consecutive links
+ steps += (steps < 0) ? 1 : -1;
+ lastgood = *tmpkey;
+ }
+ }
+ error = (error) ? KEYERR_OUTOFBOUNDS : 0;
+}
+
+SWORD_NAMESPACE_END
Modified: trunk/utilities/imp2vs.cpp
===================================================================
--- trunk/utilities/imp2vs.cpp 2007-10-08 20:36:23 UTC (rev 2104)
+++ trunk/utilities/imp2vs.cpp 2007-10-11 20:59:14 UTC (rev 2105)
@@ -9,11 +9,13 @@
#include <iostream>
#include <rawtext.h>
+ #include <rawtext4.h>
#include <versekey.h>
#ifndef NO_SWORD_NAMESPACE
using sword::RawText;
+using sword::RawText4;
using sword::VerseKey;
using sword::SWText;
using sword::ListKey;
@@ -38,15 +40,37 @@
fprintf(stderr, helptext.c_str(), argv[0]);
exit(-1);
}
+ int mode = 1;
+ if (argc > 3) {
+ switch (*argv[3]) {
+ case '4':
+ mode = 2;
+ break;
+ default:
+ mode = 1;
+ }
+ }
+
+
try {
ifstream infile(argv[1]);
SWText* mod;
- RawText::createModule(modname.c_str());
- RawText modRaw(modname.c_str());
- mod = &modRaw;
+ RawText * modRaw;
+ RawText4 * modRaw4;
+
+ if (mode == 1) {
+ std::cout << "Mode 1\n";
+ RawText::createModule(modname.c_str());
+ modRaw= new RawText(modname.c_str());
+ mod = modRaw;
+ } else {
+ RawText4::createModule(modname.c_str());
+ modRaw4= new RawText4(modname.c_str());
+ mod = modRaw4;
+ }
VerseKey* vkey = new VerseKey;
vkey->Headings(1);
More information about the sword-cvs
mailing list