int main(int argc, char **argv) { SWMgr mymgr; SWModule *bbe = mymgr.Modules["BBE"]; if (bbe) { VerseKey vk; vk.setPersist(true); bbe->setKey(vk); for (; !bbe->popError(); (*bbe)++ ) { std::cout << vk.getIndex() << std::endl; } } return 0; }
int main(int argc, char **argv) { // handle options if (argc < 2) usage(*argv); const char *progName = argv[0]; const char *inFileName = argv[1]; SWBuf v11n = "KJV"; SWBuf outPath = "./"; SWBuf locale = "en"; bool fourByteSize = false; bool append = false; int iType = 4; SWBuf cipherKey = ""; SWCompress *compressor = 0; SWBuf compType = ""; for (int i = 2; i < argc; i++) { if (!strcmp(argv[i], "-a")) { append = true; } else if (!strcmp(argv[i], "-z")) { if (fourByteSize) usage(*argv, "Cannot specify both -z and -4"); compType = "ZIP"; if (i+1 < argc && argv[i+1][0] != '-') { switch (argv[++i][0]) { case 'l': compType = "LZSS"; break; case 'z': compType = "ZIP"; break; case 'b': compType = "BZIP2"; break; case 'x': compType = "XZ"; break; } } } 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>"); } else if (!strcmp(argv[i], "-v")) { if (i+1 < argc) v11n = argv[++i]; else usage(progName, "-v requires <v11n>"); } else if (!strcmp(argv[i], "-l")) { if (i+1 < argc) locale = argv[++i]; else usage(progName, "-l requires <locale>"); } else if (!strcmp(argv[i], "-c")) { if (i+1 < argc) cipherKey = argv[++i]; else usage(*argv, "-c requires <cipher_key>"); } else usage(progName, (((SWBuf)"Unknown argument: ")+ argv[i]).c_str()); } // ----------------------------------------------------- const VersificationMgr::System *v = VersificationMgr::getSystemVersificationMgr()->getVersificationSystem(v11n); if (!v) std::cout << "Warning: Versification " << v11n << " not found. Using KJV versification...\n"; if (compType == "LZSS") { compressor = new LZSSCompress(); } else if (compType == "ZIP") { #ifndef EXCLUDEZLIB compressor = new ZipCompress(); #else usage(*argv, "ERROR: SWORD library not compiled with ZIP compression support.\n\tBe sure libz is available when compiling SWORD library"); #endif } else if (compType == "BZIP2") { #ifndef EXCLUDEBZIP2 compressor = new Bzip2Compress(); #else usage(*argv, "ERROR: SWORD library not compiled with bzip2 compression support.\n\tBe sure libbz2 is available when compiling SWORD library"); #endif } else if (compType == "XZ") { #ifndef EXCLUDEXZ compressor = new XzCompress(); #else usage(*argv, "ERROR: SWORD library not compiled with xz compression support.\n\tBe sure liblzma is available when compiling SWORD library"); #endif } // 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); } } else { if (!fourByteSize) RawText::createModule(outPath, v11n); else RawText4::createModule(outPath, v11n); } } 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); } SWFilter *cipherFilter = 0; if (cipherKey.length()) { fprintf(stderr, "Adding cipher filter with phrase: %s\n", cipherKey.c_str() ); cipherFilter = new CipherFilter(cipherKey.c_str()); module->addRawFilter(cipherFilter); } // ----------------------------------------------------- // setup locale manager LocaleMgr::getSystemLocaleMgr()->setDefaultLocaleName(locale); // setup module key to allow full range of possible values, and then some VerseKey *vkey = (VerseKey *)module->createKey(); vkey->setIntros(true); vkey->setAutoNormalize(false); vkey->setPersist(true); module->setKey(*vkey); // ----------------------------------------------------- // process input file FileDesc *fd = FileMgr::getSystemFileMgr()->open(inFileName, FileMgr::RDONLY); SWBuf lineBuffer; SWBuf keyBuffer; SWBuf entBuffer; bool more = true; do { more = FileMgr::getLine(fd, lineBuffer)!=0; if (lineBuffer.startsWith("$$$")) { if ((keyBuffer.size()) && (entBuffer.size())) { writeEntry(module, keyBuffer, entBuffer); } keyBuffer = lineBuffer; keyBuffer << 3; keyBuffer.trim(); entBuffer.size(0); } else { if (keyBuffer.size()) { entBuffer += lineBuffer; entBuffer += "\n"; } } } while (more); if ((keyBuffer.size()) && (entBuffer.size())) { writeEntry(module, keyBuffer, entBuffer); } delete module; if (cipherFilter) delete cipherFilter; delete vkey; FileMgr::getSystemFileMgr()->close(fd); return 0; }
int main(int argc, char **argv) { // Let's test our command line arguments if (argc < 2) { // fprintf(stderr, "usage: %s <vpl_file> </path/to/mod> [0|1 - file includes prepended verse references]\n", argv[0]); fprintf(stderr, "usage: %s <source_vpl_file> </path/to/output/mod/> [0|1 - prepended verse refs] [0|1 - NT only]\n\n", argv[0]); fprintf(stderr, "\tWARNING: THIS IS CURRENTLY A KJV-VERSIFICATION-ONLY UTILITY\n"); fprintf(stderr, "\tWith no verse refs, source file must contain exactly 31102 lines.\n"); fprintf(stderr, "\tThis is KJV verse count plus headings for MODULE,\n"); fprintf(stderr, "\tTESTAMENT, BOOK, CHAPTER. An example snippet follows:\n\n"); fprintf(stderr, "\t\tMODULE HEADER\n"); fprintf(stderr, "\t\tOLD TESTAMENT HEADER\n"); fprintf(stderr, "\t\tGENESIS HEADER\n"); fprintf(stderr, "\t\tCHAPTER 1 HEADER\n"); fprintf(stderr, "\t\tIn the beginning...\n\n"); fprintf(stderr, "\t... implying there must also be a CHAPTER2 HEADER,\n"); fprintf(stderr, "\tEXODUS HEADER, NEW TESTAMENT HEADER, etc. If there is no text for\n"); fprintf(stderr, "\tthe header, a blank line must, at least, hold place.\n\n"); fprintf(stderr, "\tWith verse refs, source file must simply contain any number of lines,\n"); fprintf(stderr, "\tthat begin with the verse reference for which it is an entry. e.g.:\n\n"); fprintf(stderr, "\t\tgen 1:0 CHAPTER 1 HEADER\n"); fprintf(stderr, "\t\tgen 1:1 In the beginning...\n\n"); exit(-1); } // Let's see if we can open our input file int fd = FileMgr::openFileReadOnly(argv[1]); if (fd < 0) { fprintf(stderr, "error: %s: couldn't open input file: %s \n", argv[0], argv[1]); exit(-2); } // Try to initialize a default set of datafiles and indicies at our // datapath location passed to us from the user. if (RawText::createModule(argv[2])) { fprintf(stderr, "error: %s: couldn't create module at path: %s \n", argv[0], argv[2]); exit(-3); } // not used yet, but for future support of a vpl file with each line // prepended with verse reference, eg. "Gen 1:1 In the beginning..." bool vref = false; if (argc > 3) vref = (argv[3][0] == '0') ? false : true; // if 'nt' is the 4th arg, our vpl file only has the NT bool ntonly = false; if (argc > 4) ntonly = (argv[4][0] == '0') ? false : true; // Do some initialization stuff char *buffer = 0; RawText mod(argv[2]); // open our datapath with our RawText driver. VerseKey vk; vk.setAutoNormalize(false); vk.setIntros(true); // turn on mod/testmnt/book/chap headings vk.setPersist(true); mod.setKey(vk); // Loop through module from TOP to BOTTOM and set next line from // input file as text for this entry in the module mod = TOP; if (ntonly) vk = "Matthew 1:1"; int successive = 0; //part of hack below while ((!mod.popError()) && (!readline(fd, &buffer))) { if (*buffer == '|') // comments, ignore line continue; if (vref) { const char *verseText = parseVReg(buffer); if (!verseText) { // if we didn't find a valid verse ref std::cerr << "No valid verse ref found on line: " << buffer << "\n"; exit(-4); } vk = buffer; if (vk.popError()) { std::cerr << "Error parsing key: " << buffer << "\n"; exit(-5); } string orig = mod.getRawEntry(); if (!isKJVRef(buffer)) { VerseKey origVK = vk; /* This block is functioning improperly -- problem with AutoNormalize??? do { vk--; } while (!vk.popError() && !isKJVRef(vk)); */ //hack to replace above: successive++; vk -= successive; orig = mod.getRawEntry(); std::cerr << "Not a valid KJV ref: " << origVK << "\n"; std::cerr << "appending to ref: " << vk << "\n"; orig += " [ ("; orig += origVK; orig += ") "; orig += verseText; orig += " ] "; verseText = orig.c_str(); } else { successive = 0; } if (orig.length() > 1) std::cerr << "Warning, overwriting verse: " << vk << std::endl; // ------------- End verse tests ----------------- mod << verseText; // save text to module at current position } else { fixText(buffer); mod << buffer; // save text to module at current position mod++; // increment module position } } // clear up our buffer that readline might have allocated if (buffer) delete [] buffer; }
int main(int argc, char **argv) { SWMgr mymgr; RawText::createModule("."); RawText mod("."); VerseKey vk; vk.setIntros(true); vk.setAutoNormalize(false); vk.setPersist(true); mod.setKey(vk); vk.setVerse(0); vk.setChapter(0); vk.setBook(0); vk.setTestament(0); mod << "Module heading text"; vk.setVerse(0); vk.setChapter(0); vk.setBook(0); vk.setTestament(1); mod << "OT heading text"; vk.setTestament(1); vk.setBook(1); vk.setChapter(0); vk.setVerse(0); mod << "Gen heading text"; vk.setTestament(1); vk.setBook(1); vk.setChapter(1); vk.setVerse(0); mod << "Gen 1 heading text"; vk.setTestament(1); vk.setBook(1); vk.setChapter(1); vk.setVerse(1); mod << "Gen 1:1 text"; vk.setTestament(0); vk.setBook(0); vk.setChapter(0); vk.setVerse(0); std::cout << "Module heading text ?= " << (const char*)mod << std::endl; vk.setTestament(1); vk.setBook(0); vk.setChapter(0); vk.setVerse(0); std::cout << "OT heading text ?= " << (const char*)mod << std::endl; vk.setTestament(1); vk.setBook(1); vk.setChapter(0); vk.setVerse(0); std::cout << "Gen heading text ?= " << (const char*)mod << std::endl; vk.setTestament(1); vk.setBook(1); vk.setChapter(1); vk.setVerse(0); std::cout << "Gen 1 heading text ?= " << (const char*)mod << std::endl; vk.setTestament(1); vk.setBook(1); vk.setChapter(1); vk.setVerse(1); std::cout << "Gen 1:1 text ?= " << (const char*)mod << std::endl; /* old introtest SWModule *mhc = mymgr.Modules["MHC"]; if (mhc) { VerseKey vk; vk.setIntros(true); vk.setAutoNormalize(false); vk.setPersist(true); vk = "jas 0:0"; std::cout << vk << ":\n"; mhc->setKey(vk); std::cout << (const char *) mhc->Key() << ":\n"; std::cout << (const char *) *mhc << "\n"; } */ return 0; }
int main(int argc, char **argv) { const char * helptext = "addvs 1.1 Bible & Commentary module creation tool for the SWORD Project\nUse -a to add a new verse from standard input or a file, -d to delete a verse,\n-l to link two verses, -c to create a new module.\n usage:\n %s -a </path/to/module> <verse> [</path/to/file/with/verse>]\n %s -d </path/to/module> <key>\n %s -l </path/to/module> <first verse (already assigned)> <second verse>\n %s -c </path/to/module>\n"; long entrysize; if (argc < 3) { fprintf(stderr, helptext, argv[0], argv[0], argv[0], argv[0]); exit(-1); } if (!strcmp(argv[1], "-a") && (argc == 4 || argc == 5)) { // Do some initialization stuff char buffer[65536]; //this is the max size of any entry RawText * mod = new RawText(argv[2]); // open our datapath with our RawText driver. VerseKey *vkey = new VerseKey; vkey->setIntros(true); vkey->setAutoNormalize(false); vkey->setPersist(true); // the magical setting *vkey = argv[3]; // Set our VerseKey mod->setKey(*vkey); if (!vkey->getChapter()) { // bad hack >> // 0:0 is Book intro // (chapter):0 is Chapter intro // // 0:2 is Module intro // 0:1 is Testament intro int backstep = vkey->getVerse(); vkey->setVerse(0); *mod -= backstep; // << bad hack FILE *infile; // case: add from text file //Open our data file and read its contents into the buffer if (argc == 5) infile = fopen(argv[4], "r"); // case: add from stdin else infile = stdin; entrysize = fread(buffer, sizeof(char), sizeof(buffer), infile); mod->setEntry(buffer, entrysize); // save text to module at current position } else { ListKey listkey = vkey->parseVerseList(argv[3], "Gen1:1", true); int i; bool havefirst = false; VerseKey firstverse; for (i = 0; i < listkey.getCount(); i++) { VerseKey *element = SWDYNAMIC_CAST(VerseKey, listkey.getElement(i)); if (element) { mod->setKey(element->getLowerBound()); VerseKey finalkey = element->getUpperBound(); std::cout << mod->getKeyText() << "-" << (const char*)finalkey << std::endl; if (!havefirst) { havefirst = true; firstverse = *mod->getKey(); FILE *infile; // case: add from text file //Open our data file and read its contents into the buffer if (argc == 5) infile = fopen(argv[4], "r"); // case: add from stdin else infile = stdin; entrysize = fread(buffer, sizeof(char), sizeof(buffer), infile); mod->setEntry(buffer, entrysize); // save text to module at current position std::cout << "f" << (const char*)firstverse << std::endl; (*mod)++; } while (*mod->getKey() <= finalkey) { std::cout << mod->getKeyText() << std::endl; *(SWModule*)mod << &firstverse; (*mod)++; } } else { if (havefirst) { mod->setKey(*listkey.getElement(i)); *(SWModule*)mod << &firstverse; std::cout << mod->getKeyText() << std::endl; } else { mod->setKey(*listkey.getElement(i)); havefirst = true; firstverse = *mod->getKey(); FILE *infile; // case: add from text file //Open our data file and read its contents into the buffer if (argc == 5) infile = fopen(argv[4], "r"); // case: add from stdin else infile = stdin; entrysize = fread(buffer, sizeof(char), sizeof(buffer), infile); mod->setEntry(buffer, entrysize); // save text to module at current position std::cout << "f" << (const char*)firstverse << std::endl; } } } } delete vkey; } // Link 2 verses else if (!strcmp(argv[1], "-l") && argc == 5) { // Do some initialization stuff RawText *mod = new RawText(argv[2]); // open our datapath with our RawText driver. mod->setKey(argv[4]); // set key from argument SWKey tmpkey = (SWKey) argv[3]; *(SWModule*)mod << &(tmpkey); delete mod; } else if (!strcmp(argv[1], "-d") && argc == 4) { RawText mod(argv[2]); // open our datapath with our RawText driver. VerseKey *vkey = new VerseKey; vkey->setIntros(true); vkey->setAutoNormalize(false); vkey->setPersist(true); // the magical setting // Set our VerseKey mod.setKey(*vkey); *vkey = argv[3]; if (!vkey->getChapter()) { // bad hack >> // 0:0 is Book intro // (chapter):0 is Chapter intro // // 0:2 is Module intro // 0:1 is Testament intro int backstep = vkey->getVerse(); vkey->setVerse(0); mod -= backstep; // << bad hack } mod.deleteEntry(); delete vkey; } // Make a new module else if (!strcmp(argv[1], "-c") && argc == 3) { // Try to initialize a default set of datafiles and indicies at our // datapath location passed to us from the user. if (RawText::createModule(argv[2])) { fprintf(stderr, "error: %s: couldn't create module at path: %s \n", argv[0], argv[2]); exit(-2); } } // Bad arguments, print usage else { fprintf(stderr, helptext, argv[0], argv[0], argv[0], argv[0]); exit(-1); } }