diff options
Diffstat (limited to 'utilities/imp2vs.cpp')
-rw-r--r-- | utilities/imp2vs.cpp | 76 |
1 files changed, 70 insertions, 6 deletions
diff --git a/utilities/imp2vs.cpp b/utilities/imp2vs.cpp index 62d34a1..75d5dae 100644 --- a/utilities/imp2vs.cpp +++ b/utilities/imp2vs.cpp @@ -15,13 +15,17 @@ * */ +#include <stdio.h> #include <iostream> -#include <rawtext.h> -#include <rawtext4.h> -#include <versekey.h> + #include <swbuf.h> #include <filemgr.h> -#include <stdio.h> +#include <versekey.h> +#include <rawtext.h> +#include <rawtext4.h> +#include <ztext.h> +#include <lzsscomprs.h> +#include <zipcomprs.h> #ifndef NO_SWORD_NAMESPACE using namespace sword; @@ -36,8 +40,12 @@ void usage(const char *progName, const char *error = 0) { fprintf(stderr, "\n=== imp2vs (Revision $Rev: 2234 $) SWORD Bible/Commentary importer.\n"); fprintf(stderr, "\nusage: %s <imp_file> [options]\n", progName); fprintf(stderr, " -a\t\t\t augment module if exists (default is to create new)\n"); + fprintf(stderr, " -z\t\t\t use ZIP compression (default no compression)\n"); + fprintf(stderr, " -Z\t\t\t use LZSS compression (default no compression)\n"); fprintf(stderr, " -o <output_path>\t where to write data files.\n"); fprintf(stderr, " -4\t\t\t use 4 byte size entries (default is 2).\n"); + fprintf(stderr, " -b <2|3|4>\t\t compression block size (default 4):\n"); + fprintf(stderr, "\t\t\t\t 2 - verse; 3 - chapter; 4 - book\n"); fprintf(stderr, " -v <v11n>\t\t specify a versification scheme to use (default is KJV)\n"); fprintf(stderr, "\t\t\t\t Note: The following are valid values for v11n:\n"); VerseMgr *vmgr = VerseMgr::getSystemVerseMgr(); @@ -74,14 +82,34 @@ int main(int argc, char **argv) { SWBuf outPath = "./"; bool fourByteSize = false; bool append = false; + int iType = 4; + SWCompress *compressor = 0; + SWBuf compType = ""; for (int i = 2; i < argc; i++) { if (!strcmp(argv[i], "-a")) { append = true; } - if (!strcmp(argv[i], "-4")) { + else if (!strcmp(argv[i], "-z")) { + if (compType.size()) usage(*argv, "Cannot specify both -z and -Z"); + if (fourByteSize) usage(*argv, "Cannot specify both -z and -4"); + compType = "ZIP"; + } + else if (!strcmp(argv[i], "-Z")) { + if (compType.size()) usage(*argv, "Cannot specify both -z and -Z"); + if (fourByteSize) usage(*argv, "Cannot specify both -Z and -4"); + compType = "LZSS"; + } + else if (!strcmp(argv[i], "-4")) { fourByteSize = true; } + else if (!strcmp(argv[i], "-b")) { + if (i+1 < argc) { + iType = atoi(argv[++i]); + if ((iType >= 2) && (iType <= 4)) continue; + } + usage(*argv, "-b requires one of <2|3|4>"); + } else if (!strcmp(argv[i], "-o")) { if (i+1 < argc) outPath = argv[++i]; else usage(progName, "-o requires <output_path>"); @@ -96,17 +124,53 @@ int main(int argc, char **argv) { const VerseMgr::System *v = VerseMgr::getSystemVerseMgr()->getVersificationSystem(v11n); if (!v) std::cout << "Warning: Versification " << v11n << " not found. Using KJV versification...\n"; + if (compType == "ZIP") { +#ifndef EXCLUDEZLIB + compressor = new ZipCompress(); +#else + usage(*argv, "ERROR: SWORD library not compiled with ZIP compression support.\n\tBe sure libzip is available when compiling SWORD library"); +#endif + } + else if (compType == "LZSS") { + compressor = new LZSSCompress(); + } // setup module if (!append) { + if (compressor) { + if (zText::createModule(outPath, iType, v11n)) { + fprintf(stderr, "ERROR: %s: couldn't create module at path: %s \n", *argv, outPath.c_str()); + exit(-1); + } + } if (!fourByteSize) RawText::createModule(outPath, v11n); else RawText4::createModule(outPath, v11n); } - SWModule *module = (!fourByteSize) + SWModule *module = 0; + if (compressor) { + // Create a compressed text module allowing very large entries + // Taking defaults except for first, fourth, fifth and last argument + module = new zText( + outPath, // ipath + 0, // iname + 0, // idesc + iType, // iblockType + compressor, // icomp + 0, // idisp + ENC_UNKNOWN, // enc + DIRECTION_LTR, // dir + FMT_UNKNOWN, // markup + 0, // lang + v11n // versification + ); + } + else { + module = (!fourByteSize) ? (SWModule *)new RawText(outPath, 0, 0, 0, ENC_UNKNOWN, DIRECTION_LTR, FMT_UNKNOWN, 0, v11n) : (SWModule *)new RawText4(outPath, 0, 0, 0, ENC_UNKNOWN, DIRECTION_LTR, FMT_UNKNOWN, 0, v11n); + } // ----------------------------------------------------- |