int main(int argc, char **argv) { long pos, offset; int num1, num2, rangemax; char startflag = 0; short size; checkparams(argc, argv); openfiles(argv[1]); testmnt = key1.Testament(); num1 = key1.Chapter(); num2 = key1.Verse(); pos = 0; write(bfp, &pos, 4); /* Book offset for testament intros */ pos = 4; write(cfp, &pos, 4); /* Chapter offset for testament intro */ /* Right now just zero out intros until parsing correctly */ pos = 0; size = 0; write(vfp, &pos, 4); /* Module intro */ write(vfp, &size, 2); write(vfp, &pos, 4); /* Testament intro */ write(vfp, &size, 2); while(!findbreak(fp, &offset, &num1, &num2, &rangemax, &size)) { if (!startflag) { startflag = 1; } else { if (num2 < key2.Verse()) { // new chapter if (num1 <= key2.Chapter()) { // new book key2.Verse(1); key2.Chapter(1); key2.Book(key2.Book()+1); } printf("Found Chapter Break: %d ('%s')\n", num1, (const char *)key2); chapoffset = offset; chapsize = size; // continue; } } key2.Verse(1); key2.Chapter(num1); key2.Verse(num2); key3 = key2; // key3 += (rangemax - key3.Verse()); writeidx(key1, key2, key3, offset, size); } close(vfp); close(cfp); close(bfp); close(fp); return 0; }
void writeidx(VerseKey &key1, VerseKey &key2, VerseKey &key3, long offset, short size) { long pos; short tmp; for (; ((key1 <= key3) && (key1.Error() != KEYERR_OUTOFBOUNDS) && (key1.Testament() == testmnt)); key1+=1) { if (key1.Verse() == 1) { // new chapter if (key1.Chapter() == 1) { // new book pos = lseek(cfp, 0, SEEK_CUR); write(bfp, &pos, 4); pos = lseek(vfp, 0, SEEK_CUR); /* Book intro (cps) */ write(cfp, &pos, 4); write(vfp, &chapoffset, 4); /* Book intro (vss) set to same as chap for now(it should be chap 1 which usually contains the book into anyway)*/ write(vfp, &chapsize, 2); } pos = lseek(vfp, 0, SEEK_CUR); write(cfp, &pos, 4); write(vfp, &chapoffset, 4); /* Chapter intro */ write(vfp, &chapsize, 2); } if (key1 >= key2) { write(vfp, &offset, 4); write(vfp, &size, 2); } else { pos = 0; tmp = 0; write(vfp, &pos, 4); write(vfp, &tmp, 2); } } }
bool ThMLRTF::handleToken(SWBuf &buf, const char *token, BasicFilterUserData *userData) { if (!substituteToken(buf, token)) { // manually process if it wasn't a simple substitution MyUserData *u = (MyUserData *)userData; XMLTag tag(token); if ((!tag.isEndTag()) && (!tag.isEmpty())) u->startTag = tag; if (tag.getName() && !strcmp(tag.getName(), "sync")) { SWBuf value = tag.getAttribute("value"); if (tag.getAttribute("type") && !strcmp(tag.getAttribute("type"), "morph")) { //> buf.appendFormatted(" {\\cf4 \\sub (%s)}", value.c_str()); } else if( tag.getAttribute("type") && !strcmp(tag.getAttribute("type"), "Strongs")) { if (value[0] == 'H' || value[0] == 'G' || value[0] == 'A') { value<<1; buf.appendFormatted(" {\\cf3 \\sub <%s>}", value.c_str()); } else if (value[0] == 'T') { value<<1; buf.appendFormatted(" {\\cf4 \\sub (%s)}", value.c_str()); } } else if (tag.getAttribute("type") && !strcmp(tag.getAttribute("type"), "Dict")) { if (!tag.isEndTag()) buf += "{\\b "; else buf += "}"; } } // <note> tag else if (!strcmp(tag.getName(), "note")) { if (!tag.isEndTag()) { if (!tag.isEmpty()) { SWBuf type = tag.getAttribute("type"); SWBuf footnoteNumber = tag.getAttribute("swordFootnote"); VerseKey *vkey = NULL; // see if we have a VerseKey * or descendant SWTRY { vkey = SWDYNAMIC_CAST(VerseKey, u->key); } SWCATCH ( ... ) { } if (vkey) { // leave this special osis type in for crossReference notes types? Might thml use this some day? Doesn't hurt. char ch = ((tag.getAttribute("type") && ((!strcmp(tag.getAttribute("type"), "crossReference")) || (!strcmp(tag.getAttribute("type"), "x-cross-ref")))) ? 'x':'n'); buf.appendFormatted("{\\super <a href=\"\">*%c%i.%s</a>} ", ch, vkey->Verse(), footnoteNumber.c_str()); } u->suspendTextPassThru = true; } } if (tag.isEndTag()) { u->suspendTextPassThru = false; } }
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) { SWMgr mymgr; RawText::createModule("."); RawText mod("."); VerseKey vk; vk.Headings(1); vk.AutoNormalize(0); vk.Persist(1); mod.setKey(vk); vk.Verse(0); vk.Chapter(0); vk.Book(0); vk.Testament(0); mod << "Module heading text"; vk.Verse(0); vk.Chapter(0); vk.Book(0); vk.Testament(1); mod << "OT heading text"; vk.Testament(1); vk.Book(1); vk.Chapter(0); vk.Verse(0); mod << "Gen heading text"; vk.Testament(1); vk.Book(1); vk.Chapter(1); vk.Verse(0); mod << "Gen 1 heading text"; vk.Testament(1); vk.Book(1); vk.Chapter(1); vk.Verse(1); mod << "Gen 1:1 text"; vk.Testament(0); vk.Book(0); vk.Chapter(0); vk.Verse(0); std::cout << "Module heading text ?= " << (const char*)mod << std::endl; vk.Testament(1); vk.Book(0); vk.Chapter(0); vk.Verse(0); std::cout << "OT heading text ?= " << (const char*)mod << std::endl; vk.Testament(1); vk.Book(1); vk.Chapter(0); vk.Verse(0); std::cout << "Gen heading text ?= " << (const char*)mod << std::endl; vk.Testament(1); vk.Book(1); vk.Chapter(1); vk.Verse(0); std::cout << "Gen 1 heading text ?= " << (const char*)mod << std::endl; vk.Testament(1); vk.Book(1); vk.Chapter(1); vk.Verse(1); std::cout << "Gen 1:1 text ?= " << (const char*)mod << std::endl; /* old introtest SWModule *mhc = mymgr.Modules["MHC"]; if (mhc) { VerseKey vk; vk.Headings(1); vk.AutoNormalize(0); vk.Persist(1); 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; }