diff options
author | danglassey <danglassey> | 2002-08-14 09:57:17 +0000 |
---|---|---|
committer | danglassey <danglassey> | 2002-08-14 09:57:17 +0000 |
commit | c9458897ebbb739d8db83c80e06512d8a612f743 (patch) | |
tree | f8c5381045887e34388cc6b26cfccc254bf766dc /utilities/mod2osis.cpp | |
download | sword-sf-cvs-c9458897ebbb739d8db83c80e06512d8a612f743.tar.gz |
*** empty log message ***
Diffstat (limited to 'utilities/mod2osis.cpp')
-rw-r--r-- | utilities/mod2osis.cpp | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/utilities/mod2osis.cpp b/utilities/mod2osis.cpp new file mode 100644 index 0000000..ac42be4 --- /dev/null +++ b/utilities/mod2osis.cpp @@ -0,0 +1,158 @@ +// Compression on variable granularity
+
+#include <fcntl.h>
+#include <iostream>
+#include <fstream>
+#include <string>
+
+#ifndef __GNUC__
+#include <io.h>
+#else
+#include <unistd.h>
+#endif
+
+#include <ztext.h>
+#include <zld.h>
+#include <zcom.h>
+#include <swmgr.h>
+#include <lzsscomprs.h>
+#include <zipcomprs.h>
+#include <versekey.h>
+#include <thmlosis.h>
+#include <stdio.h>
+#include <markupfiltmgr.h>
+#include <algorithm>
+
+void errorOutHelp(char *appName) {
+ cerr << appName << " - a tool to output a Sword module in OSIS format\n";
+ cerr << "usage: "<< appName << " <modname> \n";
+ cerr << "\n\n";
+ exit(-1);
+}
+
+
+int main(int argc, char **argv)
+{
+ SWModule *inModule = 0;
+ ThMLOSIS filter;
+
+ if ((argc != 2)) {
+ errorOutHelp(argv[0]);
+ }
+
+ if ((!strcmp(argv[1], "-h")) || (!strcmp(argv[1], "--help")) || (!strcmp(argv[1], "/?")) || (!strcmp(argv[1], "-?")) || (!strcmp(argv[1], "-help"))) {
+ errorOutHelp(argv[0]);
+ }
+
+ SWMgr mgr(new MarkupFilterMgr(FMT_OSIS));
+ OptionsList options = mgr.getGlobalOptions();
+ for (OptionsList::iterator it = options.begin(); it != options.end(); it++) {
+ OptionsList values = mgr.getGlobalOptionValues(it->c_str());
+ if (find(values.begin(), values.end(), "On") != values.end()) {
+ mgr.setGlobalOption(it->c_str(), "On");
+ }
+ }
+
+
+ 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);
+ }
+
+ inModule = it->second;
+// inModule->AddRenderFilter(&filter);
+
+ SWKey *key = (SWKey *)*inModule;
+ VerseKey *vkey = SWDYNAMIC_CAST(VerseKey, key);
+
+ char *buf;
+ bool opendiv = false;
+ VerseKey lastHeading;
+ lastHeading.Headings(1);
+ lastHeading.AutoNormalize(0);
+ lastHeading.Testament(5);
+ lastHeading = BOTTOM;
+
+ if (vkey)
+ vkey->Headings(1);
+
+ cout << "<?xml version=\"1.0\" ";
+ if (inModule->getConfigEntry("Encoding")) {
+ if (*(inModule->getConfigEntry("Encoding")))
+ cout << "encoding=\"" << inModule->getConfigEntry("Encoding") << "\" ";
+ else cout << "encoding=\"UTF-8\" ";
+ }
+ else cout << "encoding=\"UTF-8\" ";
+ cout << "?>\n\n";
+
+ cout << "<text ";
+ cout << "xmlns:xsi=\"http://www.w3.org/2000/10/XMLSchema-instance\" ";
+ cout << "refSys=\"KJV\" ";
+ cout << "work=\"";
+ cout << inModule->Name() << "\" ";
+ if (inModule->Lang()) {
+ if (strlen(inModule->Lang()))
+ cout << "lang=\"" << inModule->Lang() << "\" ";
+ }
+ cout << "xsi:noNamespaceSchemaLocation=\"OSISCore_1.0.2.xsd\" ";
+ cout << " >\n\n";
+
+ cout << "\t<front>\n";
+ cout << "\t\t<title>\n";
+ cout << "\t\t\t<titlePart>" << inModule->Description() << "</titlePart>\n";
+ cout << "\t\t</title>\n";
+ cout << "\t</front>\n\n";
+
+ cout << "\t<body><div>\n";
+
+ int testament = vkey->Testament();
+// for ((*inModule) = TOP; (inModule->Key() < (VerseKey)"Mat 2:1"); (*inModule)++) {
+ for ((*inModule) = TOP; !inModule->Error(); (*inModule)++) {
+// for ((*vkey) = "Mark6:29"; !inModule->Error(); (*inModule)++) {
+ if (vkey->Testament() != lastHeading.Testament()) {
+ if (opendiv)
+ cout << "\t</div>\n";
+ cout << "\t<div>";
+ opendiv = true;
+ }
+ if (vkey->Book() != lastHeading.Book()) {
+ buf = new char [205];
+ lastHeading.Testament(vkey->Testament());
+ lastHeading.Book(vkey->Book());
+ lastHeading.Chapter(0);
+ lastHeading.Verse(0);
+ *buf = 0;
+ filter.ProcessText(buf, 200 - 3, &lastHeading, inModule);
+ cout << "" << buf << endl;
+ delete [] buf;
+ }
+ if (vkey->Chapter() != lastHeading.Chapter()) {
+ buf = new char [205];
+ lastHeading.Testament(vkey->Testament());
+ lastHeading.Book(vkey->Book());
+ lastHeading.Chapter(vkey->Chapter());
+ lastHeading.Verse(0);
+ *buf = 0;
+ filter.ProcessText(buf, 200 - 3, &lastHeading, inModule);
+ cout << "" << buf;
+ delete [] buf;
+ }
+ /*
+ char *text = inModule->getRawEntry();
+ int len = (inModule->getEntrySize() + 1) * 15;
+ buf = new char [ len ];
+ memset(buf, 0, len);
+ memcpy(buf, inModule->getRawEntry(), inModule->getEntrySize());
+ filter.ProcessText(buf, len - 3, vkey, inModule);
+ cout << buf << endl;
+ */
+ cout << inModule->RenderText() << endl;
+ }
+ if (opendiv)
+ cout << "\t</div>\n";
+ cout << "\t</div></body>\n";
+ cout << "\t</text>\n";
+ return 0;
+}
+
|