From scribe at crosswire.org Sun Mar 11 14:59:28 2018 From: scribe at crosswire.org (scribe at crosswire.org) Date: Sun, 11 Mar 2018 14:59:28 -0700 Subject: [sword-svn] r3574 - in trunk/bindings: cordova/org.crosswire.sword.cordova.SWORD/src/android java-jni/jni Message-ID: Author: scribe Date: 2018-03-11 14:59:28 -0700 (Sun, 11 Mar 2018) New Revision: 3574 Modified: trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/src/android/SWORD.java trunk/bindings/java-jni/jni/swordstub.cpp Log: Added better handling of incorrect key set to a module. Added more debug output for BibleSync Modified: trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/src/android/SWORD.java =================================================================== --- trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/src/android/SWORD.java 2018-02-20 09:41:42 UTC (rev 3573) +++ trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/src/android/SWORD.java 2018-03-11 21:59:28 UTC (rev 3574) @@ -519,6 +519,9 @@ String currentKey[] = masterMod.getKeyChildren(); + // assert we have a valid location + if (currentKey.length <= SWModule.VERSEKEY_BOOKABBREV || currentKey.length <= SWModule.VERSEKEY_CHAPTER) return r; + masterMod.setKeyText(currentKey[SWModule.VERSEKEY_BOOKABBREV]+"."+currentKey[SWModule.VERSEKEY_CHAPTER]+".1"); String [] verseKey = masterMod.getKeyChildren(); Modified: trunk/bindings/java-jni/jni/swordstub.cpp =================================================================== --- trunk/bindings/java-jni/jni/swordstub.cpp 2018-02-20 09:41:42 UTC (rev 3573) +++ trunk/bindings/java-jni/jni/swordstub.cpp 2018-03-11 21:59:28 UTC (rev 3574) @@ -171,6 +171,12 @@ } confPath = STORAGE_BASE + "/extraConfig.conf"; bool exists = FileMgr::existsFile(confPath.c_str()); + if (!exists) { + SWConfig config(confPath.c_str()); + config["Globals"]["HiAndroid"] = "weeee"; + config.save(); + exists = true; + } SWLog::getSystemLog()->logDebug("libsword: extraConfig %s at path: %s", exists?"Exists":"Absent", confPath.c_str()); SWLog::getSystemLog()->logDebug("libsword: init() creating WebMgr using path: %s", baseDir.c_str()); @@ -179,6 +185,7 @@ SWLog::getSystemLog()->logDebug("libsword: init() augmenting modules from: %s", AND_BIBLE_MODULES_PATH); // for And Bible modules mgr->augmentModules(AND_BIBLE_MODULES_PATH, true); +SWLog::getSystemLog()->logDebug("libsword: init() end."); } } @@ -219,6 +226,7 @@ #ifdef BIBLESYNC void bibleSyncCallback(char cmd, string pkt_uuid, string bible, string ref, string alt, string group, string domain, string info, string dump) { +//void bibleSyncCallback(char cmd, string bible, string ref, string alt, string group, string domain, string info, string dump) { SWLog::getSystemLog()->logDebug("bibleSync callback msg: %c; pkt_uuid: %s; bible: %s; ref: %s; alt: %s; group: %s; domain: %s; info: %s; dump: %s", cmd, pkt_uuid.c_str(), bible.c_str(), ref.c_str(), alt.c_str(), group.c_str(), domain.c_str(), info.c_str(), dump.c_str()); if (::bibleSyncListener) { SWLog::getSystemLog()->logDebug("bibleSync listener is true"); @@ -1938,8 +1946,9 @@ const char *osisRef = env->GetStringUTFChars(osisRefJS, NULL); #ifdef BIBLESYNC - BibleSync_xmit_status retval = bibleSync->Transmit(BSP_SYNC, "Bible", osisRef); + BibleSync_xmit_status result = bibleSync->Transmit(BSP_SYNC, "Bible", osisRef); #endif +SWLog::getSystemLog()->logDebug("libsword: sendBibleSyncMessage() finished with status code: %d", result); env->ReleaseStringUTFChars(osisRefJS, osisRef); } From scribe at crosswire.org Sun Mar 25 06:17:56 2018 From: scribe at crosswire.org (scribe at crosswire.org) Date: Sun, 25 Mar 2018 06:17:56 -0700 Subject: [sword-svn] r3575 - in trunk/bindings: cordova/org.crosswire.sword.cordova.SWORD/src/android cordova/org.crosswire.sword.cordova.SWORD/www java-jni/jni java-jni/src/org/crosswire/android/sword Message-ID: Author: scribe Date: 2018-03-25 06:17:56 -0700 (Sun, 25 Mar 2018) New Revision: 3575 Modified: trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/src/android/SWORD.java trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/www/SWORD.js trunk/bindings/java-jni/jni/swordstub.cpp trunk/bindings/java-jni/src/org/crosswire/android/sword/SWMgr.java Log: Added support for ModInfo.features array. Reworked BibleSync interface Modified: trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/src/android/SWORD.java =================================================================== --- trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/src/android/SWORD.java 2018-03-11 21:59:28 UTC (rev 3574) +++ trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/src/android/SWORD.java 2018-03-25 13:17:56 UTC (rev 3575) @@ -139,6 +139,7 @@ m.put("version", mi.version); m.put("delta", mi.delta); m.put("cipherKey", mi.cipherKey); + m.put("features", new JSONArray(mi.features)); r.put(m); } callbackContext.success(r); @@ -243,6 +244,7 @@ m.put("version", mi.version); m.put("delta", mi.delta); m.put("cipherKey", mi.cipherKey); + m.put("features", new JSONArray(mi.features)); r.put(m); } callbackContext.success(r); @@ -357,13 +359,16 @@ result.setKeepCallback(true); callbackContext.sendPluginResult(result); } - else if (action.equals("SWMgr_registerBibleSyncListener")) { + else if (action.equals("SWMgr_startBibleSync")) { final CallbackContext bibleSyncListener = callbackContext; + final String appName = args.getString(0); + final String userName = args.getString(1); + final String passphrase = args.getString(2); cordova.getThreadPool().execute(new Runnable() { @Override public void run() { - mgr.registerBibleSyncListener(new SWMgr.BibleSyncListener() { + mgr.startBibleSync(appName, userName, passphrase, new SWMgr.BibleSyncListener() { public void messageReceived(String message) { PluginResult result = new PluginResult(PluginResult.Status.OK, message); result.setKeepCallback(true); @@ -377,6 +382,10 @@ result.setKeepCallback(true); callbackContext.sendPluginResult(result); } + else if (action.equals("SWMgr_stopBibleSync")) { + mgr.stopBibleSync(); + callbackContext.success(); + } else if (action.equals("SWMgr_setJavascript")) { boolean val = args.getBoolean(0); mgr.setJavascript(val); Modified: trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/www/SWORD.js =================================================================== --- trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/www/SWORD.js 2018-03-11 21:59:28 UTC (rev 3574) +++ trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/www/SWORD.js 2018-03-25 13:17:56 UTC (rev 3575) @@ -315,13 +315,20 @@ return retVal; } -SWMgr.prototype.registerBibleSyncListener = function(callback) { +SWMgr.prototype.startBibleSync = function(appName, userName, passphrase, callback) { exec(callback, function(err) { utils.alert('[ERROR] problem: ' + err); }, - "SWORD", "SWMgr_registerBibleSyncListener", [] + "SWORD", "SWMgr_startBibleSync", [appName, userName, passphrase] ); } +SWMgr.prototype.stopBibleSync = function() { + exec(function() {}, + function(err) { utils.alert('[ERROR] problem: ' + err); }, + "SWORD", "SWMgr_stopBibleSync", [] + ); +} + SWMgr.prototype.sendBibleSyncMessage = function(osisRef, callback) { exec(callback?callback:function() {}, function(err) { utils.alert('[ERROR] problem: ' + err); }, Modified: trunk/bindings/java-jni/jni/swordstub.cpp =================================================================== --- trunk/bindings/java-jni/jni/swordstub.cpp 2018-03-11 21:59:28 UTC (rev 3574) +++ trunk/bindings/java-jni/jni/swordstub.cpp 2018-03-25 13:17:56 UTC (rev 3575) @@ -262,21 +262,9 @@ } #endif - -static void initBibleSync() { -#ifdef BIBLESYNC - if (!bibleSync) { -SWLog::getSystemLog()->logDebug("bibleSync initializing c-tor"); - bibleSync = new BibleSync("SWORD", (const char *)SWVersion().currentVersion, "SwordUser"); -SWLog::getSystemLog()->logDebug("bibleSync initializing setMode"); - bibleSync->setMode(BSP_MODE_PERSONAL, bibleSyncCallback, "passphrase"); - } -#endif } -} - JNIEXPORT jstring JNICALL Java_org_crosswire_android_sword_SWMgr_version (JNIEnv *env, jobject me) { @@ -301,6 +289,7 @@ const char *basePath = (basePathJS?env->GetStringUTFChars(basePathJS, NULL):0); STORAGE_BASE = basePath; + env->ReleaseStringUTFChars(basePathJS, basePath); SWLog::getSystemLog()->logDebug("setting STORAGE_BASE to: %s", STORAGE_BASE.c_str()); delete mgr; @@ -339,6 +328,8 @@ SWLog::getSystemLog()->logDebug("getModInfoList returning %d length array\n", size); jclass clazzModInfo = env->FindClass("org/crosswire/android/sword/SWMgr$ModInfo"); + jclass clazzString = env->FindClass("java/lang/String"); + jfieldID nameID = env->GetFieldID(clazzModInfo, "name", "Ljava/lang/String;"); jfieldID descID = env->GetFieldID(clazzModInfo, "description", "Ljava/lang/String;"); jfieldID catID = env->GetFieldID(clazzModInfo, "category", "Ljava/lang/String;"); @@ -346,6 +337,7 @@ jfieldID versionID = env->GetFieldID(clazzModInfo, "version", "Ljava/lang/String;"); jfieldID deltaID = env->GetFieldID(clazzModInfo, "delta", "Ljava/lang/String;"); jfieldID cipherKeyID= env->GetFieldID(clazzModInfo, "cipherKey", "Ljava/lang/String;"); + jfieldID featuresID = env->GetFieldID(clazzModInfo, "features", "[Ljava/lang/String;"); jobjectArray ret = (jobjectArray) env->NewObjectArray(size, clazzModInfo, NULL); @@ -353,32 +345,45 @@ for (sword::ModMap::iterator it = mgr->Modules.begin(); it != mgr->Modules.end(); ++it) { SWModule *module = it->second; -// if ((!(module->getConfigEntry("CipherKey"))) || (*(module->getConfigEntry("CipherKey")))) { - SWBuf type = module->getType(); - SWBuf cat = module->getConfigEntry("Category"); - SWBuf version = module->getConfigEntry("Version"); - if (cat.length() > 0) type = cat; + SWBuf type = module->getType(); + SWBuf cat = module->getConfigEntry("Category"); + SWBuf version = module->getConfigEntry("Version"); + if (cat.length() > 0) type = cat; - jobject modInfo = env->AllocObject(clazzModInfo); + jobject modInfo = env->AllocObject(clazzModInfo); - jstring val; - val = env->NewStringUTF(assureValidUTF8(module->getName())); env->SetObjectField(modInfo, nameID , val); env->DeleteLocalRef(val); - val = env->NewStringUTF(assureValidUTF8(module->getDescription())); env->SetObjectField(modInfo, descID , val); env->DeleteLocalRef(val); - val = env->NewStringUTF(assureValidUTF8(type.c_str())); env->SetObjectField(modInfo, catID , val); env->DeleteLocalRef(val); - val = env->NewStringUTF(assureValidUTF8(module->getLanguage())); env->SetObjectField(modInfo, langID , val); env->DeleteLocalRef(val); - val = env->NewStringUTF(assureValidUTF8(version.c_str())); env->SetObjectField(modInfo, versionID , val); env->DeleteLocalRef(val); - val = env->NewStringUTF(assureValidUTF8("")); env->SetObjectField(modInfo, deltaID , val); env->DeleteLocalRef(val); - const char *cipherKey = module->getConfigEntry("CipherKey"); - if (cipherKey) { - val = env->NewStringUTF(assureValidUTF8(cipherKey)); env->SetObjectField(modInfo, cipherKeyID, val); env->DeleteLocalRef(val); - } - else env->SetObjectField(modInfo, cipherKeyID, NULL); + jstring val; + val = env->NewStringUTF(assureValidUTF8(module->getName())); env->SetObjectField(modInfo, nameID , val); env->DeleteLocalRef(val); + val = env->NewStringUTF(assureValidUTF8(module->getDescription())); env->SetObjectField(modInfo, descID , val); env->DeleteLocalRef(val); + val = env->NewStringUTF(assureValidUTF8(type.c_str())); env->SetObjectField(modInfo, catID , val); env->DeleteLocalRef(val); + val = env->NewStringUTF(assureValidUTF8(module->getLanguage())); env->SetObjectField(modInfo, langID , val); env->DeleteLocalRef(val); + val = env->NewStringUTF(assureValidUTF8(version.c_str())); env->SetObjectField(modInfo, versionID , val); env->DeleteLocalRef(val); + val = env->NewStringUTF(assureValidUTF8("")); env->SetObjectField(modInfo, deltaID , val); env->DeleteLocalRef(val); + const char *cipherKey = module->getConfigEntry("CipherKey"); + if (cipherKey) { + val = env->NewStringUTF(assureValidUTF8(cipherKey)); env->SetObjectField(modInfo, cipherKeyID, val); env->DeleteLocalRef(val); + } + else env->SetObjectField(modInfo, cipherKeyID, NULL); - env->SetObjectArrayElement(ret, i++, modInfo); + ConfigEntMap::const_iterator start = module->getConfig().lower_bound("Feature"); + ConfigEntMap::const_iterator end = module->getConfig().upper_bound("Feature"); - env->DeleteLocalRef(modInfo); + int featureCount = 0; + for (ConfigEntMap::const_iterator it = start; it != end; ++it) { + ++featureCount; + } + jobjectArray features = (jobjectArray) env->NewObjectArray(featureCount, clazzString, NULL); + featureCount = 0; + for (ConfigEntMap::const_iterator it = start; it != end; ++it) { + env->SetObjectArrayElement(features, featureCount++, env->NewStringUTF(assureValidUTF8(it->second))); + } + env->SetObjectField(modInfo, featuresID, features); + env->DeleteLocalRef(features); -// } + env->SetObjectArrayElement(ret, i++, modInfo); + + env->DeleteLocalRef(modInfo); + } return ret; } @@ -1756,6 +1761,8 @@ SWLog::getSystemLog()->logDebug("sourceName: %s\n", sourceName); jclass clazzModInfo = env->FindClass("org/crosswire/android/sword/SWMgr$ModInfo"); + jclass clazzString = env->FindClass("java/lang/String"); + jfieldID nameID = env->GetFieldID(clazzModInfo, "name", "Ljava/lang/String;"); jfieldID descID = env->GetFieldID(clazzModInfo, "description", "Ljava/lang/String;"); jfieldID catID = env->GetFieldID(clazzModInfo, "category", "Ljava/lang/String;"); @@ -1763,6 +1770,7 @@ jfieldID versionID = env->GetFieldID(clazzModInfo, "version", "Ljava/lang/String;"); jfieldID deltaID = env->GetFieldID(clazzModInfo, "delta", "Ljava/lang/String;"); jfieldID cipherKeyID= env->GetFieldID(clazzModInfo, "cipherKey", "Ljava/lang/String;"); + jfieldID featuresID = env->GetFieldID(clazzModInfo, "features", "[Ljava/lang/String;"); InstallSourceMap::iterator source = installMgr->sources.find(sourceName); if (source == installMgr->sources.end()) { @@ -1810,6 +1818,21 @@ } else env->SetObjectField(modInfo, cipherKeyID, NULL); + ConfigEntMap::const_iterator start = module->getConfig().lower_bound("Feature"); + ConfigEntMap::const_iterator end = module->getConfig().upper_bound("Feature"); + + int featureCount = 0; + for (ConfigEntMap::const_iterator it = start; it != end; ++it) { + ++featureCount; + } + jobjectArray features = (jobjectArray) env->NewObjectArray(featureCount, clazzString, NULL); + featureCount = 0; + for (ConfigEntMap::const_iterator it = start; it != end; ++it) { + env->SetObjectArrayElement(features, featureCount++, env->NewStringUTF(assureValidUTF8(it->second))); + } + env->SetObjectField(modInfo, featuresID, features); + env->DeleteLocalRef(features); + env->SetObjectArrayElement(ret, i++, modInfo); env->DeleteLocalRef(modInfo); @@ -1942,41 +1965,101 @@ (JNIEnv *env, jobject me, jstring osisRefJS) { SWLog::getSystemLog()->logDebug("libsword: sendBibleSyncMessage() begin"); - initBibleSync(); - const char *osisRef = env->GetStringUTFChars(osisRefJS, NULL); + if (!bibleSync) { +SWLog::getSystemLog()->logDebug("libsword: sendBibleSyncMessage() bibleSync not active; message not sent."); + return; + } + const char *osisRefString = env->GetStringUTFChars(osisRefJS, NULL); + SWBuf modName = "Bible"; + SWBuf osisRef = osisRefString; + const char *modNamePrefix = osisRef.stripPrefix(':'); + if (modNamePrefix) modName = modNamePrefix; #ifdef BIBLESYNC - BibleSync_xmit_status result = bibleSync->Transmit(BSP_SYNC, "Bible", osisRef); + BibleSync_xmit_status result = bibleSync->Transmit(BSP_SYNC, modName.c_str(), osisRef.c_str()); #endif SWLog::getSystemLog()->logDebug("libsword: sendBibleSyncMessage() finished with status code: %d", result); - env->ReleaseStringUTFChars(osisRefJS, osisRef); + env->ReleaseStringUTFChars(osisRefJS, osisRefString); } /* * NOTE: this method blocks and should be called in a new thread * Class: org_crosswire_android_sword_SWMgr - * Method: registerBibleSyncListener - * Signature: (Ljava/lang/Object;)V + * Method: startBibleSync + * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/crosswire/android/sword/SWMgr/BibleSyncListener;)V */ -JNIEXPORT void JNICALL Java_org_crosswire_android_sword_SWMgr_registerBibleSyncListener - (JNIEnv *env, jobject me, jobject bibleSyncListener) { +JNIEXPORT void JNICALL Java_org_crosswire_android_sword_SWMgr_startBibleSync + (JNIEnv *env, jobject me, jstring appNameJS, jstring userNameJS, jstring passphraseJS, jobject bibleSyncListener) { -SWLog::getSystemLog()->logDebug("registerBibleSyncListener() start"); + SWLog::getSystemLog()->logDebug("startBibleSync() start"); + // only one thread + static bool starting = false; + if (starting) return; + starting = true; + // kill any previous loop + if (::bibleSyncListener) bibleSyncListener = 0; #ifdef BIBLESYNC + const char *paramString = env->GetStringUTFChars(appNameJS, NULL); + SWBuf appName = paramString; + env->ReleaseStringUTFChars(appNameJS, paramString); + paramString = env->GetStringUTFChars(userNameJS, NULL); + SWBuf userName = paramString; + env->ReleaseStringUTFChars(userNameJS, paramString); + paramString = env->GetStringUTFChars(passphraseJS, NULL); + SWBuf passphrase = paramString; + env->ReleaseStringUTFChars(passphraseJS, paramString); + + // in case we're restarting, wait for our loop to finish for sure + if (::bibleSync) { +SWLog::getSystemLog()->logDebug("startBibleSync() sleeping 3 seconds"); + sleep(3); + } + ::bibleSyncListener = bibleSyncListener; ::bibleSyncListenerEnv = env; -SWLog::getSystemLog()->logDebug("registerBibleSyncListener - calling init"); - initBibleSync(); -SWLog::getSystemLog()->logDebug("registerBibleSyncListener - starting while listener"); + SWLog::getSystemLog()->logDebug("startBibleSync - calling init"); + + if (!bibleSync) { +SWLog::getSystemLog()->logDebug("bibleSync initializing c-tor"); + bibleSync = new BibleSync(appName.c_str(), (const char *)SWVersion().currentVersion, userName.c_str()); +SWLog::getSystemLog()->logDebug("bibleSync initializing setMode"); + bibleSync->setMode(BSP_MODE_PERSONAL, bibleSyncCallback, passphrase.c_str()); + } + SWLog::getSystemLog()->logDebug("startBibleSync - starting while listener"); + starting = false; while(::bibleSyncListener) { -SWLog::getSystemLog()->logDebug("bibleSyncListener - while loop iteration"); + SWLog::getSystemLog()->logDebug("bibleSyncListener - while loop iteration"); BibleSync::Receive(bibleSync); -SWLog::getSystemLog()->logDebug("bibleSyncListener - sleeping for 2 seconds"); + SWLog::getSystemLog()->logDebug("bibleSyncListener - sleeping for 2 seconds"); sleep(2); } + delete bibleSync; + bibleSync = 0; #else + SWLog::getSystemLog()->logDebug("registerBibleSyncListener: !!! BibleSync disabled in native code."); +#endif +} + + +/* + * Class: org_crosswire_android_sword_SWMgr + * Method: stopBibleSync + * Signature: (V;)V + */ +JNIEXPORT void JNICALL Java_org_crosswire_android_sword_SWMgr_stopBibleSync + (JNIEnv *env, jobject me) { + +SWLog::getSystemLog()->logDebug("stopBibleSync()"); +#ifdef BIBLESYNC + // if we have a listen loop going, just break the loop; the bibleSync cleanup will happen there + if (::bibleSyncListener) ::bibleSyncListener = 0; + else if (bibleSync) { + delete bibleSync; + bibleSync = 0; + } +#else SWLog::getSystemLog()->logDebug("registerBibleSyncListener: !!! BibleSync disabled in native code."); #endif } Modified: trunk/bindings/java-jni/src/org/crosswire/android/sword/SWMgr.java =================================================================== --- trunk/bindings/java-jni/src/org/crosswire/android/sword/SWMgr.java 2018-03-11 21:59:28 UTC (rev 3574) +++ trunk/bindings/java-jni/src/org/crosswire/android/sword/SWMgr.java 2018-03-25 13:17:56 UTC (rev 3575) @@ -36,6 +36,7 @@ public String version; public String delta; public String cipherKey; + public String[] features; } public SWMgr() { @@ -75,11 +76,6 @@ public native String[] getExtraConfigKeys(String section); public native String getExtraConfigValue(String section, String key); - public static interface BibleSyncListener { - public void messageReceived(String osisRef); - } - public native void sendBibleSyncMessage(String osisRef); - public native void registerBibleSyncListener(BibleSyncListener listener); public String getStorageBasePath() { return "."; /* @@ -87,6 +83,12 @@ return context.getFilesDir().getAbsolutePath(); */ } + public static interface BibleSyncListener { + public void messageReceived(String osisRef); + } + public native void startBibleSync(String appName, String userName, String passphrase, BibleSyncListener listener); + public native void stopBibleSync(); + public native void sendBibleSyncMessage(String osisRef); } From scribe at crosswire.org Sun Mar 25 15:31:34 2018 From: scribe at crosswire.org (scribe at crosswire.org) Date: Sun, 25 Mar 2018 15:31:34 -0700 Subject: [sword-svn] r3576 - in trunk: bindings bindings/cordova/org.crosswire.sword.cordova.SWORD/src/ios bindings/java-jni/jni bindings/objc bindings/objc/SWORD bindings/objc/SWORD/SWORD bindings/objc/SWORD/SWORD.xcodeproj bindings/objc/SWORD/SWORD.xcodeproj/project.xcworkspace bindings/objc/SWORD/SWORD.xcodeproj/project.xcworkspace/xcuserdata bindings/objc/SWORD/SWORD.xcodeproj/project.xcworkspace/xcuserdata/scribe.xcuserdatad bindings/objc/SWORD/SWORD.xcodeproj/xcuserdata bindings/objc/SWORD/SWORD.xcodeproj/xcuserdata/scribe.xcuserdatad bindings/objc/SWORD/SWORD.xcodeproj/xcuserdata/scribe.xcuserdatad/xcschemes include Message-ID: Author: scribe Date: 2018-03-25 15:31:33 -0700 (Sun, 25 Mar 2018) New Revision: 3576 Added: trunk/bindings/objc/SWORD/ trunk/bindings/objc/SWORD/Info.plist trunk/bindings/objc/SWORD/Release-universal/ trunk/bindings/objc/SWORD/SWORD.h trunk/bindings/objc/SWORD/SWORD.xcodeproj/ trunk/bindings/objc/SWORD/SWORD.xcodeproj/project.pbxproj trunk/bindings/objc/SWORD/SWORD.xcodeproj/project.xcworkspace/ trunk/bindings/objc/SWORD/SWORD.xcodeproj/project.xcworkspace/contents.xcworkspacedata trunk/bindings/objc/SWORD/SWORD.xcodeproj/project.xcworkspace/xcuserdata/ trunk/bindings/objc/SWORD/SWORD.xcodeproj/project.xcworkspace/xcuserdata/scribe.xcuserdatad/ trunk/bindings/objc/SWORD/SWORD.xcodeproj/project.xcworkspace/xcuserdata/scribe.xcuserdatad/UserInterfaceState.xcuserstate trunk/bindings/objc/SWORD/SWORD.xcodeproj/xcuserdata/ trunk/bindings/objc/SWORD/SWORD.xcodeproj/xcuserdata/scribe.xcuserdatad/ trunk/bindings/objc/SWORD/SWORD.xcodeproj/xcuserdata/scribe.xcuserdatad/xcschemes/ trunk/bindings/objc/SWORD/SWORD.xcodeproj/xcuserdata/scribe.xcuserdatad/xcschemes/SWORD.xcscheme trunk/bindings/objc/SWORD/SWORD.xcodeproj/xcuserdata/scribe.xcuserdatad/xcschemes/SWORDUniversal.xcscheme trunk/bindings/objc/SWORD/SWORD.xcodeproj/xcuserdata/scribe.xcuserdatad/xcschemes/xcschememanagement.plist trunk/bindings/objc/SWORD/SWORD/ trunk/bindings/objc/SWORD/SWORD/SWORD.h trunk/bindings/objc/SWORD/SWORD/SWORD.m trunk/bindings/objc/SWORD/build/ trunk/bindings/objc/SWORD/sword.m Modified: trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/src/ios/SWORD.swift trunk/bindings/flatapi.cpp trunk/bindings/java-jni/jni/swordstub.cpp trunk/include/flatapi.h Log: added Apple universal lib project. added BibleSync support to flatapi. updated swift bindings to return ModInfo features and match new BibleSync interface Modified: trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/src/ios/SWORD.swift =================================================================== --- trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/src/ios/SWORD.swift 2018-03-25 13:17:56 UTC (rev 3575) +++ trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/src/ios/SWORD.swift 2018-03-25 22:31:33 UTC (rev 3576) @@ -450,13 +450,52 @@ } - @objc(SWMgr_registerBibleSyncListener:) - func SWMgr_registerBibleSyncListener(command: CDVInvokedUrlCommand) { - let pluginResult = CDVPluginResult(status: CDVCommandStatus_OK, messageAs: "SWMgr_registerBibleSyncListener") - self.commandDelegate!.send(pluginResult, callbackId: command.callbackId) + @objc(SWMgr_startBibleSync:) + func SWMgr_startBibleSync(command: CDVInvokedUrlCommand) { + initMgr() + let appName = command.arguments[1] as? String ?? "" + let userName = command.arguments[2] as? String ?? "" + let passphrase = command.arguments[3] as? String ?? "" + bibleSyncCallbackID = command.callbackId + DispatchQueue.global().async { + mySWORDPlugin = self + org_crosswire_sword_SWMgr_startBibleSync(self.mgr, appName, userName, passphrase, { (message: Optional>) in + let response = String(cString: message!) + if (mySWORDPlugin != nil && mySWORDPlugin!.bibleSyncCallbackID != "") { + let result = CDVPluginResult(status: CDVCommandStatus_OK, messageAs: response) + result?.setKeepCallbackAs(true) + mySWORDPlugin!.commandDelegate!.send(result, callbackId: mySWORDPlugin!.bibleSyncCallbackID) + } + }); + + self.bibleSyncCallbackID = "" + + let result = CDVPluginResult(status: CDVCommandStatus_OK, messageAs: "SWMgr_startBibleSync finished") + result?.setKeepCallbackAs(false) + self.commandDelegate!.send(result, callbackId: command.callbackId) + } + + let result = CDVPluginResult(status: CDVCommandStatus_OK, messageAs: "SWMgr_startBibleSync") + result?.setKeepCallbackAs(true) + self.commandDelegate!.send(result, callbackId: command.callbackId) } + @objc(SWMgr_stopBibleSync:) + func SWMgr_stopBibleSync(command: CDVInvokedUrlCommand) { + initMgr() + org_crosswire_sword_SWMgr_stopBibleSync(mgr) + self.commandDelegate!.send(CDVPluginResult(status: CDVCommandStatus_OK, messageAs: "SWMgr_stopBibleSync"), callbackId: command.callbackId) + } + @objc(SWMgr_sendBibleSyncMessage:) + func SWMgr_sendBibleSyncMessage(command: CDVInvokedUrlCommand) { + initMgr() + let osisRef = command.arguments[1] as? String ?? "" + org_crosswire_sword_SWMgr_sendBibleSyncMessage(mgr, osisRef) + self.commandDelegate!.send(CDVPluginResult(status: CDVCommandStatus_OK, messageAs: "SWMgr_sendBibleSyncMessage"), callbackId: command.callbackId) + } + + @objc(SWModule_getRenderChapter:) func SWModule_getRenderChapter(command: CDVInvokedUrlCommand) { initMgr() @@ -658,6 +697,7 @@ } var callbackID:String = "" + var bibleSyncCallbackID:String = "" @objc(InstallMgr_remoteInstallModule:) func InstallMgr_remoteInstallModule(command: CDVInvokedUrlCommand) { initInstall() @@ -712,7 +752,8 @@ "language": String(cString: i.language), "delta": String(cString: i.delta), "cipherKey": i.cipherKey == nil ? nil : String(cString: i.cipherKey), - "version": String(cString: i.version) + "version": String(cString: i.version), + "features": getStringArray(buffer: i.features) ] as [AnyHashable : Any] mods.append(modInfo) } @@ -802,7 +843,8 @@ "category": String(cString: i.category), "language": String(cString: i.language), "delta": i.delta == nil ? "" : String(cString: i.delta), - "version": i.version == nil ? "" : String(cString: i.version) + "version": i.version == nil ? "" : String(cString: i.version), + "features": getStringArray(buffer: i.features) ] as [AnyHashable : Any] if (i.cipherKey != nil) { @@ -814,7 +856,8 @@ self.commandDelegate!.send(CDVPluginResult(status: CDVCommandStatus_OK, messageAs: mods), callbackId: command.callbackId) } /* -SWMgr_registerBibleSyncListener +SWMgr_startBibleSync +SWMgr_stopBibleSync SWMgr_sendBibleSyncMessage */ } Modified: trunk/bindings/flatapi.cpp =================================================================== --- trunk/bindings/flatapi.cpp 2018-03-25 13:17:56 UTC (rev 3575) +++ trunk/bindings/flatapi.cpp 2018-03-25 22:31:33 UTC (rev 3576) @@ -37,6 +37,11 @@ #include #include #include + +#ifdef BIBLESYNC +#include +#endif + #include "corba/orbitcpp/webmgr.hpp" extern "C" { @@ -83,6 +88,7 @@ delete [] (*modInfo)[i].version; delete [] (*modInfo)[i].delta; delete [] (*modInfo)[i].cipherKey; + clearStringArray(&((*modInfo)[i].features)); } else break; } @@ -106,6 +112,37 @@ } } +#ifdef BIBLESYNC + +using std::string; +BibleSync *bibleSync = 0; +org_biblesync_MessageReceivedCallback bibleSyncListener = 0; + +void bibleSyncCallback(char cmd, string pkt_uuid, string bible, string ref, string alt, string group, string domain, string info, string dump) { +SWLog::getSystemLog()->logDebug("bibleSync callback msg: %c; pkt_uuid: %s; bible: %s; ref: %s; alt: %s; group: %s; domain: %s; info: %s; dump: %s", cmd, pkt_uuid.c_str(), bible.c_str(), ref.c_str(), alt.c_str(), group.c_str(), domain.c_str(), info.c_str(), dump.c_str()); + if (bibleSyncListener) { +SWLog::getSystemLog()->logDebug("bibleSync listener is true"); + switch(cmd) { + // error + case 'E': + // mismatch + case 'M': + // new speaker + case 'S': + // dead speaker + case 'D': + // announce + case 'A': + break; + // navigation + case 'N': +SWLog::getSystemLog()->logDebug("bibleSync Nav Received: %s", ref.c_str()); + (*bibleSyncListener)(ref.c_str()); + break; + } + } +} +#endif class MyStatusReporter : public StatusReporter { public: @@ -326,7 +363,6 @@ } _initStatics; - } // @@ -376,7 +412,7 @@ /* * Class: org_crosswire_sword_SWModule * Method: search - * Signature: (Ljava/lang/String;IJLjava/lang/String;Lorg/crosswire/android/sword/SWModule/SearchProgressReporter;)[Lorg/crosswire/android/sword/SWModule/SearchHit; + * Signature: (Ljava/lang/String;IJLjava/lang/String;Lorg/crosswire/sword/SWModule/SearchProgressReporter;)[Lorg/crosswire/sword/SWModule/SearchHit; */ const struct org_crosswire_sword_SearchHit * SWDLLEXPORT org_crosswire_sword_SWModule_search (SWHANDLE hSWModule, const char *searchString, int searchType, long flags, const char *scope, org_crosswire_sword_SWModule_SearchCallback progressReporter) { @@ -1035,7 +1071,7 @@ /* * Class: org_crosswire_sword_SWMgr * Method: getModInfoList - * Signature: ()[Lorg/crosswire/android/sword/SWMgr/ModInfo; + * Signature: ()[Lorg/crosswire/sword/SWMgr/ModInfo; */ const struct org_crosswire_sword_ModInfo * SWDLLEXPORT org_crosswire_sword_SWMgr_getModInfoList (SWHANDLE hSWMgr) { @@ -1056,24 +1092,36 @@ int i = 0; for (sword::ModMap::iterator it = mgr->Modules.begin(); it != mgr->Modules.end(); ++it) { module = it->second; -// if ((!(module->getConfigEntry("CipherKey"))) || (*(module->getConfigEntry("CipherKey")))) { - SWBuf type = module->getType(); - SWBuf cat = module->getConfigEntry("Category"); - SWBuf version = module->getConfigEntry("Version"); - if (cat.length() > 0) type = cat; - stdstr(&(milist[i].name), assureValidUTF8(module->getName())); - stdstr(&(milist[i].description), assureValidUTF8(module->getDescription())); - stdstr(&(milist[i].category), assureValidUTF8(type.c_str())); - stdstr(&(milist[i].language), assureValidUTF8(module->getLanguage())); - stdstr(&(milist[i].version), assureValidUTF8(version.c_str())); - stdstr(&(milist[i].delta), ""); - const char *cipherKey = module->getConfigEntry("CipherKey"); - if (cipherKey) { - stdstr(&(milist[i].cipherKey), assureValidUTF8(cipherKey)); - } - else milist[i].cipherKey = 0; - if (++i >= size) break; -// } + SWBuf type = module->getType(); + SWBuf cat = module->getConfigEntry("Category"); + SWBuf version = module->getConfigEntry("Version"); + if (cat.length() > 0) type = cat; + stdstr(&(milist[i].name), assureValidUTF8(module->getName())); + stdstr(&(milist[i].description), assureValidUTF8(module->getDescription())); + stdstr(&(milist[i].category), assureValidUTF8(type.c_str())); + stdstr(&(milist[i].language), assureValidUTF8(module->getLanguage())); + stdstr(&(milist[i].version), assureValidUTF8(version.c_str())); + stdstr(&(milist[i].delta), ""); + const char *cipherKey = module->getConfigEntry("CipherKey"); + if (cipherKey) { + stdstr(&(milist[i].cipherKey), assureValidUTF8(cipherKey)); + } + else milist[i].cipherKey = 0; + + ConfigEntMap::const_iterator start = module->getConfig().lower_bound("Feature"); + ConfigEntMap::const_iterator end = module->getConfig().upper_bound("Feature"); + + int featureCount = 0; + for (ConfigEntMap::const_iterator it = start; it != end; ++it) { + ++featureCount; + } + milist[i].features = (const char **)calloc(featureCount+1, sizeof(const char *)); + featureCount = 0; + for (ConfigEntMap::const_iterator it = start; it != end; ++it) { + stdstr((char **)&(milist[i].features[featureCount++]), assureValidUTF8(it->second)); + } + + if (++i >= size) break; } hmgr->modInfo = milist; return milist; @@ -1082,7 +1130,7 @@ /* * Class: org_crosswire_sword_SWMgr * Method: getModuleByName - * Signature: (Ljava/lang/String;)Lorg/crosswire/android/sword/SWModule; + * Signature: (Ljava/lang/String;)Lorg/crosswire/sword/SWModule; */ SWHANDLE SWDLLEXPORT org_crosswire_sword_SWMgr_getModuleByName (SWHANDLE hSWMgr, const char *moduleName) { @@ -1482,7 +1530,7 @@ /* * Class: org_crosswire_sword_InstallMgr * Method: new - * Signature: (Ljava/lang/String;Lorg/crosswire/android/sword/SWModule/SearchProgressReporter;)V + * Signature: (Ljava/lang/String;Lorg/crosswire/sword/SWModule/SearchProgressReporter;)V */ SWHANDLE SWDLLEXPORT org_crosswire_sword_InstallMgr_new (const char *baseDir, org_crosswire_sword_InstallMgr_StatusCallback statusReporter) { @@ -1542,7 +1590,7 @@ /* * Class: org_crosswire_sword_InstallMgr * Method: uninstallModule - * Signature: (Lorg/crosswire/android/sword/SWMgr;Ljava/lang/String;)I + * Signature: (Lorg/crosswire/sword/SWMgr;Ljava/lang/String;)I */ int SWDLLEXPORT org_crosswire_sword_InstallMgr_uninstallModule (SWHANDLE hInstallMgr, SWHANDLE hSWMgr_removeFrom, const char *modName) { @@ -1607,7 +1655,7 @@ /* * Class: org_crosswire_sword_InstallMgr * Method: getRemoteModInfoList - * Signature: (Lorg/crosswire/android/sword/SWMgr;Ljava/lang/String;)[Lorg/crosswire/android/sword/SWMgr/ModInfo; + * Signature: (Lorg/crosswire/sword/SWMgr;Ljava/lang/String;)[Lorg/crosswire/sword/SWMgr/ModInfo; */ const struct org_crosswire_sword_ModInfo * SWDLLEXPORT org_crosswire_sword_InstallMgr_getRemoteModInfoList (SWHANDLE hInstallMgr, SWHANDLE hSWMgr_deltaCompareTo, const char *sourceName) { @@ -1656,6 +1704,19 @@ stdstr(&(retVal[i].version), assureValidUTF8(version.c_str())); stdstr(&(retVal[i].delta), assureValidUTF8(statusString.c_str())); stdstr(&(retVal[i].cipherKey), cipherKey ? (const char *)assureValidUTF8(cipherKey) : (const char *)0); + + ConfigEntMap::const_iterator start = module->getConfig().lower_bound("Feature"); + ConfigEntMap::const_iterator end = module->getConfig().upper_bound("Feature"); + + int featureCount = 0; + for (ConfigEntMap::const_iterator it = start; it != end; ++it) { + ++featureCount; + } + retVal[i].features = (const char **)calloc(featureCount+1, sizeof(const char *)); + featureCount = 0; + for (ConfigEntMap::const_iterator it = start; it != end; ++it) { + stdstr((char **)&(retVal[i].features[featureCount++]), assureValidUTF8(it->second)); + } if (++i >= size) break; } hinstmgr->modInfo = retVal; @@ -1665,7 +1726,7 @@ /* * Class: org_crosswire_sword_InstallMgr * Method: remoteInstallModule - * Signature: (Lorg/crosswire/android/sword/SWMgr;Ljava/lang/String;Ljava/lang/String;)I + * Signature: (Lorg/crosswire/sword/SWMgr;Ljava/lang/String;Ljava/lang/String;)I */ int SWDLLEXPORT org_crosswire_sword_InstallMgr_remoteInstallModule (SWHANDLE hInstallMgr_from, SWHANDLE hSWMgr_to, const char *sourceName, const char *modName) { @@ -1699,7 +1760,7 @@ /* * Class: org_crosswire_sword_InstallMgr * Method: getRemoteModuleByName - * Signature: (Ljava/lang/String;Ljava/lang/String;)Lorg/crosswire/android/sword/SWModule; + * Signature: (Ljava/lang/String;Ljava/lang/String;)Lorg/crosswire/sword/SWModule; */ SWHANDLE SWDLLEXPORT org_crosswire_sword_InstallMgr_getRemoteModuleByName (SWHANDLE hInstallMgr, const char *sourceName, const char *modName) { @@ -1723,3 +1784,104 @@ return (SWHANDLE)hinstmgr->getModuleHandle(module); } + +/* + * Class: org_crosswire_sword_SWMgr + * Method: sendBibleSyncMessage + * Signature: (Ljava/lang/String;)V + */ +void SWDLLEXPORT org_crosswire_sword_SWMgr_sendBibleSyncMessage + (SWHANDLE hMgr, const char *osisRefRaw) { +SWLog::getSystemLog()->logDebug("libsword: sendBibleSyncMessage() begin"); + +#ifdef BIBLESYNC + if (!bibleSync) { +SWLog::getSystemLog()->logDebug("libsword: sendBibleSyncMessage() bibleSync not active; message not sent."); + return; + } + SWBuf modName = "Bible"; + SWBuf osisRef = osisRefRaw; + const char *modNamePrefix = osisRef.stripPrefix(':'); + if (modNamePrefix) modName = modNamePrefix; + + BibleSync_xmit_status result = bibleSync->Transmit(BSP_SYNC, modName.c_str(), osisRef.c_str()); +SWLog::getSystemLog()->logDebug("libsword: sendBibleSyncMessage() finished with status code: %d", result); +#else +SWLog::getSystemLog()->logDebug("libsword: sendBibleSyncMessage() bibleSync not active; message not sent."); +#endif + +} + + +/* + * NOTE: this method blocks and should be called in a new thread + * Class: org_crosswire_sword_SWMgr + * Method: startBibleSync + * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/crosswire/sword/SWMgr/BibleSyncListener;)V + */ +void SWDLLEXPORT org_crosswire_sword_SWMgr_startBibleSync + (SWHANDLE hMgr, const char *appNameJS, const char *userNameJS, const char *passphraseJS, org_biblesync_MessageReceivedCallback callback) { + + SWLog::getSystemLog()->logDebug("startBibleSync() start"); + // only one thread + static bool starting = false; + if (starting) return; + starting = true; + // kill any previous loop +#ifdef BIBLESYNC + if (bibleSyncListener) bibleSyncListener = 0; + SWBuf appName = appNameJS; + SWBuf userName = userNameJS; + SWBuf passphrase = passphraseJS; + + // in case we're restarting, wait for our loop to finish for sure + if (bibleSync) { +SWLog::getSystemLog()->logDebug("startBibleSync() sleeping 3 seconds"); + sleep(3); + } + + bibleSyncListener = callback; + SWLog::getSystemLog()->logDebug("startBibleSync - calling init"); + + if (!bibleSync) { +SWLog::getSystemLog()->logDebug("bibleSync initializing c-tor"); + bibleSync = new BibleSync(appName.c_str(), (const char *)SWVersion().currentVersion, userName.c_str()); +SWLog::getSystemLog()->logDebug("bibleSync initializing setMode"); + bibleSync->setMode(BSP_MODE_PERSONAL, bibleSyncCallback, passphrase.c_str()); + } + SWLog::getSystemLog()->logDebug("startBibleSync - starting while listener"); + starting = false; + while(bibleSyncListener) { + SWLog::getSystemLog()->logDebug("bibleSyncListener - while loop iteration"); + BibleSync::Receive(bibleSync); + SWLog::getSystemLog()->logDebug("bibleSyncListener - sleeping for 2 seconds"); + sleep(2); + } + delete bibleSync; + bibleSync = 0; +#else + SWLog::getSystemLog()->logDebug("registerBibleSyncListener: !!! BibleSync disabled in native code."); +#endif +} + + +/* + * Class: org_crosswire_sword_SWMgr + * Method: stopBibleSync + * Signature: (V;)V + */ +void SWDLLEXPORT org_crosswire_sword_SWMgr_stopBibleSync + (SWHANDLE hMgr) { + +SWLog::getSystemLog()->logDebug("stopBibleSync()"); +#ifdef BIBLESYNC + // if we have a listen loop going, just break the loop; the bibleSync cleanup will happen there + if (::bibleSyncListener) ::bibleSyncListener = 0; + else if (bibleSync) { + delete bibleSync; + bibleSync = 0; + } +#else +SWLog::getSystemLog()->logDebug("registerBibleSyncListener: !!! BibleSync disabled in native code."); +#endif +} Modified: trunk/bindings/java-jni/jni/swordstub.cpp =================================================================== --- trunk/bindings/java-jni/jni/swordstub.cpp 2018-03-25 13:17:56 UTC (rev 3575) +++ trunk/bindings/java-jni/jni/swordstub.cpp 2018-03-25 22:31:33 UTC (rev 3576) @@ -226,7 +226,6 @@ #ifdef BIBLESYNC void bibleSyncCallback(char cmd, string pkt_uuid, string bible, string ref, string alt, string group, string domain, string info, string dump) { -//void bibleSyncCallback(char cmd, string bible, string ref, string alt, string group, string domain, string info, string dump) { SWLog::getSystemLog()->logDebug("bibleSync callback msg: %c; pkt_uuid: %s; bible: %s; ref: %s; alt: %s; group: %s; domain: %s; info: %s; dump: %s", cmd, pkt_uuid.c_str(), bible.c_str(), ref.c_str(), alt.c_str(), group.c_str(), domain.c_str(), info.c_str(), dump.c_str()); if (::bibleSyncListener) { SWLog::getSystemLog()->logDebug("bibleSync listener is true"); Added: trunk/bindings/objc/SWORD/Info.plist =================================================================== --- trunk/bindings/objc/SWORD/Info.plist (rev 0) +++ trunk/bindings/objc/SWORD/Info.plist 2018-03-25 22:31:33 UTC (rev 3576) @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSPrincipalClass + + + Added: trunk/bindings/objc/SWORD/SWORD/SWORD.h =================================================================== --- trunk/bindings/objc/SWORD/SWORD/SWORD.h (rev 0) +++ trunk/bindings/objc/SWORD/SWORD/SWORD.h 2018-03-25 22:31:33 UTC (rev 3576) @@ -0,0 +1,13 @@ +// +// SWORD.h +// SWORD +// +// Created by scribe on 11/29/17. +// Copyright ? 2017 CrossWire Bible Society. All rights reserved. +// + +#import + + at interface SWORD : NSObject + + at end Added: trunk/bindings/objc/SWORD/SWORD/SWORD.m =================================================================== --- trunk/bindings/objc/SWORD/SWORD/SWORD.m (rev 0) +++ trunk/bindings/objc/SWORD/SWORD/SWORD.m 2018-03-25 22:31:33 UTC (rev 3576) @@ -0,0 +1,13 @@ +// +// SWORD.m +// SWORD +// +// Created by scribe on 11/29/17. +// Copyright ? 2017 CrossWire Bible Society. All rights reserved. +// + +#import "SWORD.h" + + at implementation SWORD + + at end Added: trunk/bindings/objc/SWORD/SWORD.h =================================================================== --- trunk/bindings/objc/SWORD/SWORD.h (rev 0) +++ trunk/bindings/objc/SWORD/SWORD.h 2018-03-25 22:31:33 UTC (rev 3576) @@ -0,0 +1,12 @@ +// +// SWORD.h +// SWORD +// +// Created by scribe on 11/14/17. +// + +#import + +//@interface SWORD : NSObject + +//@end Added: trunk/bindings/objc/SWORD/SWORD.xcodeproj/project.pbxproj =================================================================== --- trunk/bindings/objc/SWORD/SWORD.xcodeproj/project.pbxproj (rev 0) +++ trunk/bindings/objc/SWORD/SWORD.xcodeproj/project.pbxproj 2018-03-25 22:31:33 UTC (rev 3576) @@ -0,0 +1,1083 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 48; + objects = { + +/* Begin PBXAggregateTarget section */ + 0A22C5171FCF26FD00C02113 /* SWORDUniversal */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 0A22C5181FCF26FD00C02113 /* Build configuration list for PBXAggregateTarget "SWORDUniversal" */; + buildPhases = ( + 0A22C67C1FCF4D4200C02113 /* ShellScript */, + ); + dependencies = ( + ); + name = SWORDUniversal; + productName = SWORDUniversal; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 0A22C5111FCF26D700C02113 /* SWORD.h in Copy Files */ = {isa = PBXBuildFile; fileRef = 0A22C50E1FCF26D700C02113 /* SWORD.h */; }; + 0A22C5281FCF295E00C02113 /* url.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C51E1FCF295D00C02113 /* url.cpp */; }; + 0A22C5291FCF295E00C02113 /* swversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C51F1FCF295D00C02113 /* swversion.cpp */; }; + 0A22C52B1FCF295E00C02113 /* ftplib.c in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5211FCF295D00C02113 /* ftplib.c */; }; + 0A22C52C1FCF295E00C02113 /* swobject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5221FCF295D00C02113 /* swobject.cpp */; }; + 0A22C52D1FCF295E00C02113 /* utilxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5231FCF295D00C02113 /* utilxml.cpp */; }; + 0A22C52E1FCF295E00C02113 /* swbuf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5241FCF295D00C02113 /* swbuf.cpp */; }; + 0A22C52F1FCF295E00C02113 /* ftpparse.c in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5251FCF295D00C02113 /* ftpparse.c */; }; + 0A22C5301FCF295E00C02113 /* roman.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5261FCF295E00C02113 /* roman.cpp */; }; + 0A22C5311FCF295E00C02113 /* utilstr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5271FCF295E00C02113 /* utilstr.cpp */; }; + 0A22C54D1FCF29A000C02113 /* inffast.c in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5321FCF299B00C02113 /* inffast.c */; }; + 0A22C54E1FCF29A000C02113 /* infback.c in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5371FCF299B00C02113 /* infback.c */; }; + 0A22C54F1FCF29A000C02113 /* uncompr.c in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5381FCF299C00C02113 /* uncompr.c */; }; + 0A22C5501FCF29A000C02113 /* inflate.c in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5391FCF299C00C02113 /* inflate.c */; }; + 0A22C5511FCF29A000C02113 /* untgz.c in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C53A1FCF299C00C02113 /* untgz.c */; }; + 0A22C5521FCF29A000C02113 /* inftrees.c in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C53B1FCF299C00C02113 /* inftrees.c */; }; + 0A22C5531FCF29A000C02113 /* gzlib.c in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C53C1FCF299C00C02113 /* gzlib.c */; }; + 0A22C5541FCF29A000C02113 /* zutil.c in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C53E1FCF299D00C02113 /* zutil.c */; }; + 0A22C5551FCF29A000C02113 /* crc32.c in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5421FCF299D00C02113 /* crc32.c */; }; + 0A22C5561FCF29A000C02113 /* gzread.c in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5431FCF299E00C02113 /* gzread.c */; }; + 0A22C5571FCF29A000C02113 /* adler32.c in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5471FCF299F00C02113 /* adler32.c */; }; + 0A22C5581FCF29A000C02113 /* compress.c in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5481FCF299F00C02113 /* compress.c */; }; + 0A22C5591FCF29A000C02113 /* deflate.c in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5491FCF299F00C02113 /* deflate.c */; }; + 0A22C55A1FCF29A000C02113 /* trees.c in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C54A1FCF299F00C02113 /* trees.c */; }; + 0A22C55B1FCF29A000C02113 /* gzwrite.c in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C54B1FCF299F00C02113 /* gzwrite.c */; }; + 0A22C55C1FCF29A000C02113 /* gzclose.c in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C54C1FCF29A000C02113 /* gzclose.c */; }; + 0A22C55E1FCF29E600C02113 /* swmodule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C55D1FCF29E600C02113 /* swmodule.cpp */; }; + 0A22C5731FCF2A0E00C02113 /* encfiltmgr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C55F1FCF2A0A00C02113 /* encfiltmgr.cpp */; }; + 0A22C5741FCF2A0E00C02113 /* remotetrans.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5601FCF2A0A00C02113 /* remotetrans.cpp */; }; + 0A22C5751FCF2A0E00C02113 /* rtranspgdrive.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5611FCF2A0A00C02113 /* rtranspgdrive.cpp */; }; + 0A22C5771FCF2A0E00C02113 /* swcacher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5631FCF2A0B00C02113 /* swcacher.cpp */; }; + 0A22C5781FCF2A0E00C02113 /* swlocale.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5641FCF2A0B00C02113 /* swlocale.cpp */; }; + 0A22C5791FCF2A0E00C02113 /* markupfiltmgr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5651FCF2A0B00C02113 /* markupfiltmgr.cpp */; }; + 0A22C57A1FCF2A0E00C02113 /* localemgr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5661FCF2A0B00C02113 /* localemgr.cpp */; }; + 0A22C57B1FCF2A0E00C02113 /* stringmgr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5671FCF2A0B00C02113 /* stringmgr.cpp */; }; + 0A22C57C1FCF2A0E00C02113 /* curlftpt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5681FCF2A0C00C02113 /* curlftpt.cpp */; }; + 0A22C57D1FCF2A0E00C02113 /* swsearchable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5691FCF2A0C00C02113 /* swsearchable.cpp */; }; + 0A22C57E1FCF2A0E00C02113 /* ftplibftpt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C56A1FCF2A0C00C02113 /* ftplibftpt.cpp */; }; + 0A22C57F1FCF2A0E00C02113 /* curlhttpt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C56B1FCF2A0C00C02113 /* curlhttpt.cpp */; }; + 0A22C5801FCF2A0E00C02113 /* swconfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C56C1FCF2A0D00C02113 /* swconfig.cpp */; }; + 0A22C5811FCF2A0E00C02113 /* filemgr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C56D1FCF2A0D00C02113 /* filemgr.cpp */; }; + 0A22C5821FCF2A0E00C02113 /* swfiltermgr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C56E1FCF2A0D00C02113 /* swfiltermgr.cpp */; }; + 0A22C5831FCF2A0E00C02113 /* versificationmgr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5701FCF2A0D00C02113 /* versificationmgr.cpp */; }; + 0A22C5841FCF2A0E00C02113 /* swmgr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5711FCF2A0E00C02113 /* swmgr.cpp */; }; + 0A22C5851FCF2A0E00C02113 /* installmgr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5721FCF2A0E00C02113 /* installmgr.cpp */; }; + 0A22C58E1FCF2A8D00C02113 /* versekey.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5871FCF2A8B00C02113 /* versekey.cpp */; }; + 0A22C58F1FCF2A8D00C02113 /* listkey.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5881FCF2A8C00C02113 /* listkey.cpp */; }; + 0A22C5901FCF2A8D00C02113 /* swkey.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5891FCF2A8C00C02113 /* swkey.cpp */; }; + 0A22C5911FCF2A8D00C02113 /* versetreekey.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C58A1FCF2A8C00C02113 /* versetreekey.cpp */; }; + 0A22C5921FCF2A8D00C02113 /* treekeyidx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C58B1FCF2A8C00C02113 /* treekeyidx.cpp */; }; + 0A22C5931FCF2A8D00C02113 /* treekey.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C58C1FCF2A8C00C02113 /* treekey.cpp */; }; + 0A22C5941FCF2A8D00C02113 /* strkey.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C58D1FCF2A8D00C02113 /* strkey.cpp */; }; + 0A22C5971FCF2ABC00C02113 /* swlog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5951FCF2ABB00C02113 /* swlog.cpp */; }; + 0A22C5981FCF2ABC00C02113 /* swdisp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5961FCF2ABC00C02113 /* swdisp.cpp */; }; + 0A22C5A61FCF2B0D00C02113 /* zverse4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5991FCF2B0A00C02113 /* zverse4.cpp */; }; + 0A22C5A71FCF2B0D00C02113 /* zstr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C59A1FCF2B0B00C02113 /* zstr.cpp */; }; + 0A22C5A81FCF2B0D00C02113 /* zipcomprs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C59B1FCF2B0B00C02113 /* zipcomprs.cpp */; }; + 0A22C5A91FCF2B0D00C02113 /* zverse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C59C1FCF2B0B00C02113 /* zverse.cpp */; }; + 0A22C5AA1FCF2B0D00C02113 /* lzsscomprs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C59D1FCF2B0B00C02113 /* lzsscomprs.cpp */; }; + 0A22C5AB1FCF2B0D00C02113 /* rawverse4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C59E1FCF2B0B00C02113 /* rawverse4.cpp */; }; + 0A22C5AC1FCF2B0D00C02113 /* rawverse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C59F1FCF2B0C00C02113 /* rawverse.cpp */; }; + 0A22C5AD1FCF2B0D00C02113 /* swcomprs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5A01FCF2B0C00C02113 /* swcomprs.cpp */; }; + 0A22C5AE1FCF2B0D00C02113 /* swcipher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5A11FCF2B0C00C02113 /* swcipher.cpp */; }; + 0A22C5AF1FCF2B0D00C02113 /* rawstr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5A21FCF2B0C00C02113 /* rawstr.cpp */; }; + 0A22C5B01FCF2B0D00C02113 /* rawstr4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5A31FCF2B0C00C02113 /* rawstr4.cpp */; }; + 0A22C5B11FCF2B0D00C02113 /* sapphire.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5A41FCF2B0C00C02113 /* sapphire.cpp */; }; + 0A22C5B21FCF2B0D00C02113 /* entriesblk.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5A51FCF2B0D00C02113 /* entriesblk.cpp */; }; + 0A22C6051FCF2B5600C02113 /* latin1utf8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5B31FCF2B4400C02113 /* latin1utf8.cpp */; }; + 0A22C6061FCF2B5600C02113 /* thmlhtml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5B41FCF2B4400C02113 /* thmlhtml.cpp */; }; + 0A22C6071FCF2B5600C02113 /* gbfthml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5B51FCF2B4500C02113 /* gbfthml.cpp */; }; + 0A22C6081FCF2B5600C02113 /* thmllatex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5B61FCF2B4500C02113 /* thmllatex.cpp */; }; + 0A22C6091FCF2B5600C02113 /* thmlrtf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5B71FCF2B4500C02113 /* thmlrtf.cpp */; }; + 0A22C60A1FCF2B5600C02113 /* utf8cantillation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5B81FCF2B4500C02113 /* utf8cantillation.cpp */; }; + 0A22C60B1FCF2B5600C02113 /* osisscripref.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5B91FCF2B4600C02113 /* osisscripref.cpp */; }; + 0A22C60C1FCF2B5600C02113 /* osismorphsegmentation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5BA1FCF2B4600C02113 /* osismorphsegmentation.cpp */; }; + 0A22C60D1FCF2B5600C02113 /* swoptfilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5BB1FCF2B4600C02113 /* swoptfilter.cpp */; }; + 0A22C60E1FCF2B5600C02113 /* teiplain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5BC1FCF2B4600C02113 /* teiplain.cpp */; }; + 0A22C60F1FCF2B5600C02113 /* thmlgbf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5BD1FCF2B4700C02113 /* thmlgbf.cpp */; }; + 0A22C6101FCF2B5600C02113 /* gbfrtf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5BE1FCF2B4700C02113 /* gbfrtf.cpp */; }; + 0A22C6111FCF2B5600C02113 /* utf8transliterator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5BF1FCF2B4700C02113 /* utf8transliterator.cpp */; }; + 0A22C6121FCF2B5600C02113 /* utf16utf8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5C01FCF2B4700C02113 /* utf16utf8.cpp */; }; + 0A22C6131FCF2B5600C02113 /* thmlmorph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5C11FCF2B4800C02113 /* thmlmorph.cpp */; }; + 0A22C6141FCF2B5600C02113 /* osisheadings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5C21FCF2B4800C02113 /* osisheadings.cpp */; }; + 0A22C6151FCF2B5600C02113 /* gbfwordjs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5C31FCF2B4800C02113 /* gbfwordjs.cpp */; }; + 0A22C6161FCF2B5600C02113 /* gbfwebif.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5C41FCF2B4800C02113 /* gbfwebif.cpp */; }; + 0A22C6171FCF2B5600C02113 /* gbfplain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5C51FCF2B4900C02113 /* gbfplain.cpp */; }; + 0A22C6181FCF2B5600C02113 /* gbfredletterwords.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5C61FCF2B4900C02113 /* gbfredletterwords.cpp */; }; + 0A22C6191FCF2B5600C02113 /* osiswebif.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5C71FCF2B4900C02113 /* osiswebif.cpp */; }; + 0A22C61A1FCF2B5600C02113 /* teilatex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5C81FCF2B4900C02113 /* teilatex.cpp */; }; + 0A22C61B1FCF2B5600C02113 /* gbfhtml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5C91FCF2B4A00C02113 /* gbfhtml.cpp */; }; + 0A22C61C1FCF2B5600C02113 /* thmlhtmlhref.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5CA1FCF2B4A00C02113 /* thmlhtmlhref.cpp */; }; + 0A22C61D1FCF2B5600C02113 /* osisglosses.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5CB1FCF2B4A00C02113 /* osisglosses.cpp */; }; + 0A22C61E1FCF2B5600C02113 /* thmlxhtml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5CC1FCF2B4A00C02113 /* thmlxhtml.cpp */; }; + 0A22C61F1FCF2B5600C02113 /* utf8utf16.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5CD1FCF2B4B00C02113 /* utf8utf16.cpp */; }; + 0A22C6201FCF2B5600C02113 /* gbflatex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5CE1FCF2B4B00C02113 /* gbflatex.cpp */; }; + 0A22C6211FCF2B5600C02113 /* scsuutf8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5CF1FCF2B4B00C02113 /* scsuutf8.cpp */; }; + 0A22C6221FCF2B5600C02113 /* osisredletterwords.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5D01FCF2B4B00C02113 /* osisredletterwords.cpp */; }; + 0A22C6231FCF2B5600C02113 /* osisrtf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5D11FCF2B4B00C02113 /* osisrtf.cpp */; }; + 0A22C6241FCF2B5600C02113 /* osisvariants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5D21FCF2B4C00C02113 /* osisvariants.cpp */; }; + 0A22C6251FCF2B5600C02113 /* thmlscripref.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5D31FCF2B4C00C02113 /* thmlscripref.cpp */; }; + 0A22C6261FCF2B5600C02113 /* osisstrongs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5D41FCF2B4C00C02113 /* osisstrongs.cpp */; }; + 0A22C6271FCF2B5600C02113 /* utf8arabicpoints.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5D51FCF2B4C00C02113 /* utf8arabicpoints.cpp */; }; + 0A22C6281FCF2B5600C02113 /* osishtmlhref.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5D61FCF2B4C00C02113 /* osishtmlhref.cpp */; }; + 0A22C6291FCF2B5600C02113 /* utf8html.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5D71FCF2B4D00C02113 /* utf8html.cpp */; }; + 0A22C62A1FCF2B5600C02113 /* thmllemma.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5D81FCF2B4D00C02113 /* thmllemma.cpp */; }; + 0A22C62B1FCF2B5600C02113 /* thmlfootnotes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5D91FCF2B4D00C02113 /* thmlfootnotes.cpp */; }; + 0A22C62C1FCF2B5600C02113 /* swbasicfilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5DA1FCF2B4D00C02113 /* swbasicfilter.cpp */; }; + 0A22C62D1FCF2B5600C02113 /* utf8nfkd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5DB1FCF2B4D00C02113 /* utf8nfkd.cpp */; }; + 0A22C62E1FCF2B5600C02113 /* gbfmorph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5DC1FCF2B4E00C02113 /* gbfmorph.cpp */; }; + 0A22C62F1FCF2B5600C02113 /* utf8bidireorder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5DD1FCF2B4E00C02113 /* utf8bidireorder.cpp */; }; + 0A22C6301FCF2B5600C02113 /* greeklexattribs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5DE1FCF2B4E00C02113 /* greeklexattribs.cpp */; }; + 0A22C6311FCF2B5600C02113 /* osisplain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5DF1FCF2B4E00C02113 /* osisplain.cpp */; }; + 0A22C6321FCF2B5600C02113 /* osiswordjs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5E01FCF2B4E00C02113 /* osiswordjs.cpp */; }; + 0A22C6331FCF2B5600C02113 /* utf8nfc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5E11FCF2B4F00C02113 /* utf8nfc.cpp */; }; + 0A22C6341FCF2B5600C02113 /* thmlwordjs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5E21FCF2B4F00C02113 /* thmlwordjs.cpp */; }; + 0A22C6351FCF2B5600C02113 /* gbffootnotes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5E31FCF2B4F00C02113 /* gbffootnotes.cpp */; }; + 0A22C6361FCF2B5600C02113 /* utf8latin1.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5E41FCF2B4F00C02113 /* utf8latin1.cpp */; }; + 0A22C6371FCF2B5600C02113 /* osislemma.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5E51FCF2B4F00C02113 /* osislemma.cpp */; }; + 0A22C6381FCF2B5600C02113 /* osisxlit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5E61FCF2B5000C02113 /* osisxlit.cpp */; }; + 0A22C6391FCF2B5600C02113 /* osisreferencelinks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5E71FCF2B5000C02113 /* osisreferencelinks.cpp */; }; + 0A22C63A1FCF2B5600C02113 /* osismorph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5E81FCF2B5000C02113 /* osismorph.cpp */; }; + 0A22C63B1FCF2B5600C02113 /* papyriplain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5E91FCF2B5000C02113 /* papyriplain.cpp */; }; + 0A22C63C1FCF2B5600C02113 /* osisosis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5EA1FCF2B5000C02113 /* osisosis.cpp */; }; + 0A22C63D1FCF2B5600C02113 /* thmlheadings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5EB1FCF2B5100C02113 /* thmlheadings.cpp */; }; + 0A22C63E1FCF2B5600C02113 /* utf8scsu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5EC1FCF2B5100C02113 /* utf8scsu.cpp */; }; + 0A22C63F1FCF2B5600C02113 /* gbfxhtml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5ED1FCF2B5100C02113 /* gbfxhtml.cpp */; }; + 0A22C6401FCF2B5600C02113 /* latin1utf16.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5EE1FCF2B5100C02113 /* latin1utf16.cpp */; }; + 0A22C6411FCF2B5600C02113 /* teirtf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5EF1FCF2B5100C02113 /* teirtf.cpp */; }; + 0A22C6421FCF2B5600C02113 /* thmlplain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5F01FCF2B5200C02113 /* thmlplain.cpp */; }; + 0A22C6431FCF2B5600C02113 /* gbfosis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5F11FCF2B5200C02113 /* gbfosis.cpp */; }; + 0A22C6441FCF2B5600C02113 /* unicodertf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5F21FCF2B5200C02113 /* unicodertf.cpp */; }; + 0A22C6451FCF2B5600C02113 /* thmlstrongs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5F31FCF2B5200C02113 /* thmlstrongs.cpp */; }; + 0A22C6461FCF2B5600C02113 /* gbfhtmlhref.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5F41FCF2B5200C02113 /* gbfhtmlhref.cpp */; }; + 0A22C6471FCF2B5600C02113 /* thmlwebif.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5F51FCF2B5300C02113 /* thmlwebif.cpp */; }; + 0A22C6481FCF2B5600C02113 /* osisenum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5F61FCF2B5300C02113 /* osisenum.cpp */; }; + 0A22C6491FCF2B5600C02113 /* rtfhtml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5F71FCF2B5300C02113 /* rtfhtml.cpp */; }; + 0A22C64A1FCF2B5600C02113 /* osisfootnotes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5F81FCF2B5300C02113 /* osisfootnotes.cpp */; }; + 0A22C64B1FCF2B5600C02113 /* teixhtml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5F91FCF2B5300C02113 /* teixhtml.cpp */; }; + 0A22C64C1FCF2B5600C02113 /* thmlosis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5FA1FCF2B5400C02113 /* thmlosis.cpp */; }; + 0A22C64D1FCF2B5600C02113 /* gbfheadings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5FB1FCF2B5400C02113 /* gbfheadings.cpp */; }; + 0A22C64E1FCF2B5600C02113 /* thmlvariants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5FC1FCF2B5400C02113 /* thmlvariants.cpp */; }; + 0A22C64F1FCF2B5600C02113 /* utf8greekaccents.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5FD1FCF2B5400C02113 /* utf8greekaccents.cpp */; }; + 0A22C6501FCF2B5600C02113 /* utf8hebrewpoints.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5FE1FCF2B5400C02113 /* utf8hebrewpoints.cpp */; }; + 0A22C6511FCF2B5600C02113 /* teihtmlhref.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C5FF1FCF2B5500C02113 /* teihtmlhref.cpp */; }; + 0A22C6521FCF2B5600C02113 /* gbfstrongs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C6001FCF2B5500C02113 /* gbfstrongs.cpp */; }; + 0A22C6531FCF2B5600C02113 /* utf8arshaping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C6011FCF2B5500C02113 /* utf8arshaping.cpp */; }; + 0A22C6541FCF2B5600C02113 /* osisxhtml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C6021FCF2B5500C02113 /* osisxhtml.cpp */; }; + 0A22C6551FCF2B5600C02113 /* cipherfil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C6031FCF2B5500C02113 /* cipherfil.cpp */; }; + 0A22C6561FCF2B5600C02113 /* osislatex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C6041FCF2B5600C02113 /* osislatex.cpp */; }; + 0A22C6581FCF2B7700C02113 /* swcom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C6571FCF2B7700C02113 /* swcom.cpp */; }; + 0A22C65A1FCF2BAB00C02113 /* rawcom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C6591FCF2BAA00C02113 /* rawcom.cpp */; }; + 0A22C65D1FCF2C3200C02113 /* hrefcom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C65C1FCF2C3200C02113 /* hrefcom.cpp */; }; + 0A22C65F1FCF2C5000C02113 /* rawcom4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C65E1FCF2C5000C02113 /* rawcom4.cpp */; }; + 0A22C6611FCF2C7700C02113 /* rawfiles.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C6601FCF2C7700C02113 /* rawfiles.cpp */; }; + 0A22C6631FCF2CA100C02113 /* zcom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C6621FCF2CA100C02113 /* zcom.cpp */; }; + 0A22C6651FCF2CE500C02113 /* zcom4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C6641FCF2CE400C02113 /* zcom4.cpp */; }; + 0A22C6671FCF2E0F00C02113 /* swgenbook.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C6661FCF2E0F00C02113 /* swgenbook.cpp */; }; + 0A22C6691FCF2E1F00C02113 /* rawgenbook.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C6681FCF2E1F00C02113 /* rawgenbook.cpp */; }; + 0A22C66E1FCF2E5300C02113 /* rawld4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C66A1FCF2E5200C02113 /* rawld4.cpp */; }; + 0A22C66F1FCF2E5300C02113 /* rawld.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C66B1FCF2E5200C02113 /* rawld.cpp */; }; + 0A22C6701FCF2E5300C02113 /* swld.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C66C1FCF2E5300C02113 /* swld.cpp */; }; + 0A22C6711FCF2E5300C02113 /* zld.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C66D1FCF2E5300C02113 /* zld.cpp */; }; + 0A22C6771FCF2E8500C02113 /* rawtext4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C6721FCF2E8400C02113 /* rawtext4.cpp */; }; + 0A22C6781FCF2E8500C02113 /* swtext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C6731FCF2E8400C02113 /* swtext.cpp */; }; + 0A22C6791FCF2E8500C02113 /* rawtext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C6741FCF2E8400C02113 /* rawtext.cpp */; }; + 0A22C67A1FCF2E8500C02113 /* ztext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C6751FCF2E8500C02113 /* ztext.cpp */; }; + 0A22C67B1FCF2E8500C02113 /* ztext4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A22C6761FCF2E8500C02113 /* ztext4.cpp */; }; + 0AC2147D1FCF9D000058DE8C /* flatapi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0AC2147C1FCF9CFF0058DE8C /* flatapi.cpp */; }; + 0AD80317203BE1710080C00C /* biblesync.cc in Sources */ = {isa = PBXBuildFile; fileRef = 0AD80316203BE1710080C00C /* biblesync.cc */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 0A22C5091FCF26D700C02113 /* Copy Files */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + 0A22C5111FCF26D700C02113 /* SWORD.h in Copy Files */, + ); + name = "Copy Files"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0A22C50B1FCF26D700C02113 /* libSWORD.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSWORD.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 0A22C50E1FCF26D700C02113 /* SWORD.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SWORD.h; sourceTree = ""; }; + 0A22C50F1FCF26D700C02113 /* SWORD.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SWORD.m; sourceTree = ""; }; + 0A22C51B1FCF272F00C02113 /* include */ = {isa = PBXFileReference; lastKnownFileType = folder; name = include; path = ../../../../include; sourceTree = ""; }; + 0A22C51E1FCF295D00C02113 /* url.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = url.cpp; path = ../../../src/utilfuns/url.cpp; sourceTree = ""; }; + 0A22C51F1FCF295D00C02113 /* swversion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = swversion.cpp; path = ../../../src/utilfuns/swversion.cpp; sourceTree = ""; }; + 0A22C5211FCF295D00C02113 /* ftplib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ftplib.c; path = ../../../src/utilfuns/ftplib.c; sourceTree = ""; }; + 0A22C5221FCF295D00C02113 /* swobject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = swobject.cpp; path = ../../../src/utilfuns/swobject.cpp; sourceTree = ""; }; + 0A22C5231FCF295D00C02113 /* utilxml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = utilxml.cpp; path = ../../../src/utilfuns/utilxml.cpp; sourceTree = ""; }; + 0A22C5241FCF295D00C02113 /* swbuf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = swbuf.cpp; path = ../../../src/utilfuns/swbuf.cpp; sourceTree = ""; }; + 0A22C5251FCF295D00C02113 /* ftpparse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ftpparse.c; path = ../../../src/utilfuns/ftpparse.c; sourceTree = ""; }; + 0A22C5261FCF295E00C02113 /* roman.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = roman.cpp; path = ../../../src/utilfuns/roman.cpp; sourceTree = ""; }; + 0A22C5271FCF295E00C02113 /* utilstr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = utilstr.cpp; path = ../../../src/utilfuns/utilstr.cpp; sourceTree = ""; }; + 0A22C5321FCF299B00C02113 /* inffast.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = inffast.c; path = ../../../src/utilfuns/zlib/inffast.c; sourceTree = ""; }; + 0A22C5331FCF299B00C02113 /* trees.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = trees.h; path = ../../../src/utilfuns/zlib/trees.h; sourceTree = ""; }; + 0A22C5341FCF299B00C02113 /* crc32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = crc32.h; path = ../../../src/utilfuns/zlib/crc32.h; sourceTree = ""; }; + 0A22C5351FCF299B00C02113 /* inffixed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = inffixed.h; path = ../../../src/utilfuns/zlib/inffixed.h; sourceTree = ""; }; + 0A22C5361FCF299B00C02113 /* inftrees.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = inftrees.h; path = ../../../src/utilfuns/zlib/inftrees.h; sourceTree = ""; }; + 0A22C5371FCF299B00C02113 /* infback.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = infback.c; path = ../../../src/utilfuns/zlib/infback.c; sourceTree = ""; }; + 0A22C5381FCF299C00C02113 /* uncompr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = uncompr.c; path = ../../../src/utilfuns/zlib/uncompr.c; sourceTree = ""; }; + 0A22C5391FCF299C00C02113 /* inflate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = inflate.c; path = ../../../src/utilfuns/zlib/inflate.c; sourceTree = ""; }; + 0A22C53A1FCF299C00C02113 /* untgz.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = untgz.c; path = ../../../src/utilfuns/zlib/untgz.c; sourceTree = ""; }; + 0A22C53B1FCF299C00C02113 /* inftrees.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = inftrees.c; path = ../../../src/utilfuns/zlib/inftrees.c; sourceTree = ""; }; + 0A22C53C1FCF299C00C02113 /* gzlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = gzlib.c; path = ../../../src/utilfuns/zlib/gzlib.c; sourceTree = ""; }; + 0A22C53D1FCF299C00C02113 /* gzguts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gzguts.h; path = ../../../src/utilfuns/zlib/gzguts.h; sourceTree = ""; }; + 0A22C53E1FCF299D00C02113 /* zutil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = zutil.c; path = ../../../src/utilfuns/zlib/zutil.c; sourceTree = ""; }; + 0A22C53F1FCF299D00C02113 /* deflate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = deflate.h; path = ../../../src/utilfuns/zlib/deflate.h; sourceTree = ""; }; + 0A22C5401FCF299D00C02113 /* zlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = zlib.h; path = ../../../src/utilfuns/zlib/zlib.h; sourceTree = ""; }; + 0A22C5411FCF299D00C02113 /* zutil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = zutil.h; path = ../../../src/utilfuns/zlib/zutil.h; sourceTree = ""; }; + 0A22C5421FCF299D00C02113 /* crc32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = crc32.c; path = ../../../src/utilfuns/zlib/crc32.c; sourceTree = ""; }; + 0A22C5431FCF299E00C02113 /* gzread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = gzread.c; path = ../../../src/utilfuns/zlib/gzread.c; sourceTree = ""; }; + 0A22C5441FCF299E00C02113 /* inflate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = inflate.h; path = ../../../src/utilfuns/zlib/inflate.h; sourceTree = ""; }; + 0A22C5451FCF299E00C02113 /* zconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = zconf.h; path = ../../../src/utilfuns/zlib/zconf.h; sourceTree = ""; }; + 0A22C5461FCF299E00C02113 /* inffast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = inffast.h; path = ../../../src/utilfuns/zlib/inffast.h; sourceTree = ""; }; + 0A22C5471FCF299F00C02113 /* adler32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = adler32.c; path = ../../../src/utilfuns/zlib/adler32.c; sourceTree = ""; }; + 0A22C5481FCF299F00C02113 /* compress.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = compress.c; path = ../../../src/utilfuns/zlib/compress.c; sourceTree = ""; }; + 0A22C5491FCF299F00C02113 /* deflate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = deflate.c; path = ../../../src/utilfuns/zlib/deflate.c; sourceTree = ""; }; + 0A22C54A1FCF299F00C02113 /* trees.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = trees.c; path = ../../../src/utilfuns/zlib/trees.c; sourceTree = ""; }; + 0A22C54B1FCF299F00C02113 /* gzwrite.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = gzwrite.c; path = ../../../src/utilfuns/zlib/gzwrite.c; sourceTree = ""; }; + 0A22C54C1FCF29A000C02113 /* gzclose.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = gzclose.c; path = ../../../src/utilfuns/zlib/gzclose.c; sourceTree = ""; }; + 0A22C55D1FCF29E600C02113 /* swmodule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = swmodule.cpp; path = ../../../src/modules/swmodule.cpp; sourceTree = ""; }; + 0A22C55F1FCF2A0A00C02113 /* encfiltmgr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = encfiltmgr.cpp; path = ../../../src/mgr/encfiltmgr.cpp; sourceTree = ""; }; + 0A22C5601FCF2A0A00C02113 /* remotetrans.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = remotetrans.cpp; path = ../../../src/mgr/remotetrans.cpp; sourceTree = ""; }; + 0A22C5611FCF2A0A00C02113 /* rtranspgdrive.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rtranspgdrive.cpp; path = ../../../src/mgr/rtranspgdrive.cpp; sourceTree = ""; }; + 0A22C5631FCF2A0B00C02113 /* swcacher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = swcacher.cpp; path = ../../../src/mgr/swcacher.cpp; sourceTree = ""; }; + 0A22C5641FCF2A0B00C02113 /* swlocale.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = swlocale.cpp; path = ../../../src/mgr/swlocale.cpp; sourceTree = ""; }; + 0A22C5651FCF2A0B00C02113 /* markupfiltmgr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = markupfiltmgr.cpp; path = ../../../src/mgr/markupfiltmgr.cpp; sourceTree = ""; }; + 0A22C5661FCF2A0B00C02113 /* localemgr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = localemgr.cpp; path = ../../../src/mgr/localemgr.cpp; sourceTree = ""; }; + 0A22C5671FCF2A0B00C02113 /* stringmgr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stringmgr.cpp; path = ../../../src/mgr/stringmgr.cpp; sourceTree = ""; }; + 0A22C5681FCF2A0C00C02113 /* curlftpt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = curlftpt.cpp; path = ../../../src/mgr/curlftpt.cpp; sourceTree = ""; }; + 0A22C5691FCF2A0C00C02113 /* swsearchable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = swsearchable.cpp; path = ../../../src/mgr/swsearchable.cpp; sourceTree = ""; }; + 0A22C56A1FCF2A0C00C02113 /* ftplibftpt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ftplibftpt.cpp; path = ../../../src/mgr/ftplibftpt.cpp; sourceTree = ""; }; + 0A22C56B1FCF2A0C00C02113 /* curlhttpt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = curlhttpt.cpp; path = ../../../src/mgr/curlhttpt.cpp; sourceTree = ""; }; + 0A22C56C1FCF2A0D00C02113 /* swconfig.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = swconfig.cpp; path = ../../../src/mgr/swconfig.cpp; sourceTree = ""; }; + 0A22C56D1FCF2A0D00C02113 /* filemgr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filemgr.cpp; path = ../../../src/mgr/filemgr.cpp; sourceTree = ""; }; + 0A22C56E1FCF2A0D00C02113 /* swfiltermgr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = swfiltermgr.cpp; path = ../../../src/mgr/swfiltermgr.cpp; sourceTree = ""; }; + 0A22C5701FCF2A0D00C02113 /* versificationmgr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = versificationmgr.cpp; path = ../../../src/mgr/versificationmgr.cpp; sourceTree = ""; }; + 0A22C5711FCF2A0E00C02113 /* swmgr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = swmgr.cpp; path = ../../../src/mgr/swmgr.cpp; sourceTree = ""; }; + 0A22C5721FCF2A0E00C02113 /* installmgr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = installmgr.cpp; path = ../../../src/mgr/installmgr.cpp; sourceTree = ""; }; + 0A22C5871FCF2A8B00C02113 /* versekey.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = versekey.cpp; path = ../../../src/keys/versekey.cpp; sourceTree = ""; }; + 0A22C5881FCF2A8C00C02113 /* listkey.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = listkey.cpp; path = ../../../src/keys/listkey.cpp; sourceTree = ""; }; + 0A22C5891FCF2A8C00C02113 /* swkey.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = swkey.cpp; path = ../../../src/keys/swkey.cpp; sourceTree = ""; }; + 0A22C58A1FCF2A8C00C02113 /* versetreekey.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = versetreekey.cpp; path = ../../../src/keys/versetreekey.cpp; sourceTree = ""; }; + 0A22C58B1FCF2A8C00C02113 /* treekeyidx.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = treekeyidx.cpp; path = ../../../src/keys/treekeyidx.cpp; sourceTree = ""; }; + 0A22C58C1FCF2A8C00C02113 /* treekey.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = treekey.cpp; path = ../../../src/keys/treekey.cpp; sourceTree = ""; }; + 0A22C58D1FCF2A8D00C02113 /* strkey.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = strkey.cpp; path = ../../../src/keys/strkey.cpp; sourceTree = ""; }; + 0A22C5951FCF2ABB00C02113 /* swlog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = swlog.cpp; path = ../../../src/frontend/swlog.cpp; sourceTree = ""; }; + 0A22C5961FCF2ABC00C02113 /* swdisp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = swdisp.cpp; path = ../../../src/frontend/swdisp.cpp; sourceTree = ""; }; + 0A22C5991FCF2B0A00C02113 /* zverse4.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = zverse4.cpp; path = ../../../src/modules/common/zverse4.cpp; sourceTree = ""; }; + 0A22C59A1FCF2B0B00C02113 /* zstr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = zstr.cpp; path = ../../../src/modules/common/zstr.cpp; sourceTree = ""; }; + 0A22C59B1FCF2B0B00C02113 /* zipcomprs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = zipcomprs.cpp; path = ../../../src/modules/common/zipcomprs.cpp; sourceTree = ""; }; + 0A22C59C1FCF2B0B00C02113 /* zverse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = zverse.cpp; path = ../../../src/modules/common/zverse.cpp; sourceTree = ""; }; + 0A22C59D1FCF2B0B00C02113 /* lzsscomprs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = lzsscomprs.cpp; path = ../../../src/modules/common/lzsscomprs.cpp; sourceTree = ""; }; + 0A22C59E1FCF2B0B00C02113 /* rawverse4.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rawverse4.cpp; path = ../../../src/modules/common/rawverse4.cpp; sourceTree = ""; }; + 0A22C59F1FCF2B0C00C02113 /* rawverse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rawverse.cpp; path = ../../../src/modules/common/rawverse.cpp; sourceTree = ""; }; + 0A22C5A01FCF2B0C00C02113 /* swcomprs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = swcomprs.cpp; path = ../../../src/modules/common/swcomprs.cpp; sourceTree = ""; }; + 0A22C5A11FCF2B0C00C02113 /* swcipher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = swcipher.cpp; path = ../../../src/modules/common/swcipher.cpp; sourceTree = ""; }; + 0A22C5A21FCF2B0C00C02113 /* rawstr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rawstr.cpp; path = ../../../src/modules/common/rawstr.cpp; sourceTree = ""; }; + 0A22C5A31FCF2B0C00C02113 /* rawstr4.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rawstr4.cpp; path = ../../../src/modules/common/rawstr4.cpp; sourceTree = ""; }; + 0A22C5A41FCF2B0C00C02113 /* sapphire.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sapphire.cpp; path = ../../../src/modules/common/sapphire.cpp; sourceTree = ""; }; + 0A22C5A51FCF2B0D00C02113 /* entriesblk.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = entriesblk.cpp; path = ../../../src/modules/common/entriesblk.cpp; sourceTree = ""; }; + 0A22C5B31FCF2B4400C02113 /* latin1utf8.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = latin1utf8.cpp; path = ../../../src/modules/filters/latin1utf8.cpp; sourceTree = ""; }; + 0A22C5B41FCF2B4400C02113 /* thmlhtml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = thmlhtml.cpp; path = ../../../src/modules/filters/thmlhtml.cpp; sourceTree = ""; }; + 0A22C5B51FCF2B4500C02113 /* gbfthml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gbfthml.cpp; path = ../../../src/modules/filters/gbfthml.cpp; sourceTree = ""; }; + 0A22C5B61FCF2B4500C02113 /* thmllatex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = thmllatex.cpp; path = ../../../src/modules/filters/thmllatex.cpp; sourceTree = ""; }; + 0A22C5B71FCF2B4500C02113 /* thmlrtf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = thmlrtf.cpp; path = ../../../src/modules/filters/thmlrtf.cpp; sourceTree = ""; }; + 0A22C5B81FCF2B4500C02113 /* utf8cantillation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = utf8cantillation.cpp; path = ../../../src/modules/filters/utf8cantillation.cpp; sourceTree = ""; }; + 0A22C5B91FCF2B4600C02113 /* osisscripref.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = osisscripref.cpp; path = ../../../src/modules/filters/osisscripref.cpp; sourceTree = ""; }; + 0A22C5BA1FCF2B4600C02113 /* osismorphsegmentation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = osismorphsegmentation.cpp; path = ../../../src/modules/filters/osismorphsegmentation.cpp; sourceTree = ""; }; + 0A22C5BB1FCF2B4600C02113 /* swoptfilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = swoptfilter.cpp; path = ../../../src/modules/filters/swoptfilter.cpp; sourceTree = ""; }; + 0A22C5BC1FCF2B4600C02113 /* teiplain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = teiplain.cpp; path = ../../../src/modules/filters/teiplain.cpp; sourceTree = ""; }; + 0A22C5BD1FCF2B4700C02113 /* thmlgbf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = thmlgbf.cpp; path = ../../../src/modules/filters/thmlgbf.cpp; sourceTree = ""; }; + 0A22C5BE1FCF2B4700C02113 /* gbfrtf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gbfrtf.cpp; path = ../../../src/modules/filters/gbfrtf.cpp; sourceTree = ""; }; + 0A22C5BF1FCF2B4700C02113 /* utf8transliterator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = utf8transliterator.cpp; path = ../../../src/modules/filters/utf8transliterator.cpp; sourceTree = ""; }; + 0A22C5C01FCF2B4700C02113 /* utf16utf8.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = utf16utf8.cpp; path = ../../../src/modules/filters/utf16utf8.cpp; sourceTree = ""; }; + 0A22C5C11FCF2B4800C02113 /* thmlmorph.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = thmlmorph.cpp; path = ../../../src/modules/filters/thmlmorph.cpp; sourceTree = ""; }; + 0A22C5C21FCF2B4800C02113 /* osisheadings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = osisheadings.cpp; path = ../../../src/modules/filters/osisheadings.cpp; sourceTree = ""; }; + 0A22C5C31FCF2B4800C02113 /* gbfwordjs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gbfwordjs.cpp; path = ../../../src/modules/filters/gbfwordjs.cpp; sourceTree = ""; }; + 0A22C5C41FCF2B4800C02113 /* gbfwebif.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gbfwebif.cpp; path = ../../../src/modules/filters/gbfwebif.cpp; sourceTree = ""; }; + 0A22C5C51FCF2B4900C02113 /* gbfplain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gbfplain.cpp; path = ../../../src/modules/filters/gbfplain.cpp; sourceTree = ""; }; + 0A22C5C61FCF2B4900C02113 /* gbfredletterwords.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gbfredletterwords.cpp; path = ../../../src/modules/filters/gbfredletterwords.cpp; sourceTree = ""; }; + 0A22C5C71FCF2B4900C02113 /* osiswebif.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = osiswebif.cpp; path = ../../../src/modules/filters/osiswebif.cpp; sourceTree = ""; }; + 0A22C5C81FCF2B4900C02113 /* teilatex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = teilatex.cpp; path = ../../../src/modules/filters/teilatex.cpp; sourceTree = ""; }; + 0A22C5C91FCF2B4A00C02113 /* gbfhtml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gbfhtml.cpp; path = ../../../src/modules/filters/gbfhtml.cpp; sourceTree = ""; }; + 0A22C5CA1FCF2B4A00C02113 /* thmlhtmlhref.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = thmlhtmlhref.cpp; path = ../../../src/modules/filters/thmlhtmlhref.cpp; sourceTree = ""; }; + 0A22C5CB1FCF2B4A00C02113 /* osisglosses.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = osisglosses.cpp; path = ../../../src/modules/filters/osisglosses.cpp; sourceTree = ""; }; + 0A22C5CC1FCF2B4A00C02113 /* thmlxhtml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = thmlxhtml.cpp; path = ../../../src/modules/filters/thmlxhtml.cpp; sourceTree = ""; }; + 0A22C5CD1FCF2B4B00C02113 /* utf8utf16.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = utf8utf16.cpp; path = ../../../src/modules/filters/utf8utf16.cpp; sourceTree = ""; }; + 0A22C5CE1FCF2B4B00C02113 /* gbflatex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gbflatex.cpp; path = ../../../src/modules/filters/gbflatex.cpp; sourceTree = ""; }; + 0A22C5CF1FCF2B4B00C02113 /* scsuutf8.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = scsuutf8.cpp; path = ../../../src/modules/filters/scsuutf8.cpp; sourceTree = ""; }; + 0A22C5D01FCF2B4B00C02113 /* osisredletterwords.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = osisredletterwords.cpp; path = ../../../src/modules/filters/osisredletterwords.cpp; sourceTree = ""; }; + 0A22C5D11FCF2B4B00C02113 /* osisrtf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = osisrtf.cpp; path = ../../../src/modules/filters/osisrtf.cpp; sourceTree = ""; }; + 0A22C5D21FCF2B4C00C02113 /* osisvariants.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = osisvariants.cpp; path = ../../../src/modules/filters/osisvariants.cpp; sourceTree = ""; }; + 0A22C5D31FCF2B4C00C02113 /* thmlscripref.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = thmlscripref.cpp; path = ../../../src/modules/filters/thmlscripref.cpp; sourceTree = ""; }; + 0A22C5D41FCF2B4C00C02113 /* osisstrongs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = osisstrongs.cpp; path = ../../../src/modules/filters/osisstrongs.cpp; sourceTree = ""; }; + 0A22C5D51FCF2B4C00C02113 /* utf8arabicpoints.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = utf8arabicpoints.cpp; path = ../../../src/modules/filters/utf8arabicpoints.cpp; sourceTree = ""; }; + 0A22C5D61FCF2B4C00C02113 /* osishtmlhref.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = osishtmlhref.cpp; path = ../../../src/modules/filters/osishtmlhref.cpp; sourceTree = ""; }; + 0A22C5D71FCF2B4D00C02113 /* utf8html.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = utf8html.cpp; path = ../../../src/modules/filters/utf8html.cpp; sourceTree = ""; }; + 0A22C5D81FCF2B4D00C02113 /* thmllemma.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = thmllemma.cpp; path = ../../../src/modules/filters/thmllemma.cpp; sourceTree = ""; }; + 0A22C5D91FCF2B4D00C02113 /* thmlfootnotes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = thmlfootnotes.cpp; path = ../../../src/modules/filters/thmlfootnotes.cpp; sourceTree = ""; }; + 0A22C5DA1FCF2B4D00C02113 /* swbasicfilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = swbasicfilter.cpp; path = ../../../src/modules/filters/swbasicfilter.cpp; sourceTree = ""; }; + 0A22C5DB1FCF2B4D00C02113 /* utf8nfkd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = utf8nfkd.cpp; path = ../../../src/modules/filters/utf8nfkd.cpp; sourceTree = ""; }; + 0A22C5DC1FCF2B4E00C02113 /* gbfmorph.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gbfmorph.cpp; path = ../../../src/modules/filters/gbfmorph.cpp; sourceTree = ""; }; + 0A22C5DD1FCF2B4E00C02113 /* utf8bidireorder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = utf8bidireorder.cpp; path = ../../../src/modules/filters/utf8bidireorder.cpp; sourceTree = ""; }; + 0A22C5DE1FCF2B4E00C02113 /* greeklexattribs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = greeklexattribs.cpp; path = ../../../src/modules/filters/greeklexattribs.cpp; sourceTree = ""; }; + 0A22C5DF1FCF2B4E00C02113 /* osisplain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = osisplain.cpp; path = ../../../src/modules/filters/osisplain.cpp; sourceTree = ""; }; + 0A22C5E01FCF2B4E00C02113 /* osiswordjs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = osiswordjs.cpp; path = ../../../src/modules/filters/osiswordjs.cpp; sourceTree = ""; }; + 0A22C5E11FCF2B4F00C02113 /* utf8nfc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = utf8nfc.cpp; path = ../../../src/modules/filters/utf8nfc.cpp; sourceTree = ""; }; + 0A22C5E21FCF2B4F00C02113 /* thmlwordjs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = thmlwordjs.cpp; path = ../../../src/modules/filters/thmlwordjs.cpp; sourceTree = ""; }; + 0A22C5E31FCF2B4F00C02113 /* gbffootnotes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gbffootnotes.cpp; path = ../../../src/modules/filters/gbffootnotes.cpp; sourceTree = ""; }; + 0A22C5E41FCF2B4F00C02113 /* utf8latin1.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = utf8latin1.cpp; path = ../../../src/modules/filters/utf8latin1.cpp; sourceTree = ""; }; + 0A22C5E51FCF2B4F00C02113 /* osislemma.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = osislemma.cpp; path = ../../../src/modules/filters/osislemma.cpp; sourceTree = ""; }; + 0A22C5E61FCF2B5000C02113 /* osisxlit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = osisxlit.cpp; path = ../../../src/modules/filters/osisxlit.cpp; sourceTree = ""; }; + 0A22C5E71FCF2B5000C02113 /* osisreferencelinks.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = osisreferencelinks.cpp; path = ../../../src/modules/filters/osisreferencelinks.cpp; sourceTree = ""; }; + 0A22C5E81FCF2B5000C02113 /* osismorph.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = osismorph.cpp; path = ../../../src/modules/filters/osismorph.cpp; sourceTree = ""; }; + 0A22C5E91FCF2B5000C02113 /* papyriplain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = papyriplain.cpp; path = ../../../src/modules/filters/papyriplain.cpp; sourceTree = ""; }; + 0A22C5EA1FCF2B5000C02113 /* osisosis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = osisosis.cpp; path = ../../../src/modules/filters/osisosis.cpp; sourceTree = ""; }; + 0A22C5EB1FCF2B5100C02113 /* thmlheadings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = thmlheadings.cpp; path = ../../../src/modules/filters/thmlheadings.cpp; sourceTree = ""; }; + 0A22C5EC1FCF2B5100C02113 /* utf8scsu.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = utf8scsu.cpp; path = ../../../src/modules/filters/utf8scsu.cpp; sourceTree = ""; }; + 0A22C5ED1FCF2B5100C02113 /* gbfxhtml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gbfxhtml.cpp; path = ../../../src/modules/filters/gbfxhtml.cpp; sourceTree = ""; }; + 0A22C5EE1FCF2B5100C02113 /* latin1utf16.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = latin1utf16.cpp; path = ../../../src/modules/filters/latin1utf16.cpp; sourceTree = ""; }; + 0A22C5EF1FCF2B5100C02113 /* teirtf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = teirtf.cpp; path = ../../../src/modules/filters/teirtf.cpp; sourceTree = ""; }; + 0A22C5F01FCF2B5200C02113 /* thmlplain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = thmlplain.cpp; path = ../../../src/modules/filters/thmlplain.cpp; sourceTree = ""; }; + 0A22C5F11FCF2B5200C02113 /* gbfosis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gbfosis.cpp; path = ../../../src/modules/filters/gbfosis.cpp; sourceTree = ""; }; + 0A22C5F21FCF2B5200C02113 /* unicodertf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = unicodertf.cpp; path = ../../../src/modules/filters/unicodertf.cpp; sourceTree = ""; }; + 0A22C5F31FCF2B5200C02113 /* thmlstrongs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = thmlstrongs.cpp; path = ../../../src/modules/filters/thmlstrongs.cpp; sourceTree = ""; }; + 0A22C5F41FCF2B5200C02113 /* gbfhtmlhref.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gbfhtmlhref.cpp; path = ../../../src/modules/filters/gbfhtmlhref.cpp; sourceTree = ""; }; + 0A22C5F51FCF2B5300C02113 /* thmlwebif.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = thmlwebif.cpp; path = ../../../src/modules/filters/thmlwebif.cpp; sourceTree = ""; }; + 0A22C5F61FCF2B5300C02113 /* osisenum.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = osisenum.cpp; path = ../../../src/modules/filters/osisenum.cpp; sourceTree = ""; }; + 0A22C5F71FCF2B5300C02113 /* rtfhtml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rtfhtml.cpp; path = ../../../src/modules/filters/rtfhtml.cpp; sourceTree = ""; }; + 0A22C5F81FCF2B5300C02113 /* osisfootnotes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = osisfootnotes.cpp; path = ../../../src/modules/filters/osisfootnotes.cpp; sourceTree = ""; }; + 0A22C5F91FCF2B5300C02113 /* teixhtml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = teixhtml.cpp; path = ../../../src/modules/filters/teixhtml.cpp; sourceTree = ""; }; + 0A22C5FA1FCF2B5400C02113 /* thmlosis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = thmlosis.cpp; path = ../../../src/modules/filters/thmlosis.cpp; sourceTree = ""; }; + 0A22C5FB1FCF2B5400C02113 /* gbfheadings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gbfheadings.cpp; path = ../../../src/modules/filters/gbfheadings.cpp; sourceTree = ""; }; + 0A22C5FC1FCF2B5400C02113 /* thmlvariants.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = thmlvariants.cpp; path = ../../../src/modules/filters/thmlvariants.cpp; sourceTree = ""; }; + 0A22C5FD1FCF2B5400C02113 /* utf8greekaccents.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = utf8greekaccents.cpp; path = ../../../src/modules/filters/utf8greekaccents.cpp; sourceTree = ""; }; + 0A22C5FE1FCF2B5400C02113 /* utf8hebrewpoints.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = utf8hebrewpoints.cpp; path = ../../../src/modules/filters/utf8hebrewpoints.cpp; sourceTree = ""; }; + 0A22C5FF1FCF2B5500C02113 /* teihtmlhref.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = teihtmlhref.cpp; path = ../../../src/modules/filters/teihtmlhref.cpp; sourceTree = ""; }; + 0A22C6001FCF2B5500C02113 /* gbfstrongs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gbfstrongs.cpp; path = ../../../src/modules/filters/gbfstrongs.cpp; sourceTree = ""; }; + 0A22C6011FCF2B5500C02113 /* utf8arshaping.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = utf8arshaping.cpp; path = ../../../src/modules/filters/utf8arshaping.cpp; sourceTree = ""; }; + 0A22C6021FCF2B5500C02113 /* osisxhtml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = osisxhtml.cpp; path = ../../../src/modules/filters/osisxhtml.cpp; sourceTree = ""; }; + 0A22C6031FCF2B5500C02113 /* cipherfil.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cipherfil.cpp; path = ../../../src/modules/filters/cipherfil.cpp; sourceTree = ""; }; + 0A22C6041FCF2B5600C02113 /* osislatex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = osislatex.cpp; path = ../../../src/modules/filters/osislatex.cpp; sourceTree = ""; }; + 0A22C6571FCF2B7700C02113 /* swcom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = swcom.cpp; path = ../../../src/modules/comments/swcom.cpp; sourceTree = ""; }; + 0A22C6591FCF2BAA00C02113 /* rawcom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rawcom.cpp; path = ../../../src/modules/comments/rawcom/rawcom.cpp; sourceTree = ""; }; + 0A22C65C1FCF2C3200C02113 /* hrefcom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = hrefcom.cpp; path = ../../../src/modules/comments/hrefcom/hrefcom.cpp; sourceTree = ""; }; + 0A22C65E1FCF2C5000C02113 /* rawcom4.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rawcom4.cpp; path = ../../../src/modules/comments/rawcom4/rawcom4.cpp; sourceTree = ""; }; + 0A22C6601FCF2C7700C02113 /* rawfiles.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rawfiles.cpp; path = ../../../src/modules/comments/rawfiles/rawfiles.cpp; sourceTree = ""; }; + 0A22C6621FCF2CA100C02113 /* zcom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = zcom.cpp; path = ../../../src/modules/comments/zcom/zcom.cpp; sourceTree = ""; }; + 0A22C6641FCF2CE400C02113 /* zcom4.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = zcom4.cpp; path = ../../../src/modules/comments/zcom4/zcom4.cpp; sourceTree = ""; }; + 0A22C6661FCF2E0F00C02113 /* swgenbook.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = swgenbook.cpp; path = ../../../src/modules/genbook/swgenbook.cpp; sourceTree = ""; }; + 0A22C6681FCF2E1F00C02113 /* rawgenbook.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rawgenbook.cpp; path = ../../../src/modules/genbook/rawgenbook/rawgenbook.cpp; sourceTree = ""; }; + 0A22C66A1FCF2E5200C02113 /* rawld4.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rawld4.cpp; path = ../../../src/modules/lexdict/rawld4/rawld4.cpp; sourceTree = ""; }; + 0A22C66B1FCF2E5200C02113 /* rawld.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rawld.cpp; path = ../../../src/modules/lexdict/rawld/rawld.cpp; sourceTree = ""; }; + 0A22C66C1FCF2E5300C02113 /* swld.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = swld.cpp; path = ../../../src/modules/lexdict/swld.cpp; sourceTree = ""; }; + 0A22C66D1FCF2E5300C02113 /* zld.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = zld.cpp; path = ../../../src/modules/lexdict/zld/zld.cpp; sourceTree = ""; }; + 0A22C6721FCF2E8400C02113 /* rawtext4.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rawtext4.cpp; path = ../../../src/modules/texts/rawtext4/rawtext4.cpp; sourceTree = ""; }; + 0A22C6731FCF2E8400C02113 /* swtext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = swtext.cpp; path = ../../../src/modules/texts/swtext.cpp; sourceTree = ""; }; + 0A22C6741FCF2E8400C02113 /* rawtext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rawtext.cpp; path = ../../../src/modules/texts/rawtext/rawtext.cpp; sourceTree = ""; }; + 0A22C6751FCF2E8500C02113 /* ztext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ztext.cpp; path = ../../../src/modules/texts/ztext/ztext.cpp; sourceTree = ""; }; + 0A22C6761FCF2E8500C02113 /* ztext4.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ztext4.cpp; path = ../../../src/modules/texts/ztext4/ztext4.cpp; sourceTree = ""; }; + 0AC2147C1FCF9CFF0058DE8C /* flatapi.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = flatapi.cpp; path = ../../flatapi.cpp; sourceTree = ""; }; + 0AD80314203BE13C0080C00C /* biblesync-version.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = "biblesync-version.hh"; path = "../../../../biblesync/include/biblesync-version.hh"; sourceTree = ""; }; + 0AD80315203BE13D0080C00C /* biblesync.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = biblesync.hh; path = ../../../../biblesync/include/biblesync.hh; sourceTree = ""; }; + 0AD80316203BE1710080C00C /* biblesync.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = biblesync.cc; path = ../../../../biblesync/src/biblesync.cc; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 0A22C5081FCF26D700C02113 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0A22C5021FCF26D700C02113 = { + isa = PBXGroup; + children = ( + 0AD80316203BE1710080C00C /* biblesync.cc */, + 0AD80314203BE13C0080C00C /* biblesync-version.hh */, + 0AD80315203BE13D0080C00C /* biblesync.hh */, + 0AC2147C1FCF9CFF0058DE8C /* flatapi.cpp */, + 0A22C5471FCF299F00C02113 /* adler32.c */, + 0A22C6031FCF2B5500C02113 /* cipherfil.cpp */, + 0A22C5481FCF299F00C02113 /* compress.c */, + 0A22C5421FCF299D00C02113 /* crc32.c */, + 0A22C5341FCF299B00C02113 /* crc32.h */, + 0A22C5681FCF2A0C00C02113 /* curlftpt.cpp */, + 0A22C56B1FCF2A0C00C02113 /* curlhttpt.cpp */, + 0A22C5491FCF299F00C02113 /* deflate.c */, + 0A22C53F1FCF299D00C02113 /* deflate.h */, + 0A22C55F1FCF2A0A00C02113 /* encfiltmgr.cpp */, + 0A22C5A51FCF2B0D00C02113 /* entriesblk.cpp */, + 0A22C56D1FCF2A0D00C02113 /* filemgr.cpp */, + 0A22C5211FCF295D00C02113 /* ftplib.c */, + 0A22C56A1FCF2A0C00C02113 /* ftplibftpt.cpp */, + 0A22C5251FCF295D00C02113 /* ftpparse.c */, + 0A22C5E31FCF2B4F00C02113 /* gbffootnotes.cpp */, + 0A22C5FB1FCF2B5400C02113 /* gbfheadings.cpp */, + 0A22C5C91FCF2B4A00C02113 /* gbfhtml.cpp */, + 0A22C5F41FCF2B5200C02113 /* gbfhtmlhref.cpp */, + 0A22C5CE1FCF2B4B00C02113 /* gbflatex.cpp */, + 0A22C5DC1FCF2B4E00C02113 /* gbfmorph.cpp */, + 0A22C5F11FCF2B5200C02113 /* gbfosis.cpp */, + 0A22C5C51FCF2B4900C02113 /* gbfplain.cpp */, + 0A22C5C61FCF2B4900C02113 /* gbfredletterwords.cpp */, + 0A22C5BE1FCF2B4700C02113 /* gbfrtf.cpp */, + 0A22C6001FCF2B5500C02113 /* gbfstrongs.cpp */, + 0A22C5B51FCF2B4500C02113 /* gbfthml.cpp */, + 0A22C5C41FCF2B4800C02113 /* gbfwebif.cpp */, + 0A22C5C31FCF2B4800C02113 /* gbfwordjs.cpp */, + 0A22C5ED1FCF2B5100C02113 /* gbfxhtml.cpp */, + 0A22C5DE1FCF2B4E00C02113 /* greeklexattribs.cpp */, + 0A22C54C1FCF29A000C02113 /* gzclose.c */, + 0A22C53D1FCF299C00C02113 /* gzguts.h */, + 0A22C53C1FCF299C00C02113 /* gzlib.c */, + 0A22C5431FCF299E00C02113 /* gzread.c */, + 0A22C54B1FCF299F00C02113 /* gzwrite.c */, + 0A22C65C1FCF2C3200C02113 /* hrefcom.cpp */, + 0A22C5371FCF299B00C02113 /* infback.c */, + 0A22C5321FCF299B00C02113 /* inffast.c */, + 0A22C5461FCF299E00C02113 /* inffast.h */, + 0A22C5351FCF299B00C02113 /* inffixed.h */, + 0A22C5391FCF299C00C02113 /* inflate.c */, + 0A22C5441FCF299E00C02113 /* inflate.h */, + 0A22C53B1FCF299C00C02113 /* inftrees.c */, + 0A22C5361FCF299B00C02113 /* inftrees.h */, + 0A22C5721FCF2A0E00C02113 /* installmgr.cpp */, + 0A22C5B31FCF2B4400C02113 /* latin1utf8.cpp */, + 0A22C5EE1FCF2B5100C02113 /* latin1utf16.cpp */, + 0A22C5881FCF2A8C00C02113 /* listkey.cpp */, + 0A22C5661FCF2A0B00C02113 /* localemgr.cpp */, + 0A22C59D1FCF2B0B00C02113 /* lzsscomprs.cpp */, + 0A22C5651FCF2A0B00C02113 /* markupfiltmgr.cpp */, + 0A22C5F61FCF2B5300C02113 /* osisenum.cpp */, + 0A22C5F81FCF2B5300C02113 /* osisfootnotes.cpp */, + 0A22C5CB1FCF2B4A00C02113 /* osisglosses.cpp */, + 0A22C5C21FCF2B4800C02113 /* osisheadings.cpp */, + 0A22C5D61FCF2B4C00C02113 /* osishtmlhref.cpp */, + 0A22C6041FCF2B5600C02113 /* osislatex.cpp */, + 0A22C5E51FCF2B4F00C02113 /* osislemma.cpp */, + 0A22C5E81FCF2B5000C02113 /* osismorph.cpp */, + 0A22C5BA1FCF2B4600C02113 /* osismorphsegmentation.cpp */, + 0A22C5EA1FCF2B5000C02113 /* osisosis.cpp */, + 0A22C5DF1FCF2B4E00C02113 /* osisplain.cpp */, + 0A22C5D01FCF2B4B00C02113 /* osisredletterwords.cpp */, + 0A22C5E71FCF2B5000C02113 /* osisreferencelinks.cpp */, + 0A22C5D11FCF2B4B00C02113 /* osisrtf.cpp */, + 0A22C5B91FCF2B4600C02113 /* osisscripref.cpp */, + 0A22C5D41FCF2B4C00C02113 /* osisstrongs.cpp */, + 0A22C5D21FCF2B4C00C02113 /* osisvariants.cpp */, + 0A22C5C71FCF2B4900C02113 /* osiswebif.cpp */, + 0A22C5E01FCF2B4E00C02113 /* osiswordjs.cpp */, + 0A22C6021FCF2B5500C02113 /* osisxhtml.cpp */, + 0A22C5E61FCF2B5000C02113 /* osisxlit.cpp */, + 0A22C5E91FCF2B5000C02113 /* papyriplain.cpp */, + 0A22C50C1FCF26D700C02113 /* Products */, + 0A22C6591FCF2BAA00C02113 /* rawcom.cpp */, + 0A22C65E1FCF2C5000C02113 /* rawcom4.cpp */, + 0A22C6601FCF2C7700C02113 /* rawfiles.cpp */, + 0A22C6681FCF2E1F00C02113 /* rawgenbook.cpp */, + 0A22C66B1FCF2E5200C02113 /* rawld.cpp */, + 0A22C66A1FCF2E5200C02113 /* rawld4.cpp */, + 0A22C5A21FCF2B0C00C02113 /* rawstr.cpp */, + 0A22C5A31FCF2B0C00C02113 /* rawstr4.cpp */, + 0A22C6741FCF2E8400C02113 /* rawtext.cpp */, + 0A22C6721FCF2E8400C02113 /* rawtext4.cpp */, + 0A22C59F1FCF2B0C00C02113 /* rawverse.cpp */, + 0A22C59E1FCF2B0B00C02113 /* rawverse4.cpp */, + 0A22C5601FCF2A0A00C02113 /* remotetrans.cpp */, + 0A22C5261FCF295E00C02113 /* roman.cpp */, + 0A22C5F71FCF2B5300C02113 /* rtfhtml.cpp */, + 0A22C5611FCF2A0A00C02113 /* rtranspgdrive.cpp */, + 0A22C5A41FCF2B0C00C02113 /* sapphire.cpp */, + 0A22C5CF1FCF2B4B00C02113 /* scsuutf8.cpp */, + 0A22C5671FCF2A0B00C02113 /* stringmgr.cpp */, + 0A22C58D1FCF2A8D00C02113 /* strkey.cpp */, + 0A22C5DA1FCF2B4D00C02113 /* swbasicfilter.cpp */, + 0A22C5241FCF295D00C02113 /* swbuf.cpp */, + 0A22C5631FCF2A0B00C02113 /* swcacher.cpp */, + 0A22C5A11FCF2B0C00C02113 /* swcipher.cpp */, + 0A22C6571FCF2B7700C02113 /* swcom.cpp */, + 0A22C5A01FCF2B0C00C02113 /* swcomprs.cpp */, + 0A22C56C1FCF2A0D00C02113 /* swconfig.cpp */, + 0A22C5961FCF2ABC00C02113 /* swdisp.cpp */, + 0A22C56E1FCF2A0D00C02113 /* swfiltermgr.cpp */, + 0A22C6661FCF2E0F00C02113 /* swgenbook.cpp */, + 0A22C5891FCF2A8C00C02113 /* swkey.cpp */, + 0A22C66C1FCF2E5300C02113 /* swld.cpp */, + 0A22C5641FCF2A0B00C02113 /* swlocale.cpp */, + 0A22C5951FCF2ABB00C02113 /* swlog.cpp */, + 0A22C5711FCF2A0E00C02113 /* swmgr.cpp */, + 0A22C55D1FCF29E600C02113 /* swmodule.cpp */, + 0A22C5221FCF295D00C02113 /* swobject.cpp */, + 0A22C5BB1FCF2B4600C02113 /* swoptfilter.cpp */, + 0A22C50D1FCF26D700C02113 /* SWORD */, + 0A22C5691FCF2A0C00C02113 /* swsearchable.cpp */, + 0A22C6731FCF2E8400C02113 /* swtext.cpp */, + 0A22C51F1FCF295D00C02113 /* swversion.cpp */, + 0A22C5FF1FCF2B5500C02113 /* teihtmlhref.cpp */, + 0A22C5C81FCF2B4900C02113 /* teilatex.cpp */, + 0A22C5BC1FCF2B4600C02113 /* teiplain.cpp */, + 0A22C5EF1FCF2B5100C02113 /* teirtf.cpp */, + 0A22C5F91FCF2B5300C02113 /* teixhtml.cpp */, + 0A22C5D91FCF2B4D00C02113 /* thmlfootnotes.cpp */, + 0A22C5BD1FCF2B4700C02113 /* thmlgbf.cpp */, + 0A22C5EB1FCF2B5100C02113 /* thmlheadings.cpp */, + 0A22C5B41FCF2B4400C02113 /* thmlhtml.cpp */, + 0A22C5CA1FCF2B4A00C02113 /* thmlhtmlhref.cpp */, + 0A22C5B61FCF2B4500C02113 /* thmllatex.cpp */, + 0A22C5D81FCF2B4D00C02113 /* thmllemma.cpp */, + 0A22C5C11FCF2B4800C02113 /* thmlmorph.cpp */, + 0A22C5FA1FCF2B5400C02113 /* thmlosis.cpp */, + 0A22C5F01FCF2B5200C02113 /* thmlplain.cpp */, + 0A22C5B71FCF2B4500C02113 /* thmlrtf.cpp */, + 0A22C5D31FCF2B4C00C02113 /* thmlscripref.cpp */, + 0A22C5F31FCF2B5200C02113 /* thmlstrongs.cpp */, + 0A22C5FC1FCF2B5400C02113 /* thmlvariants.cpp */, + 0A22C5F51FCF2B5300C02113 /* thmlwebif.cpp */, + 0A22C5E21FCF2B4F00C02113 /* thmlwordjs.cpp */, + 0A22C5CC1FCF2B4A00C02113 /* thmlxhtml.cpp */, + 0A22C58C1FCF2A8C00C02113 /* treekey.cpp */, + 0A22C58B1FCF2A8C00C02113 /* treekeyidx.cpp */, + 0A22C54A1FCF299F00C02113 /* trees.c */, + 0A22C5331FCF299B00C02113 /* trees.h */, + 0A22C5381FCF299C00C02113 /* uncompr.c */, + 0A22C5F21FCF2B5200C02113 /* unicodertf.cpp */, + 0A22C53A1FCF299C00C02113 /* untgz.c */, + 0A22C51E1FCF295D00C02113 /* url.cpp */, + 0A22C5D51FCF2B4C00C02113 /* utf8arabicpoints.cpp */, + 0A22C6011FCF2B5500C02113 /* utf8arshaping.cpp */, + 0A22C5DD1FCF2B4E00C02113 /* utf8bidireorder.cpp */, + 0A22C5B81FCF2B4500C02113 /* utf8cantillation.cpp */, + 0A22C5FD1FCF2B5400C02113 /* utf8greekaccents.cpp */, + 0A22C5FE1FCF2B5400C02113 /* utf8hebrewpoints.cpp */, + 0A22C5D71FCF2B4D00C02113 /* utf8html.cpp */, + 0A22C5E41FCF2B4F00C02113 /* utf8latin1.cpp */, + 0A22C5E11FCF2B4F00C02113 /* utf8nfc.cpp */, + 0A22C5DB1FCF2B4D00C02113 /* utf8nfkd.cpp */, + 0A22C5EC1FCF2B5100C02113 /* utf8scsu.cpp */, + 0A22C5BF1FCF2B4700C02113 /* utf8transliterator.cpp */, + 0A22C5CD1FCF2B4B00C02113 /* utf8utf16.cpp */, + 0A22C5C01FCF2B4700C02113 /* utf16utf8.cpp */, + 0A22C5271FCF295E00C02113 /* utilstr.cpp */, + 0A22C5231FCF295D00C02113 /* utilxml.cpp */, + 0A22C5871FCF2A8B00C02113 /* versekey.cpp */, + 0A22C58A1FCF2A8C00C02113 /* versetreekey.cpp */, + 0A22C5701FCF2A0D00C02113 /* versificationmgr.cpp */, + 0A22C6621FCF2CA100C02113 /* zcom.cpp */, + 0A22C6641FCF2CE400C02113 /* zcom4.cpp */, + 0A22C5451FCF299E00C02113 /* zconf.h */, + 0A22C59B1FCF2B0B00C02113 /* zipcomprs.cpp */, + 0A22C66D1FCF2E5300C02113 /* zld.cpp */, + 0A22C5401FCF299D00C02113 /* zlib.h */, + 0A22C59A1FCF2B0B00C02113 /* zstr.cpp */, + 0A22C6751FCF2E8500C02113 /* ztext.cpp */, + 0A22C6761FCF2E8500C02113 /* ztext4.cpp */, + 0A22C53E1FCF299D00C02113 /* zutil.c */, + 0A22C5411FCF299D00C02113 /* zutil.h */, + 0A22C59C1FCF2B0B00C02113 /* zverse.cpp */, + 0A22C5991FCF2B0A00C02113 /* zverse4.cpp */, + ); + sourceTree = ""; + }; + 0A22C50C1FCF26D700C02113 /* Products */ = { + isa = PBXGroup; + children = ( + 0A22C50B1FCF26D700C02113 /* libSWORD.a */, + ); + name = Products; + sourceTree = ""; + }; + 0A22C50D1FCF26D700C02113 /* SWORD */ = { + isa = PBXGroup; + children = ( + 0A22C51B1FCF272F00C02113 /* include */, + 0A22C50E1FCF26D700C02113 /* SWORD.h */, + 0A22C50F1FCF26D700C02113 /* SWORD.m */, + ); + path = SWORD; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 0A22C50A1FCF26D700C02113 /* SWORD */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0A22C5141FCF26D700C02113 /* Build configuration list for PBXNativeTarget "SWORD" */; + buildPhases = ( + 0A22C5071FCF26D700C02113 /* Sources */, + 0A22C5081FCF26D700C02113 /* Frameworks */, + 0A22C5091FCF26D700C02113 /* Copy Files */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SWORD; + productName = SWORD; + productReference = 0A22C50B1FCF26D700C02113 /* libSWORD.a */; + productType = "com.apple.product-type.library.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 0A22C5031FCF26D700C02113 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0910; + ORGANIZATIONNAME = "CrossWire Bible Society"; + TargetAttributes = { + 0A22C50A1FCF26D700C02113 = { + CreatedOnToolsVersion = 9.1; + ProvisioningStyle = Automatic; + }; + 0A22C5171FCF26FD00C02113 = { + CreatedOnToolsVersion = 9.1; + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = 0A22C5061FCF26D700C02113 /* Build configuration list for PBXProject "SWORD" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 0A22C5021FCF26D700C02113; + productRefGroup = 0A22C50C1FCF26D700C02113 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 0A22C50A1FCF26D700C02113 /* SWORD */, + 0A22C5171FCF26FD00C02113 /* SWORDUniversal */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXShellScriptBuildPhase section */ + 0A22C67C1FCF4D4200C02113 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# define output folder environment variable\nUNIVERSAL_OUTPUTFOLDER=${PROJECT_DIR}/${CONFIGURATION}-universal\n\n# Step 1. Build Device and Simulator versions\nxcodebuild -target ${PROJECT_NAME} ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos -arch x86_64 -arch armv7 -arch armv7s -arch arm64 BUILD_DIR=\"${BUILD_DIR}\" BUILD_ROOT=\"${BUILD_ROOT}\"\nxcodebuild -target ${PROJECT_NAME} -configuration ${CONFIGURATION} -sdk iphonesimulator -arch x86_64 -arch armv7 -arch armv7s -arch arm64 BUILD_DIR=\"${BUILD_DIR}\" BUILD_ROOT=\"${BUILD_ROOT}\"\n\n# make sure the output directory exists\nmkdir -p \"${UNIVERSAL_OUTPUTFOLDER}\"\n\n# Step 2. Create universal binary file using lipo\nlipo -create -output \"${UNIVERSAL_OUTPUTFOLDER}/lib${PROJECT_NAME}.a\" \"${BUILD_DIR}/${CONFIGURATION}-iphoneos/lib${PROJECT_NAME}.a\" \"${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a\"\n\necho \"Universal library can be found here:\"\necho ${UNIVERSAL_OUTPUTFOLDER}/lib${PROJECT_NAME}.a\n\n# Last touch. copy the header files. Just for convenience\ncp -R \"${BUILD_DIR}/${CONFIGURATION}-iphoneos/include\" \"${UNIVERSAL_OUTPUTFOLDER}/\""; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 0A22C5071FCF26D700C02113 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0A22C6431FCF2B5600C02113 /* gbfosis.cpp in Sources */, + 0A22C6531FCF2B5600C02113 /* utf8arshaping.cpp in Sources */, + 0A22C5531FCF29A000C02113 /* gzlib.c in Sources */, + 0A22C60B1FCF2B5600C02113 /* osisscripref.cpp in Sources */, + 0A22C6311FCF2B5600C02113 /* osisplain.cpp in Sources */, + 0AC2147D1FCF9D000058DE8C /* flatapi.cpp in Sources */, + 0A22C6581FCF2B7700C02113 /* swcom.cpp in Sources */, + 0A22C67B1FCF2E8500C02113 /* ztext4.cpp in Sources */, + 0A22C5911FCF2A8D00C02113 /* versetreekey.cpp in Sources */, + 0A22C6291FCF2B5600C02113 /* utf8html.cpp in Sources */, + 0A22C5511FCF29A000C02113 /* untgz.c in Sources */, + 0A22C66E1FCF2E5300C02113 /* rawld4.cpp in Sources */, + 0A22C57D1FCF2A0E00C02113 /* swsearchable.cpp in Sources */, + 0A22C64C1FCF2B5600C02113 /* thmlosis.cpp in Sources */, + 0A22C6191FCF2B5600C02113 /* osiswebif.cpp in Sources */, + 0A22C54E1FCF29A000C02113 /* infback.c in Sources */, + 0A22C5291FCF295E00C02113 /* swversion.cpp in Sources */, + 0A22C6121FCF2B5600C02113 /* utf16utf8.cpp in Sources */, + 0A22C5581FCF29A000C02113 /* compress.c in Sources */, + 0A22C6201FCF2B5600C02113 /* gbflatex.cpp in Sources */, + 0A22C62C1FCF2B5600C02113 /* swbasicfilter.cpp in Sources */, + 0A22C6471FCF2B5600C02113 /* thmlwebif.cpp in Sources */, + 0A22C6491FCF2B5600C02113 /* rtfhtml.cpp in Sources */, + 0A22C5A61FCF2B0D00C02113 /* zverse4.cpp in Sources */, + 0A22C5821FCF2A0E00C02113 /* swfiltermgr.cpp in Sources */, + 0A22C6331FCF2B5600C02113 /* utf8nfc.cpp in Sources */, + 0A22C6341FCF2B5600C02113 /* thmlwordjs.cpp in Sources */, + 0A22C57E1FCF2A0E00C02113 /* ftplibftpt.cpp in Sources */, + 0A22C5931FCF2A8D00C02113 /* treekey.cpp in Sources */, + 0A22C5841FCF2A0E00C02113 /* swmgr.cpp in Sources */, + 0A22C5731FCF2A0E00C02113 /* encfiltmgr.cpp in Sources */, + 0A22C6781FCF2E8500C02113 /* swtext.cpp in Sources */, + 0A22C6451FCF2B5600C02113 /* thmlstrongs.cpp in Sources */, + 0A22C6091FCF2B5600C02113 /* thmlrtf.cpp in Sources */, + 0A22C6301FCF2B5600C02113 /* greeklexattribs.cpp in Sources */, + 0A22C6771FCF2E8500C02113 /* rawtext4.cpp in Sources */, + 0A22C6231FCF2B5600C02113 /* osisrtf.cpp in Sources */, + 0A22C52E1FCF295E00C02113 /* swbuf.cpp in Sources */, + 0A22C5AC1FCF2B0D00C02113 /* rawverse.cpp in Sources */, + 0A22C6171FCF2B5600C02113 /* gbfplain.cpp in Sources */, + 0A22C6691FCF2E1F00C02113 /* rawgenbook.cpp in Sources */, + 0A22C5921FCF2A8D00C02113 /* treekeyidx.cpp in Sources */, + 0A22C6441FCF2B5600C02113 /* unicodertf.cpp in Sources */, + 0A22C5751FCF2A0E00C02113 /* rtranspgdrive.cpp in Sources */, + 0A22C64B1FCF2B5600C02113 /* teixhtml.cpp in Sources */, + 0A22C5791FCF2A0E00C02113 /* markupfiltmgr.cpp in Sources */, + 0A22C5AF1FCF2B0D00C02113 /* rawstr.cpp in Sources */, + 0A22C6101FCF2B5600C02113 /* gbfrtf.cpp in Sources */, + 0A22C60F1FCF2B5600C02113 /* thmlgbf.cpp in Sources */, + 0A22C62B1FCF2B5600C02113 /* thmlfootnotes.cpp in Sources */, + 0A22C5591FCF29A000C02113 /* deflate.c in Sources */, + 0A22C62A1FCF2B5600C02113 /* thmllemma.cpp in Sources */, + 0A22C5851FCF2A0E00C02113 /* installmgr.cpp in Sources */, + 0A22C6711FCF2E5300C02113 /* zld.cpp in Sources */, + 0A22C5901FCF2A8D00C02113 /* swkey.cpp in Sources */, + 0A22C52C1FCF295E00C02113 /* swobject.cpp in Sources */, + 0A22C6411FCF2B5600C02113 /* teirtf.cpp in Sources */, + 0A22C6351FCF2B5600C02113 /* gbffootnotes.cpp in Sources */, + 0A22C61D1FCF2B5600C02113 /* osisglosses.cpp in Sources */, + 0A22C61F1FCF2B5600C02113 /* utf8utf16.cpp in Sources */, + 0A22C63D1FCF2B5600C02113 /* thmlheadings.cpp in Sources */, + 0A22C58F1FCF2A8D00C02113 /* listkey.cpp in Sources */, + 0A22C64E1FCF2B5600C02113 /* thmlvariants.cpp in Sources */, + 0A22C57C1FCF2A0E00C02113 /* curlftpt.cpp in Sources */, + 0A22C5B21FCF2B0D00C02113 /* entriesblk.cpp in Sources */, + 0A22C5AD1FCF2B0D00C02113 /* swcomprs.cpp in Sources */, + 0A22C5281FCF295E00C02113 /* url.cpp in Sources */, + 0A22C5561FCF29A000C02113 /* gzread.c in Sources */, + 0A22C57B1FCF2A0E00C02113 /* stringmgr.cpp in Sources */, + 0A22C6211FCF2B5600C02113 /* scsuutf8.cpp in Sources */, + 0A22C5541FCF29A000C02113 /* zutil.c in Sources */, + 0A22C5A91FCF2B0D00C02113 /* zverse.cpp in Sources */, + 0A22C6081FCF2B5600C02113 /* thmllatex.cpp in Sources */, + 0A22C6271FCF2B5600C02113 /* utf8arabicpoints.cpp in Sources */, + 0A22C61B1FCF2B5600C02113 /* gbfhtml.cpp in Sources */, + 0AD80317203BE1710080C00C /* biblesync.cc in Sources */, + 0A22C55C1FCF29A000C02113 /* gzclose.c in Sources */, + 0A22C60A1FCF2B5600C02113 /* utf8cantillation.cpp in Sources */, + 0A22C54D1FCF29A000C02113 /* inffast.c in Sources */, + 0A22C6111FCF2B5600C02113 /* utf8transliterator.cpp in Sources */, + 0A22C6361FCF2B5600C02113 /* utf8latin1.cpp in Sources */, + 0A22C60D1FCF2B5600C02113 /* swoptfilter.cpp in Sources */, + 0A22C6061FCF2B5600C02113 /* thmlhtml.cpp in Sources */, + 0A22C6051FCF2B5600C02113 /* latin1utf8.cpp in Sources */, + 0A22C6141FCF2B5600C02113 /* osisheadings.cpp in Sources */, + 0A22C6541FCF2B5600C02113 /* osisxhtml.cpp in Sources */, + 0A22C63F1FCF2B5600C02113 /* gbfxhtml.cpp in Sources */, + 0A22C5301FCF295E00C02113 /* roman.cpp in Sources */, + 0A22C6701FCF2E5300C02113 /* swld.cpp in Sources */, + 0A22C6521FCF2B5600C02113 /* gbfstrongs.cpp in Sources */, + 0A22C6371FCF2B5600C02113 /* osislemma.cpp in Sources */, + 0A22C6421FCF2B5600C02113 /* thmlplain.cpp in Sources */, + 0A22C65A1FCF2BAB00C02113 /* rawcom.cpp in Sources */, + 0A22C5AE1FCF2B0D00C02113 /* swcipher.cpp in Sources */, + 0A22C55B1FCF29A000C02113 /* gzwrite.c in Sources */, + 0A22C60C1FCF2B5600C02113 /* osismorphsegmentation.cpp in Sources */, + 0A22C5A71FCF2B0D00C02113 /* zstr.cpp in Sources */, + 0A22C6461FCF2B5600C02113 /* gbfhtmlhref.cpp in Sources */, + 0A22C52F1FCF295E00C02113 /* ftpparse.c in Sources */, + 0A22C6791FCF2E8500C02113 /* rawtext.cpp in Sources */, + 0A22C5801FCF2A0E00C02113 /* swconfig.cpp in Sources */, + 0A22C6221FCF2B5600C02113 /* osisredletterwords.cpp in Sources */, + 0A22C61E1FCF2B5600C02113 /* thmlxhtml.cpp in Sources */, + 0A22C6181FCF2B5600C02113 /* gbfredletterwords.cpp in Sources */, + 0A22C63C1FCF2B5600C02113 /* osisosis.cpp in Sources */, + 0A22C5941FCF2A8D00C02113 /* strkey.cpp in Sources */, + 0A22C6481FCF2B5600C02113 /* osisenum.cpp in Sources */, + 0A22C6071FCF2B5600C02113 /* gbfthml.cpp in Sources */, + 0A22C58E1FCF2A8D00C02113 /* versekey.cpp in Sources */, + 0A22C6551FCF2B5600C02113 /* cipherfil.cpp in Sources */, + 0A22C52D1FCF295E00C02113 /* utilxml.cpp in Sources */, + 0A22C64D1FCF2B5600C02113 /* gbfheadings.cpp in Sources */, + 0A22C5771FCF2A0E00C02113 /* swcacher.cpp in Sources */, + 0A22C5811FCF2A0E00C02113 /* filemgr.cpp in Sources */, + 0A22C62F1FCF2B5600C02113 /* utf8bidireorder.cpp in Sources */, + 0A22C5551FCF29A000C02113 /* crc32.c in Sources */, + 0A22C62D1FCF2B5600C02113 /* utf8nfkd.cpp in Sources */, + 0A22C6611FCF2C7700C02113 /* rawfiles.cpp in Sources */, + 0A22C6501FCF2B5600C02113 /* utf8hebrewpoints.cpp in Sources */, + 0A22C6281FCF2B5600C02113 /* osishtmlhref.cpp in Sources */, + 0A22C67A1FCF2E8500C02113 /* ztext.cpp in Sources */, + 0A22C5781FCF2A0E00C02113 /* swlocale.cpp in Sources */, + 0A22C5521FCF29A000C02113 /* inftrees.c in Sources */, + 0A22C65D1FCF2C3200C02113 /* hrefcom.cpp in Sources */, + 0A22C5A81FCF2B0D00C02113 /* zipcomprs.cpp in Sources */, + 0A22C54F1FCF29A000C02113 /* uncompr.c in Sources */, + 0A22C55E1FCF29E600C02113 /* swmodule.cpp in Sources */, + 0A22C5AA1FCF2B0D00C02113 /* lzsscomprs.cpp in Sources */, + 0A22C6651FCF2CE500C02113 /* zcom4.cpp in Sources */, + 0A22C63B1FCF2B5600C02113 /* papyriplain.cpp in Sources */, + 0A22C6261FCF2B5600C02113 /* osisstrongs.cpp in Sources */, + 0A22C5AB1FCF2B0D00C02113 /* rawverse4.cpp in Sources */, + 0A22C64F1FCF2B5600C02113 /* utf8greekaccents.cpp in Sources */, + 0A22C6631FCF2CA100C02113 /* zcom.cpp in Sources */, + 0A22C6561FCF2B5600C02113 /* osislatex.cpp in Sources */, + 0A22C63A1FCF2B5600C02113 /* osismorph.cpp in Sources */, + 0A22C5741FCF2A0E00C02113 /* remotetrans.cpp in Sources */, + 0A22C6321FCF2B5600C02113 /* osiswordjs.cpp in Sources */, + 0A22C57F1FCF2A0E00C02113 /* curlhttpt.cpp in Sources */, + 0A22C5971FCF2ABC00C02113 /* swlog.cpp in Sources */, + 0A22C66F1FCF2E5300C02113 /* rawld.cpp in Sources */, + 0A22C6241FCF2B5600C02113 /* osisvariants.cpp in Sources */, + 0A22C62E1FCF2B5600C02113 /* gbfmorph.cpp in Sources */, + 0A22C6391FCF2B5600C02113 /* osisreferencelinks.cpp in Sources */, + 0A22C6131FCF2B5600C02113 /* thmlmorph.cpp in Sources */, + 0A22C63E1FCF2B5600C02113 /* utf8scsu.cpp in Sources */, + 0A22C6511FCF2B5600C02113 /* teihtmlhref.cpp in Sources */, + 0A22C60E1FCF2B5600C02113 /* teiplain.cpp in Sources */, + 0A22C5311FCF295E00C02113 /* utilstr.cpp in Sources */, + 0A22C5571FCF29A000C02113 /* adler32.c in Sources */, + 0A22C57A1FCF2A0E00C02113 /* localemgr.cpp in Sources */, + 0A22C5981FCF2ABC00C02113 /* swdisp.cpp in Sources */, + 0A22C6151FCF2B5600C02113 /* gbfwordjs.cpp in Sources */, + 0A22C5B01FCF2B0D00C02113 /* rawstr4.cpp in Sources */, + 0A22C61C1FCF2B5600C02113 /* thmlhtmlhref.cpp in Sources */, + 0A22C61A1FCF2B5600C02113 /* teilatex.cpp in Sources */, + 0A22C52B1FCF295E00C02113 /* ftplib.c in Sources */, + 0A22C5831FCF2A0E00C02113 /* versificationmgr.cpp in Sources */, + 0A22C5B11FCF2B0D00C02113 /* sapphire.cpp in Sources */, + 0A22C6161FCF2B5600C02113 /* gbfwebif.cpp in Sources */, + 0A22C6381FCF2B5600C02113 /* osisxlit.cpp in Sources */, + 0A22C6671FCF2E0F00C02113 /* swgenbook.cpp in Sources */, + 0A22C6251FCF2B5600C02113 /* thmlscripref.cpp in Sources */, + 0A22C55A1FCF29A000C02113 /* trees.c in Sources */, + 0A22C64A1FCF2B5600C02113 /* osisfootnotes.cpp in Sources */, + 0A22C5501FCF29A000C02113 /* inflate.c in Sources */, + 0A22C6401FCF2B5600C02113 /* latin1utf16.cpp in Sources */, + 0A22C65F1FCF2C5000C02113 /* rawcom4.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 0A22C5121FCF26D700C02113 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(PROJECT_DIR)/../../../include", + "$(PROJECT_DIR)/../dependencies/curl/include", + "$(PROJECT_DIR)/../../../../biblesync/include", + ); + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_CFLAGS = ( + "-DUNIX", + "-Dunix", + "-D__unix__", + "-DEXCLUDEBZIP2", + "-DEXCLUDEXZ", + "-DCURLAVAILABLE", + "-DBIBLESYNC", + ); + OTHER_LDFLAGS = ( + "-lcurl", + "-lz", + "-licucore", + ); + SDKROOT = iphoneos; + }; + name = Debug; + }; + 0A22C5131FCF26D700C02113 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(PROJECT_DIR)/../../../include", + "$(PROJECT_DIR)/../dependencies/curl/include", + "$(PROJECT_DIR)/../../../../biblesync/include", + ); + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_CFLAGS = ( + "-DUNIX", + "-Dunix", + "-D__unix__", + "-DEXCLUDEBZIP2", + "-DEXCLUDEXZ", + "-DCURLAVAILABLE", + "-DBIBLESYNC", + ); + OTHER_LDFLAGS = ( + "-lcurl", + "-lz", + "-licucore", + ); + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 0A22C5151FCF26D700C02113 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = J9J97ZC4K5; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 0A22C5161FCF26D700C02113 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = J9J97ZC4K5; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 0A22C5191FCF26FD00C02113 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = J9J97ZC4K5; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 0A22C51A1FCF26FD00C02113 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = J9J97ZC4K5; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 0A22C5061FCF26D700C02113 /* Build configuration list for PBXProject "SWORD" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0A22C5121FCF26D700C02113 /* Debug */, + 0A22C5131FCF26D700C02113 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 0A22C5141FCF26D700C02113 /* Build configuration list for PBXNativeTarget "SWORD" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0A22C5151FCF26D700C02113 /* Debug */, + 0A22C5161FCF26D700C02113 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 0A22C5181FCF26FD00C02113 /* Build configuration list for PBXAggregateTarget "SWORDUniversal" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0A22C5191FCF26FD00C02113 /* Debug */, + 0A22C51A1FCF26FD00C02113 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 0A22C5031FCF26D700C02113 /* Project object */; +} Added: trunk/bindings/objc/SWORD/SWORD.xcodeproj/project.xcworkspace/contents.xcworkspacedata =================================================================== --- trunk/bindings/objc/SWORD/SWORD.xcodeproj/project.xcworkspace/contents.xcworkspacedata (rev 0) +++ trunk/bindings/objc/SWORD/SWORD.xcodeproj/project.xcworkspace/contents.xcworkspacedata 2018-03-25 22:31:33 UTC (rev 3576) @@ -0,0 +1,7 @@ + + + + + Added: trunk/bindings/objc/SWORD/SWORD.xcodeproj/project.xcworkspace/xcuserdata/scribe.xcuserdatad/UserInterfaceState.xcuserstate =================================================================== (Binary files differ) Property changes on: trunk/bindings/objc/SWORD/SWORD.xcodeproj/project.xcworkspace/xcuserdata/scribe.xcuserdatad/UserInterfaceState.xcuserstate ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/bindings/objc/SWORD/SWORD.xcodeproj/xcuserdata/scribe.xcuserdatad/xcschemes/SWORD.xcscheme =================================================================== --- trunk/bindings/objc/SWORD/SWORD.xcodeproj/xcuserdata/scribe.xcuserdatad/xcschemes/SWORD.xcscheme (rev 0) +++ trunk/bindings/objc/SWORD/SWORD.xcodeproj/xcuserdata/scribe.xcuserdatad/xcschemes/SWORD.xcscheme 2018-03-25 22:31:33 UTC (rev 3576) @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Added: trunk/bindings/objc/SWORD/SWORD.xcodeproj/xcuserdata/scribe.xcuserdatad/xcschemes/SWORDUniversal.xcscheme =================================================================== --- trunk/bindings/objc/SWORD/SWORD.xcodeproj/xcuserdata/scribe.xcuserdatad/xcschemes/SWORDUniversal.xcscheme (rev 0) +++ trunk/bindings/objc/SWORD/SWORD.xcodeproj/xcuserdata/scribe.xcuserdatad/xcschemes/SWORDUniversal.xcscheme 2018-03-25 22:31:33 UTC (rev 3576) @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Added: trunk/bindings/objc/SWORD/SWORD.xcodeproj/xcuserdata/scribe.xcuserdatad/xcschemes/xcschememanagement.plist =================================================================== --- trunk/bindings/objc/SWORD/SWORD.xcodeproj/xcuserdata/scribe.xcuserdatad/xcschemes/xcschememanagement.plist (rev 0) +++ trunk/bindings/objc/SWORD/SWORD.xcodeproj/xcuserdata/scribe.xcuserdatad/xcschemes/xcschememanagement.plist 2018-03-25 22:31:33 UTC (rev 3576) @@ -0,0 +1,32 @@ + + + + + SchemeUserState + + SWORD.xcscheme + + orderHint + 1 + + SWORDUniversal.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 0A22C50A1FCF26D700C02113 + + primary + + + 0A22C5171FCF26FD00C02113 + + primary + + + + + Added: trunk/bindings/objc/SWORD/sword.m =================================================================== --- trunk/bindings/objc/SWORD/sword.m (rev 0) +++ trunk/bindings/objc/SWORD/sword.m 2018-03-25 22:31:33 UTC (rev 3576) @@ -0,0 +1,12 @@ +// +// SWORD.m +// SWORD +// +// Created by scribe on 11/14/17. +// + +#import "SWORD.h" + +//@implementation SWORD + +//@end Modified: trunk/include/flatapi.h =================================================================== --- trunk/include/flatapi.h 2018-03-25 13:17:56 UTC (rev 3575) +++ trunk/include/flatapi.h 2018-03-25 22:31:33 UTC (rev 3576) @@ -40,6 +40,7 @@ char *version; char *delta; char *cipherKey; + const char **features; }; @@ -86,6 +87,8 @@ typedef void (*org_crosswire_sword_SWModule_SearchCallback)(int); +typedef void (*org_biblesync_MessageReceivedCallback)(const char *); + /* * Class: org_crosswire_sword_SWModule * Method: search @@ -574,6 +577,31 @@ SWHANDLE SWDLLEXPORT org_crosswire_sword_InstallMgr_getRemoteModuleByName (SWHANDLE hInstallMgr, const char *sourceName, const char *modName); +/* + * NOTE: this method blocks and should be called in a new thread + * Class: org_crosswire_android_sword_SWMgr + * Method: startBibleSync + * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/crosswire/android/sword/SWMgr/BibleSyncListener;)V + */ +void SWDLLEXPORT org_crosswire_sword_SWMgr_startBibleSync + (SWHANDLE hMgr, const char *appNameJS, const char *userNameJS, const char *passphraseJS, org_biblesync_MessageReceivedCallback callback); + +/* + * Class: org_crosswire_android_sword_SWMgr + * Method: stopBibleSync + * Signature: (V;)V + */ +void SWDLLEXPORT org_crosswire_sword_SWMgr_stopBibleSync + (SWHANDLE hMgr); + +/* + * Class: org_crosswire_android_sword_SWMgr + * Method: sendBibleSyncMessage + * Signature: (Ljava/lang/String;)V + */ +void SWDLLEXPORT org_crosswire_sword_SWMgr_sendBibleSyncMessage + (SWHANDLE hMgr, const char *osisRefRaw); + void SWDLLEXPORT org_crosswire_sword_SWlog_logError(const char *msg); void SWDLLEXPORT org_crosswire_sword_SWlog_logDebug(const char *msg); void SWDLLEXPORT org_crosswire_sword_SWlog_logWarning(const char *msg); From scribe at crosswire.org Sun Mar 25 15:59:00 2018 From: scribe at crosswire.org (scribe at crosswire.org) Date: Sun, 25 Mar 2018 15:59:00 -0700 Subject: [sword-svn] r3577 - trunk/utilities Message-ID: Author: scribe Date: 2018-03-25 15:59:00 -0700 (Sun, 25 Mar 2018) New Revision: 3577 Modified: trunk/utilities/imp2vs.cpp Log: added usage information to imp2vs for new -r option Modified: trunk/utilities/imp2vs.cpp =================================================================== --- trunk/utilities/imp2vs.cpp 2018-03-25 22:31:33 UTC (rev 3576) +++ trunk/utilities/imp2vs.cpp 2018-03-25 22:59:00 UTC (rev 3577) @@ -59,6 +59,7 @@ fprintf(stderr, "\n=== imp2vs (Revision $Rev$) SWORD Bible/Commentary importer.\n"); fprintf(stderr, "\nusage: %s [options]\n", progName); fprintf(stderr, " -a\t\t\t augment module if exists (default is to create new)\n"); + fprintf(stderr, " -r\t\t\t replace existing entries (default is to append)\n"); fprintf(stderr, " -z \t\t use compression (default: none):\n"); fprintf(stderr, "\t\t\t\t l - LZSS; z - ZIP; b - bzip2; x - xz\n"); fprintf(stderr, " -o \t where to write data files.\n"); From scribe at crosswire.org Sun Mar 25 20:56:51 2018 From: scribe at crosswire.org (scribe at crosswire.org) Date: Sun, 25 Mar 2018 20:56:51 -0700 Subject: [sword-svn] r3578 - trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/src/android Message-ID: Author: scribe Date: 2018-03-25 20:56:50 -0700 (Sun, 25 Mar 2018) New Revision: 3578 Modified: trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/src/android/SWORD.java Log: Changed JSONArray to use an older c-tor for backward compat Modified: trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/src/android/SWORD.java =================================================================== --- trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/src/android/SWORD.java 2018-03-25 22:59:00 UTC (rev 3577) +++ trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/src/android/SWORD.java 2018-03-26 03:56:50 UTC (rev 3578) @@ -22,6 +22,7 @@ import java.util.Vector; import java.util.Map; import java.util.HashMap; +import java.util.Arrays; import java.io.BufferedReader; import java.io.DataOutputStream; @@ -139,7 +140,7 @@ m.put("version", mi.version); m.put("delta", mi.delta); m.put("cipherKey", mi.cipherKey); - m.put("features", new JSONArray(mi.features)); + m.put("features", new JSONArray(Arrays.asList(mi.features))); r.put(m); } callbackContext.success(r); @@ -244,7 +245,7 @@ m.put("version", mi.version); m.put("delta", mi.delta); m.put("cipherKey", mi.cipherKey); - m.put("features", new JSONArray(mi.features)); + m.put("features", new JSONArray(Arrays.asList(mi.features))); r.put(m); } callbackContext.success(r); From scribe at crosswire.org Tue Mar 27 15:39:17 2018 From: scribe at crosswire.org (scribe at crosswire.org) Date: Tue, 27 Mar 2018 15:39:17 -0700 Subject: [sword-svn] r3579 - trunk/utilities/diatheke Message-ID: Author: scribe Date: 2018-03-27 15:39:16 -0700 (Tue, 27 Mar 2018) New Revision: 3579 Modified: trunk/utilities/diatheke/corediatheke.cpp Log: Added missing call to SWModule::renderText before expecting entryAttributes to be populated. Patch from -Greg Hellings Modified: trunk/utilities/diatheke/corediatheke.cpp =================================================================== --- trunk/utilities/diatheke/corediatheke.cpp 2018-03-26 03:56:50 UTC (rev 3578) +++ trunk/utilities/diatheke/corediatheke.cpp 2018-03-27 22:39:16 UTC (rev 3579) @@ -302,6 +302,9 @@ for (listkey = TOP; !listkey.popError() && maxverses; listkey++) { target->setKey(listkey); VerseKey *vk = SWDYNAMIC_CAST(VerseKey, target->getKey()); + // Call this before all the pre-verse handling, as it needs to be + // executed before the preverse headers are populated + SWBuf text = target->renderText(); // if we've got a VerseKey (Bible or Commentary) if (vk) { @@ -375,7 +378,7 @@ *output << ": "; } - *output << target->renderText(); + *output << text; if (outputformat == FMT_HTML || outputformat == FMT_HTMLHREF || outputformat == FMT_XHTML || outputformat == FMT_THML || outputformat == FMT_CGI) { From scribe at crosswire.org Wed Mar 28 17:11:18 2018 From: scribe at crosswire.org (scribe at crosswire.org) Date: Wed, 28 Mar 2018 17:11:18 -0700 Subject: [sword-svn] r3580 - in trunk: bindings/Android/SWORD bindings/Android/SWORD/app bindings/Android/SWORD/gradle/wrapper bindings/java-jni/jni utilities/diatheke Message-ID: Author: scribe Date: 2018-03-28 17:11:18 -0700 (Wed, 28 Mar 2018) New Revision: 3580 Modified: trunk/bindings/Android/SWORD/app/build.gradle trunk/bindings/Android/SWORD/build.gradle trunk/bindings/Android/SWORD/gradle/wrapper/gradle-wrapper.properties trunk/bindings/java-jni/jni/swordstub.cpp trunk/utilities/diatheke/diatheke.cpp Log: Updated to latest Android Studio build system. Added UTF8 guard as workaround for ndk UTF8 bug. Bumped version and copyright date of diatheke Modified: trunk/bindings/Android/SWORD/app/build.gradle =================================================================== --- trunk/bindings/Android/SWORD/app/build.gradle 2018-03-27 22:39:16 UTC (rev 3579) +++ trunk/bindings/Android/SWORD/app/build.gradle 2018-03-29 00:11:18 UTC (rev 3580) @@ -2,7 +2,7 @@ android { compileSdkVersion 25 - buildToolsVersion '26.0.2' + buildToolsVersion '27.0.3' defaultConfig { applicationId "org.crosswire.sword" minSdkVersion 14 Modified: trunk/bindings/Android/SWORD/build.gradle =================================================================== --- trunk/bindings/Android/SWORD/build.gradle 2018-03-27 22:39:16 UTC (rev 3579) +++ trunk/bindings/Android/SWORD/build.gradle 2018-03-29 00:11:18 UTC (rev 3580) @@ -3,9 +3,10 @@ buildscript { repositories { jcenter() + google() } dependencies { - classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.android.tools.build:gradle:3.1.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -15,6 +16,7 @@ allprojects { repositories { jcenter() + google() } } Modified: trunk/bindings/Android/SWORD/gradle/wrapper/gradle-wrapper.properties =================================================================== --- trunk/bindings/Android/SWORD/gradle/wrapper/gradle-wrapper.properties 2018-03-27 22:39:16 UTC (rev 3579) +++ trunk/bindings/Android/SWORD/gradle/wrapper/gradle-wrapper.properties 2018-03-29 00:11:18 UTC (rev 3580) @@ -1,6 +1,6 @@ -#Fri Oct 27 12:46:11 MST 2017 +#Wed Mar 28 15:39:17 MST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip Modified: trunk/bindings/java-jni/jni/swordstub.cpp =================================================================== --- trunk/bindings/java-jni/jni/swordstub.cpp 2018-03-27 22:39:16 UTC (rev 3579) +++ trunk/bindings/java-jni/jni/swordstub.cpp 2018-03-29 00:11:18 UTC (rev 3580) @@ -72,6 +72,19 @@ static char *AND_BIBLE_MODULES_PATH = "/sdcard/Android/data/net.bible.android.activity/files"; //ANativeActivity *_activity; +// this method converts a UTF8 encoded SWBuf to a Java String, avoiding a bug in jni NewStringUTF +jstring strToUTF8Java(JNIEnv *env, SWBuf str) { + int size = 16; + jbyteArray array = env->NewByteArray(str.size()); + env->SetByteArrayRegion(array, 0, str.size(), (const jbyte *)str.c_str()); + jstring strEncode = env->NewStringUTF("UTF-8"); + jclass cls = env->FindClass("java/lang/String"); + jmethodID ctor = env->GetMethodID(cls, "", "([BLjava/lang/String;)V"); + jstring object = (jstring) env->NewObject(cls, ctor, array, strEncode); + + return object; +} + class InstallStatusReporter : public StatusReporter { public: JNIEnv *env; @@ -111,7 +124,7 @@ jclass cls = env->GetObjectClass(callback); jmethodID mid = env->GetMethodID(cls, "preStatus", "(JJLjava/lang/String;)V"); if (mid != 0) { - jstring msg = env->NewStringUTF(assureValidUTF8((const char *)message)); + jstring msg = strToUTF8Java(env, assureValidUTF8(message)); env->CallVoidMethod(callback, mid, (jlong)totalBytes, (jlong)completedBytes, msg); env->DeleteLocalRef(msg); } @@ -270,7 +283,7 @@ init(env); SWVersion v; - return env->NewStringUTF(v.currentVersion); + return strToUTF8Java(env, (const char *)v.currentVersion); } @@ -301,7 +314,7 @@ init(env); - return env->NewStringUTF(mgr->prefixPath); + return strToUTF8Java(env, mgr->prefixPath); } JNIEXPORT jstring JNICALL Java_org_crosswire_android_sword_SWMgr_getConfigPath @@ -309,7 +322,7 @@ init(env); - return env->NewStringUTF(mgr->configPath); + return strToUTF8Java(env, mgr->configPath); } @@ -352,15 +365,15 @@ jobject modInfo = env->AllocObject(clazzModInfo); jstring val; - val = env->NewStringUTF(assureValidUTF8(module->getName())); env->SetObjectField(modInfo, nameID , val); env->DeleteLocalRef(val); - val = env->NewStringUTF(assureValidUTF8(module->getDescription())); env->SetObjectField(modInfo, descID , val); env->DeleteLocalRef(val); - val = env->NewStringUTF(assureValidUTF8(type.c_str())); env->SetObjectField(modInfo, catID , val); env->DeleteLocalRef(val); - val = env->NewStringUTF(assureValidUTF8(module->getLanguage())); env->SetObjectField(modInfo, langID , val); env->DeleteLocalRef(val); - val = env->NewStringUTF(assureValidUTF8(version.c_str())); env->SetObjectField(modInfo, versionID , val); env->DeleteLocalRef(val); - val = env->NewStringUTF(assureValidUTF8("")); env->SetObjectField(modInfo, deltaID , val); env->DeleteLocalRef(val); + val = strToUTF8Java(env, assureValidUTF8(module->getName())); env->SetObjectField(modInfo, nameID , val); env->DeleteLocalRef(val); + val = strToUTF8Java(env, assureValidUTF8(module->getDescription())); env->SetObjectField(modInfo, descID , val); env->DeleteLocalRef(val); + val = strToUTF8Java(env, assureValidUTF8(type.c_str())); env->SetObjectField(modInfo, catID , val); env->DeleteLocalRef(val); + val = strToUTF8Java(env, assureValidUTF8(module->getLanguage())); env->SetObjectField(modInfo, langID , val); env->DeleteLocalRef(val); + val = strToUTF8Java(env, assureValidUTF8(version.c_str())); env->SetObjectField(modInfo, versionID , val); env->DeleteLocalRef(val); + val = strToUTF8Java(env, assureValidUTF8("")); env->SetObjectField(modInfo, deltaID , val); env->DeleteLocalRef(val); const char *cipherKey = module->getConfigEntry("CipherKey"); if (cipherKey) { - val = env->NewStringUTF(assureValidUTF8(cipherKey)); env->SetObjectField(modInfo, cipherKeyID, val); env->DeleteLocalRef(val); + val = strToUTF8Java(env, assureValidUTF8(cipherKey)); env->SetObjectField(modInfo, cipherKeyID, val); env->DeleteLocalRef(val); } else env->SetObjectField(modInfo, cipherKeyID, NULL); @@ -374,7 +387,7 @@ jobjectArray features = (jobjectArray) env->NewObjectArray(featureCount, clazzString, NULL); featureCount = 0; for (ConfigEntMap::const_iterator it = start; it != end; ++it) { - env->SetObjectArrayElement(features, featureCount++, env->NewStringUTF(assureValidUTF8(it->second))); + env->SetObjectArrayElement(features, featureCount++, strToUTF8Java(env, assureValidUTF8(it->second))); } env->SetObjectField(modInfo, featuresID, features); env->DeleteLocalRef(features); @@ -410,9 +423,9 @@ jfieldID fieldID; jclass clazzSWModule = env->FindClass("org/crosswire/android/sword/SWModule"); retVal = env->AllocObject(clazzSWModule); - fieldID = env->GetFieldID(clazzSWModule, "name", "Ljava/lang/String;"); env->SetObjectField(retVal, fieldID, env->NewStringUTF(assureValidUTF8(module->getName()))); - fieldID = env->GetFieldID(clazzSWModule, "description", "Ljava/lang/String;"); env->SetObjectField(retVal, fieldID, env->NewStringUTF(assureValidUTF8(module->getDescription()))); - fieldID = env->GetFieldID(clazzSWModule, "category", "Ljava/lang/String;"); env->SetObjectField(retVal, fieldID, env->NewStringUTF(assureValidUTF8(type.c_str()))); + fieldID = env->GetFieldID(clazzSWModule, "name", "Ljava/lang/String;"); env->SetObjectField(retVal, fieldID, strToUTF8Java(env, assureValidUTF8(module->getName()))); + fieldID = env->GetFieldID(clazzSWModule, "description", "Ljava/lang/String;"); env->SetObjectField(retVal, fieldID, strToUTF8Java(env, assureValidUTF8(module->getDescription()))); + fieldID = env->GetFieldID(clazzSWModule, "category", "Ljava/lang/String;"); env->SetObjectField(retVal, fieldID, strToUTF8Java(env, assureValidUTF8(type.c_str()))); } return retVal; } @@ -454,7 +467,7 @@ env->ReleaseStringUTFChars(optionJS, option); - return env->NewStringUTF(assureValidUTF8(value)); + return strToUTF8Java(env, assureValidUTF8(value)); } @@ -474,7 +487,7 @@ env->ReleaseStringUTFChars(optionJS, option); - return env->NewStringUTF(assureValidUTF8(value)); + return strToUTF8Java(env, assureValidUTF8(value)); } @@ -499,7 +512,7 @@ env->ReleaseStringUTFChars(textJS, text); env->ReleaseStringUTFChars(filterNameJS, filterName); - return env->NewStringUTF(assureValidUTF8(buf)); + return strToUTF8Java(env, assureValidUTF8(buf)); } @@ -524,7 +537,7 @@ count = 0; for (sword::StringList::iterator it = options.begin(); it != options.end(); ++it) { - env->SetObjectArrayElement(ret, count++, env->NewStringUTF(assureValidUTF8(*it))); + env->SetObjectArrayElement(ret, count++, strToUTF8Java(env, assureValidUTF8(*it))); } return ret; @@ -558,7 +571,7 @@ ret = (jobjectArray) env->NewObjectArray(count, clazzString, NULL); count = 0; for (sit = config.getSections().begin(); sit != config.getSections().end(); ++sit) { - env->SetObjectArrayElement(ret, count++, env->NewStringUTF(assureValidUTF8(sit->first.c_str()))); + env->SetObjectArrayElement(ret, count++, strToUTF8Java(env, assureValidUTF8(sit->first.c_str()))); } } else { @@ -603,7 +616,7 @@ count = 0; for (it = sit->second.begin(); it != sit->second.end(); ++it) { env->SetObjectArrayElement(ret, count++, - env->NewStringUTF(assureValidUTF8(it->first.c_str()))); + strToUTF8Java(env, assureValidUTF8(it->first.c_str()))); } } else { @@ -651,7 +664,7 @@ if (sit != config.getSections().end()) { ConfigEntMap::const_iterator it = sit->second.find(myKey.c_str()); if (it != sit->second.end()) { - ret = env->NewStringUTF(assureValidUTF8(it->second.c_str())); + ret = strToUTF8Java(env, assureValidUTF8(it->second.c_str())); } } } @@ -737,7 +750,7 @@ ret = (jobjectArray) env->NewObjectArray(count, clazzString, NULL); count = 0; for (sit = newConfig.getSections().begin(); sit != newConfig.getSections().end(); ++sit) { - env->SetObjectArrayElement(ret, count++, env->NewStringUTF(assureValidUTF8(sit->first.c_str()))); + env->SetObjectArrayElement(ret, count++, strToUTF8Java(env, assureValidUTF8(sit->first.c_str()))); } SWBuf confPath = baseDir + "/extraConfig.conf"; @@ -776,7 +789,7 @@ count = 0; for (sword::StringList::iterator it = options.begin(); it != options.end(); ++it) { - env->SetObjectArrayElement(ret, count++, env->NewStringUTF(assureValidUTF8(*it))); + env->SetObjectArrayElement(ret, count++, strToUTF8Java(env, assureValidUTF8(*it))); } return ret; @@ -838,7 +851,7 @@ count = 0; for (sword::StringList::iterator it = localeNames.begin(); it != localeNames.end(); ++it) { - env->SetObjectArrayElement(ret, count++, env->NewStringUTF(assureValidUTF8(*it))); + env->SetObjectArrayElement(ret, count++, strToUTF8Java(env, assureValidUTF8(*it))); } return ret; } @@ -945,7 +958,7 @@ jstring retVal = 0; if (module) { - retVal = env->NewStringUTF(assureValidUTF8(module->getKeyText())); + retVal = strToUTF8Java(env, assureValidUTF8(module->getKeyText())); } return retVal; } @@ -965,7 +978,7 @@ jstring retVal = 0; if (module) { - retVal = env->NewStringUTF(assureValidUTF8(module->renderText())); + retVal = strToUTF8Java(env, assureValidUTF8(module->renderText())); } return retVal; } @@ -985,7 +998,7 @@ jstring retVal = 0; if (module) { - retVal = env->NewStringUTF(assureValidUTF8(((const char *)(module->getRenderHeader() ? module->getRenderHeader():"")))); + retVal = strToUTF8Java(env, assureValidUTF8(((const char *)(module->getRenderHeader() ? module->getRenderHeader():"")))); } return retVal; } @@ -1137,12 +1150,13 @@ SWLog::getSystemLog()->logDebug("getEntryAttributes: size returned: %d", results.size()); - for (int i = 0; i < results.size(); i++) { + for (int i = 0; i < results.size(); ++i) { if (filtered) { - env->SetObjectArrayElement(ret, i, env->NewStringUTF(assureValidUTF8(module->renderText(results[i].c_str())))); + SWBuf rendered = module->renderText(results[i].c_str()); + env->SetObjectArrayElement(ret, i, strToUTF8Java(env, assureValidUTF8(rendered.c_str()))); } else { - env->SetObjectArrayElement(ret, i, env->NewStringUTF(assureValidUTF8(results[i].c_str()))); + env->SetObjectArrayElement(ret, i, strToUTF8Java(env, assureValidUTF8(results[i].c_str()))); } } } @@ -1185,12 +1199,12 @@ count = 0; for (result = sword::TOP; !result.popError(); result++) { - env->SetObjectArrayElement(ret, count++, env->NewStringUTF(assureValidUTF8((const char *)result))); + env->SetObjectArrayElement(ret, count++, strToUTF8Java(env, assureValidUTF8((const char *)result))); } } else { ret = (jobjectArray) env->NewObjectArray(1, clazzString, NULL); - env->SetObjectArrayElement(ret, 0, env->NewStringUTF(assureValidUTF8(keyListText))); + env->SetObjectArrayElement(ret, 0, strToUTF8Java(env, assureValidUTF8(keyListText))); } } @@ -1250,26 +1264,26 @@ ret = (jobjectArray) env->NewObjectArray(10, clazzString, NULL); SWBuf num; num.appendFormatted("%d", vkey->getTestament()); - env->SetObjectArrayElement(ret, 0, env->NewStringUTF(assureValidUTF8(num.c_str()))); + env->SetObjectArrayElement(ret, 0, strToUTF8Java(env, assureValidUTF8(num.c_str()))); num = ""; num.appendFormatted("%d", vkey->getBook()); - env->SetObjectArrayElement(ret, 1, env->NewStringUTF(assureValidUTF8(num.c_str()))); + env->SetObjectArrayElement(ret, 1, strToUTF8Java(env, assureValidUTF8(num.c_str()))); num = ""; num.appendFormatted("%d", vkey->getChapter()); - env->SetObjectArrayElement(ret, 2, env->NewStringUTF(assureValidUTF8(num.c_str()))); + env->SetObjectArrayElement(ret, 2, strToUTF8Java(env, assureValidUTF8(num.c_str()))); num = ""; num.appendFormatted("%d", vkey->getVerse()); - env->SetObjectArrayElement(ret, 3, env->NewStringUTF(assureValidUTF8(num.c_str()))); + env->SetObjectArrayElement(ret, 3, strToUTF8Java(env, assureValidUTF8(num.c_str()))); num = ""; num.appendFormatted("%d", vkey->getChapterMax()); - env->SetObjectArrayElement(ret, 4, env->NewStringUTF(assureValidUTF8(num.c_str()))); + env->SetObjectArrayElement(ret, 4, strToUTF8Java(env, 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()))); - env->SetObjectArrayElement(ret, 7, env->NewStringUTF(assureValidUTF8(vkey->getOSISRef()))); - env->SetObjectArrayElement(ret, 8, env->NewStringUTF(assureValidUTF8(vkey->getShortText()))); - env->SetObjectArrayElement(ret, 9, env->NewStringUTF(assureValidUTF8(vkey->getBookAbbrev()))); + env->SetObjectArrayElement(ret, 5, strToUTF8Java(env, assureValidUTF8(num.c_str()))); + env->SetObjectArrayElement(ret, 6, strToUTF8Java(env, assureValidUTF8(vkey->getBookName()))); + env->SetObjectArrayElement(ret, 7, strToUTF8Java(env, assureValidUTF8(vkey->getOSISRef()))); + env->SetObjectArrayElement(ret, 8, strToUTF8Java(env, assureValidUTF8(vkey->getShortText()))); + env->SetObjectArrayElement(ret, 9, strToUTF8Java(env, assureValidUTF8(vkey->getBookAbbrev()))); } else { TreeKeyIdx *tkey = SWDYNAMIC_CAST(TreeKeyIdx, key); @@ -1285,7 +1299,7 @@ count = 0; if (tkey->firstChild()) { do { - env->SetObjectArrayElement(ret, count++, env->NewStringUTF(assureValidUTF8(tkey->getLocalName()))); + env->SetObjectArrayElement(ret, count++, strToUTF8Java(env, assureValidUTF8(tkey->getLocalName()))); } while (tkey->nextSibling()); tkey->parent(); @@ -1323,7 +1337,7 @@ } } } - return env->NewStringUTF(assureValidUTF8(retVal)); + return strToUTF8Java(env, assureValidUTF8(retVal)); } @@ -1403,7 +1417,7 @@ retVal = module->stripText(); } - return env->NewStringUTF(assureValidUTF8(retVal)); + return strToUTF8Java(env, assureValidUTF8(retVal)); } @@ -1426,7 +1440,7 @@ retVal = module->getRawEntry(); } - return env->NewStringUTF(assureValidUTF8(retVal)); + return strToUTF8Java(env, assureValidUTF8(retVal)); } @@ -1478,7 +1492,7 @@ RTFHTML().processText(confValue); } SWBuf assuredBuf = assureValidUTF8(confValue.c_str()); - retVal = env->NewStringUTF(assuredBuf.c_str()); + retVal = strToUTF8Java(env, assuredBuf.c_str()); } env->ReleaseStringUTFChars(configKeyJS, configKey); @@ -1605,7 +1619,7 @@ result.sort(); int i = 0; - jstring modName = env->NewStringUTF(assureValidUTF8(module->getName())); + jstring modName = strToUTF8Java(env, assureValidUTF8(module->getName())); jfieldID fieldIDModName = env->GetFieldID(clazzSearchHit, "modName", "Ljava/lang/String;"); jfieldID fieldIDKey = env->GetFieldID(clazzSearchHit, "key" , "Ljava/lang/String;"); jfieldID fieldIDScore = env->GetFieldID(clazzSearchHit, "score" , "J"); @@ -1614,7 +1628,7 @@ jobject searchHit = env->AllocObject(clazzSearchHit); env->SetObjectField(searchHit, fieldIDModName, modName); - jstring key = env->NewStringUTF(assureValidUTF8((const char *)result)); + jstring key = strToUTF8Java(env, assureValidUTF8((const char *)result)); env->SetObjectField(searchHit, fieldIDKey, key); env->DeleteLocalRef(key); env->SetLongField(searchHit, fieldIDScore, (long)result.getElement()->userData); @@ -1714,7 +1728,7 @@ ret = (jobjectArray) env->NewObjectArray(count, clazzString, NULL); count = 0; for (InstallSourceMap::iterator it = installMgr->sources.begin(); it != installMgr->sources.end(); ++it) { - env->SetObjectArrayElement(ret, count++, env->NewStringUTF(assureValidUTF8(it->second->caption.c_str()))); + env->SetObjectArrayElement(ret, count++, strToUTF8Java(env, assureValidUTF8(it->second->caption.c_str()))); } return ret; @@ -1805,15 +1819,15 @@ jobject modInfo = env->AllocObject(clazzModInfo); jstring val; - val = env->NewStringUTF(assureValidUTF8(module->getName())); env->SetObjectField(modInfo, nameID , val); env->DeleteLocalRef(val); - val = env->NewStringUTF(assureValidUTF8(module->getDescription())); env->SetObjectField(modInfo, descID , val); env->DeleteLocalRef(val); - val = env->NewStringUTF(assureValidUTF8(type.c_str())); env->SetObjectField(modInfo, catID , val); env->DeleteLocalRef(val); - val = env->NewStringUTF(assureValidUTF8(module->getLanguage())); env->SetObjectField(modInfo, langID , val); env->DeleteLocalRef(val); - val = env->NewStringUTF(assureValidUTF8(version.c_str())); env->SetObjectField(modInfo, versionID , val); env->DeleteLocalRef(val); - val = env->NewStringUTF(assureValidUTF8(statusString.c_str())); env->SetObjectField(modInfo, deltaID , val); env->DeleteLocalRef(val); + val = strToUTF8Java(env, assureValidUTF8(module->getName())); env->SetObjectField(modInfo, nameID , val); env->DeleteLocalRef(val); + val = strToUTF8Java(env, assureValidUTF8(module->getDescription())); env->SetObjectField(modInfo, descID , val); env->DeleteLocalRef(val); + val = strToUTF8Java(env, assureValidUTF8(type.c_str())); env->SetObjectField(modInfo, catID , val); env->DeleteLocalRef(val); + val = strToUTF8Java(env, assureValidUTF8(module->getLanguage())); env->SetObjectField(modInfo, langID , val); env->DeleteLocalRef(val); + val = strToUTF8Java(env, assureValidUTF8(version.c_str())); env->SetObjectField(modInfo, versionID , val); env->DeleteLocalRef(val); + val = strToUTF8Java(env, assureValidUTF8(statusString.c_str())); env->SetObjectField(modInfo, deltaID , val); env->DeleteLocalRef(val); const char *cipherKey = module->getConfigEntry("CipherKey"); if (cipherKey) { - val = env->NewStringUTF(assureValidUTF8(cipherKey)); env->SetObjectField(modInfo, cipherKeyID, val); env->DeleteLocalRef(val); + val = strToUTF8Java(env, assureValidUTF8(cipherKey)); env->SetObjectField(modInfo, cipherKeyID, val); env->DeleteLocalRef(val); } else env->SetObjectField(modInfo, cipherKeyID, NULL); @@ -1827,7 +1841,7 @@ jobjectArray features = (jobjectArray) env->NewObjectArray(featureCount, clazzString, NULL); featureCount = 0; for (ConfigEntMap::const_iterator it = start; it != end; ++it) { - env->SetObjectArrayElement(features, featureCount++, env->NewStringUTF(assureValidUTF8(it->second))); + env->SetObjectArrayElement(features, featureCount++, strToUTF8Java(env, assureValidUTF8(it->second))); } env->SetObjectField(modInfo, featuresID, features); env->DeleteLocalRef(features); @@ -1883,7 +1897,7 @@ jclass cls = env->GetObjectClass(progressReporter); jmethodID mid = env->GetMethodID(cls, "preStatus", "(JJLjava/lang/String;)V"); if (mid != 0) { - jstring msg = env->NewStringUTF("Complete"); + jstring msg = strToUTF8Java(env, "Complete"); env->CallVoidMethod(progressReporter, mid, (jlong)0, (jlong)0, msg); env->DeleteLocalRef(msg); } @@ -1929,9 +1943,9 @@ jfieldID fieldID; jclass clazzSWModule = env->FindClass("org/crosswire/android/sword/SWModule"); retVal = env->AllocObject(clazzSWModule); - fieldID = env->GetFieldID(clazzSWModule, "name", "Ljava/lang/String;"); env->SetObjectField(retVal, fieldID, env->NewStringUTF(assureValidUTF8(module->getName()))); - fieldID = env->GetFieldID(clazzSWModule, "description", "Ljava/lang/String;"); env->SetObjectField(retVal, fieldID, env->NewStringUTF(assureValidUTF8(module->getDescription()))); - fieldID = env->GetFieldID(clazzSWModule, "category", "Ljava/lang/String;"); env->SetObjectField(retVal, fieldID, env->NewStringUTF(assureValidUTF8(type.c_str()))); + fieldID = env->GetFieldID(clazzSWModule, "name", "Ljava/lang/String;"); env->SetObjectField(retVal, fieldID, strToUTF8Java(env, assureValidUTF8(module->getName()))); + fieldID = env->GetFieldID(clazzSWModule, "description", "Ljava/lang/String;"); env->SetObjectField(retVal, fieldID, strToUTF8Java(env, assureValidUTF8(module->getDescription()))); + fieldID = env->GetFieldID(clazzSWModule, "category", "Ljava/lang/String;"); env->SetObjectField(retVal, fieldID, strToUTF8Java(env, assureValidUTF8(type.c_str()))); fieldID = env->GetFieldID(clazzSWModule, "remoteSourceName", "Ljava/lang/String;"); env->SetObjectField(retVal, fieldID, sourceNameJS); } @@ -2063,3 +2077,13 @@ #endif } +jint JNI_OnLoad(JavaVM *vm, void *reserved) { + return JNI_VERSION_1_2; +} + +void JNI_OnUnload(JavaVM *vm, void *reserved) { + delete bibleSync; + delete installMgr; + delete mgr; +} + Modified: trunk/utilities/diatheke/diatheke.cpp =================================================================== --- trunk/utilities/diatheke/diatheke.cpp 2018-03-27 22:39:16 UTC (rev 3579) +++ trunk/utilities/diatheke/diatheke.cpp 2018-03-29 00:11:18 UTC (rev 3580) @@ -37,8 +37,8 @@ void printsyntax() { //if we got this far without exiting, something went wrong, so print syntax - fprintf (stderr, "Diatheke command-line SWORD frontend Version 4.7\n"); - fprintf (stderr, "Copyright 1999-2014 by the CrossWire Bible Society\n"); + fprintf (stderr, "Diatheke command-line SWORD frontend Version 4.8\n"); + fprintf (stderr, "Copyright 1999-2018 by the CrossWire Bible Society\n"); fprintf (stderr, "http://www.crosswire.org/sword/diatheke/\n"); fprintf (stderr, "\n"); fprintf (stderr, "usage: diatheke <-b module_name> [-s search_type] [-r search_range]\n"); From scribe at crosswire.org Wed Mar 28 18:08:02 2018 From: scribe at crosswire.org (scribe at crosswire.org) Date: Wed, 28 Mar 2018 18:08:02 -0700 Subject: [sword-svn] r3581 - trunk/bindings/java-jni/jni Message-ID: Author: scribe Date: 2018-03-28 18:08:02 -0700 (Wed, 28 Mar 2018) New Revision: 3581 Modified: trunk/bindings/java-jni/jni/swordstub.cpp Log: Better freeing of local references to keep from hitting our 512 limit before returning from JNI Modified: trunk/bindings/java-jni/jni/swordstub.cpp =================================================================== --- trunk/bindings/java-jni/jni/swordstub.cpp 2018-03-29 00:11:18 UTC (rev 3580) +++ trunk/bindings/java-jni/jni/swordstub.cpp 2018-03-29 01:08:02 UTC (rev 3581) @@ -74,7 +74,6 @@ // this method converts a UTF8 encoded SWBuf to a Java String, avoiding a bug in jni NewStringUTF jstring strToUTF8Java(JNIEnv *env, SWBuf str) { - int size = 16; jbyteArray array = env->NewByteArray(str.size()); env->SetByteArrayRegion(array, 0, str.size(), (const jbyte *)str.c_str()); jstring strEncode = env->NewStringUTF("UTF-8"); @@ -82,6 +81,10 @@ jmethodID ctor = env->GetMethodID(cls, "", "([BLjava/lang/String;)V"); jstring object = (jstring) env->NewObject(cls, ctor, array, strEncode); + env->DeleteLocalRef(strEncode); + env->DeleteLocalRef(array); + env->DeleteLocalRef(cls); + return object; } @@ -262,7 +265,7 @@ // navigation case 'N': SWLog::getSystemLog()->logDebug("bibleSync Nav Received: %s", ref.c_str()); - jstring msg = bibleSyncListenerEnv->NewStringUTF(ref.c_str()); + jstring msg = strToUTF8Java(bibleSyncListenerEnv, ref.c_str()); bibleSyncListenerEnv->CallVoidMethod(::bibleSyncListener, mid, msg); bibleSyncListenerEnv->DeleteLocalRef(msg); break; @@ -537,7 +540,9 @@ count = 0; for (sword::StringList::iterator it = options.begin(); it != options.end(); ++it) { - env->SetObjectArrayElement(ret, count++, strToUTF8Java(env, assureValidUTF8(*it))); + jstring s = strToUTF8Java(env, assureValidUTF8(*it)); + env->SetObjectArrayElement(ret, count++, s); + env->DeleteLocalRef(s); } return ret; @@ -571,7 +576,9 @@ ret = (jobjectArray) env->NewObjectArray(count, clazzString, NULL); count = 0; for (sit = config.getSections().begin(); sit != config.getSections().end(); ++sit) { - env->SetObjectArrayElement(ret, count++, strToUTF8Java(env, assureValidUTF8(sit->first.c_str()))); + jstring s = strToUTF8Java(env, assureValidUTF8(sit->first.c_str())); + env->SetObjectArrayElement(ret, count++, s); + env->DeleteLocalRef(s); } } else { @@ -615,8 +622,9 @@ ret = (jobjectArray) env->NewObjectArray(count, clazzString, NULL); count = 0; for (it = sit->second.begin(); it != sit->second.end(); ++it) { - env->SetObjectArrayElement(ret, count++, - strToUTF8Java(env, assureValidUTF8(it->first.c_str()))); + jstring s = strToUTF8Java(env, assureValidUTF8(it->first.c_str())); + env->SetObjectArrayElement(ret, count++, s); + env->DeleteLocalRef(s); } } else { @@ -750,7 +758,9 @@ ret = (jobjectArray) env->NewObjectArray(count, clazzString, NULL); count = 0; for (sit = newConfig.getSections().begin(); sit != newConfig.getSections().end(); ++sit) { - env->SetObjectArrayElement(ret, count++, strToUTF8Java(env, assureValidUTF8(sit->first.c_str()))); + jstring s = strToUTF8Java(env, assureValidUTF8(sit->first.c_str())); + env->SetObjectArrayElement(ret, count++, s); + env->DeleteLocalRef(s); } SWBuf confPath = baseDir + "/extraConfig.conf"; @@ -789,7 +799,9 @@ count = 0; for (sword::StringList::iterator it = options.begin(); it != options.end(); ++it) { - env->SetObjectArrayElement(ret, count++, strToUTF8Java(env, assureValidUTF8(*it))); + jstring s = strToUTF8Java(env, assureValidUTF8(*it)); + env->SetObjectArrayElement(ret, count++, s); + env->DeleteLocalRef(s); } return ret; @@ -851,7 +863,9 @@ count = 0; for (sword::StringList::iterator it = localeNames.begin(); it != localeNames.end(); ++it) { - env->SetObjectArrayElement(ret, count++, strToUTF8Java(env, assureValidUTF8(*it))); + jstring s = strToUTF8Java(env, assureValidUTF8(*it)); + env->SetObjectArrayElement(ret, count++, s); + env->DeleteLocalRef(s); } return ret; } @@ -1151,13 +1165,16 @@ SWLog::getSystemLog()->logDebug("getEntryAttributes: size returned: %d", results.size()); for (int i = 0; i < results.size(); ++i) { + jstring s; if (filtered) { SWBuf rendered = module->renderText(results[i].c_str()); - env->SetObjectArrayElement(ret, i, strToUTF8Java(env, assureValidUTF8(rendered.c_str()))); + s = strToUTF8Java(env, assureValidUTF8(rendered.c_str())); } else { - env->SetObjectArrayElement(ret, i, strToUTF8Java(env, assureValidUTF8(results[i].c_str()))); + s = strToUTF8Java(env, assureValidUTF8(results[i].c_str())); } + env->SetObjectArrayElement(ret, i, s); + env->DeleteLocalRef(s); } } @@ -1199,12 +1216,16 @@ count = 0; for (result = sword::TOP; !result.popError(); result++) { - env->SetObjectArrayElement(ret, count++, strToUTF8Java(env, assureValidUTF8((const char *)result))); + jstring s = strToUTF8Java(env, assureValidUTF8((const char *)result)); + env->SetObjectArrayElement(ret, count++, s); + env->DeleteLocalRef(s); } } else { ret = (jobjectArray) env->NewObjectArray(1, clazzString, NULL); - env->SetObjectArrayElement(ret, 0, strToUTF8Java(env, assureValidUTF8(keyListText))); + jstring s = strToUTF8Java(env, assureValidUTF8(keyListText)); + env->SetObjectArrayElement(ret, 0, s); + env->DeleteLocalRef(s); } } @@ -1299,7 +1320,9 @@ count = 0; if (tkey->firstChild()) { do { - env->SetObjectArrayElement(ret, count++, strToUTF8Java(env, assureValidUTF8(tkey->getLocalName()))); + jstring s = strToUTF8Java(env, assureValidUTF8(tkey->getLocalName())); + env->SetObjectArrayElement(ret, count++, s); + env->DeleteLocalRef(s); } while (tkey->nextSibling()); tkey->parent(); @@ -1728,7 +1751,9 @@ ret = (jobjectArray) env->NewObjectArray(count, clazzString, NULL); count = 0; for (InstallSourceMap::iterator it = installMgr->sources.begin(); it != installMgr->sources.end(); ++it) { - env->SetObjectArrayElement(ret, count++, strToUTF8Java(env, assureValidUTF8(it->second->caption.c_str()))); + jstring s = strToUTF8Java(env, assureValidUTF8(it->second->caption.c_str())); + env->SetObjectArrayElement(ret, count++, s); + env->DeleteLocalRef(s); } return ret; @@ -1841,7 +1866,9 @@ jobjectArray features = (jobjectArray) env->NewObjectArray(featureCount, clazzString, NULL); featureCount = 0; for (ConfigEntMap::const_iterator it = start; it != end; ++it) { - env->SetObjectArrayElement(features, featureCount++, strToUTF8Java(env, assureValidUTF8(it->second))); + val = strToUTF8Java(env, assureValidUTF8(it->second)); + env->SetObjectArrayElement(features, featureCount++, val); + env->DeleteLocalRef(val); } env->SetObjectField(modInfo, featuresID, features); env->DeleteLocalRef(features);