std::string parseRangeKey(const char* keyValue, const char* locale) { const char* oldLocale = LocaleMgr::getSystemLocaleMgr()->getDefaultLocaleName(); LocaleMgr::getSystemLocaleMgr()->setDefaultLocaleName(locale); std::string ret; VerseKey DefaultVSKey; DefaultVSKey = "jas3:1"; ListKey verses = DefaultVSKey.ParseVerseList(keyValue, DefaultVSKey, true); for (int i = 0; i < verses.Count(); i++) { VerseKey *element = dynamic_cast<VerseKey *>(verses.GetElement(i)); if (element) { if (ret.length()) { ret.append(" "); } ret.appendFormatted( "%s - %s;", (const char*)element->LowerBound(), (const char*)element->UpperBound() ); } else { if (ret.length()) { ret.append(" "); } ret.appendFormatted("%s;", (const char *)*verses.GetElement(i)); } } // cout << ret.c_str() << endl; LocaleMgr::getSystemLocaleMgr()->setDefaultLocaleName(oldLocale); return ret; };
TreeKey &SWGenBook::getTreeKey(const SWKey *k) const { const SWKey* thiskey = k?k:this->key; TreeKey *key = 0; SWTRY { key = SWDYNAMIC_CAST(TreeKey, (thiskey)); } SWCATCH ( ... ) {} if (!key) { ListKey *lkTest = 0; SWTRY { lkTest = SWDYNAMIC_CAST(ListKey, thiskey); } SWCATCH ( ... ) { } if (lkTest) { SWTRY { key = SWDYNAMIC_CAST(TreeKey, lkTest->getElement()); if (!key) { VerseTreeKey *tkey = 0; SWTRY { tkey = SWDYNAMIC_CAST(VerseTreeKey, lkTest->getElement()); } SWCATCH ( ... ) {} if (tkey) key = tkey->getTreeKey(); } } SWCATCH ( ... ) { } }
void writeEntry(SWModule & module, std::string const & key, std::string const & entry, bool const replace) { if (key.size() && entry.size()) { std::cout << "from file: " << key << std::endl; VerseKey *vkey = (VerseKey *)module.getKey(); std::unique_ptr<VerseKey> linkMaster( static_cast<VerseKey *>(module.createKey().release())); ListKey listKey = vkey->parseVerseList(key.c_str(), "Gen1:1", true); bool first = true; for (listKey.positionToTop(); !listKey.popError(); listKey.increment()) { vkey->positionFrom(listKey); if (first) { *linkMaster = *vkey; std::string text; if (!replace) text = module.getRawEntry(); text += entry; std::cout << "adding entry: " << vkey->getText() << " length " << entry.size() << "/" << (unsigned short)text.size() << std::endl; module.setEntry(text.c_str()); first = false; } else { std::cout << "linking entry: " << vkey->getText() << " to " << linkMaster->getText() << std::endl; module.linkEntry(*linkMaster); } } } }
int main(int argc, char **argv) { const char *range = (argc > 1) ? argv[1] : "Mat 2:10,12-15"; VerseKey parser; ListKey result; result = parser.parseVerseList(range, parser, true); // let's iterate the key and display for (result = TOP; !result.popError(); result++) { cout << result << "\n"; } cout << endl; // Now let's output a module with the entries from the result // we'll initialize our library of books SWMgr library(new MarkupFilterMgr(FMT_PLAIN)); // render plain without fancy markup // Let's get a book; SWModule *book = library.getModule("KJV"); // couldn't find our test module if (!book) return -1; // now let's iterate the book and display for (result = TOP; !result.popError(); result++) { book->setKey(result); cout << "*** " << book->getKeyText() << ": " << book->renderText() << "\n"; } return 0; }
int main(int argc, char **argv) { SWMgr mgr; SWModule *mod = mgr.getModule("KJVgb"); VerseKey *key1 = (VerseKey *)mod->createKey(); key1->setTestament(2); key1->setBook(4); key1->setChapter(2); key1->setVerse(3); cout << "\n" << key1->getText() << ":\n\n"; ListKey keys; keys << *key1; cout << "\n" << keys.getRangeText() << ":\n\n"; ListKey keys2 = keys; cout << "\n" << keys2.getRangeText() << ":\n\n"; keys = key1->parseVerseList("Lk.4.5"); cout << "\n" << key1->getText() << ":\n\n"; key1->setText("jn.6.7"); cout << "\n" << key1->getText() << ":\n\n"; mod->setKey("lk.2.3"); cout << "\n" << mod->getKeyText() << ":\n" << endl; cout << mod->getRawEntry() << endl; cout << "\nListkey persist key iteration test\n\n"; keys = key1->parseVerseList("mat1", 0, true); for (keys = TOP; !keys.popError(); keys++) { cout << "\n" << keys.getText() << ":\n" << endl; } keys.setPersist(true); mod->setKey(keys); for ((*mod) = TOP; !mod->popError(); (*mod)++) { cout << "\n" << mod->getKeyText() << ":\n" << endl; } delete key1; return 0; }
SWHANDLE listkey_getVerselistIterator(const char *list, const char *key, const char *v11n) { VerseKey versekey; versekey.setVersificationSystem(v11n); static ListKey verses; versekey.setText(key); verses.clear(); verses = versekey.parseVerseList(list, versekey); return (SWHANDLE)&verses; }
SWHANDLE SWModule_doSearch(SWHANDLE hmodule, const char *searchString, int type, int params ,void (*percent) (char, void *), void *percentUserData) { static ListKey results; SWKey * scope = 0; SWModule *module = (SWModule *)hmodule; if (!module) return -1; results.clear(); results = module->search(searchString, type, params, scope, 0, percent, (void *) &percentUserData); return (SWHANDLE)&results; }
int main(int argc, char **argv) { const char *range = (argc > 1) ? argv[1] : "Mat 2:10,12-15"; VerseKey parser; ListKey result; result = parser.parseVerseList(range, parser, true); // let's iterate the key and display for (result = TOP; !result.popError(); result++) { cout << result << "\n"; } cout << endl; // Now if we'd like persist this key for use inside of a book... result.setPersist(true); // Let's get a book; SWMgr library(new MarkupFilterMgr(FMT_PLAIN)); // render plain without fancy markup SWModule *book = library.getModule("KJV"); // and set our limited key inside book->setKey(result); // now let's iterate the book and display for ((*book) = TOP; !book->popError(); (*book)++) { cout << "*** " << book->getKeyText() << ": " << book->renderText() << "\n"; } // Since we've told our result key to persist in book, we can reuse our // setup by simply resetting result, e.g. // // result = parser.ParseVerseList(someNewRange, parser, true); // // Now an iteration of book will give us our new range. // // To stop persistence of our custom key, we'll need to set our book's key // to something simple: // // book->setKey("gen.1.1"); // // Resetting our book object's key to something not persistent will revert our book object to using its default key for positioning // // return 0; }
void SearchThread::search() { if (!module) { std::cout << "Return." << std::endl; return; } ListKey scopeList = VerseKey().ParseVerseList("Luke;John;Revelation","", true); for (int i=0; i < scopeList.Count(); ++i) { std::cout << (const char*)*scopeList.GetElement(i) << std::endl; } SWKey* scope = &scopeList; searchResult = module->Search(searchedText, -2, REG_ICASE, scope, 0, &percentUpdate); if (!scope) std::cout << "bad scope!" << std::endl; isSearching = false; }
VerseKey &SWText::getVerseKey(const SWKey *keyToConvert) const { const SWKey *thisKey = keyToConvert ? keyToConvert : this->key; VerseKey *key = 0; // see if we have a VerseKey * or decendant SWTRY { key = SWDYNAMIC_CAST(VerseKey, thisKey); } SWCATCH ( ... ) { } if (!key) { ListKey *lkTest = 0; SWTRY { lkTest = SWDYNAMIC_CAST(ListKey, thisKey); } SWCATCH ( ... ) { } if (lkTest) { SWTRY { key = SWDYNAMIC_CAST(VerseKey, lkTest->GetElement()); } SWCATCH ( ... ) { } } }
int main(int argc, char **argv) { if ((argc < 2) || (argc > 4)) { fprintf(stderr, "usage: %s <\"string to parse\"> [locale_name] [test-in-set-verse]\n", *argv); exit(-1); } if (argc > 2) LocaleMgr::getSystemLocaleMgr()->setDefaultLocaleName(argv[2]); VerseKey DefaultVSKey; DefaultVSKey = "jas3:1"; ListKey verses = DefaultVSKey.parseVerseList(argv[1], DefaultVSKey, true); std::cout << verses.getOSISRefRangeText() << "\n"; if (argc > 3) { verses.setText(argv[3]); std::cout << "Verse is" << ((verses.popError()) ? " NOT" : "") << " in set.\n\n"; } return 0; }
void doquery(unsigned long maxverses = -1, unsigned char outputformat = FMT_PLAIN, unsigned char outputencoding = ENC_UTF8, unsigned long optionfilters = 0, unsigned char searchtype = ST_NONE, const char *range = 0, const char *text = 0, const char *locale = 0, const char *ref = 0, ostream* output = &cout, const char *script = 0, signed short variants = 0) { static DiathekeMgr manager(NULL, NULL, false, outputencoding, outputformat, ((OP_BIDI & optionfilters) == OP_BIDI), ((OP_ARSHAPE & optionfilters) == OP_ARSHAPE)); ModMap::iterator it; ListKey listkey; SectionMap::iterator sit; ConfigEntMap::iterator eit; SWModule *target; char *font = 0; char inputformat = 0; SWBuf encoding; char querytype = 0; if (locale) { LocaleMgr::getSystemLocaleMgr()->setDefaultLocaleName(locale); } //deal with queries to "system" if (!::stricmp(text, "system")) { querytype = QT_SYSTEM; systemquery(ref, output); } if (!strnicmp(text, "info", 4)) { querytype = QT_INFO; text = ref; } //otherwise, we have a real book it = manager.Modules.find(text); if (it == manager.Modules.end()) { //book not found return; } target = (*it).second; SWKey *p = target->createKey(); VerseKey *parser = SWDYNAMIC_CAST(VerseKey, p); if (!parser) { delete p; parser = new VerseKey(); } if ((sit = manager.config->Sections.find((*it).second->getName())) != manager.config->Sections.end()) { if ((eit = (*sit).second.find("SourceType")) != (*sit).second.end()) { if (!::stricmp((char *)(*eit).second.c_str(), "GBF")) inputformat = FMT_GBF; else if (!::stricmp((char *)(*eit).second.c_str(), "ThML")) inputformat = FMT_THML; else if (!::stricmp((char *)(*eit).second.c_str(), "OSIS")) inputformat = FMT_OSIS; else if (!::stricmp((char *)(*eit).second.c_str(), "TEI")) inputformat = FMT_TEI; } encoding = ((eit = (*sit).second.find("Encoding")) != (*sit).second.end()) ? (*eit).second : (SWBuf)""; } if (querytype == QT_INFO) { switch (inputformat) { case FMT_THML : *output << "ThML"; break; case FMT_GBF : *output << "GBF"; break; case FMT_OSIS : *output << "OSIS"; break; case FMT_TEI : *output << "TEI"; break; default: *output << "Other"; } *output << ";"; *output << target->getType(); *output << ";"; delete parser; return; } if (searchtype) querytype = QT_SEARCH; else if (!strcmp(target->getType(), "Biblical Texts")) querytype = QT_BIBLE; else if (!strcmp(target->getType(), "Commentaries")) querytype = QT_COMM; else if (!strcmp(target->getType(), "Lexicons / Dictionaries")) querytype = QT_LD; else if (!strcmp(target->getType(), "Generic Books")) querytype = QT_LD; if (optionfilters & OP_FOOTNOTES) manager.setGlobalOption("Footnotes","On"); else manager.setGlobalOption("Footnotes","Off"); if (optionfilters & OP_HEADINGS) manager.setGlobalOption("Headings","On"); else manager.setGlobalOption("Headings","Off"); if (optionfilters & OP_STRONGS) manager.setGlobalOption("Strong's Numbers","On"); else manager.setGlobalOption("Strong's Numbers","Off"); if (optionfilters & OP_MORPH) manager.setGlobalOption("Morphological Tags","On"); else manager.setGlobalOption("Morphological Tags","Off"); if (optionfilters & OP_CANTILLATION) manager.setGlobalOption("Hebrew Cantillation","On"); else manager.setGlobalOption("Hebrew Cantillation","Off"); if (optionfilters & OP_HEBREWPOINTS) manager.setGlobalOption("Hebrew Vowel Points","On"); else manager.setGlobalOption("Hebrew Vowel Points","Off"); if (optionfilters & OP_GREEKACCENTS) manager.setGlobalOption("Greek Accents","On"); else manager.setGlobalOption("Greek Accents","Off"); if (optionfilters & OP_LEMMAS) manager.setGlobalOption("Lemmas","On"); else manager.setGlobalOption("Lemmas","Off"); if (optionfilters & OP_SCRIPREF) manager.setGlobalOption("Cross-references","On"); else manager.setGlobalOption("Cross-references","Off"); if (optionfilters & OP_RED) manager.setGlobalOption("Words of Christ in Red","On"); else manager.setGlobalOption("Words of Christ in Red","Off"); if (optionfilters & OP_VARIANTS && variants) { if (variants == -1) manager.setGlobalOption("Variants", "All Readings"); else if (variants == 1) manager.setGlobalOption("Variants", "Secondary Readings"); } else manager.setGlobalOption("Variants", "Primary Readings"); if (optionfilters & OP_TRANSLITERATOR && script) manager.setGlobalOption("Transliteration", script); else manager.setGlobalOption("Transliteration", "Off"); if (optionfilters & OP_ARABICPOINTS) manager.setGlobalOption("Arabic Vowel Points","On"); else manager.setGlobalOption("Arabic Vowel Points","Off"); if (querytype == QT_SEARCH) { //this test is just to determine if we've got SWKeys or VerseKeys if (!strcmp(target->getType(), "Biblical Texts")) querytype = QT_BIBLE; else if (!strcmp(target->getType(), "Commentaries")) querytype = QT_BIBLE; else if (!strcmp(target->getType(), "Lexicons / Dictionaries")) querytype = QT_LD; else if (!strcmp(target->getType(), "Generic Books")) querytype = QT_LD; //do search stuff char st = 1 - searchtype; if (querytype == QT_BIBLE) { *output << "Verses containing \""; } else *output << "Entries containing \""; *output << ref; *output << "\"-- "; if (range) { ListKey scope = parser->parseVerseList(range, "Gen 1:1", true); listkey = target->search(ref, st, REG_ICASE, &scope); } else listkey = target->search(ref, st, REG_ICASE); if (strlen((const char*)listkey)) { if (!listkey.popError()) { if (outputformat == FMT_CGI) *output << "<entry>"; if (querytype == QT_BIBLE) { *parser = listkey; *output << (const char *)*parser; } else *output << (const char *)listkey; if (outputformat == FMT_CGI) *output << "</entry>"; } listkey++; while (!listkey.popError()) { *output << " ; "; if (outputformat == FMT_CGI) *output << "<entry>"; if (querytype == QT_BIBLE) { *parser = listkey; *output << (const char *)*parser; } else *output << (const char *)listkey; if (outputformat == FMT_CGI) *output << "</entry>"; listkey++; } *output << " -- "; char *temp = new char[10]; sprintf(temp, "%u", listkey.Count()); *output << temp; delete [] temp; *output << " matches total ("; *output << target->getName(); *output << ")\n"; } else { *output << "none ("; *output << target->getName(); *output << ")\n"; } } else if (querytype == QT_LD) { //do dictionary stuff target->setKey(ref); const char * text = (const char *) *target; if (outputformat == FMT_RTF) { *output << "{\\rtf1\\ansi{\\fonttbl{\\f0\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f1\\fdecor\\fprq2 "; if (font) *output << font; else *output << "Times New Roman"; *output << ";}}"; } else if (outputformat == FMT_HTML) { *output << "<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">"; } if (strlen(text)) { *output << (char*)target->getKeyText(); if (font && (outputformat == FMT_HTML || outputformat == FMT_THML || outputformat == FMT_CGI)) { *output << ": <font face=\""; *output << font; *output << "\">"; } else if (outputformat == FMT_RTF) { *output << ": {\\f1 "; } else { *output << ": "; } *output << text; if (font && (outputformat == FMT_HTML || outputformat == FMT_THML || outputformat == FMT_CGI)) { *output << "</font>"; } else if (outputformat == FMT_RTF) { *output << "}"; } *output << "("; *output << target->getName(); *output << ")\n"; } if (outputformat == FMT_RTF) { *output << "}"; } } else if (querytype == QT_BIBLE || querytype == QT_COMM) { //do commentary/Bible stuff if ((sit = manager.config->Sections.find((*it).second->getName())) != manager.config->Sections.end()) { if ((eit = (*sit).second.find("Font")) != (*sit).second.end()) { font = (char *)(*eit).second.c_str(); if (strlen(font) == 0) font = 0; } } listkey = parser->parseVerseList(ref, "Gen1:1", true); int i; if (outputformat == FMT_RTF) { *output << "{\\rtf1\\ansi{\\fonttbl{\\f0\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f1\\fdecor\\fprq2 "; if (font) *output << font; else *output << "Times New Roman"; *output << ";}{\\f7\\froman\\fcharset2\\fprq2 Symbol;}}"; } else if (outputformat == FMT_HTML) { *output << "<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">"; } for (i = 0; i < listkey.Count() && maxverses; i++) { VerseKey *element = SWDYNAMIC_CAST(VerseKey, listkey.GetElement(i)); if (element && element->isBoundSet()) { target->setKey(element->getLowerBound()); *parser = element->getUpperBound(); while (maxverses && *target->getKey() <= *parser) { *output << (char*)target->getKeyText(); if (font && (outputformat == FMT_HTML || outputformat == FMT_THML || outputformat == FMT_CGI)) { *output << ": <font face=\""; *output << font; *output << "\">"; } else if (outputformat == FMT_RTF) { *output << ": {\\f1 "; } else { *output << ": "; } *output << (const char*)*target; if (font && (outputformat == FMT_HTML || outputformat == FMT_THML || outputformat == FMT_CGI)) { *output << "</font>"; } else if (outputformat == FMT_RTF) { *output << "}"; } if (inputformat != FMT_THML && (outputformat == FMT_HTML || outputformat == FMT_THML || outputformat == FMT_CGI)) *output << "<br />"; else if (outputformat == FMT_OSIS) *output << "<milestone type=\"line\"/>"; else if (outputformat == FMT_RTF) *output << "\\par "; else if (outputformat == FMT_GBF) *output << "<CM>"; *output << "\n"; if (*target->getKey() == *parser) break; maxverses--; (*target)++; } } else { target->setKey(*listkey.GetElement(i)); *output << (char*)target->getKeyText(); if (font && (outputformat == FMT_HTML || outputformat == FMT_THML || outputformat == FMT_CGI)) { *output << ": <font face=\""; *output << font; *output << "\">"; } else if (outputformat == FMT_RTF) { *output << ": {\\f1 "; } else { *output << ": "; } *output << (const char*)*target; if (font && (outputformat == FMT_HTML || outputformat == FMT_THML || outputformat == FMT_CGI)) { *output << "</font>"; } else if (outputformat == FMT_RTF) { *output << "}"; } if (inputformat != FMT_THML && (outputformat == FMT_HTML || outputformat == FMT_THML || outputformat == FMT_CGI)) *output << "<br />"; else if (outputformat == FMT_OSIS) *output << "<milestone type=\"line\"/>"; else if (outputformat == FMT_RTF) *output << "\\par "; else if (outputformat == FMT_GBF) *output << "<CM>"; *output << "\n"; maxverses--; } } *output << "("; *output << target->getName(); *output << ")\n"; if (outputformat == FMT_RTF) { *output << "}"; } } delete parser; }
void writeEntry(SWModule *module, const SWBuf &key, const SWBuf &entry) { if (key.size() && entry.size()) { std::cout << "from file: " << key << std::endl; VerseKey *vkey = (VerseKey *)module->getKey(); VerseKey *linkMaster = (VerseKey *)module->createKey(); ListKey listKey = vkey->parseVerseList(key.c_str(), "Gen1:1", true); bool first = true; for (listKey = TOP; !listKey.popError(); listKey++) { *vkey = listKey; if (first) { *linkMaster = *vkey; SWBuf text = module->getRawEntry(); text += entry; //------------------------------------------------------------ // Tregelles Page marking special stuff //------------------------------------------------------------ /* const char *pageMarker = "<seg type=\"page\" subtype=\""; int newPage = page; SWBuf pageData = strstr(text.c_str(), pageMarker); if (pageData.length()) { pageData << strlen(pageMarker); const char *pn = pageData.stripPrefix('"'); if (pn) newPage = atoi(pn); } // add page stuff for treg if (text.startsWith(pageMarker)) { // don't add anything cuz we already start with one } else { SWBuf pm = pageMarker; pm.appendFormatted("%d\" />", page); text = pm + text; } page = newPage; // when our line set a new page number */ //------------------------------------------------------------ std::cout << "adding entry: " << *vkey << " length " << entry.size() << "/" << (unsigned short)text.size() << std::endl; module->setEntry(text); first = false; } else { std::cout << "linking entry: " << *vkey << " to " << *linkMaster << std::endl; module->linkEntry(linkMaster); } } delete linkMaster; } }
std::string SwordPluginAPI::getVerses(const std::string& moduleName, const std::string& key, const std::string& single) { /*Get verses from a specific module (e.g. "ESV"). Set your biblepassage in key e.g. "James 1:19" */ std::stringstream passage; std::stringstream tmpPassage; std::stringstream out; SWModule *module = displayLibrary->getModule(moduleName.c_str()); /* if (!module || !(strcmp(module->Type(), "Biblical Texts") == 0 || strcmp(module->Type(), "Commentaries") == 0)) { PDL_JSException(parms, "getVerses: Module isn't verse driven (no bible or commentary). Currently BibleZ HD doesn't support Generic Books and Lexicons / Dictionaries!"); return PDL_TRUE; } */ //module->setKey(key); //VerseKey *vk = (VerseKey*)module->getKey(); VerseKey *vk = dynamic_cast<VerseKey *>(module->getKey()); //vk->AutoNormalize(false); vk->Headings(true); vk->setText(key.c_str()); ListKey verses = VerseKey().ParseVerseList(key.c_str(), "", true); passage << "{\"bookName\": \"" << vk->getBookName() << "\", \"cnumber\": \"" << vk->Chapter() << "\", \"vnumber\": \"" << vk->Verse() << "\", \"passageSingle\" : \"" << vk->getBookName() << " " << vk->Chapter() << ":" << vk->Verse() << "\", \"passage\" : \"" << vk->getBookName() << " " << vk->Chapter() << "\", \"abbrev\": \"" << vk->getBookAbbrev() << "\"}"; if (single == "true") { verses = VerseKey().ParseVerseList(key.c_str(), "", true); } else { tmpPassage << vk->getBookName() << " " << vk->Chapter(); verses = VerseKey().ParseVerseList(tmpPassage.str().c_str(), "", true); } AttributeTypeList::iterator i1; AttributeList::iterator i2; AttributeValue::iterator i3; out << "["; for (verses = TOP; !verses.Error(); verses++) { vk->setText(verses); if (strcmp(module->RenderText(), "") != 0) { //headingOn = 0; out << "{\"content\": \"" << convertString(module->RenderText()) << "\", "; out << "\"vnumber\": \"" << vk->Verse() << "\", "; out << "\"cnumber\": \"" << vk->Chapter() << "\""; out << ", \"heading\": \"" << convertString(module->getEntryAttributes()["Heading"]["Preverse"]["0"].c_str()) << "\""; for (i1 = module->getEntryAttributes().begin(); i1 != module->getEntryAttributes().end(); i1++) { if (strcmp(i1->first, "Footnote") == 0) { out << ", \"footnotes\": ["; for (i2 = i1->second.begin(); i2 != i1->second.end(); i2++) { out << "{"; for (i3 = i2->second.begin(); i3 != i2->second.end(); i3++) { out << "\"" << i3->first << "\": \"" << convertString(i3->second.c_str()) << "\""; //footnotesOn = 1; if (i3 != --i2->second.end()) { out << ", "; } } out << "}"; if (i2 != --i1->second.end()) { out << ", "; } } out << "]"; } /*else if (strcmp(i1->first, "Word") == 0) { out << ", \"words\": ["; for (i2 = i1->second.begin(); i2 != i1->second.end(); i2++) { out << "{"; for (i3 = i2->second.begin(); i3 != i2->second.end(); i3++) { out << "\"" << i3->first << "\": \"" << convertString(i3->second.c_str()) << "\""; if (i3 != --i2->second.end()) { out << ", "; } } out << "}"; if (i2 != --i1->second.end()) { out << ", "; } } out << "]"; } */ } if (vk->Chapter() == 1 && vk->Verse() == 1) { vk->setChapter(0); vk->setVerse(0); out << ", \"intro\": \"" << convertString(module->RenderText()) << "\""; } out << "}"; ListKey helper = verses; helper++; if (!helper.Error()) { out << ", "; } } } out << "]"; /*if (out.str() == "[]") { PDL_JSException(parms, "getVerses: Chapter is not available in this module!"); return PDL_FALSE; }*/ out << "<#split#>" << passage.str(); return out.str(); }
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); } }
const char *listkey_iterator_val(SWHANDLE lki) { ListKey *lk = (ListKey*)lki; if(!lk->popError()) return (const char *) lk->getText(); return NULL; }
int main(int argc, char **argv) { // SWMgr manager(0, 0, true, new MarkupFilterMgr(FMT_RTF, ENC_RTF)); SWMgr manager; SWModule *target; ListKey listkey; ListKey scope; ModMap::iterator it; if ((argc < 3) || (argc > 5)) { fprintf(stderr, "\nusage: %s <modname> <\"search string\"> [\"search_scope\"] [\"search again for string in previous result set\"]\n" "\tExample: search KJV \"swift hear slow speak\"\n\n", argv[0]); exit(-1); } std::string searchTerm = argv[2]; manager.setGlobalOption("Greek Accents", "Off"); manager.setGlobalOption("Strong's Numbers", "On"); manager.setGlobalOption("Hebrew Vowel Points", "Off"); manager.filterText("Greek Accents", searchTerm); it = manager.Modules.find(argv[1]); if (it == manager.Modules.end()) { fprintf(stderr, "Could not find module [%s]. Available modules:\n", argv[1]); for (it = manager.Modules.begin(); it != manager.Modules.end(); ++it) { fprintf(stderr, "[%s]\t - %s\n", (*it).second->getName(), (*it).second->getDescription()); } exit(-1); } target = (*it).second; if (argc > 3) { // if min / max specified SWKey *k = target->getKey(); VerseKey *parser = SWDYNAMIC_CAST(VerseKey, k); VerseKey kjvParser; if (!parser) parser = &kjvParser; // use standard KJV parsing as fallback scope = parser->parseVerseList(argv[3], *parser, true); scope.setPersist(true); target->setKey(scope); } std::cerr << "[0=================================50===============================100]\n "; char lineLen = 70; listkey = target->search(searchTerm.c_str(), SEARCH_TYPE, /*SEARCHFLAG_MATCHWHOLEENTRY*/ REG_ICASE, 0, 0, &percentUpdate, &lineLen); std::cerr << std::endl; if (argc > 4) { // if min / max specified scope = listkey; scope.setPersist(true); target->setKey(scope); printed = 0; std::cerr << " "; listkey = target->search(argv[4], SEARCH_TYPE, /*SEARCHFLAG_MATCHWHOLEENTRY*/ REG_ICASE, 0, 0, &percentUpdate, &lineLen); std::cerr << std::endl; } // we don't want to sort by verse if we've been given scores // listkey.sort(); while (!listkey.popError()) { std::cout << (const char *)listkey; if (listkey.getElement()->userData) std::cout << " : " << (uint64_t)listkey.getElement()->userData << "%"; std::cout << std::endl; ++listkey; } return 0; }