summaryrefslogtreecommitdiff
path: root/utilities/mod2vpl.cpp
diff options
context:
space:
mode:
authorDimitri John Ledkov <xnox@ubuntu.com>2014-05-11 22:09:52 +0100
committerDimitri John Ledkov <xnox@ubuntu.com>2014-05-11 22:09:52 +0100
commit3525014850e3800ac7b28fd34e7f7af427f1c620 (patch)
tree3d1b8a17b86cfa9af178ceb818a4dc9daf52a46b /utilities/mod2vpl.cpp
sword (1.7.2+dfsg-2) unstable; urgency=medium
* Correct shared library symlink. (Closes: #747420) # imported from the archive
Diffstat (limited to 'utilities/mod2vpl.cpp')
-rw-r--r--utilities/mod2vpl.cpp112
1 files changed, 112 insertions, 0 deletions
diff --git a/utilities/mod2vpl.cpp b/utilities/mod2vpl.cpp
new file mode 100644
index 0000000..0b5ab1b
--- /dev/null
+++ b/utilities/mod2vpl.cpp
@@ -0,0 +1,112 @@
+/******************************************************************************
+ *
+ * mod2vpl.cpp - Utility to export a module in VPL format
+ *
+ * $Id: mod2vpl.cpp 2931 2013-07-31 13:07:26Z scribe $
+ *
+ * Copyright 2000-2013 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.
+ *
+ */
+
+#ifdef _MSC_VER
+ #pragma warning( disable: 4251 )
+#endif
+
+#include <swmgr.h>
+#include <swmodule.h>
+#include <swkey.h>
+#include <versekey.h>
+#include <stdio.h>
+#include <iostream>
+
+#ifndef NO_SWORD_NAMESPACE
+using sword::SWMgr;
+using sword::VerseKey;
+using sword::SWModule;
+using sword::SWKey;
+using sword::SW_POSITION;
+using sword::ModMap;
+#endif
+
+void cleanbuf(char *buf) {
+ char *from = buf;
+ char *to = buf;
+
+ while (*from) {
+ if ((*from != 10) && (*from != 13)) {
+ *to++ = *from++;
+ }
+ else {
+ from++;
+ }
+ }
+ *to = 0;
+}
+
+int main(int argc, char **argv) {
+ char *buffer = 0;
+
+ if (argc < 2) {
+ fprintf(stderr, "usage: %s <Mod Name> [0|1 - prepend verse reference to each line]\n", argv[0]);
+ exit(-1);
+ }
+
+ SWMgr mgr;
+
+ ModMap::iterator it = mgr.Modules.find(argv[1]);
+ if (it == mgr.Modules.end()) {
+ fprintf(stderr, "error: %s: couldn't find module: %s \n", argv[0], argv[1]);
+ exit(-2);
+ }
+
+ bool vref = false;
+ if (argc > 2)
+ vref = (argv[2][0] == '0') ? false : true;
+
+
+ SWModule *mod = it->second;
+
+ SWKey *key = (*mod);
+ VerseKey *vkey = 0;
+ SWTRY {
+ vkey = dynamic_cast<VerseKey *>(key);
+ }
+ SWCATCH (...) {}
+
+ if (!vkey) {
+ fprintf(stderr, "error: %s: %s module is not keyed to verses \n", argv[0], argv[1]);
+ exit(-3);
+ }
+
+ vkey->setIntros(true); // turn on mod/testmnt/book/chap headings
+
+ (*mod) = TOP;
+
+ while (!mod->popError()) {
+ buffer = new char [ mod->renderText().length() + 1 ];
+ strcpy(buffer, mod->renderText());
+ cleanbuf(buffer);
+ if (vref) {
+ if ((strlen(buffer) > 0) && (vref)) {
+ std::cout << (const char *)(*vkey) << " ";
+ std::cout << buffer << std::endl;
+ }
+ }
+ else std::cout << buffer << std::endl;
+
+ delete [] buffer;
+ (*mod)++;
+ }
+}