StringList *SWModule_impl::getKeyChildren() throw(CORBA::SystemException) { sword::SWKey *key = delegate->getKey(); StringList *retVal = new StringList; int count = 0; sword::VerseKey *vkey = SWDYNAMIC_CAST(VerseKey, key); if (vkey) { retVal->length(6); SWBuf num; num.appendFormatted("%d", vkey->Testament()); (*retVal)[0] = CORBA::string_dup(num.c_str()); num = ""; num.appendFormatted("%d", vkey->Book()); (*retVal)[1] = CORBA::string_dup(num.c_str()); num = ""; num.appendFormatted("%d", vkey->Chapter()); (*retVal)[2] = CORBA::string_dup(num.c_str()); num = ""; num.appendFormatted("%d", vkey->Verse()); (*retVal)[3] = CORBA::string_dup(num.c_str()); num = ""; num.appendFormatted("%d", vkey->getChapterMax()); (*retVal)[4] = CORBA::string_dup(num.c_str()); num = ""; num.appendFormatted("%d", vkey->getVerseMax()); (*retVal)[5] = CORBA::string_dup(num.c_str()); } else { TreeKeyIdx *tkey = SWDYNAMIC_CAST(TreeKeyIdx, key); if (tkey) { if (tkey->firstChild()) { do { count++; } while (tkey->nextSibling()); tkey->parent(); } retVal->length(count); count = 0; if (tkey->firstChild()) { do { (*retVal)[count++] = CORBA::string_dup(tkey->getLocalName()); } while (tkey->nextSibling()); tkey->parent(); } } } return retVal; }
void printTree(TreeKeyIdx treeKey, TreeKeyIdx *target = 0, int level = 1) { if (!target) target = &treeKey; unsigned long currentOffset = target->getOffset(); std::cout << ((currentOffset == treeKey.getOffset()) ? "==>" : ""); for (int i = 0; i < level; i++) std::cout << "\t"; std::cout << treeKey.getLocalName() << "/\n"; if (treeKey.firstChild()) { printTree(treeKey, target, level+1); treeKey.parent(); } if (treeKey.nextSibling()) printTree(treeKey, target, level); }
int main(int argc, char **argv) { if (argc != 2) { fprintf(stderr, "usage: %s <tree/key/data/path>\n", *argv); exit(-1); } TreeKeyIdx *treeKey = new TreeKeyIdx(argv[1]); if (treeKey->Error()) { RawGenBook::createModule(argv[1]); } delete treeKey; RawGenBook *book = new RawGenBook(argv[1]); TreeKeyIdx root = *((TreeKeyIdx *)((SWKey *)(*book))); treeKey = (TreeKeyIdx *)(SWKey *)(*book); SWBuf input; char line[1024]; do { std::cout << "[" << treeKey->getText() << "] > "; fgets(line, 1000, stdin); input = line; input.trim(); if (input.length() > 0) { switch (input[0]) { case 'n': printLocalName(treeKey); break; case 's': setLocalName(treeKey); break; case 'g': gotoPath(treeKey); break; case 'G': assurePath(treeKey); break; case 'p': root.root(); printTree(root, treeKey); break; case 'a': appendSibbling(treeKey); break; case 'c': appendChild(treeKey); break; case 'd': deleteNode(treeKey); break; case 'j': treeKey->nextSibling(); break; case 'k': treeKey->previousSibling(); break; case 'h': treeKey->parent(); break; case 'l': treeKey->firstChild(); break; case 'r': treeKey->root(); break; case 't': setEntryText(book); break; case 'v': viewEntryText(book); break; case 'q': break; case '?': default: std::cout << "\n p - print tree\n"; std::cout << " n - get local name\n"; std::cout << " s - set local name\n"; std::cout << " j - next sibbling\n"; std::cout << " k - previous sibbling\n"; std::cout << " h - parent\n"; std::cout << " l - first child\n"; std::cout << " r - root\n"; std::cout << " g - goto path\n"; std::cout << " G goto path; create if it doesn't exist\n"; std::cout << " a - append sibbling\n"; std::cout << " c - append child\n"; std::cout << " d - delete node\n"; std::cout << " v - view entry text\n"; std::cout << " t - set entry text\n"; std::cout << " q - quit\n\n"; break; } } } while (input.compare("q")); delete treeKey; return 0; }
int main(int argc, char **argv) { if (argc != 2) { fprintf(stderr, "usage: %s <tree/key/data/path>\n", *argv); exit(-1); } TreeKeyIdx *treeKey = new TreeKeyIdx(argv[1]); if (treeKey->Error()) { treeKey->create(argv[1]); delete treeKey; treeKey = new TreeKeyIdx(argv[1]); } TreeKeyIdx root = *treeKey; std::string input; char line[1024]; do { std::cout << "[" << treeKey->getText() << "] > "; fgets(line, 1000, stdin); input = line; if (input.length() > 0) { switch (input[0]) { case 'n': printLocalName(treeKey); break; case 's': setLocalName(treeKey); break; case 'p': root.root(); printTree(root, treeKey); break; case 'a': appendSibbling(treeKey); break; case 'c': appendChild(treeKey); break; case 'j': treeKey->nextSibling(); break; case 'g': assurePath(treeKey); break; case 'k': treeKey->previousSibling(); break; case 'h': treeKey->parent(); break; case 'l': treeKey->firstChild(); break; case 'r': treeKey->root(); break; case 'q': break; case '?': default: std::cout << "\n p - print tree\n"; std::cout << " n - get local name\n"; std::cout << " s - set local name\n"; std::cout << " j - next sibbling\n"; std::cout << " k - previous sibbling\n"; std::cout << " h - parent\n"; std::cout << " l - first child\n"; std::cout << " r - root\n"; std::cout << " a - append sibbling\n"; std::cout << " c - append child\n"; std::cout << " u - get user data\n"; std::cout << " d - set user data\n"; std::cout << " g - goto path; create if it doesn't exist\n"; std::cout << " q - quit\n\n"; break; } } } while (input.compare("q")); delete treeKey; return 0; }
/* * Class: org_crosswire_android_sword_SWModule * Method: getKeyChildren * Signature: ()[Ljava/lang/String; */ JNIEXPORT jobjectArray JNICALL Java_org_crosswire_android_sword_SWModule_getKeyChildren (JNIEnv *env, jobject me) { init(); jclass clazzString = env->FindClass("java/lang/String"); jobjectArray ret; SWModule *module = getModule(env, me); if (module) { sword::SWKey *key = module->getKey(); int count = 0; sword::VerseKey *vkey = SWDYNAMIC_CAST(VerseKey, key); if (vkey) { ret = (jobjectArray) env->NewObjectArray(7, clazzString, NULL); SWBuf num; num.appendFormatted("%d", vkey->getTestament()); env->SetObjectArrayElement(ret, 0, env->NewStringUTF(assureValidUTF8(num.c_str()))); num = ""; num.appendFormatted("%d", vkey->getBook()); env->SetObjectArrayElement(ret, 1, env->NewStringUTF(assureValidUTF8(num.c_str()))); num = ""; num.appendFormatted("%d", vkey->getChapter()); env->SetObjectArrayElement(ret, 2, env->NewStringUTF(assureValidUTF8(num.c_str()))); num = ""; num.appendFormatted("%d", vkey->getVerse()); env->SetObjectArrayElement(ret, 3, env->NewStringUTF(assureValidUTF8(num.c_str()))); num = ""; num.appendFormatted("%d", vkey->getChapterMax()); env->SetObjectArrayElement(ret, 4, env->NewStringUTF(assureValidUTF8(num.c_str()))); num = ""; num.appendFormatted("%d", vkey->getVerseMax()); env->SetObjectArrayElement(ret, 5, env->NewStringUTF(assureValidUTF8(num.c_str()))); env->SetObjectArrayElement(ret, 6, env->NewStringUTF(assureValidUTF8(vkey->getBookName()))); } else { TreeKeyIdx *tkey = SWDYNAMIC_CAST(TreeKeyIdx, key); if (tkey) { if (tkey->firstChild()) { do { count++; } while (tkey->nextSibling()); tkey->parent(); } ret = (jobjectArray) env->NewObjectArray(count, clazzString, NULL); count = 0; if (tkey->firstChild()) { do { env->SetObjectArrayElement(ret, count++, env->NewStringUTF(assureValidUTF8(tkey->getLocalName()))); } while (tkey->nextSibling()); tkey->parent(); } } } return ret; } }