summaryrefslogtreecommitdiff
path: root/utilities/mod2imp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'utilities/mod2imp.cpp')
-rw-r--r--utilities/mod2imp.cpp128
1 files changed, 85 insertions, 43 deletions
diff --git a/utilities/mod2imp.cpp b/utilities/mod2imp.cpp
index a979407..0a108f9 100644
--- a/utilities/mod2imp.cpp
+++ b/utilities/mod2imp.cpp
@@ -1,75 +1,117 @@
-// Compression on variable granularity
+/*
+ * Copyright 2009 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.
+ *
+ */
-#include <fcntl.h>
#include <iostream>
-#include <fstream>
-#include <string>
-
-#ifndef __GNUC__
-#include <io.h>
-#else
-#include <unistd.h>
-#endif
+#include <map>
+#include <stdio.h>
-#include <ztext.h>
-#include <zld.h>
-#include <zcom.h>
+#include <markupfiltmgr.h>
#include <swmgr.h>
-#include <lzsscomprs.h>
-#include <zipcomprs.h>
+#include <swmodule.h>
#include <versekey.h>
-#include <stdio.h>
+
+using std::map;
+using std::cout;
+using std::endl;
#ifndef NO_SWORD_NAMESPACE
-using sword::SWModule;
-using sword::SWMgr;
-using sword::ModMap;
-using sword::SWKey;
-using sword::VerseKey;
-using sword::SW_POSITION;
+
+using namespace sword;
+
#endif
-void errorOutHelp(char *appName) {
- std::cerr << appName << " - a tool to output a Sword module in SWORD's 'imp' import format\n";
- std::cerr << "usage: "<< appName << " <modname> \n";
- std::cerr << "\n\n";
+void usage(const char *progName, const char *error = 0) {
+ if (error) fprintf(stderr, "\n%s: %s\n", progName, error);
+ fprintf(stderr, "\n=== mod2imp (Revision $Rev: 2234 $) SWORD module exporter.\n");
+ fprintf(stderr, "\nusage: %s <module_name> [options]\n"
+ "\t -r [output_format] - render content instead of outputting raw native\n"
+ "\t\tdata. output_format can be: OSIS, HTMLHREF, RTF.\n"
+ "\t -s - strip markup instead of outputting raw native data.\n"
+ "\t -f <option_name> <option_value> - when rendering (-r, above), option\n"
+ "\t\tfilter values can be set with this option.\n\n"
+ , progName);
exit(-1);
}
int main(int argc, char **argv)
{
- SWModule *inModule = 0;
-
- if ((argc != 2)) {
- errorOutHelp(argv[0]);
+ // handle options
+ if (argc < 2) usage(*argv);
+
+ const char *progName = argv[0];
+ const char *modName = argv[1];
+ bool render = false;
+ bool strip = false;
+ SWBuf renderForm;
+ SWBuf optionName;
+ map<SWBuf, SWBuf> options; // optionName, optionValue;
+
+ for (int i = 2; i < argc; i++) {
+ if (!strcmp(argv[i], "-r")) {
+ if (strip) usage(progName, "-r can't be supplied when using -s");
+ if (i+1 < argc) renderForm = argv[++i];
+ render = true;
+ }
+ else if (!strcmp(argv[i], "-s")) {
+ if (render) usage(progName, "-s can't be supplied when using -r");
+ strip = true;
+ }
+ else if (!strcmp(argv[i], "-f")) {
+ if (i+1 < argc) optionName = argv[++i];
+ if (i+1 < argc) options[optionName] = argv[++i];
+ else usage(progName, "-f requires <option_name> <option_value>");
+ }
+ else usage(progName, (((SWBuf)"Unknown argument: ")+ argv[i]).c_str());
}
+ // -----------------------------------------------------
- if ((!strcmp(argv[1], "-h")) || (!strcmp(argv[1], "--help")) || (!strcmp(argv[1], "/?")) || (!strcmp(argv[1], "-?")) || (!strcmp(argv[1], "-help"))) {
- errorOutHelp(argv[0]);
- }
+ MarkupFilterMgr *markupMgr = 0;
+ if (renderForm == "HTMLHREF") markupMgr = new MarkupFilterMgr(sword::FMT_HTMLHREF);
+ else if (renderForm == "OSIS") markupMgr = new MarkupFilterMgr(sword::FMT_OSIS);
+ else if (renderForm == "RTF") markupMgr = new MarkupFilterMgr(sword::FMT_RTF);
+ else if (renderForm.length()) usage(progName, (((SWBuf) "Unknown output_format for -r (")+renderForm+")").c_str());
- SWMgr mgr;
+ SWMgr *mgr = (markupMgr) ? new SWMgr(markupMgr) : new SWMgr();
- 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);
+ // set any options filters passed with -f
+ for (map<SWBuf, SWBuf>::iterator it = options.begin(); it != options.end(); it++) {
+ mgr->setGlobalOption(it->first, it->second);
}
- inModule = it->second;
+ SWModule *module = mgr->getModule(modName);
+
+ if (!module) usage(progName, (((SWBuf) "Couldn't find module: ") + modName).c_str());
- SWKey *key = (SWKey *)*inModule;
+
+ SWKey *key = module->getKey();
VerseKey *vkey = SWDYNAMIC_CAST(VerseKey, key);
if (vkey)
vkey->Headings(1);
- for ((*inModule) = TOP; !inModule->Error(); (*inModule)++) {
- std::cout << "$$$" << inModule->KeyText() << std::endl;
- std::cout << inModule->getRawEntry() << std::endl;
+ for ((*module) = TOP; !module->Error(); (*module)++) {
+ std::cout << "$$$" << module->KeyText() << std::endl;
+ std::cout << ((render) ? module->RenderText() : (strip) ? module->StripText() : module->getRawEntry()) << "\n";
}
+
+ cout << endl;
+
return 0;
}