diff --git a/iOS/ScrollMapperBible/.gitignore b/iOS/ScrollMapperBible/.gitignore deleted file mode 100644 index 330d1674..00000000 --- a/iOS/ScrollMapperBible/.gitignore +++ /dev/null @@ -1,90 +0,0 @@ -# Xcode -# -# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore - -## User settings -xcuserdata/ - -## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) -*.xcscmblueprint -*.xccheckout - -## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) -build/ -DerivedData/ -*.moved-aside -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 - -## Obj-C/Swift specific -*.hmap - -## App packaging -*.ipa -*.dSYM.zip -*.dSYM - -## Playgrounds -timeline.xctimeline -playground.xcworkspace - -# Swift Package Manager -# -# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. -# Packages/ -# Package.pins -# Package.resolved -# *.xcodeproj -# -# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata -# hence it is not needed unless you have added a package configuration file to your project -# .swiftpm - -.build/ - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control -# -# Pods/ -# -# Add this line if you want to avoid checking in source code from the Xcode workspace -# *.xcworkspace - -# Carthage -# -# Add this line if you want to avoid checking in source code from Carthage dependencies. -# Carthage/Checkouts - -Carthage/Build/ - -# Accio dependency management -Dependencies/ -.accio/ - -# fastlane -# -# It is recommended to not store the screenshots in the git repo. -# Instead, use fastlane to re-generate the screenshots whenever they are needed. -# For more information about the recommended setup visit: -# https://docs.fastlane.tools/best-practices/source-control/#source-control - -fastlane/report.xml -fastlane/Preview.html -fastlane/screenshots/**/*.png -fastlane/test_output - -# Code Injection -# -# After new code Injection tools there's a generated folder /iOSInjectionProject -# https://github.com/johnno1962/injectionforxcode - -iOSInjectionProject/ diff --git a/iOS/ScrollMapperBible/ScrollMapperBible.xcodeproj/project.pbxproj b/iOS/ScrollMapperBible/ScrollMapperBible.xcodeproj/project.pbxproj deleted file mode 100644 index 525983a6..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible.xcodeproj/project.pbxproj +++ /dev/null @@ -1,945 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXBuildFile section */ - 522AF64B24B510B000FE503C /* ScrollMapperBiblePublishers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522AF64A24B510B000FE503C /* ScrollMapperBiblePublishers.swift */; }; - 522AF65324B51F9200FE503C /* ScrollMapperBibleTranslationsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522AF64F24B51F9200FE503C /* ScrollMapperBibleTranslationsView.swift */; }; - 522AF65424B51F9200FE503C /* ScrollMapperBibleTranslationsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522AF65024B51F9200FE503C /* ScrollMapperBibleTranslationsViewModel.swift */; }; - 522AF66A24B6344D00FE503C /* ScrollMapperBibleSearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522AF66624B6344D00FE503C /* ScrollMapperBibleSearchView.swift */; }; - 522AF66B24B6344D00FE503C /* ScrollMapperBibleSearchViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522AF66724B6344D00FE503C /* ScrollMapperBibleSearchViewModel.swift */; }; - 522AF67824B79EC100FE503C /* ScrollMapperBibleTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522AF67724B79EC100FE503C /* ScrollMapperBibleTable.swift */; }; - 5245370624BDFF1400EC11B4 /* ScrollMapperBibleJumpToView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5245370424BDFF1400EC11B4 /* ScrollMapperBibleJumpToView.swift */; }; - 5245370724BDFF1400EC11B4 /* ScrollMapperBibleJumpToViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5245370524BDFF1400EC11B4 /* ScrollMapperBibleJumpToViewModel.swift */; }; - 5245370924C0F6AB00EC11B4 /* ScrollMapperBibleWebViewColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5245370824C0F6AB00EC11B4 /* ScrollMapperBibleWebViewColor.swift */; }; - 5245370D24C13C9500EC11B4 /* ScrollMapperBibleCrossReferenceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5245370B24C13C9500EC11B4 /* ScrollMapperBibleCrossReferenceView.swift */; }; - 5245370E24C13C9500EC11B4 /* ScrollMapperBibleCrossReferenceViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5245370C24C13C9500EC11B4 /* ScrollMapperBibleCrossReferenceViewModel.swift */; }; - 52555D4224B9860500502EE6 /* JKCSSearchBarUIViewRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52555D4124B9860500502EE6 /* JKCSSearchBarUIViewRepresentable.swift */; }; - 52555D4424BA2DE400502EE6 /* StringExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52555D4324BA2DE400502EE6 /* StringExtensions.swift */; }; - 52555D4824BA35F900502EE6 /* ScrollMapperBibleFacilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52555D4724BA35F900502EE6 /* ScrollMapperBibleFacilities.swift */; }; - 52555D4A24BA942F00502EE6 /* ScrollMapperBibleVerseWithCrossReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52555D4924BA942F00502EE6 /* ScrollMapperBibleVerseWithCrossReference.swift */; }; - 52B2378924C3A9EE0081BF55 /* UIDeviceExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52B2378824C3A9EE0081BF55 /* UIDeviceExtensions.swift */; }; - 52B237B024D636630081BF55 /* JKCSUIViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52B237AF24D636630081BF55 /* JKCSUIViewModel.swift */; }; - 52B237B224D639590081BF55 /* ScrollMapperBibleUIPublishers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52B237B124D639590081BF55 /* ScrollMapperBibleUIPublishers.swift */; }; - 52BFF79624B8B479009CBB18 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52BFF79524B8B479009CBB18 /* WebKit.framework */; }; - 52BFF79924B8BA39009CBB18 /* PeekabooWKWebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52BFF79824B8BA39009CBB18 /* PeekabooWKWebView.swift */; }; - 52D57C2E24ACDAE5001D4E4D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D57C2D24ACDAE5001D4E4D /* AppDelegate.swift */; }; - 52D57C3024ACDAE5001D4E4D /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D57C2F24ACDAE5001D4E4D /* SceneDelegate.swift */; }; - 52D57C3424ACDAE5001D4E4D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 52D57C3324ACDAE5001D4E4D /* Assets.xcassets */; }; - 52D57C3724ACDAE5001D4E4D /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 52D57C3624ACDAE5001D4E4D /* Preview Assets.xcassets */; }; - 52D57C3A24ACDAE5001D4E4D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 52D57C3824ACDAE5001D4E4D /* LaunchScreen.storyboard */; }; - 52D57C4524ACDAE5001D4E4D /* ScrollMapperBibleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D57C4424ACDAE5001D4E4D /* ScrollMapperBibleTests.swift */; }; - 52D57C5024ACDAE5001D4E4D /* ScrollMapperBibleUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D57C4F24ACDAE5001D4E4D /* ScrollMapperBibleUITests.swift */; }; - 52D57C6524ACDD88001D4E4D /* bible-sqlite.db in Resources */ = {isa = PBXBuildFile; fileRef = 52D57C6224ACDD88001D4E4D /* bible-sqlite.db */; }; - 52D57C6624ACDD88001D4E4D /* readme.md in Resources */ = {isa = PBXBuildFile; fileRef = 52D57C6324ACDD88001D4E4D /* readme.md */; }; - 52D57C6724ACDD88001D4E4D /* book_info.sql in Resources */ = {isa = PBXBuildFile; fileRef = 52D57C6424ACDD88001D4E4D /* book_info.sql */; }; - 52D57C6C24B360CD001D4E4D /* JKCSSQLite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D57C6B24B360CD001D4E4D /* JKCSSQLite.swift */; }; - 52D57C6F24B39B72001D4E4D /* ScrollMapperBibleVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D57C6E24B39B72001D4E4D /* ScrollMapperBibleVersion.swift */; }; - 52D57C7324B3A900001D4E4D /* ScrollMapperBibleModelBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D57C7224B3A900001D4E4D /* ScrollMapperBibleModelBase.swift */; }; - 52D57C7524B3A9A1001D4E4D /* ScrollMapperBibleBookInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D57C7424B3A9A1001D4E4D /* ScrollMapperBibleBookInfo.swift */; }; - 52D57C7724B3C59F001D4E4D /* ScrollMapperBibleCrossReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D57C7624B3C59F001D4E4D /* ScrollMapperBibleCrossReference.swift */; }; - 52D57C7924B3C97A001D4E4D /* ScrollMapperBibleText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D57C7824B3C97A001D4E4D /* ScrollMapperBibleText.swift */; }; - 52D57C7B24B3F947001D4E4D /* tricks.md in Resources */ = {isa = PBXBuildFile; fileRef = 52D57C7A24B3F947001D4E4D /* tricks.md */; }; - 52D57C7D24B41E7F001D4E4D /* ScrollMapperBibleChapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D57C7C24B41E7F001D4E4D /* ScrollMapperBibleChapter.swift */; }; - 52D57C8324B4BB20001D4E4D /* ScrollMapperBibleMainView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D57C8124B4BB20001D4E4D /* ScrollMapperBibleMainView.swift */; }; - 52D57C8424B4BB20001D4E4D /* ScrollMapperBibleMainViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D57C8224B4BB20001D4E4D /* ScrollMapperBibleMainViewModel.swift */; }; - 52D57C9324B4BBE9001D4E4D /* ScrollMapperBibleSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D57C8F24B4BBE9001D4E4D /* ScrollMapperBibleSettingsView.swift */; }; - 52D57C9424B4BBE9001D4E4D /* ScrollMapperBibleSettingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D57C9024B4BBE9001D4E4D /* ScrollMapperBibleSettingsViewModel.swift */; }; - 52D57C9924B4BC0A001D4E4D /* JKCSUIShared.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D57C9524B4BC0A001D4E4D /* JKCSUIShared.swift */; }; - 52D57C9A24B4BC0A001D4E4D /* JKCSShared.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D57C9624B4BC0A001D4E4D /* JKCSShared.swift */; }; - 52D57C9B24B4BC0A001D4E4D /* ScrollMapperBibleTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D57C9724B4BC0A001D4E4D /* ScrollMapperBibleTextView.swift */; }; - 52D57C9C24B4BC0A001D4E4D /* ScrollMapperBibleTextViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D57C9824B4BC0A001D4E4D /* ScrollMapperBibleTextViewModel.swift */; }; - 52D57CA024B4CA09001D4E4D /* BundleExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D57C9F24B4CA09001D4E4D /* BundleExtensions.swift */; }; - F269A6DD2516578700C813BF /* ScrollMapperBibleCopyrightAndLicenseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F269A6DB2516578700C813BF /* ScrollMapperBibleCopyrightAndLicenseView.swift */; }; - F269A6DE2516578700C813BF /* ScrollMapperBibleCopyrightAndLicenseViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F269A6DC2516578700C813BF /* ScrollMapperBibleCopyrightAndLicenseViewModel.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 52D57C4124ACDAE5001D4E4D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 52D57C2224ACDAE4001D4E4D /* Project object */; - proxyType = 1; - remoteGlobalIDString = 52D57C2924ACDAE5001D4E4D; - remoteInfo = ScrollMapperBible; - }; - 52D57C4C24ACDAE5001D4E4D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 52D57C2224ACDAE4001D4E4D /* Project object */; - proxyType = 1; - remoteGlobalIDString = 52D57C2924ACDAE5001D4E4D; - remoteInfo = ScrollMapperBible; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 522AF64A24B510B000FE503C /* ScrollMapperBiblePublishers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBiblePublishers.swift; sourceTree = ""; }; - 522AF64F24B51F9200FE503C /* ScrollMapperBibleTranslationsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleTranslationsView.swift; sourceTree = ""; }; - 522AF65024B51F9200FE503C /* ScrollMapperBibleTranslationsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleTranslationsViewModel.swift; sourceTree = ""; }; - 522AF66624B6344D00FE503C /* ScrollMapperBibleSearchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleSearchView.swift; sourceTree = ""; }; - 522AF66724B6344D00FE503C /* ScrollMapperBibleSearchViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleSearchViewModel.swift; sourceTree = ""; }; - 522AF67724B79EC100FE503C /* ScrollMapperBibleTable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleTable.swift; sourceTree = ""; }; - 5245370424BDFF1400EC11B4 /* ScrollMapperBibleJumpToView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleJumpToView.swift; sourceTree = ""; }; - 5245370524BDFF1400EC11B4 /* ScrollMapperBibleJumpToViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleJumpToViewModel.swift; sourceTree = ""; }; - 5245370824C0F6AB00EC11B4 /* ScrollMapperBibleWebViewColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleWebViewColor.swift; sourceTree = ""; }; - 5245370B24C13C9500EC11B4 /* ScrollMapperBibleCrossReferenceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleCrossReferenceView.swift; sourceTree = ""; }; - 5245370C24C13C9500EC11B4 /* ScrollMapperBibleCrossReferenceViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleCrossReferenceViewModel.swift; sourceTree = ""; }; - 52555D4124B9860500502EE6 /* JKCSSearchBarUIViewRepresentable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JKCSSearchBarUIViewRepresentable.swift; sourceTree = ""; }; - 52555D4324BA2DE400502EE6 /* StringExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringExtensions.swift; sourceTree = ""; }; - 52555D4724BA35F900502EE6 /* ScrollMapperBibleFacilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleFacilities.swift; sourceTree = ""; }; - 52555D4924BA942F00502EE6 /* ScrollMapperBibleVerseWithCrossReference.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleVerseWithCrossReference.swift; sourceTree = ""; }; - 52B2378824C3A9EE0081BF55 /* UIDeviceExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIDeviceExtensions.swift; sourceTree = ""; }; - 52B237AF24D636630081BF55 /* JKCSUIViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JKCSUIViewModel.swift; sourceTree = ""; }; - 52B237B124D639590081BF55 /* ScrollMapperBibleUIPublishers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleUIPublishers.swift; sourceTree = ""; }; - 52BFF79524B8B479009CBB18 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; - 52BFF79824B8BA39009CBB18 /* PeekabooWKWebView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeekabooWKWebView.swift; sourceTree = ""; }; - 52D57C2A24ACDAE5001D4E4D /* ScrollMapperBible.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ScrollMapperBible.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 52D57C2D24ACDAE5001D4E4D /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 52D57C2F24ACDAE5001D4E4D /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; - 52D57C3324ACDAE5001D4E4D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 52D57C3624ACDAE5001D4E4D /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; - 52D57C3924ACDAE5001D4E4D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 52D57C3B24ACDAE5001D4E4D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 52D57C4024ACDAE5001D4E4D /* ScrollMapperBibleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ScrollMapperBibleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 52D57C4424ACDAE5001D4E4D /* ScrollMapperBibleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleTests.swift; sourceTree = ""; }; - 52D57C4624ACDAE5001D4E4D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 52D57C4B24ACDAE5001D4E4D /* ScrollMapperBibleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ScrollMapperBibleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 52D57C4F24ACDAE5001D4E4D /* ScrollMapperBibleUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleUITests.swift; sourceTree = ""; }; - 52D57C5124ACDAE5001D4E4D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 52D57C6224ACDD88001D4E4D /* bible-sqlite.db */ = {isa = PBXFileReference; lastKnownFileType = file; path = "bible-sqlite.db"; sourceTree = ""; }; - 52D57C6324ACDD88001D4E4D /* readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = readme.md; sourceTree = ""; }; - 52D57C6424ACDD88001D4E4D /* book_info.sql */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = book_info.sql; sourceTree = ""; }; - 52D57C6B24B360CD001D4E4D /* JKCSSQLite.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JKCSSQLite.swift; sourceTree = ""; }; - 52D57C6E24B39B72001D4E4D /* ScrollMapperBibleVersion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleVersion.swift; sourceTree = ""; }; - 52D57C7224B3A900001D4E4D /* ScrollMapperBibleModelBase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleModelBase.swift; sourceTree = ""; }; - 52D57C7424B3A9A1001D4E4D /* ScrollMapperBibleBookInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleBookInfo.swift; sourceTree = ""; }; - 52D57C7624B3C59F001D4E4D /* ScrollMapperBibleCrossReference.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleCrossReference.swift; sourceTree = ""; }; - 52D57C7824B3C97A001D4E4D /* ScrollMapperBibleText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleText.swift; sourceTree = ""; }; - 52D57C7A24B3F947001D4E4D /* tricks.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = tricks.md; sourceTree = ""; }; - 52D57C7C24B41E7F001D4E4D /* ScrollMapperBibleChapter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleChapter.swift; sourceTree = ""; }; - 52D57C8124B4BB20001D4E4D /* ScrollMapperBibleMainView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleMainView.swift; sourceTree = ""; }; - 52D57C8224B4BB20001D4E4D /* ScrollMapperBibleMainViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleMainViewModel.swift; sourceTree = ""; }; - 52D57C8F24B4BBE9001D4E4D /* ScrollMapperBibleSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleSettingsView.swift; sourceTree = ""; }; - 52D57C9024B4BBE9001D4E4D /* ScrollMapperBibleSettingsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleSettingsViewModel.swift; sourceTree = ""; }; - 52D57C9524B4BC0A001D4E4D /* JKCSUIShared.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JKCSUIShared.swift; sourceTree = ""; }; - 52D57C9624B4BC0A001D4E4D /* JKCSShared.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JKCSShared.swift; sourceTree = ""; }; - 52D57C9724B4BC0A001D4E4D /* ScrollMapperBibleTextView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleTextView.swift; sourceTree = ""; }; - 52D57C9824B4BC0A001D4E4D /* ScrollMapperBibleTextViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleTextViewModel.swift; sourceTree = ""; }; - 52D57C9F24B4CA09001D4E4D /* BundleExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BundleExtensions.swift; sourceTree = ""; }; - F269A6DB2516578700C813BF /* ScrollMapperBibleCopyrightAndLicenseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleCopyrightAndLicenseView.swift; sourceTree = ""; }; - F269A6DC2516578700C813BF /* ScrollMapperBibleCopyrightAndLicenseViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollMapperBibleCopyrightAndLicenseViewModel.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 52D57C2724ACDAE5001D4E4D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 52BFF79624B8B479009CBB18 /* WebKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 52D57C3D24ACDAE5001D4E4D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 52D57C4824ACDAE5001D4E4D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 522AF64C24B51F6E00FE503C /* Translations */ = { - isa = PBXGroup; - children = ( - 522AF64F24B51F9200FE503C /* ScrollMapperBibleTranslationsView.swift */, - 522AF65024B51F9200FE503C /* ScrollMapperBibleTranslationsViewModel.swift */, - ); - path = Translations; - sourceTree = ""; - }; - 522AF66124B6337600FE503C /* Roots */ = { - isa = PBXGroup; - children = ( - 52D57C7E24B4BAEA001D4E4D /* Main */, - 52D57C7F24B4BAF5001D4E4D /* Bible */, - 52D57C8024B4BB00001D4E4D /* Settings */, - ); - path = Roots; - sourceTree = ""; - }; - 522AF66224B633B700FE503C /* Branches */ = { - isa = PBXGroup; - children = ( - F269A6D3251656AD00C813BF /* CopyrightAndLicense */, - 5245370A24C132BD00EC11B4 /* CrossReference */, - 5245370324BDFE6800EC11B4 /* JumpTo */, - 522AF66324B6340600FE503C /* Search */, - 522AF64C24B51F6E00FE503C /* Translations */, - ); - path = Branches; - sourceTree = ""; - }; - 522AF66324B6340600FE503C /* Search */ = { - isa = PBXGroup; - children = ( - 522AF66624B6344D00FE503C /* ScrollMapperBibleSearchView.swift */, - 522AF66724B6344D00FE503C /* ScrollMapperBibleSearchViewModel.swift */, - ); - path = Search; - sourceTree = ""; - }; - 522AF66C24B66B5800FE503C /* UIKitWidgets */ = { - isa = PBXGroup; - children = ( - 52555D4024B9860500502EE6 /* JKCSSearchBarUIViewRepresentable */, - ); - path = UIKitWidgets; - sourceTree = ""; - }; - 5245370324BDFE6800EC11B4 /* JumpTo */ = { - isa = PBXGroup; - children = ( - 5245370424BDFF1400EC11B4 /* ScrollMapperBibleJumpToView.swift */, - 5245370524BDFF1400EC11B4 /* ScrollMapperBibleJumpToViewModel.swift */, - ); - path = JumpTo; - sourceTree = ""; - }; - 5245370A24C132BD00EC11B4 /* CrossReference */ = { - isa = PBXGroup; - children = ( - 5245370B24C13C9500EC11B4 /* ScrollMapperBibleCrossReferenceView.swift */, - 5245370C24C13C9500EC11B4 /* ScrollMapperBibleCrossReferenceViewModel.swift */, - ); - path = CrossReference; - sourceTree = ""; - }; - 52555D4024B9860500502EE6 /* JKCSSearchBarUIViewRepresentable */ = { - isa = PBXGroup; - children = ( - 52555D4124B9860500502EE6 /* JKCSSearchBarUIViewRepresentable.swift */, - ); - path = JKCSSearchBarUIViewRepresentable; - sourceTree = ""; - }; - 52BFF79424B8B479009CBB18 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 52BFF79524B8B479009CBB18 /* WebKit.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 52D57C2124ACDAE4001D4E4D = { - isa = PBXGroup; - children = ( - 52D57C2C24ACDAE5001D4E4D /* ScrollMapperBible */, - 52D57C4324ACDAE5001D4E4D /* ScrollMapperBibleTests */, - 52D57C4E24ACDAE5001D4E4D /* ScrollMapperBibleUITests */, - 52D57C2B24ACDAE5001D4E4D /* Products */, - 52BFF79424B8B479009CBB18 /* Frameworks */, - ); - sourceTree = ""; - }; - 52D57C2B24ACDAE5001D4E4D /* Products */ = { - isa = PBXGroup; - children = ( - 52D57C2A24ACDAE5001D4E4D /* ScrollMapperBible.app */, - 52D57C4024ACDAE5001D4E4D /* ScrollMapperBibleTests.xctest */, - 52D57C4B24ACDAE5001D4E4D /* ScrollMapperBibleUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 52D57C2C24ACDAE5001D4E4D /* ScrollMapperBible */ = { - isa = PBXGroup; - children = ( - 522AF66C24B66B5800FE503C /* UIKitWidgets */, - 52D57C9E24B4C9F8001D4E4D /* Extensions */, - 52D57C5F24ACDBFF001D4E4D /* Facilities */, - 52D57C5D24ACDBDE001D4E4D /* Models */, - 52D57C6024ACDD0A001D4E4D /* Resources */, - 52D57C6824B36012001D4E4D /* Services */, - 52D57C5E24ACDBE7001D4E4D /* Views */, - 52D57C2D24ACDAE5001D4E4D /* AppDelegate.swift */, - 52D57C2F24ACDAE5001D4E4D /* SceneDelegate.swift */, - 52D57C3324ACDAE5001D4E4D /* Assets.xcassets */, - 52D57C3824ACDAE5001D4E4D /* LaunchScreen.storyboard */, - 52D57C3B24ACDAE5001D4E4D /* Info.plist */, - 52D57C3524ACDAE5001D4E4D /* Preview Content */, - ); - path = ScrollMapperBible; - sourceTree = ""; - }; - 52D57C3524ACDAE5001D4E4D /* Preview Content */ = { - isa = PBXGroup; - children = ( - 52D57C3624ACDAE5001D4E4D /* Preview Assets.xcassets */, - ); - path = "Preview Content"; - sourceTree = ""; - }; - 52D57C4324ACDAE5001D4E4D /* ScrollMapperBibleTests */ = { - isa = PBXGroup; - children = ( - 52D57C4424ACDAE5001D4E4D /* ScrollMapperBibleTests.swift */, - 52D57C4624ACDAE5001D4E4D /* Info.plist */, - ); - path = ScrollMapperBibleTests; - sourceTree = ""; - }; - 52D57C4E24ACDAE5001D4E4D /* ScrollMapperBibleUITests */ = { - isa = PBXGroup; - children = ( - 52D57C4F24ACDAE5001D4E4D /* ScrollMapperBibleUITests.swift */, - 52D57C5124ACDAE5001D4E4D /* Info.plist */, - ); - path = ScrollMapperBibleUITests; - sourceTree = ""; - }; - 52D57C5D24ACDBDE001D4E4D /* Models */ = { - isa = PBXGroup; - children = ( - 52D57C6D24B39AA9001D4E4D /* ScrollMapperBible */, - ); - path = Models; - sourceTree = ""; - }; - 52D57C5E24ACDBE7001D4E4D /* Views */ = { - isa = PBXGroup; - children = ( - 522AF66124B6337600FE503C /* Roots */, - 522AF66224B633B700FE503C /* Branches */, - ); - path = Views; - sourceTree = ""; - }; - 52D57C5F24ACDBFF001D4E4D /* Facilities */ = { - isa = PBXGroup; - children = ( - 52D57C9524B4BC0A001D4E4D /* JKCSUIShared.swift */, - 52D57C9624B4BC0A001D4E4D /* JKCSShared.swift */, - 522AF64A24B510B000FE503C /* ScrollMapperBiblePublishers.swift */, - 52B237B124D639590081BF55 /* ScrollMapperBibleUIPublishers.swift */, - 52555D4724BA35F900502EE6 /* ScrollMapperBibleFacilities.swift */, - ); - path = Facilities; - sourceTree = ""; - }; - 52D57C6024ACDD0A001D4E4D /* Resources */ = { - isa = PBXGroup; - children = ( - 52D57C6124ACDD88001D4E4D /* ScrollMapperBible */, - ); - path = Resources; - sourceTree = ""; - }; - 52D57C6124ACDD88001D4E4D /* ScrollMapperBible */ = { - isa = PBXGroup; - children = ( - 52D57C6224ACDD88001D4E4D /* bible-sqlite.db */, - 52D57C6424ACDD88001D4E4D /* book_info.sql */, - 52D57C6324ACDD88001D4E4D /* readme.md */, - 52D57C7A24B3F947001D4E4D /* tricks.md */, - ); - path = ScrollMapperBible; - sourceTree = ""; - }; - 52D57C6824B36012001D4E4D /* Services */ = { - isa = PBXGroup; - children = ( - 52D57C6924B3601F001D4E4D /* Database */, - ); - path = Services; - sourceTree = ""; - }; - 52D57C6924B3601F001D4E4D /* Database */ = { - isa = PBXGroup; - children = ( - 52D57C6A24B3606B001D4E4D /* SQLite */, - ); - path = Database; - sourceTree = ""; - }; - 52D57C6A24B3606B001D4E4D /* SQLite */ = { - isa = PBXGroup; - children = ( - 52D57C6B24B360CD001D4E4D /* JKCSSQLite.swift */, - ); - path = SQLite; - sourceTree = ""; - }; - 52D57C6D24B39AA9001D4E4D /* ScrollMapperBible */ = { - isa = PBXGroup; - children = ( - 52D57C7224B3A900001D4E4D /* ScrollMapperBibleModelBase.swift */, - 52D57C6E24B39B72001D4E4D /* ScrollMapperBibleVersion.swift */, - 52D57C7424B3A9A1001D4E4D /* ScrollMapperBibleBookInfo.swift */, - 52D57C7624B3C59F001D4E4D /* ScrollMapperBibleCrossReference.swift */, - 52D57C7824B3C97A001D4E4D /* ScrollMapperBibleText.swift */, - 52555D4924BA942F00502EE6 /* ScrollMapperBibleVerseWithCrossReference.swift */, - 52D57C7C24B41E7F001D4E4D /* ScrollMapperBibleChapter.swift */, - 522AF67724B79EC100FE503C /* ScrollMapperBibleTable.swift */, - ); - path = ScrollMapperBible; - sourceTree = ""; - }; - 52D57C7E24B4BAEA001D4E4D /* Main */ = { - isa = PBXGroup; - children = ( - 52D57C8124B4BB20001D4E4D /* ScrollMapperBibleMainView.swift */, - 52D57C8224B4BB20001D4E4D /* ScrollMapperBibleMainViewModel.swift */, - ); - path = Main; - sourceTree = ""; - }; - 52D57C7F24B4BAF5001D4E4D /* Bible */ = { - isa = PBXGroup; - children = ( - 52D57C9724B4BC0A001D4E4D /* ScrollMapperBibleTextView.swift */, - 52BFF79824B8BA39009CBB18 /* PeekabooWKWebView.swift */, - 52D57C9824B4BC0A001D4E4D /* ScrollMapperBibleTextViewModel.swift */, - 5245370824C0F6AB00EC11B4 /* ScrollMapperBibleWebViewColor.swift */, - 52B237AF24D636630081BF55 /* JKCSUIViewModel.swift */, - ); - path = Bible; - sourceTree = ""; - }; - 52D57C8024B4BB00001D4E4D /* Settings */ = { - isa = PBXGroup; - children = ( - 52D57C8F24B4BBE9001D4E4D /* ScrollMapperBibleSettingsView.swift */, - 52D57C9024B4BBE9001D4E4D /* ScrollMapperBibleSettingsViewModel.swift */, - ); - path = Settings; - sourceTree = ""; - }; - 52D57C9E24B4C9F8001D4E4D /* Extensions */ = { - isa = PBXGroup; - children = ( - 52D57C9F24B4CA09001D4E4D /* BundleExtensions.swift */, - 52555D4324BA2DE400502EE6 /* StringExtensions.swift */, - 52B2378824C3A9EE0081BF55 /* UIDeviceExtensions.swift */, - ); - path = Extensions; - sourceTree = ""; - }; - F269A6D3251656AD00C813BF /* CopyrightAndLicense */ = { - isa = PBXGroup; - children = ( - F269A6DB2516578700C813BF /* ScrollMapperBibleCopyrightAndLicenseView.swift */, - F269A6DC2516578700C813BF /* ScrollMapperBibleCopyrightAndLicenseViewModel.swift */, - ); - path = CopyrightAndLicense; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 52D57C2924ACDAE5001D4E4D /* ScrollMapperBible */ = { - isa = PBXNativeTarget; - buildConfigurationList = 52D57C5424ACDAE5001D4E4D /* Build configuration list for PBXNativeTarget "ScrollMapperBible" */; - buildPhases = ( - 52D57C2624ACDAE5001D4E4D /* Sources */, - 52D57C2724ACDAE5001D4E4D /* Frameworks */, - 52D57C2824ACDAE5001D4E4D /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = ScrollMapperBible; - productName = ScrollMapperBible; - productReference = 52D57C2A24ACDAE5001D4E4D /* ScrollMapperBible.app */; - productType = "com.apple.product-type.application"; - }; - 52D57C3F24ACDAE5001D4E4D /* ScrollMapperBibleTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 52D57C5724ACDAE5001D4E4D /* Build configuration list for PBXNativeTarget "ScrollMapperBibleTests" */; - buildPhases = ( - 52D57C3C24ACDAE5001D4E4D /* Sources */, - 52D57C3D24ACDAE5001D4E4D /* Frameworks */, - 52D57C3E24ACDAE5001D4E4D /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 52D57C4224ACDAE5001D4E4D /* PBXTargetDependency */, - ); - name = ScrollMapperBibleTests; - productName = ScrollMapperBibleTests; - productReference = 52D57C4024ACDAE5001D4E4D /* ScrollMapperBibleTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 52D57C4A24ACDAE5001D4E4D /* ScrollMapperBibleUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 52D57C5A24ACDAE5001D4E4D /* Build configuration list for PBXNativeTarget "ScrollMapperBibleUITests" */; - buildPhases = ( - 52D57C4724ACDAE5001D4E4D /* Sources */, - 52D57C4824ACDAE5001D4E4D /* Frameworks */, - 52D57C4924ACDAE5001D4E4D /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 52D57C4D24ACDAE5001D4E4D /* PBXTargetDependency */, - ); - name = ScrollMapperBibleUITests; - productName = ScrollMapperBibleUITests; - productReference = 52D57C4B24ACDAE5001D4E4D /* ScrollMapperBibleUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 52D57C2224ACDAE4001D4E4D /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 1150; - LastUpgradeCheck = 1200; - ORGANIZATIONNAME = Kuang; - TargetAttributes = { - 52D57C2924ACDAE5001D4E4D = { - CreatedOnToolsVersion = 11.5; - }; - 52D57C3F24ACDAE5001D4E4D = { - CreatedOnToolsVersion = 11.5; - TestTargetID = 52D57C2924ACDAE5001D4E4D; - }; - 52D57C4A24ACDAE5001D4E4D = { - CreatedOnToolsVersion = 11.5; - TestTargetID = 52D57C2924ACDAE5001D4E4D; - }; - }; - }; - buildConfigurationList = 52D57C2524ACDAE4001D4E4D /* Build configuration list for PBXProject "ScrollMapperBible" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 52D57C2124ACDAE4001D4E4D; - productRefGroup = 52D57C2B24ACDAE5001D4E4D /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 52D57C2924ACDAE5001D4E4D /* ScrollMapperBible */, - 52D57C3F24ACDAE5001D4E4D /* ScrollMapperBibleTests */, - 52D57C4A24ACDAE5001D4E4D /* ScrollMapperBibleUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 52D57C2824ACDAE5001D4E4D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 52D57C6524ACDD88001D4E4D /* bible-sqlite.db in Resources */, - 52D57C3A24ACDAE5001D4E4D /* LaunchScreen.storyboard in Resources */, - 52D57C7B24B3F947001D4E4D /* tricks.md in Resources */, - 52D57C3724ACDAE5001D4E4D /* Preview Assets.xcassets in Resources */, - 52D57C6624ACDD88001D4E4D /* readme.md in Resources */, - 52D57C3424ACDAE5001D4E4D /* Assets.xcassets in Resources */, - 52D57C6724ACDD88001D4E4D /* book_info.sql in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 52D57C3E24ACDAE5001D4E4D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 52D57C4924ACDAE5001D4E4D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 52D57C2624ACDAE5001D4E4D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 52D57C9A24B4BC0A001D4E4D /* JKCSShared.swift in Sources */, - 522AF66A24B6344D00FE503C /* ScrollMapperBibleSearchView.swift in Sources */, - 5245370924C0F6AB00EC11B4 /* ScrollMapperBibleWebViewColor.swift in Sources */, - 522AF64B24B510B000FE503C /* ScrollMapperBiblePublishers.swift in Sources */, - 52D57C9324B4BBE9001D4E4D /* ScrollMapperBibleSettingsView.swift in Sources */, - 522AF66B24B6344D00FE503C /* ScrollMapperBibleSearchViewModel.swift in Sources */, - 5245370624BDFF1400EC11B4 /* ScrollMapperBibleJumpToView.swift in Sources */, - 52D57C7D24B41E7F001D4E4D /* ScrollMapperBibleChapter.swift in Sources */, - 522AF65324B51F9200FE503C /* ScrollMapperBibleTranslationsView.swift in Sources */, - 52D57C6C24B360CD001D4E4D /* JKCSSQLite.swift in Sources */, - F269A6DD2516578700C813BF /* ScrollMapperBibleCopyrightAndLicenseView.swift in Sources */, - 52B237B024D636630081BF55 /* JKCSUIViewModel.swift in Sources */, - 52D57C2E24ACDAE5001D4E4D /* AppDelegate.swift in Sources */, - 52D57CA024B4CA09001D4E4D /* BundleExtensions.swift in Sources */, - 52555D4424BA2DE400502EE6 /* StringExtensions.swift in Sources */, - F269A6DE2516578700C813BF /* ScrollMapperBibleCopyrightAndLicenseViewModel.swift in Sources */, - 52555D4824BA35F900502EE6 /* ScrollMapperBibleFacilities.swift in Sources */, - 52D57C7324B3A900001D4E4D /* ScrollMapperBibleModelBase.swift in Sources */, - 52D57C7724B3C59F001D4E4D /* ScrollMapperBibleCrossReference.swift in Sources */, - 5245370E24C13C9500EC11B4 /* ScrollMapperBibleCrossReferenceViewModel.swift in Sources */, - 52BFF79924B8BA39009CBB18 /* PeekabooWKWebView.swift in Sources */, - 52D57C3024ACDAE5001D4E4D /* SceneDelegate.swift in Sources */, - 52D57C9C24B4BC0A001D4E4D /* ScrollMapperBibleTextViewModel.swift in Sources */, - 52D57C9B24B4BC0A001D4E4D /* ScrollMapperBibleTextView.swift in Sources */, - 522AF65424B51F9200FE503C /* ScrollMapperBibleTranslationsViewModel.swift in Sources */, - 52D57C9924B4BC0A001D4E4D /* JKCSUIShared.swift in Sources */, - 5245370D24C13C9500EC11B4 /* ScrollMapperBibleCrossReferenceView.swift in Sources */, - 52555D4A24BA942F00502EE6 /* ScrollMapperBibleVerseWithCrossReference.swift in Sources */, - 52D57C8324B4BB20001D4E4D /* ScrollMapperBibleMainView.swift in Sources */, - 52D57C9424B4BBE9001D4E4D /* ScrollMapperBibleSettingsViewModel.swift in Sources */, - 52D57C6F24B39B72001D4E4D /* ScrollMapperBibleVersion.swift in Sources */, - 52D57C7524B3A9A1001D4E4D /* ScrollMapperBibleBookInfo.swift in Sources */, - 522AF67824B79EC100FE503C /* ScrollMapperBibleTable.swift in Sources */, - 52D57C7924B3C97A001D4E4D /* ScrollMapperBibleText.swift in Sources */, - 52D57C8424B4BB20001D4E4D /* ScrollMapperBibleMainViewModel.swift in Sources */, - 52B237B224D639590081BF55 /* ScrollMapperBibleUIPublishers.swift in Sources */, - 52555D4224B9860500502EE6 /* JKCSSearchBarUIViewRepresentable.swift in Sources */, - 5245370724BDFF1400EC11B4 /* ScrollMapperBibleJumpToViewModel.swift in Sources */, - 52B2378924C3A9EE0081BF55 /* UIDeviceExtensions.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 52D57C3C24ACDAE5001D4E4D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 52D57C4524ACDAE5001D4E4D /* ScrollMapperBibleTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 52D57C4724ACDAE5001D4E4D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 52D57C5024ACDAE5001D4E4D /* ScrollMapperBibleUITests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 52D57C4224ACDAE5001D4E4D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 52D57C2924ACDAE5001D4E4D /* ScrollMapperBible */; - targetProxy = 52D57C4124ACDAE5001D4E4D /* PBXContainerItemProxy */; - }; - 52D57C4D24ACDAE5001D4E4D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 52D57C2924ACDAE5001D4E4D /* ScrollMapperBible */; - targetProxy = 52D57C4C24ACDAE5001D4E4D /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 52D57C3824ACDAE5001D4E4D /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 52D57C3924ACDAE5001D4E4D /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 52D57C5224ACDAE5001D4E4D /* 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_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = 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_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - 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; - 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; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 52D57C5324ACDAE5001D4E4D /* 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_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = 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_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - 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; - 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; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 52D57C5524ACDAE5001D4E4D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_ASSET_PATHS = "\"ScrollMapperBible/Preview Content\""; - DEVELOPMENT_TEAM = 354LKKM3T2; - ENABLE_PREVIEWS = YES; - INFOPLIST_FILE = ScrollMapperBible/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.kuang.ScrollMapperBible; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 52D57C5624ACDAE5001D4E4D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_ASSET_PATHS = "\"ScrollMapperBible/Preview Content\""; - DEVELOPMENT_TEAM = 354LKKM3T2; - ENABLE_PREVIEWS = YES; - INFOPLIST_FILE = ScrollMapperBible/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.kuang.ScrollMapperBible; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - 52D57C5824ACDAE5001D4E4D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = ScrollMapperBibleTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.5; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.kuang.ScrollMapperBibleTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ScrollMapperBible.app/ScrollMapperBible"; - }; - name = Debug; - }; - 52D57C5924ACDAE5001D4E4D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = ScrollMapperBibleTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.5; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.kuang.ScrollMapperBibleTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ScrollMapperBible.app/ScrollMapperBible"; - }; - name = Release; - }; - 52D57C5B24ACDAE5001D4E4D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = ScrollMapperBibleUITests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.kuang.ScrollMapperBibleUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = ScrollMapperBible; - }; - name = Debug; - }; - 52D57C5C24ACDAE5001D4E4D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = ScrollMapperBibleUITests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.kuang.ScrollMapperBibleUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = ScrollMapperBible; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 52D57C2524ACDAE4001D4E4D /* Build configuration list for PBXProject "ScrollMapperBible" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 52D57C5224ACDAE5001D4E4D /* Debug */, - 52D57C5324ACDAE5001D4E4D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 52D57C5424ACDAE5001D4E4D /* Build configuration list for PBXNativeTarget "ScrollMapperBible" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 52D57C5524ACDAE5001D4E4D /* Debug */, - 52D57C5624ACDAE5001D4E4D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 52D57C5724ACDAE5001D4E4D /* Build configuration list for PBXNativeTarget "ScrollMapperBibleTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 52D57C5824ACDAE5001D4E4D /* Debug */, - 52D57C5924ACDAE5001D4E4D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 52D57C5A24ACDAE5001D4E4D /* Build configuration list for PBXNativeTarget "ScrollMapperBibleUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 52D57C5B24ACDAE5001D4E4D /* Debug */, - 52D57C5C24ACDAE5001D4E4D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 52D57C2224ACDAE4001D4E4D /* Project object */; -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/iOS/ScrollMapperBible/ScrollMapperBible.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 389285b4..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/iOS/ScrollMapperBible/ScrollMapperBible.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/iOS/ScrollMapperBible/ScrollMapperBible.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d98100..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/iOS/ScrollMapperBible/ScrollMapperBible.xcodeproj/xcuserdata/john.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/iOS/ScrollMapperBible/ScrollMapperBible.xcodeproj/xcuserdata/john.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist deleted file mode 100644 index f11b9b81..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible.xcodeproj/xcuserdata/john.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ /dev/null @@ -1,6 +0,0 @@ - - - diff --git a/iOS/ScrollMapperBible/ScrollMapperBible.xcodeproj/xcuserdata/john.xcuserdatad/xcschemes/xcschememanagement.plist b/iOS/ScrollMapperBible/ScrollMapperBible.xcodeproj/xcuserdata/john.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 461c2bd2..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible.xcodeproj/xcuserdata/john.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,14 +0,0 @@ - - - - - SchemeUserState - - ScrollMapperBible.xcscheme_^#shared#^_ - - orderHint - 0 - - - - diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/AppDelegate.swift b/iOS/ScrollMapperBible/ScrollMapperBible/AppDelegate.swift deleted file mode 100644 index 1ad92dfb..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/AppDelegate.swift +++ /dev/null @@ -1,48 +0,0 @@ -// -// AppDelegate.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-01. -// Copyright © 2020 Kuang. All rights reserved. -// - -import UIKit - -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - - - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { - - // Override point for customization after application launch. - test() - - return true - } - - // MARK: UISceneSession Lifecycle - - func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { - // Called when a new scene session is being created. - // Use this method to select a configuration to create the new scene with. - return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) - } - - func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { - // Called when the user discards a scene session. - // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. - // Use this method to release any resources that were specific to the discarded scenes, as they will not return. - } - - -} - -// MARK: - custom - -extension AppDelegate { - func test() { - - } -} - diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/Contents.json b/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index add40cb4..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "images" : [ - { - "filename" : "ScrollMapperBibleIcon-20@2x.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "20x20" - }, - { - "filename" : "ScrollMapperBibleIcon-20@3x.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "20x20" - }, - { - "filename" : "ScrollMapperBibleIcon-29@2x.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "29x29" - }, - { - "filename" : "ScrollMapperBibleIcon-29@3x.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "29x29" - }, - { - "filename" : "ScrollMapperBibleIcon-40@2x.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "40x40" - }, - { - "filename" : "ScrollMapperBibleIcon-40@3x.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "40x40" - }, - { - "filename" : "ScrollMapperBibleIcon-60@2x.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "60x60" - }, - { - "filename" : "ScrollMapperBibleIcon-60@3x.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "60x60" - }, - { - "filename" : "ScrollMapperBibleIcon-20.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "20x20" - }, - { - "filename" : "ScrollMapperBibleIcon-20@2x.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "20x20" - }, - { - "filename" : "ScrollMapperBibleIcon-29.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "29x29" - }, - { - "filename" : "ScrollMapperBibleIcon-29@2x.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "29x29" - }, - { - "filename" : "ScrollMapperBibleIcon-40.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "40x40" - }, - { - "filename" : "ScrollMapperBibleIcon-40@2x.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "40x40" - }, - { - "filename" : "ScrollMapperBibleIcon-76.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "76x76" - }, - { - "filename" : "ScrollMapperBibleIcon-76@2x.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "76x76" - }, - { - "filename" : "ScrollMapperBibleIcon-83.5@2x.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "83.5x83.5" - }, - { - "filename" : "ScrollMapperBibleIcon-1024.png", - "idiom" : "ios-marketing", - "scale" : "1x", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-1024.png b/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-1024.png deleted file mode 100644 index c416659b..00000000 Binary files a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-1024.png and /dev/null differ diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-20.png b/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-20.png deleted file mode 100644 index 73fadfad..00000000 Binary files a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-20.png and /dev/null differ diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-20@2x.png b/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-20@2x.png deleted file mode 100644 index 1d60f295..00000000 Binary files a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-20@2x.png and /dev/null differ diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-20@3x.png b/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-20@3x.png deleted file mode 100644 index 96079d01..00000000 Binary files a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-20@3x.png and /dev/null differ diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-29.png b/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-29.png deleted file mode 100644 index 66113aab..00000000 Binary files a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-29.png and /dev/null differ diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-29@2x.png b/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-29@2x.png deleted file mode 100644 index 32aee253..00000000 Binary files a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-29@2x.png and /dev/null differ diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-29@3x.png b/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-29@3x.png deleted file mode 100644 index 5f4e2906..00000000 Binary files a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-29@3x.png and /dev/null differ diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-40.png b/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-40.png deleted file mode 100644 index 1d60f295..00000000 Binary files a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-40.png and /dev/null differ diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-40@2x.png b/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-40@2x.png deleted file mode 100644 index 06071ef5..00000000 Binary files a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-40@2x.png and /dev/null differ diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-40@3x.png b/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-40@3x.png deleted file mode 100644 index 387157ef..00000000 Binary files a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-40@3x.png and /dev/null differ diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-60@2x.png b/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-60@2x.png deleted file mode 100644 index 387157ef..00000000 Binary files a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-60@2x.png and /dev/null differ diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-60@3x.png b/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-60@3x.png deleted file mode 100644 index 6141f620..00000000 Binary files a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-60@3x.png and /dev/null differ diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-76.png b/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-76.png deleted file mode 100644 index 590a29a9..00000000 Binary files a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-76.png and /dev/null differ diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-76@2x.png b/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-76@2x.png deleted file mode 100644 index a30191b0..00000000 Binary files a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-76@2x.png and /dev/null differ diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-83.5@2x.png b/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-83.5@2x.png deleted file mode 100644 index ce2cd7ec..00000000 Binary files a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/AppIcon.appiconset/ScrollMapperBibleIcon-83.5@2x.png and /dev/null differ diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/Contents.json b/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/Contents.json deleted file mode 100644 index 73c00596..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Base.lproj/LaunchScreen.storyboard b/iOS/ScrollMapperBible/ScrollMapperBible/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index 865e9329..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Extensions/BundleExtensions.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Extensions/BundleExtensions.swift deleted file mode 100644 index 1e258a3b..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Extensions/BundleExtensions.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// BundleExtensions.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-07. -// Copyright © 2020 Kuang. All rights reserved. -// - -import Foundation - -public extension Bundle { - - func displayName() -> String? { - return object(forInfoDictionaryKey: "CFBundleDisplayName") as? String ?? object(forInfoDictionaryKey: "CFBundleName") as? String - } - - func releaseVersionNumber() -> String? { - return object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String - } - - func buildVersionNumber() -> String? { - return object(forInfoDictionaryKey: "CFBundleVersion") as? String - } - -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Extensions/StringExtensions.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Extensions/StringExtensions.swift deleted file mode 100644 index ed9cac74..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Extensions/StringExtensions.swift +++ /dev/null @@ -1,46 +0,0 @@ -// -// StringExtensions.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-11. -// Copyright © 2020 Kuang. All rights reserved. -// - -import Foundation - -extension String { - func withHTMLTags(fontSize: Int = 0, color: String = "", backgroundColor: String = "", sup: Bool = false) -> String { - var htmlString = "\(self)" - var styleContent = "" - if fontSize > 0 { - if styleContent.count > 0 { - styleContent += "; " - } - styleContent += "font-size:\(fontSize)px" - } - if color.count > 0 { - if styleContent.count > 0 { - styleContent += "; " - } - styleContent += "color:\(color)" - } - if backgroundColor.count > 0 { - if styleContent.count > 0 { - styleContent += "; " - } - styleContent += "background-color:\(backgroundColor)" - } - var style: String - if styleContent.count > 0 { - style = " style=\"\(styleContent)\"" - } - else { - style = "" - } - htmlString = "\(htmlString)" - if sup { - htmlString = "\(htmlString)" - } - return htmlString - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Extensions/UIDeviceExtensions.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Extensions/UIDeviceExtensions.swift deleted file mode 100644 index 9f81cd9b..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Extensions/UIDeviceExtensions.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// UIDeviceExtensions.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-18. -// Copyright © 2020 Kuang. All rights reserved. -// - -import UIKit - -extension UIDevice { - var isPad: Bool { - return userInterfaceIdiom == .pad - } - - var isPhone: Bool { - return userInterfaceIdiom == .phone - } - - var currentInterfaceOrientation: UIInterfaceOrientation { - if let interfaceOrientation = UIApplication.shared.windows.first(where: { $0.isKeyWindow })?.windowScene?.interfaceOrientation { - return interfaceOrientation - } - else { - return .unknown - } - } - - var isPortrait: Bool { - return currentInterfaceOrientation.isPortrait - } - - var isLandscape: Bool { - return currentInterfaceOrientation.isLandscape - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Facilities/JKCSShared.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Facilities/JKCSShared.swift deleted file mode 100644 index f582a27a..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Facilities/JKCSShared.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// JKCSShared.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-07. -// Copyright © 2020 Kuang. All rights reserved. -// - -import Foundation - -public enum JKCSError: Error { - case noError(message: String = "No error") - case genericError(message: String = "Generic error") - case customError(message: String) - case codedError((code: Int, message: String)) - - public var code: Int? { - switch self { - case .customError, .genericError, .noError: - return nil - case .codedError((let code, _)): - return code - } - } - - public var message: String { - switch self { - case .customError(let msg), .genericError(let msg), .noError(let msg): - return msg - case .codedError((_, let msg)): - return msg - } - } -} - diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Facilities/JKCSUIShared.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Facilities/JKCSUIShared.swift deleted file mode 100644 index bb484738..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Facilities/JKCSUIShared.swift +++ /dev/null @@ -1,51 +0,0 @@ -// -// JKCSUIShared.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-07. -// Copyright © 2020 Kuang. All rights reserved. -// - -import SwiftUI - -public struct JKCSActivityIndicatorView: UIViewRepresentable { - public var uiActivityIndicatorView = UIActivityIndicatorView() - - public init() { - - } - - public func makeUIView(context: Context) -> UIActivityIndicatorView { - return uiActivityIndicatorView - } - - public func updateUIView(_ uiView: UIActivityIndicatorView, context: Context) { - - } - - public func startAnimating() -> Self { - uiActivityIndicatorView.startAnimating() - return self - } - - public func stopAnimating() -> Self { - uiActivityIndicatorView.stopAnimating() - return self - } -} - -public extension Image { - init(imageName: JKCSImageName) { - switch imageName { - case .inBundle(let name): - self.init(name) - case .system(let systemName): - self.init(systemName: systemName) - } - } -} - -public enum JKCSImageName { - case inBundle(imageName: String) - case system(systemName: String) -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Facilities/ScrollMapperBibleFacilities.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Facilities/ScrollMapperBibleFacilities.swift deleted file mode 100644 index 8b1f290a..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Facilities/ScrollMapperBibleFacilities.swift +++ /dev/null @@ -1,58 +0,0 @@ -// -// ScrollMapperBibleFacilities.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-11. -// Copyright © 2020 Kuang. All rights reserved. -// - -import Foundation -import UIKit - -class ScrollMapperBibleFacilities { - // build HTML header for dynamic type and responsive design - // https://riptutorial.com/ios/example/24811/matching-dynamic-type-font-size-in-wkwebview - // BUT THIS DOES NOT WORK - static func buildHTMLHeader(bodyContent: String) -> String { - // Get preferred dynamic type font sizes for html styles - let bodySize = UIFont.preferredFont(forTextStyle: UIFont.TextStyle.body).pointSize - let h1Size = UIFont.preferredFont(forTextStyle: UIFont.TextStyle.title1).pointSize - let h2Size = UIFont.preferredFont(forTextStyle: UIFont.TextStyle.title2).pointSize - let h3Size = UIFont.preferredFont(forTextStyle: UIFont.TextStyle.title3).pointSize - - // On iPad, landscape text is larger than preferred font size - var portraitMultiplier = CGFloat(1.0) - var landscapeMultiplier = CGFloat(0.5) - - // iPhone text is shrunken - if UIDevice.current.model.range(of: "iPhone") != nil { - portraitMultiplier = CGFloat(3.0) - landscapeMultiplier = CGFloat(1.5) - } - - var htmlString = "" - htmlString += "\n" - htmlString += " \n" - htmlString += " \n" - htmlString += " \n" - htmlString += " \n" - htmlString += " \n" - htmlString += " \(bodyContent)\n" - htmlString += " \n" - htmlString += " \n" - htmlString += "\n" - - return htmlString - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Facilities/ScrollMapperBiblePublishers.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Facilities/ScrollMapperBiblePublishers.swift deleted file mode 100644 index 6ad5e6cb..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Facilities/ScrollMapperBiblePublishers.swift +++ /dev/null @@ -1,51 +0,0 @@ -// -// ScrollMapperBiblePublishers.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-07. -// Copyright © 2020 Kuang. All rights reserved. -// - -import Foundation -import Combine - -fileprivate let scrollMapperBibleSceneStorageKeyTranslation = "83EB5B53-6982-44A9-A382-DA08AA48ABF1" -fileprivate let scrollMapperBibleSceneStorageKeyCurrentChapterCid = "ED1BD62A-8E2F-4626-9D17-22E78298FE69" - -// https://medium.com/flawless-app-stories/problem-solving-with-combine-swift-4751885fda77 - -let scrollMapperBiblePublishers = ScrollMapperBiblePublishers() - -class ScrollMapperBiblePublishers { - private let translationSubject: CurrentValueSubject - let tranlationPublisher: AnyPublisher - - private let currentChapterCidSubject: CurrentValueSubject - let currentChapterCidPublisher: AnyPublisher - - init() { - let translation: String - if let savedTranslation = UserDefaults.standard.string(forKey: scrollMapperBibleSceneStorageKeyTranslation) { - translation = savedTranslation - } - else { - translation = ScrollMapperBibleVersion.BibleVersion.KJV.rawValue - } - translationSubject = CurrentValueSubject(translation) - tranlationPublisher = translationSubject.eraseToAnyPublisher() - - let cid = UserDefaults.standard.integer(forKey: scrollMapperBibleSceneStorageKeyCurrentChapterCid) - currentChapterCidSubject = CurrentValueSubject(cid) - currentChapterCidPublisher = currentChapterCidSubject.eraseToAnyPublisher() - } - - func publishTranslation(translation: String) { - UserDefaults.standard.set(translation, forKey: scrollMapperBibleSceneStorageKeyTranslation) - translationSubject.send(translation) - } - - func publishCurrentChapter(cid: Int) { - UserDefaults.standard.set(cid, forKey: scrollMapperBibleSceneStorageKeyCurrentChapterCid) - currentChapterCidSubject.send(cid) - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Facilities/ScrollMapperBibleUIPublishers.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Facilities/ScrollMapperBibleUIPublishers.swift deleted file mode 100644 index 59075bef..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Facilities/ScrollMapperBibleUIPublishers.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// ScrollMapperBibleUIPublishers.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-08-01. -// Copyright © 2020 Kuang. All rights reserved. -// - -import UIKit -import Combine - -let scrollMapperBibleUIPublishers = ScrollMapperBibleUIPublishers() - -class ScrollMapperBibleUIPublishers { - private let interfaceOrientationSubject: CurrentValueSubject - let interfaceOrientationPublisher: AnyPublisher - - init() { - let interfaceOrientation = UIDevice.current.currentInterfaceOrientation - interfaceOrientationSubject = CurrentValueSubject(interfaceOrientation) - interfaceOrientationPublisher = interfaceOrientationSubject.eraseToAnyPublisher() - - NotificationCenter.default.addObserver(self, selector: #selector(interfaceOrientationDidChange(notification:)), name: UIDevice.orientationDidChangeNotification, object: nil) - } - - @objc private func interfaceOrientationDidChange(notification: Notification) { - let interfaceOrientation = UIDevice.current.currentInterfaceOrientation - interfaceOrientationSubject.send(interfaceOrientation) - } - - deinit { - NotificationCenter.default.removeObserver(self) - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Info.plist b/iOS/ScrollMapperBible/ScrollMapperBible/Info.plist deleted file mode 100644 index 9742bf0f..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Info.plist +++ /dev/null @@ -1,60 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - $(PRODUCT_BUNDLE_PACKAGE_TYPE) - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UIApplicationSceneManifest - - UIApplicationSupportsMultipleScenes - - UISceneConfigurations - - UIWindowSceneSessionRoleApplication - - - UISceneConfigurationName - Default Configuration - UISceneDelegateClassName - $(PRODUCT_MODULE_NAME).SceneDelegate - - - - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Models/ScrollMapperBible/ScrollMapperBibleBookInfo.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Models/ScrollMapperBible/ScrollMapperBibleBookInfo.swift deleted file mode 100644 index b5612af5..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Models/ScrollMapperBible/ScrollMapperBibleBookInfo.swift +++ /dev/null @@ -1,203 +0,0 @@ -// -// ScrollMapperBibleBookInfo.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-06. -// Copyright © 2020 Kuang. All rights reserved. -// - -import Foundation -import SQLite3 - -public class ScrollMapperBibleBookInfo: ScrollMapperBibleModelBase { - public static let books: [BookInfo] = { - if let books = ScrollMapperBibleBookInfo()?.result { - return books - } - return [] - }() - - public enum BibleOTNT: CaseIterable { - case OT, NT - - public var title: String { - switch self { - case .OT: - return "Old Testament" - case .NT: - return "New Testament" - } - } - - public var chapters: Int { - switch self { - case .OT: - return 39 - case .NT: - return 27 - } - } - } - - public enum BibleBook: Int, CaseIterable { - case Genesis = 1 - case Exodus = 2 - case Leviticus = 3 - case Numbers = 4 - case Deuteronomy = 5 - - case Joshua = 6 - case Judges = 7 - case Ruth = 8 - case Samuel1 = 9 - case Samuel2 = 10 - case Kings1 = 11 - case Kings2 = 12 - case Chronicles1 = 13 - case Chronicles2 = 14 - case Ezra = 15 - case Nehemiah = 16 - case Esther = 17 - - case Job = 18 - case Psalms = 19 - case Proverbs = 20 - case Ecclesiastes = 21 - case Song = 22 - - case Isaiah = 23 - case Jeremiah = 24 - case Lamentations = 25 - case Ezekiel = 26 - case Daniel = 27 - - case Hosea = 28 - case Joel = 29 - case Amos = 30 - case Obadiah = 31 - case Jonah = 32 - case Micah = 33 - case Nahum = 34 - case Habakkuk = 35 - case Zephaniah = 36 - case Haggai = 37 - case Zechariah = 38 - case Malachi = 39 - - case Matthew = 40 - case Mark = 41 - case Luke = 42 - case John = 43 - case Acts = 44 - - case Romans = 45 - case Corinthians1 = 46 - case Corinthians2 = 47 - case Galatians = 48 - case Ephesians = 49 - case Philippians = 50 - case Colossians = 51 - case Thessalonians1 = 52 - case Thessalonians2 = 53 - case Timothy1 = 54 - case Timothy2 = 55 - case Titus = 56 - case Philemon = 57 - - case Hebrews = 58 - case James = 59 - case Peter1 = 60 - case Peter2 = 61 - case John1 = 62 - case John2 = 63 - case John3 = 64 - case Jude = 65 - case Revelation = 66 - - public func bookInfo() -> BookInfo? { - let book = ScrollMapperBibleBookInfo.books.first { $0.order == self.order() } - return book - } - - public func order() -> Int { - return self.rawValue - } - } - - public typealias StructType = BookInfo - - public struct BookInfo: Equatable { - var order: Int = 0 - var title_short: String = "" - var title_full: String = "" - var abbreviation: String = "" - var category: String = "" - var otnt: String = "" - var chapters: Int = 0 - - init(order: Int, title_short: String, title_full: String, abbreviation: String, category: String, otnt: String, chapters: Int) { - self.order = order - self.title_short = title_short - self.title_full = title_full - self.abbreviation = abbreviation - self.category = category - self.otnt = otnt - self.chapters = chapters - } - - init?(order: Int) { - guard let book = ScrollMapperBibleBookInfo.books.first(where: { (bookInfo) -> Bool in - bookInfo.order == order - }) else { return nil } - self.order = book.order - title_short = book.title_short - title_full = book.title_full - abbreviation = book.abbreviation - category = book.category - otnt = book.otnt - chapters = book.chapters - } - - public static func ==(lhs: Self, rhs: Self) -> Bool { - return lhs.order == rhs.order - } - } - - public lazy var result: [StructType] = { - return getResult() - }() - - public required init?(statement: String = "SELECT * FROM book_info ORDER BY \"order\"") { - super.init(statement: statement) - } - - private func getResult() -> [StructType] { - guard let queryStatement = queryStatement else { - return [] - } - var result: [StructType] = [] - while sqlite3_step(queryStatement) == SQLITE_ROW { - let order = sqlite3_column_int(queryStatement, 0) - guard - let title_short = sqlite3_column_text(queryStatement, 1), - let title_full = sqlite3_column_text(queryStatement, 2), - let abbreviation = sqlite3_column_text(queryStatement, 3), - let category = sqlite3_column_text(queryStatement, 4), - let otnt = sqlite3_column_text(queryStatement, 5) - else { - continue - } - let chapters = sqlite3_column_int(queryStatement, 6) - let row = StructType(order: Int(order), title_short: String(cString: title_short), title_full: String(cString: title_full), abbreviation: String(cString: abbreviation), category: String(cString: category), otnt: String(cString: otnt), chapters: Int(chapters)) - result.append(row) - } - return result - } - - public static func test() { - print("testScrollMapperBibleBookInfo") - _ = ScrollMapperBibleBookInfo()?.result.map { - print("\($0.order), \($0.title_short), \($0.title_full), \($0.abbreviation), \($0.category), \($0.otnt)") - } - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Models/ScrollMapperBible/ScrollMapperBibleChapter.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Models/ScrollMapperBible/ScrollMapperBibleChapter.swift deleted file mode 100644 index a9abfc78..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Models/ScrollMapperBible/ScrollMapperBibleChapter.swift +++ /dev/null @@ -1,184 +0,0 @@ -// -// ScrollMapperBibleChapter.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-06. -// Copyright © 2020 Kuang. All rights reserved. -// - -import Foundation -import SQLite3 - -prefix operator <~ -postfix operator ~> - -public class ScrollMapperBibleChapter: ScrollMapperBibleModelBase { - public static let chapters: [BibleChapter] = { - if let chapters = ScrollMapperBibleChapter()?.result { - return chapters - } - return [] - }() - - public typealias StructType = BibleChapter - - public struct BibleChapter: Comparable { - let order: Int - let cid: Int - let b: Int - let c: Int - - init?(order: Int, cid: Int, b: Int, c: Int) { - guard (order > 0) && (order <= 1189) && (cid > 0) && (b > 0) && (b <= 66) && (c > 0) && (cid == (b * 1_000 + c)) else { - return nil - } - self.order = order - self.cid = cid - self.b = b - self.c = c - } - - init?(order: Int) { - let bibleChapter = ScrollMapperBibleChapter.chapters.first { $0.order == order } - if let bibleChapter = bibleChapter { - self.order = bibleChapter.order - self.cid = bibleChapter.cid - self.b = bibleChapter.b - self.c = bibleChapter.c - } - else { - return nil - } - } - - init?(b: Int, c: Int) { - let bibleChapter = ScrollMapperBibleChapter.chapters.first { ($0.b == b) && ($0.c == c) } - if let bibleChapter = bibleChapter { - self.order = bibleChapter.order - self.cid = bibleChapter.cid - self.b = bibleChapter.b - self.c = bibleChapter.c - } - else { - return nil - } - } - - init?(cid: Int) { - let bibleChapter = ScrollMapperBibleChapter.chapters.first { $0.cid == cid } - if let bibleChapter = bibleChapter { - self.order = bibleChapter.order - self.cid = bibleChapter.cid - self.b = bibleChapter.b - self.c = bibleChapter.c - } - else { - return nil - } - } - - init?(order: Int, cid: Int) { - guard (order > 0) && (order <= 1189) && (cid > 0) else { - return nil - } - let b = Int(cid / 1_000) - let c = Int(cid % 1000) - guard (b > 0) && (b <= 66) && (c > 0) else { - return nil - } - self.order = order - self.cid = cid - self.b = b - self.c = c - } - - init?(order: Int, b: Int, c: Int) { - guard (order > 0) && (order <= 1189) && (b > 0) && (b <= 66) && (c > 0) else { - return nil - } - let cid = (b * 1_000 + c) - self.order = order - self.cid = cid - self.b = b - self.c = c - } - - public static func < (lhs: BibleChapter, rhs: BibleChapter) -> Bool { - return lhs.cid < rhs.cid - } - - public static func == (lhs: BibleChapter, rhs: BibleChapter) -> Bool { - return lhs.cid == rhs.cid - } - - public static postfix func ~>(lhs: BibleChapter) -> BibleChapter? { - var b: Int = 0 - var c: Int = 0 - guard let bookInfo = ScrollMapperBibleBookInfo.BookInfo(order: lhs.b) else { return nil } - if lhs.c < bookInfo.chapters { - b = lhs.b - c = lhs.c + 1 - } - else { - if lhs.b < 66 { - b = lhs.b + 1 - c = 1 - } - else { - return nil - } - } - return BibleChapter(order: (lhs.order + 1), b: b, c: c) - } - - public static prefix func <~(rhs: BibleChapter) -> BibleChapter? { - guard rhs.order > 1 else { - return nil - } - var b: Int = 0 - var c: Int = 0 - if rhs.c > 1 { - b = rhs.b - c = rhs.c - 1 - } - else { - b = rhs.b - 1 - guard let bookInfo = ScrollMapperBibleBookInfo.BookInfo(order: b) else { - return nil - } - c = bookInfo.chapters - } - return BibleChapter(order: (rhs.order - 1), b: b, c: c) - } - - var bibleBook: ScrollMapperBibleBookInfo.BibleBook { - ScrollMapperBibleBookInfo.BibleBook(rawValue: b)! - } - } - - public lazy var result: [StructType] = { - return getResult() - }() - - public required init?(statement: String = "SELECT * FROM chapter ORDER BY cid") { - super.init(statement: statement) - } - - private func getResult() -> [StructType] { - guard let queryStatement = queryStatement else { - return [] - } - var result: [StructType] = [] - while sqlite3_step(queryStatement) == SQLITE_ROW { - let order = sqlite3_column_int(queryStatement, 0) - let cid = sqlite3_column_int(queryStatement, 1) - let b = sqlite3_column_int(queryStatement, 2) - let c = sqlite3_column_int(queryStatement, 3) - guard let row = StructType(order: Int(order), cid: Int(cid), b: Int(b), c: Int(c)) else { - continue - } - result.append(row) - } - return result - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Models/ScrollMapperBible/ScrollMapperBibleCrossReference.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Models/ScrollMapperBible/ScrollMapperBibleCrossReference.swift deleted file mode 100644 index ee1b6746..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Models/ScrollMapperBible/ScrollMapperBibleCrossReference.swift +++ /dev/null @@ -1,81 +0,0 @@ -// -// ScrollMapperBibleCrossReference.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-06. -// Copyright © 2020 Kuang. All rights reserved. -// - -import Foundation -import SQLite3 - -public class ScrollMapperBibleCrossReference: ScrollMapperBibleModelBase { - public typealias StructType = CrossReference - private var vid: Int = 0 - - public struct CrossReference { - public let vid: Int - public let r: Int - public let sv: Int - public let ev: Int - public let verses: [ScrollMapperBibleText.BibleText] - } - - public lazy var result: [StructType] = { - return getResult() - }() - - public required init?(statement: String) { - super.init(statement: statement) - } - - public init?(version: ScrollMapperBibleVersion.BibleVersion, book: ScrollMapperBibleBookInfo.BibleBook, chapter: Int, verse: Int) { - vid = book.order() * 1_000_000 + chapter * 1_000 + verse - let statement = "SELECT cr.vid, cr.r, cr.sv, cr.ev, tbl.id, tbl.b, tbl.c, tbl.v, tbl.t FROM cross_reference AS cr LEFT JOIN \(version.table() ?? "t_kjv") AS tbl ON (cr.ev = 0 AND tbl.id = cr.sv) OR (cr.ev > 0 AND tbl.id >= cr.sv AND tbl.id <= cr.ev) WHERE cr.vid = \(vid) ORDER BY cr.r, cr.sv" - super.init(statement: statement) - } - - public init?(version: ScrollMapperBibleVersion.BibleVersion, vid: Int) { - // SELECT cr.vid, cr.r, cr.sv, cr.ev, tbl.b, tbl.c, tbl.v, tbl.t FROM cross_reference AS cr LEFT JOIN t_kjv AS tbl ON (cr.ev = 0 AND tbl.id = cr.sv) OR (cr.ev > 0 AND tbl.id >= cr.sv AND tbl.id <= cr.ev) WHERE cr.vid = 1001001 ORDER BY cr.r, cr.sv - self.vid = vid - let statement = "SELECT cr.vid, cr.r, cr.sv, cr.ev, tbl.id, tbl.b, tbl.c, tbl.v, tbl.t FROM cross_reference AS cr LEFT JOIN \(version.table() ?? "t_kjv") AS tbl ON (cr.ev = 0 AND tbl.id = cr.sv) OR (cr.ev > 0 AND tbl.id >= cr.sv AND tbl.id <= cr.ev) WHERE cr.vid = \(vid) ORDER BY cr.r, cr.sv" - super.init(statement: statement) - } - - private func getResult() -> [StructType] { - guard let queryStatement = queryStatement else { - return [] - } - var result: [StructType] = [] - var verses: [ScrollMapperBibleText.BibleText] = [] - var currentRank: Int = 0 - var currentSv: Int = 0 - var currentEv: Int = 0 - while sqlite3_step(queryStatement) == SQLITE_ROW { - let _ = Int(sqlite3_column_int(queryStatement, 0)) // vid - let r = Int(sqlite3_column_int(queryStatement, 1)) - let sv = Int(sqlite3_column_int(queryStatement, 2)) // sv - let ev = Int(sqlite3_column_int(queryStatement, 3)) // ev - let id = Int(sqlite3_column_int(queryStatement, 4)) - let b = Int(sqlite3_column_int(queryStatement, 5)) - let c = Int(sqlite3_column_int(queryStatement, 6)) - let v = Int(sqlite3_column_int(queryStatement, 7)) - guard let t = sqlite3_column_text(queryStatement, 8) else { - continue - } - let text = String(cString: t) - if (sv != currentSv) || (ev != currentEv) { - if currentSv != 0 { - result.append((StructType(vid: vid, r: currentRank, sv: currentSv, ev: currentEv, verses: verses))) - verses = [] - } - currentRank = r - currentSv = sv - currentEv = ev - } - verses.append(ScrollMapperBibleText.BibleText(id: id, b: b, c: c, v: v, t: text)) - } - result.append((StructType(vid: vid, r: currentRank, sv: currentSv, ev: currentEv, verses: verses))) - return result - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Models/ScrollMapperBible/ScrollMapperBibleModelBase.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Models/ScrollMapperBible/ScrollMapperBibleModelBase.swift deleted file mode 100644 index 49443a15..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Models/ScrollMapperBible/ScrollMapperBibleModelBase.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// ScrollMapperBibleModelBase.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-06. -// Copyright © 2020 Kuang. All rights reserved. -// - -import Foundation - -public class ScrollMapperBibleModelBase: JKCSSQLiteQuery { - let resourceName = "bible-sqlite" - let resourceExt = "db" - - public required init?(statement: String) { - super.init(resourceName: resourceName, resourceExt: resourceExt, statement: statement) - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Models/ScrollMapperBible/ScrollMapperBibleTable.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Models/ScrollMapperBible/ScrollMapperBibleTable.swift deleted file mode 100644 index 27b1ef5f..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Models/ScrollMapperBible/ScrollMapperBibleTable.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// ScrollMapperBibleTable.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-09. -// Copyright © 2020 Kuang. All rights reserved. -// - -import Foundation -import SQLite3 - -public class ScrollMapperBibleTable { - public static func generateChapterCidOrderScript() -> String { - var script = "" - script += "CREATE TABLE IF NOT EXISTS \"chapter\" (\n" - script += " \"order\" INTEGER NOT NULL UNIQUE,\n" - script += " \"cid\" INTEGER NOT NULL UNIQUE,\n" - script += " \"b\" INTEGER NOT NULL,\n" - script += " \"d\" INTEGER NOT NULL\n" - script += ");\n" - - var bibleChapter = ScrollMapperBibleChapter.BibleChapter(order: 1, b: 1, c: 1) - var order: Int = 1 - while bibleChapter != nil { - script += "INSERT INTO chapter VALUES(\(order), \(bibleChapter!.cid), \(bibleChapter!.b), \(bibleChapter!.c));\n" - bibleChapter = bibleChapter!~> - order += 1 - } - return script - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Models/ScrollMapperBible/ScrollMapperBibleText.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Models/ScrollMapperBible/ScrollMapperBibleText.swift deleted file mode 100644 index 2bf9d218..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Models/ScrollMapperBible/ScrollMapperBibleText.swift +++ /dev/null @@ -1,217 +0,0 @@ -// -// ScrollMapperBibleText.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-06. -// Copyright © 2020 Kuang. All rights reserved. -// - -import Foundation -import SQLite3 - -public enum ScrollMapperBibleSearchScope: Int, CaseIterable { - case OT = 1 - case NT = 2 - case All = 3 - - public var titleFull: String { - switch self { - case .All: - return "All" - case .OT: - return "Old Testament" - case .NT: - return "New Testament" - } - } - - public var titleAbbreviated: String { - switch self { - case .All: - return "All" - case .OT: - return "OT" - case .NT: - return "NT" - } - } -} - -public class ScrollMapperBibleText: ScrollMapperBibleModelBase { - public typealias StructType = BibleText - - public struct BibleText { - var id: Int = 0 - var b: Int = 0 - var c: Int = 0 - var v: Int = 0 - var t: String = "" - } - - public lazy var result: [StructType] = { - return getResult() - }() - - public required init?(statement: String) { - super.init(statement: statement) - } - - public init?(version: ScrollMapperBibleVersion.BibleVersion, vidStart: Int, vidEnd: Int) { - guard let table = version.table() else { - return nil - } - let statement = "SELECT * FROM \(table) WHERE id >= \(vidStart) AND id <= \(vidEnd) ORDER BY id" - super.init(statement: statement) - } - - public init?(version: ScrollMapperBibleVersion.BibleVersion, book: ScrollMapperBibleBookInfo.BibleBook, chapter: Int) { - guard let table = version.table() else { - return nil - } - let statement = "SELECT * FROM \(table) WHERE b = \(book.order()) AND c = \(chapter) ORDER BY id" - super.init(statement: statement) - } - - public init?(version: ScrollMapperBibleVersion.BibleVersion, book: ScrollMapperBibleBookInfo.BibleBook, chapter: Int, verseFrom: Int) { - guard let table = version.table() else { - return nil - } - let statement = "SELECT * FROM \(table) WHERE b = \(book.order()) AND c = \(chapter) AND v >= \(verseFrom) ORDER BY id" - super.init(statement: statement) - } - - public init?(version: ScrollMapperBibleVersion.BibleVersion, book: ScrollMapperBibleBookInfo.BibleBook, chapter: Int, verseUntil: Int) { - guard let table = version.table() else { - return nil - } - let statement = "SELECT * FROM \(table) WHERE b = \(book.order()) AND c = \(chapter) AND v < \(verseUntil) ORDER BY id" - super.init(statement: statement) - } - - public init?(version: ScrollMapperBibleVersion.BibleVersion, book: ScrollMapperBibleBookInfo.BibleBook, chapter: Int, verseThrough: Int) { - guard let table = version.table() else { - return nil - } - let statement = "SELECT * FROM \(table) WHERE b = \(book.order()) AND c = \(chapter) AND v <= \(verseThrough) ORDER BY id" - super.init(statement: statement) - } - - public init?(version: ScrollMapperBibleVersion.BibleVersion, book: ScrollMapperBibleBookInfo.BibleBook, chapter: Int, verseRange: Range) { - guard let table = version.table() else { - return nil - } - let statement = "SELECT * FROM \(table) WHERE b = \(book.order()) AND c = \(chapter) AND v >= \(verseRange.lowerBound) AND v < \(verseRange.upperBound) ORDER BY id" - super.init(statement: statement) - } - - public init?(version: ScrollMapperBibleVersion.BibleVersion, book: ScrollMapperBibleBookInfo.BibleBook, chapter: Int, verseRangeClosed: ClosedRange) { - guard let table = version.table() else { - return nil - } - let statement = "SELECT * FROM \(table) WHERE b = \(book.order()) AND c = \(chapter) AND v >= \(verseRangeClosed.lowerBound) AND v <= \(verseRangeClosed.upperBound) ORDER BY id" - super.init(statement: statement) - } - - public init?(version: ScrollMapperBibleVersion.BibleVersion, searchBy term: String, in scope: ScrollMapperBibleSearchScope) { - guard let table = version.table() else { - return nil - } - let keywords = term.components(separatedBy: .whitespaces).compactMap { (keyword) -> String? in - if keyword.trimmingCharacters(in: .whitespaces).count == 0 { - return nil - } - return keyword - } - guard keywords.count > 0 else { - return nil - } - var statementKeywordsPart = "" - _ = keywords.compactMap({ (keyword) -> String? in - if statementKeywordsPart.count > 0 { - statementKeywordsPart += " AND" - } - statementKeywordsPart += " t LIKE '%\(keyword)%'" - return nil - }) - var statement = "SELECT * FROM \(table) WHERE" + statementKeywordsPart - if scope == .OT { - statement += " AND b < 40" - } - else if scope == .NT { - statement += " AND b > 39" - } - statement += " ORDER BY id" - super.init(statement: statement) - } - - private func getResult() -> [StructType] { - guard let queryStatement = queryStatement else { - return [] - } - var result: [StructType] = [] - while sqlite3_step(queryStatement) == SQLITE_ROW { - let id = sqlite3_column_int(queryStatement, 0) - let b = sqlite3_column_int(queryStatement, 1) - let c = sqlite3_column_int(queryStatement, 2) - let v = sqlite3_column_int(queryStatement, 3) - guard let t = sqlite3_column_text(queryStatement, 4) else { - continue - } - let row = StructType(id: Int(id), b: Int(b), c: Int(c), v: Int(v), t: String(cString: t)) - result.append(row) - } - return result - } - - public static func test() { - print("testScrollMapperBibleText 63001001~64001015") - _ = ScrollMapperBibleText(version: .KJV, vidStart: 63001001, vidEnd: 64001015)?.result.map { - print("\($0.id), (\($0.b), \($0.c), \($0.v)), t: \($0.t)") - } - - print("testScrollMapperBibleText [Matthew 28]") - _ = ScrollMapperBibleText(version: .KJV, book: .Matthew, chapter: 28)?.result.map { - print("\($0.id), (\($0.b), \($0.c), \($0.v)), t: \($0.t)") - } - - print("testScrollMapperBibleText [Matthew 28:16-]") - _ = ScrollMapperBibleText(version: .KJV, book: .Matthew, chapter: 28, verseFrom: 16)?.result.map { - print("\($0.id), (\($0.b), \($0.c), \($0.v)), t: \($0.t)") - } - - print("testScrollMapperBibleText [Matthew 28:-<16]") - _ = ScrollMapperBibleText(version: .KJV, book: .Matthew, chapter: 28, verseUntil: 16)?.result.map { - print("\($0.id), (\($0.b), \($0.c), \($0.v)), t: \($0.t)") - } - - print("testScrollMapperBibleText [Matthew 28:-15]") - _ = ScrollMapperBibleText(version: .KJV, book: .Matthew, chapter: 28, verseThrough: 15)?.result.map { - print("\($0.id), (\($0.b), \($0.c), \($0.v)), t: \($0.t)") - } - - print("testScrollMapperBibleText [Matthew 28:1-<16]") - _ = ScrollMapperBibleText(version: .KJV, book: .Matthew, chapter: 28, verseRange: 1..<16)?.result.map { - print("\($0.id), (\($0.b), \($0.c), \($0.v)), t: \($0.t)") - } - - print("testScrollMapperBibleText [Matthew 28:1-15]") - _ = ScrollMapperBibleText(version: .KJV, book: .Matthew, chapter: 28, verseRangeClosed: 1...15)?.result.map { - print("\($0.id), (\($0.b), \($0.c), \($0.v)), t: \($0.t)") - } - - print("testScrollMapperBibleText search for 'in the beginning' in all") - _ = ScrollMapperBibleText(version: .KJV, searchBy: "in the beginning", in: .All)?.result.map { - print("\($0.id), (\($0.b), \($0.c), \($0.v)), t: \($0.t)") - } - - print("testScrollMapperBibleText search for 'in the beginning' in OT") - _ = ScrollMapperBibleText(version: .KJV, searchBy: "in the beginning", in: .OT)?.result.map { - print("\($0.id), (\($0.b), \($0.c), \($0.v)), t: \($0.t)") - } - - print("testScrollMapperBibleText search for 'in the beginning' in NT") - _ = ScrollMapperBibleText(version: .KJV, searchBy: "in the beginning", in: .NT)?.result.map { - print("\($0.id), (\($0.b), \($0.c), \($0.v)), t: \($0.t)") - } - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Models/ScrollMapperBible/ScrollMapperBibleVerseWithCrossReference.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Models/ScrollMapperBible/ScrollMapperBibleVerseWithCrossReference.swift deleted file mode 100644 index 4e040cbb..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Models/ScrollMapperBible/ScrollMapperBibleVerseWithCrossReference.swift +++ /dev/null @@ -1,87 +0,0 @@ -// -// ScrollMapperBibleVerseWithCrossReference.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-11. -// Copyright © 2020 Kuang. All rights reserved. -// - -import Foundation -import SQLite3 - -public class ScrollMapperBibleVerseWithCrossReference: ScrollMapperBibleModelBase { - public typealias StructType = VerseWithCrossReference - - public struct VerseWithCrossReference { - var id: Int = 0 - var b: Int = 0 - var c: Int = 0 - var v: Int = 0 - var t: String = "" - var cr: [CrossReference] = [] - } - - public struct CrossReference { - var vid: Int = 0 - var r: Int = 0 - var sv: Int = 0 - var ev: Int = 0 - } - - public lazy var result: [StructType] = { - return getResult() - }() - - public required init?(statement: String) { - super.init(statement: statement) - } - - public required init?(version: ScrollMapperBibleVersion.BibleVersion, book: ScrollMapperBibleBookInfo.BibleBook, chapter: Int) { - guard let table = version.table() else { - return nil - } - let statement = "SELECT bk.id, bk.b, bk.c, bk.v, bk.t, cr.r, cr.sv, cr.ev FROM \(table) as bk LEFT JOIN cross_reference as cr ON bk.id = cr.vid WHERE bk.b = \(book.order()) AND bk.c = \(chapter) ORDER BY bk.id, cr.r" - super.init(statement: statement) - } - - private func getResult() -> [StructType] { - guard let queryStatement = queryStatement else { - return [] - } - var result: [StructType] = [] - var crossReferences: [CrossReference] = [] - var current_vid: Int = 0 - var current_b: Int = 0 - var current_c: Int = 0 - var current_v: Int = 0 - var current_t: String = "" - while sqlite3_step(queryStatement) == SQLITE_ROW { - let vid = Int(sqlite3_column_int(queryStatement, 0)) - let b = Int(sqlite3_column_int(queryStatement, 1)) - let c = Int(sqlite3_column_int(queryStatement, 2)) - let v = Int(sqlite3_column_int(queryStatement, 3)) - guard let text = sqlite3_column_text(queryStatement, 4) else { - continue - } - let t = String(cString: text) - let cr_r = Int(sqlite3_column_int(queryStatement, 5)) - let cr_sv = Int(sqlite3_column_int(queryStatement, 6)) - let cr_ev = Int(sqlite3_column_int(queryStatement, 7)) - if vid != current_vid { - if current_vid != 0 { - result.append(VerseWithCrossReference(id: current_vid, b: current_b, c: current_c, v: current_v, t: current_t, cr: crossReferences)) - crossReferences = [] - } - current_vid = vid - current_b = b - current_c = c - current_v = v - current_t = t - } - crossReferences.append(CrossReference(vid: vid, r: cr_r, sv: cr_sv, ev: cr_ev)) - } - result.append(VerseWithCrossReference(id: current_vid, b: current_b, c: current_c, v: current_v, t: current_t, cr: crossReferences)) - - return result - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Models/ScrollMapperBible/ScrollMapperBibleVersion.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Models/ScrollMapperBible/ScrollMapperBibleVersion.swift deleted file mode 100644 index bc7919e9..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Models/ScrollMapperBible/ScrollMapperBibleVersion.swift +++ /dev/null @@ -1,107 +0,0 @@ -// -// ScrollMapperBibleVersion.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-06. -// Copyright © 2020 Kuang. All rights reserved. -// - -import Foundation -import SQLite3 - -public class ScrollMapperBibleVersion: ScrollMapperBibleModelBase { - public enum BibleVersion: String { - static let versions: [BibleVersionKey] = { - if let versions = ScrollMapperBibleVersion()?.result { - return versions - } - return [] - }() - - case ASV, BBE, DARBY, KJV, WBT, WEB, YLT - - public func abbreviation() -> String { - return self.rawValue - } - - public func table() -> String? { - let version = BibleVersion.versions.first { $0.abbreviation == self.abbreviation() } - return version?.table - } - - public func next() -> BibleVersion { - switch self { - case .ASV: - return .BBE - case .BBE: - return .DARBY - case .DARBY: - return .KJV - case .KJV: - return .WBT - case .WBT: - return .WEB - case .WEB: - return .YLT - case .YLT: - return .ASV - } - } - } - - public typealias StructType = BibleVersionKey - - public struct BibleVersionKey { - var id: Int = 0 - var table: String = "" - var abbreviation: String = "" - var language: String = "" - var version: String = "" - var info_text: String = "" - var info_url: String = "" - var publisher: String = "" - var copyright: String = "" - var copyright_info: String = "" - } - - public lazy var result: [StructType] = { - return getResult() - }() - - public required init?(statement: String = "SELECT * FROM bible_version_key ORDER BY id") { - super.init(statement: statement) - } - - private func getResult() -> [StructType] { - guard let queryStatement = queryStatement else { - return [] - } - var result: [StructType] = [] - while sqlite3_step(queryStatement) == SQLITE_ROW { - let id = sqlite3_column_int(queryStatement, 0) - guard - let table = sqlite3_column_text(queryStatement, 1), - let abbreviation = sqlite3_column_text(queryStatement, 2), - let language = sqlite3_column_text(queryStatement, 3), - let version = sqlite3_column_text(queryStatement, 4), - let info_text = sqlite3_column_text(queryStatement, 5), - let info_url = sqlite3_column_text(queryStatement, 6), - let publisher = sqlite3_column_text(queryStatement, 7), - let copyright = sqlite3_column_text(queryStatement, 8), - let copyright_info = sqlite3_column_text(queryStatement, 9) - else { - continue - } - let row = StructType(id: Int(id), table: String(cString: table), abbreviation: String(cString: abbreviation), language: String(cString: language), version: String(cString: version), info_text: String(cString: info_text), info_url: String(cString: info_url), publisher: String(cString: publisher), copyright: String(cString: copyright), copyright_info: String(cString: copyright_info)) - result.append(row) - } - return result - } - - public static func test() { - print("testScrollMapperBibleVersion") - _ = self.init()?.result.map { - print("id: \($0.id), table: \($0.table), abbreviation: \($0.abbreviation), language: \($0.language), version: \($0.version), info_text: \($0.info_text), info_url: \($0.info_url), publisher: \($0.publisher), copyright: \($0.copyright), copyright_info: \($0.copyright_info)") - } - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Preview Content/Preview Assets.xcassets/Contents.json b/iOS/ScrollMapperBible/ScrollMapperBible/Preview Content/Preview Assets.xcassets/Contents.json deleted file mode 100644 index 73c00596..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Preview Content/Preview Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Resources/ScrollMapperBible/bible-sqlite.db b/iOS/ScrollMapperBible/ScrollMapperBible/Resources/ScrollMapperBible/bible-sqlite.db deleted file mode 100644 index 27472074..00000000 Binary files a/iOS/ScrollMapperBible/ScrollMapperBible/Resources/ScrollMapperBible/bible-sqlite.db and /dev/null differ diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Resources/ScrollMapperBible/bible-sqlite.sqbpro b/iOS/ScrollMapperBible/ScrollMapperBible/Resources/ScrollMapperBible/bible-sqlite.sqbpro deleted file mode 100644 index 931de9f2..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Resources/ScrollMapperBible/bible-sqlite.sqbpro +++ /dev/null @@ -1 +0,0 @@ -alter table books rename to book_info; diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Resources/ScrollMapperBible/book_info.sql b/iOS/ScrollMapperBible/ScrollMapperBible/Resources/ScrollMapperBible/book_info.sql deleted file mode 100644 index 221e9dbb..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Resources/ScrollMapperBible/book_info.sql +++ /dev/null @@ -1,77 +0,0 @@ -PRAGMA foreign_keys=OFF; -BEGIN TRANSACTION; -CREATE TABLE IF NOT EXISTS "book_info" ( - "order" INTEGER NOT NULL UNIQUE, - "title_short" TEXT NOT NULL UNIQUE, - "title_full" TEXT NOT NULL UNIQUE, - "abbreviation" TEXT NOT NULL UNIQUE, - "category" TEXT NOT NULL, - "otnt" TEXT NOT NULL -, "chapters" INTEGER); -INSERT INTO book_info VALUES(1,'Genesis','The First Book of Moses Called Genesis','Gen.','Law','OT',50); -INSERT INTO book_info VALUES(2,'Exodus','The Second Book of Moses Called Exodus','Ex.','Law','OT',40); -INSERT INTO book_info VALUES(3,'Leviticus','The Third Book of Moses Called Leviticus','Lev.','Law','OT',27); -INSERT INTO book_info VALUES(4,'Numbers','The Fourth Book of Moses Called Numbers','Num.','Law','OT',36); -INSERT INTO book_info VALUES(5,'Deuteronomy','The Fifth Book of Moses Called Deuteronomy','Deut.','Law','OT',34); -INSERT INTO book_info VALUES(6,'Joshua','The Book of Joshua','Josh.','Old Testament Narrative','OT',24); -INSERT INTO book_info VALUES(7,'Judges','The Book of Judges','Judg.','Old Testament Narrative','OT',21); -INSERT INTO book_info VALUES(8,'Ruth','The Book of Ruth','Ruth','Old Testament Narrative','OT',4); -INSERT INTO book_info VALUES(9,'1 Samuel','The First Book of Samuel','1 Sam.','Old Testament Narrative','OT',31); -INSERT INTO book_info VALUES(10,'2 Samuel','The Second Book of Samuel','2 Sam.','Old Testament Narrative','OT',24); -INSERT INTO book_info VALUES(11,'1 Kings','The First Book of Kings','1 Kings','Old Testament Narrative','OT',22); -INSERT INTO book_info VALUES(12,'2 Kings','The Second Book of Kings','2 Kings','Old Testament Narrative','OT',25); -INSERT INTO book_info VALUES(13,'1 Chronicles','The First Book of Chronicles','1 Chron.','Old Testament Narrative','OT',29); -INSERT INTO book_info VALUES(14,'2 Chronicles','The Second Book of Chronicles','2 Chron.','Old Testament Narrative','OT',36); -INSERT INTO book_info VALUES(15,'Ezra','The Book of Ezra','Ezra','Old Testament Narrative','OT',10); -INSERT INTO book_info VALUES(16,'Nehemiah','The Book of Nehemiah','Neh.','Old Testament Narrative','OT',13); -INSERT INTO book_info VALUES(17,'Esther','The Book of Esther','Est.','Old Testament Narrative','OT',10); -INSERT INTO book_info VALUES(18,'Job','The Book of Job','Job','Wisdom Literature','OT',42); -INSERT INTO book_info VALUES(19,'Psalms','The Book of Psalms','Ps.','Wisdom Literature','OT',150); -INSERT INTO book_info VALUES(20,'Proverbs','The Book of Proverbs','Prov.','Wisdom Literature','OT',31); -INSERT INTO book_info VALUES(21,'Ecclesiastes','The Book of Ecclesiastes','Eccles.','Wisdom Literature','OT',12); -INSERT INTO book_info VALUES(22,'Song of Solomon','Song of Solomon','Song','Wisdom Literature','OT',8); -INSERT INTO book_info VALUES(23,'Isaiah','The Book of Isaiah','Isa.','Major Prophets','OT',66); -INSERT INTO book_info VALUES(24,'Jeremiah','The Book of Jeremiah','Jer.','Major Prophets','OT',52); -INSERT INTO book_info VALUES(25,'Lamentations','The Book of Lamentations','Lam.','Major Prophets','OT',5); -INSERT INTO book_info VALUES(26,'Ezekiel','The Book of Ezekiel','Ezek.','Major Prophets','OT',48); -INSERT INTO book_info VALUES(27,'Daniel','The Book of Daniel','Dan.','Major Prophets','OT',12); -INSERT INTO book_info VALUES(28,'Hosea','The Book of Hosea','Hos.','Minor Prophets','OT',14); -INSERT INTO book_info VALUES(29,'Joel','The Book of Joel','Joel','Minor Prophets','OT',3); -INSERT INTO book_info VALUES(30,'Amos','The Book of Amos','Amos','Minor Prophets','OT',9); -INSERT INTO book_info VALUES(31,'Obadiah','The Book of Obadiah','Obad.','Minor Prophets','OT',1); -INSERT INTO book_info VALUES(32,'Jonah','The Book of Jonah','Jonah','Minor Prophets','OT',4); -INSERT INTO book_info VALUES(33,'Micah','The Book of Micah','Mic.','Minor Prophets','OT',7); -INSERT INTO book_info VALUES(34,'Nahum','The Book of Nahum','Nah.','Minor Prophets','OT',3); -INSERT INTO book_info VALUES(35,'Habakkuk','The Book of Habakkuk','Hab.','Minor Prophets','OT',3); -INSERT INTO book_info VALUES(36,'Zephaniah','The Book of Zephaniah','Zeph.','Minor Prophets','OT',3); -INSERT INTO book_info VALUES(37,'Haggai','The Book of Haggai','Hag.','Minor Prophets','OT',2); -INSERT INTO book_info VALUES(38,'Zechariah','The Book of Zechariah','Zech.','Minor Prophets','OT',14); -INSERT INTO book_info VALUES(39,'Malachi','The Book of Malachi','Mal.','Minor Prophets','OT',4); -INSERT INTO book_info VALUES(40,'Matthew','The Gospel According to Matthew','Matt.','New Testament Narrative','NT',28); -INSERT INTO book_info VALUES(41,'Mark','The Gospel According to Mark','Mark','New Testament Narrative','NT',16); -INSERT INTO book_info VALUES(42,'Luke','The Gospel According to Luke','Luke','New Testament Narrative','NT',24); -INSERT INTO book_info VALUES(43,'John','The Gospel According to John','John','New Testament Narrative','NT',21); -INSERT INTO book_info VALUES(44,'Acts','The Acts of the Apostles','Acts','New Testament Narrative','NT',28); -INSERT INTO book_info VALUES(45,'Romans','The Epistle of Paul to the Romans','Rom.','Pauline Epistles','NT',16); -INSERT INTO book_info VALUES(46,'1 Corinthians','The First Epistle of Paul to the Corinthians','1 Cor.','Pauline Epistles','NT',16); -INSERT INTO book_info VALUES(47,'2 Corinthians','The Second Epistle of Paul to the Corinthians','2 Cor.','Pauline Epistles','NT',13); -INSERT INTO book_info VALUES(48,'Galatians','The Epistle of Paul to the Galatians','Gal.','Pauline Epistles','NT',6); -INSERT INTO book_info VALUES(49,'Ephesians','The Epistle of Paul to the Ephesians','Eph.','Pauline Epistles','NT',6); -INSERT INTO book_info VALUES(50,'Philippians','The Epistle of Paul to the Philippians','Phil.','Pauline Epistles','NT',4); -INSERT INTO book_info VALUES(51,'Colossians','The Epistle of Paul to the Colossians','Col.','Pauline Epistles','NT',4); -INSERT INTO book_info VALUES(52,'1 Thessalonians','The First Epistle of Paul to the Thessalonians','1 Thess.','Pauline Epistles','NT',5); -INSERT INTO book_info VALUES(53,'2 Thessalonians','The Second Epistle of Paul to the Thessalonians','2 Thess.','Pauline Epistles','NT',3); -INSERT INTO book_info VALUES(54,'1 Timothy','The First Epistle of Paul to Timothy','1 Tim.','Pauline Epistles','NT',6); -INSERT INTO book_info VALUES(55,'2 Timothy','The Second Epistle of Paul to Timothy','2 Tim.','Pauline Epistles','NT',4); -INSERT INTO book_info VALUES(56,'Titus','The Epistle of Paul to the Titus','Titus','Pauline Epistles','NT',3); -INSERT INTO book_info VALUES(57,'Philemon','The Epistle of Paul to the Philemon','Philem.','Pauline Epistles','NT',1); -INSERT INTO book_info VALUES(58,'Hebrews','The Epistle to the Hebrews','Heb.','General Epistles','NT',13); -INSERT INTO book_info VALUES(59,'James','The General Epistle of James','James','General Epistles','NT',5); -INSERT INTO book_info VALUES(60,'1 Peter','The First Epistle of Peter','1 Pet.','General Epistles','NT',5); -INSERT INTO book_info VALUES(61,'2 Peter','The Second Epistle of Peter','2 Pet.','General Epistles','NT',3); -INSERT INTO book_info VALUES(62,'1 John','The First Epistle of John','1 John','General Epistles','NT',5); -INSERT INTO book_info VALUES(63,'2 John','The Second Epistle of John','2 John','General Epistles','NT',1); -INSERT INTO book_info VALUES(64,'3 John','The Third Epistle of John','3 John','General Epistles','NT',1); -INSERT INTO book_info VALUES(65,'Jude','The Epistle of Jude','Jude','General Epistles','NT',1); -INSERT INTO book_info VALUES(66,'Revelation','The Book of Revelation','Rev.','Apocalyptic Epistle','NT',22); -COMMIT; diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Resources/ScrollMapperBible/chapter.sql b/iOS/ScrollMapperBible/ScrollMapperBible/Resources/ScrollMapperBible/chapter.sql deleted file mode 100644 index 8bbdc740..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Resources/ScrollMapperBible/chapter.sql +++ /dev/null @@ -1,1195 +0,0 @@ -CREATE TABLE IF NOT EXISTS "chapter" ( - "order" INTEGER NOT NULL UNIQUE, - "cid" INTEGER NOT NULL UNIQUE, - "b" INTEGER NOT NULL, - "d" INTEGER NOT NULL -); -INSERT INTO chapter VALUES(1, 1001, 1, 1); -INSERT INTO chapter VALUES(2, 1002, 1, 2); -INSERT INTO chapter VALUES(3, 1003, 1, 3); -INSERT INTO chapter VALUES(4, 1004, 1, 4); -INSERT INTO chapter VALUES(5, 1005, 1, 5); -INSERT INTO chapter VALUES(6, 1006, 1, 6); -INSERT INTO chapter VALUES(7, 1007, 1, 7); -INSERT INTO chapter VALUES(8, 1008, 1, 8); -INSERT INTO chapter VALUES(9, 1009, 1, 9); -INSERT INTO chapter VALUES(10, 1010, 1, 10); -INSERT INTO chapter VALUES(11, 1011, 1, 11); -INSERT INTO chapter VALUES(12, 1012, 1, 12); -INSERT INTO chapter VALUES(13, 1013, 1, 13); -INSERT INTO chapter VALUES(14, 1014, 1, 14); -INSERT INTO chapter VALUES(15, 1015, 1, 15); -INSERT INTO chapter VALUES(16, 1016, 1, 16); -INSERT INTO chapter VALUES(17, 1017, 1, 17); -INSERT INTO chapter VALUES(18, 1018, 1, 18); -INSERT INTO chapter VALUES(19, 1019, 1, 19); -INSERT INTO chapter VALUES(20, 1020, 1, 20); -INSERT INTO chapter VALUES(21, 1021, 1, 21); -INSERT INTO chapter VALUES(22, 1022, 1, 22); -INSERT INTO chapter VALUES(23, 1023, 1, 23); -INSERT INTO chapter VALUES(24, 1024, 1, 24); -INSERT INTO chapter VALUES(25, 1025, 1, 25); -INSERT INTO chapter VALUES(26, 1026, 1, 26); -INSERT INTO chapter VALUES(27, 1027, 1, 27); -INSERT INTO chapter VALUES(28, 1028, 1, 28); -INSERT INTO chapter VALUES(29, 1029, 1, 29); -INSERT INTO chapter VALUES(30, 1030, 1, 30); -INSERT INTO chapter VALUES(31, 1031, 1, 31); -INSERT INTO chapter VALUES(32, 1032, 1, 32); -INSERT INTO chapter VALUES(33, 1033, 1, 33); -INSERT INTO chapter VALUES(34, 1034, 1, 34); -INSERT INTO chapter VALUES(35, 1035, 1, 35); -INSERT INTO chapter VALUES(36, 1036, 1, 36); -INSERT INTO chapter VALUES(37, 1037, 1, 37); -INSERT INTO chapter VALUES(38, 1038, 1, 38); -INSERT INTO chapter VALUES(39, 1039, 1, 39); -INSERT INTO chapter VALUES(40, 1040, 1, 40); -INSERT INTO chapter VALUES(41, 1041, 1, 41); -INSERT INTO chapter VALUES(42, 1042, 1, 42); -INSERT INTO chapter VALUES(43, 1043, 1, 43); -INSERT INTO chapter VALUES(44, 1044, 1, 44); -INSERT INTO chapter VALUES(45, 1045, 1, 45); -INSERT INTO chapter VALUES(46, 1046, 1, 46); -INSERT INTO chapter VALUES(47, 1047, 1, 47); -INSERT INTO chapter VALUES(48, 1048, 1, 48); -INSERT INTO chapter VALUES(49, 1049, 1, 49); -INSERT INTO chapter VALUES(50, 1050, 1, 50); -INSERT INTO chapter VALUES(51, 2001, 2, 1); -INSERT INTO chapter VALUES(52, 2002, 2, 2); -INSERT INTO chapter VALUES(53, 2003, 2, 3); -INSERT INTO chapter VALUES(54, 2004, 2, 4); -INSERT INTO chapter VALUES(55, 2005, 2, 5); -INSERT INTO chapter VALUES(56, 2006, 2, 6); -INSERT INTO chapter VALUES(57, 2007, 2, 7); -INSERT INTO chapter VALUES(58, 2008, 2, 8); -INSERT INTO chapter VALUES(59, 2009, 2, 9); -INSERT INTO chapter VALUES(60, 2010, 2, 10); -INSERT INTO chapter VALUES(61, 2011, 2, 11); -INSERT INTO chapter VALUES(62, 2012, 2, 12); -INSERT INTO chapter VALUES(63, 2013, 2, 13); -INSERT INTO chapter VALUES(64, 2014, 2, 14); -INSERT INTO chapter VALUES(65, 2015, 2, 15); -INSERT INTO chapter VALUES(66, 2016, 2, 16); -INSERT INTO chapter VALUES(67, 2017, 2, 17); -INSERT INTO chapter VALUES(68, 2018, 2, 18); -INSERT INTO chapter VALUES(69, 2019, 2, 19); -INSERT INTO chapter VALUES(70, 2020, 2, 20); -INSERT INTO chapter VALUES(71, 2021, 2, 21); -INSERT INTO chapter VALUES(72, 2022, 2, 22); -INSERT INTO chapter VALUES(73, 2023, 2, 23); -INSERT INTO chapter VALUES(74, 2024, 2, 24); -INSERT INTO chapter VALUES(75, 2025, 2, 25); -INSERT INTO chapter VALUES(76, 2026, 2, 26); -INSERT INTO chapter VALUES(77, 2027, 2, 27); -INSERT INTO chapter VALUES(78, 2028, 2, 28); -INSERT INTO chapter VALUES(79, 2029, 2, 29); -INSERT INTO chapter VALUES(80, 2030, 2, 30); -INSERT INTO chapter VALUES(81, 2031, 2, 31); -INSERT INTO chapter VALUES(82, 2032, 2, 32); -INSERT INTO chapter VALUES(83, 2033, 2, 33); -INSERT INTO chapter VALUES(84, 2034, 2, 34); -INSERT INTO chapter VALUES(85, 2035, 2, 35); -INSERT INTO chapter VALUES(86, 2036, 2, 36); -INSERT INTO chapter VALUES(87, 2037, 2, 37); -INSERT INTO chapter VALUES(88, 2038, 2, 38); -INSERT INTO chapter VALUES(89, 2039, 2, 39); -INSERT INTO chapter VALUES(90, 2040, 2, 40); -INSERT INTO chapter VALUES(91, 3001, 3, 1); -INSERT INTO chapter VALUES(92, 3002, 3, 2); -INSERT INTO chapter VALUES(93, 3003, 3, 3); -INSERT INTO chapter VALUES(94, 3004, 3, 4); -INSERT INTO chapter VALUES(95, 3005, 3, 5); -INSERT INTO chapter VALUES(96, 3006, 3, 6); -INSERT INTO chapter VALUES(97, 3007, 3, 7); -INSERT INTO chapter VALUES(98, 3008, 3, 8); -INSERT INTO chapter VALUES(99, 3009, 3, 9); -INSERT INTO chapter VALUES(100, 3010, 3, 10); -INSERT INTO chapter VALUES(101, 3011, 3, 11); -INSERT INTO chapter VALUES(102, 3012, 3, 12); -INSERT INTO chapter VALUES(103, 3013, 3, 13); -INSERT INTO chapter VALUES(104, 3014, 3, 14); -INSERT INTO chapter VALUES(105, 3015, 3, 15); -INSERT INTO chapter VALUES(106, 3016, 3, 16); -INSERT INTO chapter VALUES(107, 3017, 3, 17); -INSERT INTO chapter VALUES(108, 3018, 3, 18); -INSERT INTO chapter VALUES(109, 3019, 3, 19); -INSERT INTO chapter VALUES(110, 3020, 3, 20); -INSERT INTO chapter VALUES(111, 3021, 3, 21); -INSERT INTO chapter VALUES(112, 3022, 3, 22); -INSERT INTO chapter VALUES(113, 3023, 3, 23); -INSERT INTO chapter VALUES(114, 3024, 3, 24); -INSERT INTO chapter VALUES(115, 3025, 3, 25); -INSERT INTO chapter VALUES(116, 3026, 3, 26); -INSERT INTO chapter VALUES(117, 3027, 3, 27); -INSERT INTO chapter VALUES(118, 4001, 4, 1); -INSERT INTO chapter VALUES(119, 4002, 4, 2); -INSERT INTO chapter VALUES(120, 4003, 4, 3); -INSERT INTO chapter VALUES(121, 4004, 4, 4); -INSERT INTO chapter VALUES(122, 4005, 4, 5); -INSERT INTO chapter VALUES(123, 4006, 4, 6); -INSERT INTO chapter VALUES(124, 4007, 4, 7); -INSERT INTO chapter VALUES(125, 4008, 4, 8); -INSERT INTO chapter VALUES(126, 4009, 4, 9); -INSERT INTO chapter VALUES(127, 4010, 4, 10); -INSERT INTO chapter VALUES(128, 4011, 4, 11); -INSERT INTO chapter VALUES(129, 4012, 4, 12); -INSERT INTO chapter VALUES(130, 4013, 4, 13); -INSERT INTO chapter VALUES(131, 4014, 4, 14); -INSERT INTO chapter VALUES(132, 4015, 4, 15); -INSERT INTO chapter VALUES(133, 4016, 4, 16); -INSERT INTO chapter VALUES(134, 4017, 4, 17); -INSERT INTO chapter VALUES(135, 4018, 4, 18); -INSERT INTO chapter VALUES(136, 4019, 4, 19); -INSERT INTO chapter VALUES(137, 4020, 4, 20); -INSERT INTO chapter VALUES(138, 4021, 4, 21); -INSERT INTO chapter VALUES(139, 4022, 4, 22); -INSERT INTO chapter VALUES(140, 4023, 4, 23); -INSERT INTO chapter VALUES(141, 4024, 4, 24); -INSERT INTO chapter VALUES(142, 4025, 4, 25); -INSERT INTO chapter VALUES(143, 4026, 4, 26); -INSERT INTO chapter VALUES(144, 4027, 4, 27); -INSERT INTO chapter VALUES(145, 4028, 4, 28); -INSERT INTO chapter VALUES(146, 4029, 4, 29); -INSERT INTO chapter VALUES(147, 4030, 4, 30); -INSERT INTO chapter VALUES(148, 4031, 4, 31); -INSERT INTO chapter VALUES(149, 4032, 4, 32); -INSERT INTO chapter VALUES(150, 4033, 4, 33); -INSERT INTO chapter VALUES(151, 4034, 4, 34); -INSERT INTO chapter VALUES(152, 4035, 4, 35); -INSERT INTO chapter VALUES(153, 4036, 4, 36); -INSERT INTO chapter VALUES(154, 5001, 5, 1); -INSERT INTO chapter VALUES(155, 5002, 5, 2); -INSERT INTO chapter VALUES(156, 5003, 5, 3); -INSERT INTO chapter VALUES(157, 5004, 5, 4); -INSERT INTO chapter VALUES(158, 5005, 5, 5); -INSERT INTO chapter VALUES(159, 5006, 5, 6); -INSERT INTO chapter VALUES(160, 5007, 5, 7); -INSERT INTO chapter VALUES(161, 5008, 5, 8); -INSERT INTO chapter VALUES(162, 5009, 5, 9); -INSERT INTO chapter VALUES(163, 5010, 5, 10); -INSERT INTO chapter VALUES(164, 5011, 5, 11); -INSERT INTO chapter VALUES(165, 5012, 5, 12); -INSERT INTO chapter VALUES(166, 5013, 5, 13); -INSERT INTO chapter VALUES(167, 5014, 5, 14); -INSERT INTO chapter VALUES(168, 5015, 5, 15); -INSERT INTO chapter VALUES(169, 5016, 5, 16); -INSERT INTO chapter VALUES(170, 5017, 5, 17); -INSERT INTO chapter VALUES(171, 5018, 5, 18); -INSERT INTO chapter VALUES(172, 5019, 5, 19); -INSERT INTO chapter VALUES(173, 5020, 5, 20); -INSERT INTO chapter VALUES(174, 5021, 5, 21); -INSERT INTO chapter VALUES(175, 5022, 5, 22); -INSERT INTO chapter VALUES(176, 5023, 5, 23); -INSERT INTO chapter VALUES(177, 5024, 5, 24); -INSERT INTO chapter VALUES(178, 5025, 5, 25); -INSERT INTO chapter VALUES(179, 5026, 5, 26); -INSERT INTO chapter VALUES(180, 5027, 5, 27); -INSERT INTO chapter VALUES(181, 5028, 5, 28); -INSERT INTO chapter VALUES(182, 5029, 5, 29); -INSERT INTO chapter VALUES(183, 5030, 5, 30); -INSERT INTO chapter VALUES(184, 5031, 5, 31); -INSERT INTO chapter VALUES(185, 5032, 5, 32); -INSERT INTO chapter VALUES(186, 5033, 5, 33); -INSERT INTO chapter VALUES(187, 5034, 5, 34); -INSERT INTO chapter VALUES(188, 6001, 6, 1); -INSERT INTO chapter VALUES(189, 6002, 6, 2); -INSERT INTO chapter VALUES(190, 6003, 6, 3); -INSERT INTO chapter VALUES(191, 6004, 6, 4); -INSERT INTO chapter VALUES(192, 6005, 6, 5); -INSERT INTO chapter VALUES(193, 6006, 6, 6); -INSERT INTO chapter VALUES(194, 6007, 6, 7); -INSERT INTO chapter VALUES(195, 6008, 6, 8); -INSERT INTO chapter VALUES(196, 6009, 6, 9); -INSERT INTO chapter VALUES(197, 6010, 6, 10); -INSERT INTO chapter VALUES(198, 6011, 6, 11); -INSERT INTO chapter VALUES(199, 6012, 6, 12); -INSERT INTO chapter VALUES(200, 6013, 6, 13); -INSERT INTO chapter VALUES(201, 6014, 6, 14); -INSERT INTO chapter VALUES(202, 6015, 6, 15); -INSERT INTO chapter VALUES(203, 6016, 6, 16); -INSERT INTO chapter VALUES(204, 6017, 6, 17); -INSERT INTO chapter VALUES(205, 6018, 6, 18); -INSERT INTO chapter VALUES(206, 6019, 6, 19); -INSERT INTO chapter VALUES(207, 6020, 6, 20); -INSERT INTO chapter VALUES(208, 6021, 6, 21); -INSERT INTO chapter VALUES(209, 6022, 6, 22); -INSERT INTO chapter VALUES(210, 6023, 6, 23); -INSERT INTO chapter VALUES(211, 6024, 6, 24); -INSERT INTO chapter VALUES(212, 7001, 7, 1); -INSERT INTO chapter VALUES(213, 7002, 7, 2); -INSERT INTO chapter VALUES(214, 7003, 7, 3); -INSERT INTO chapter VALUES(215, 7004, 7, 4); -INSERT INTO chapter VALUES(216, 7005, 7, 5); -INSERT INTO chapter VALUES(217, 7006, 7, 6); -INSERT INTO chapter VALUES(218, 7007, 7, 7); -INSERT INTO chapter VALUES(219, 7008, 7, 8); -INSERT INTO chapter VALUES(220, 7009, 7, 9); -INSERT INTO chapter VALUES(221, 7010, 7, 10); -INSERT INTO chapter VALUES(222, 7011, 7, 11); -INSERT INTO chapter VALUES(223, 7012, 7, 12); -INSERT INTO chapter VALUES(224, 7013, 7, 13); -INSERT INTO chapter VALUES(225, 7014, 7, 14); -INSERT INTO chapter VALUES(226, 7015, 7, 15); -INSERT INTO chapter VALUES(227, 7016, 7, 16); -INSERT INTO chapter VALUES(228, 7017, 7, 17); -INSERT INTO chapter VALUES(229, 7018, 7, 18); -INSERT INTO chapter VALUES(230, 7019, 7, 19); -INSERT INTO chapter VALUES(231, 7020, 7, 20); -INSERT INTO chapter VALUES(232, 7021, 7, 21); -INSERT INTO chapter VALUES(233, 8001, 8, 1); -INSERT INTO chapter VALUES(234, 8002, 8, 2); -INSERT INTO chapter VALUES(235, 8003, 8, 3); -INSERT INTO chapter VALUES(236, 8004, 8, 4); -INSERT INTO chapter VALUES(237, 9001, 9, 1); -INSERT INTO chapter VALUES(238, 9002, 9, 2); -INSERT INTO chapter VALUES(239, 9003, 9, 3); -INSERT INTO chapter VALUES(240, 9004, 9, 4); -INSERT INTO chapter VALUES(241, 9005, 9, 5); -INSERT INTO chapter VALUES(242, 9006, 9, 6); -INSERT INTO chapter VALUES(243, 9007, 9, 7); -INSERT INTO chapter VALUES(244, 9008, 9, 8); -INSERT INTO chapter VALUES(245, 9009, 9, 9); -INSERT INTO chapter VALUES(246, 9010, 9, 10); -INSERT INTO chapter VALUES(247, 9011, 9, 11); -INSERT INTO chapter VALUES(248, 9012, 9, 12); -INSERT INTO chapter VALUES(249, 9013, 9, 13); -INSERT INTO chapter VALUES(250, 9014, 9, 14); -INSERT INTO chapter VALUES(251, 9015, 9, 15); -INSERT INTO chapter VALUES(252, 9016, 9, 16); -INSERT INTO chapter VALUES(253, 9017, 9, 17); -INSERT INTO chapter VALUES(254, 9018, 9, 18); -INSERT INTO chapter VALUES(255, 9019, 9, 19); -INSERT INTO chapter VALUES(256, 9020, 9, 20); -INSERT INTO chapter VALUES(257, 9021, 9, 21); -INSERT INTO chapter VALUES(258, 9022, 9, 22); -INSERT INTO chapter VALUES(259, 9023, 9, 23); -INSERT INTO chapter VALUES(260, 9024, 9, 24); -INSERT INTO chapter VALUES(261, 9025, 9, 25); -INSERT INTO chapter VALUES(262, 9026, 9, 26); -INSERT INTO chapter VALUES(263, 9027, 9, 27); -INSERT INTO chapter VALUES(264, 9028, 9, 28); -INSERT INTO chapter VALUES(265, 9029, 9, 29); -INSERT INTO chapter VALUES(266, 9030, 9, 30); -INSERT INTO chapter VALUES(267, 9031, 9, 31); -INSERT INTO chapter VALUES(268, 10001, 10, 1); -INSERT INTO chapter VALUES(269, 10002, 10, 2); -INSERT INTO chapter VALUES(270, 10003, 10, 3); -INSERT INTO chapter VALUES(271, 10004, 10, 4); -INSERT INTO chapter VALUES(272, 10005, 10, 5); -INSERT INTO chapter VALUES(273, 10006, 10, 6); -INSERT INTO chapter VALUES(274, 10007, 10, 7); -INSERT INTO chapter VALUES(275, 10008, 10, 8); -INSERT INTO chapter VALUES(276, 10009, 10, 9); -INSERT INTO chapter VALUES(277, 10010, 10, 10); -INSERT INTO chapter VALUES(278, 10011, 10, 11); -INSERT INTO chapter VALUES(279, 10012, 10, 12); -INSERT INTO chapter VALUES(280, 10013, 10, 13); -INSERT INTO chapter VALUES(281, 10014, 10, 14); -INSERT INTO chapter VALUES(282, 10015, 10, 15); -INSERT INTO chapter VALUES(283, 10016, 10, 16); -INSERT INTO chapter VALUES(284, 10017, 10, 17); -INSERT INTO chapter VALUES(285, 10018, 10, 18); -INSERT INTO chapter VALUES(286, 10019, 10, 19); -INSERT INTO chapter VALUES(287, 10020, 10, 20); -INSERT INTO chapter VALUES(288, 10021, 10, 21); -INSERT INTO chapter VALUES(289, 10022, 10, 22); -INSERT INTO chapter VALUES(290, 10023, 10, 23); -INSERT INTO chapter VALUES(291, 10024, 10, 24); -INSERT INTO chapter VALUES(292, 11001, 11, 1); -INSERT INTO chapter VALUES(293, 11002, 11, 2); -INSERT INTO chapter VALUES(294, 11003, 11, 3); -INSERT INTO chapter VALUES(295, 11004, 11, 4); -INSERT INTO chapter VALUES(296, 11005, 11, 5); -INSERT INTO chapter VALUES(297, 11006, 11, 6); -INSERT INTO chapter VALUES(298, 11007, 11, 7); -INSERT INTO chapter VALUES(299, 11008, 11, 8); -INSERT INTO chapter VALUES(300, 11009, 11, 9); -INSERT INTO chapter VALUES(301, 11010, 11, 10); -INSERT INTO chapter VALUES(302, 11011, 11, 11); -INSERT INTO chapter VALUES(303, 11012, 11, 12); -INSERT INTO chapter VALUES(304, 11013, 11, 13); -INSERT INTO chapter VALUES(305, 11014, 11, 14); -INSERT INTO chapter VALUES(306, 11015, 11, 15); -INSERT INTO chapter VALUES(307, 11016, 11, 16); -INSERT INTO chapter VALUES(308, 11017, 11, 17); -INSERT INTO chapter VALUES(309, 11018, 11, 18); -INSERT INTO chapter VALUES(310, 11019, 11, 19); -INSERT INTO chapter VALUES(311, 11020, 11, 20); -INSERT INTO chapter VALUES(312, 11021, 11, 21); -INSERT INTO chapter VALUES(313, 11022, 11, 22); -INSERT INTO chapter VALUES(314, 12001, 12, 1); -INSERT INTO chapter VALUES(315, 12002, 12, 2); -INSERT INTO chapter VALUES(316, 12003, 12, 3); -INSERT INTO chapter VALUES(317, 12004, 12, 4); -INSERT INTO chapter VALUES(318, 12005, 12, 5); -INSERT INTO chapter VALUES(319, 12006, 12, 6); -INSERT INTO chapter VALUES(320, 12007, 12, 7); -INSERT INTO chapter VALUES(321, 12008, 12, 8); -INSERT INTO chapter VALUES(322, 12009, 12, 9); -INSERT INTO chapter VALUES(323, 12010, 12, 10); -INSERT INTO chapter VALUES(324, 12011, 12, 11); -INSERT INTO chapter VALUES(325, 12012, 12, 12); -INSERT INTO chapter VALUES(326, 12013, 12, 13); -INSERT INTO chapter VALUES(327, 12014, 12, 14); -INSERT INTO chapter VALUES(328, 12015, 12, 15); -INSERT INTO chapter VALUES(329, 12016, 12, 16); -INSERT INTO chapter VALUES(330, 12017, 12, 17); -INSERT INTO chapter VALUES(331, 12018, 12, 18); -INSERT INTO chapter VALUES(332, 12019, 12, 19); -INSERT INTO chapter VALUES(333, 12020, 12, 20); -INSERT INTO chapter VALUES(334, 12021, 12, 21); -INSERT INTO chapter VALUES(335, 12022, 12, 22); -INSERT INTO chapter VALUES(336, 12023, 12, 23); -INSERT INTO chapter VALUES(337, 12024, 12, 24); -INSERT INTO chapter VALUES(338, 12025, 12, 25); -INSERT INTO chapter VALUES(339, 13001, 13, 1); -INSERT INTO chapter VALUES(340, 13002, 13, 2); -INSERT INTO chapter VALUES(341, 13003, 13, 3); -INSERT INTO chapter VALUES(342, 13004, 13, 4); -INSERT INTO chapter VALUES(343, 13005, 13, 5); -INSERT INTO chapter VALUES(344, 13006, 13, 6); -INSERT INTO chapter VALUES(345, 13007, 13, 7); -INSERT INTO chapter VALUES(346, 13008, 13, 8); -INSERT INTO chapter VALUES(347, 13009, 13, 9); -INSERT INTO chapter VALUES(348, 13010, 13, 10); -INSERT INTO chapter VALUES(349, 13011, 13, 11); -INSERT INTO chapter VALUES(350, 13012, 13, 12); -INSERT INTO chapter VALUES(351, 13013, 13, 13); -INSERT INTO chapter VALUES(352, 13014, 13, 14); -INSERT INTO chapter VALUES(353, 13015, 13, 15); -INSERT INTO chapter VALUES(354, 13016, 13, 16); -INSERT INTO chapter VALUES(355, 13017, 13, 17); -INSERT INTO chapter VALUES(356, 13018, 13, 18); -INSERT INTO chapter VALUES(357, 13019, 13, 19); -INSERT INTO chapter VALUES(358, 13020, 13, 20); -INSERT INTO chapter VALUES(359, 13021, 13, 21); -INSERT INTO chapter VALUES(360, 13022, 13, 22); -INSERT INTO chapter VALUES(361, 13023, 13, 23); -INSERT INTO chapter VALUES(362, 13024, 13, 24); -INSERT INTO chapter VALUES(363, 13025, 13, 25); -INSERT INTO chapter VALUES(364, 13026, 13, 26); -INSERT INTO chapter VALUES(365, 13027, 13, 27); -INSERT INTO chapter VALUES(366, 13028, 13, 28); -INSERT INTO chapter VALUES(367, 13029, 13, 29); -INSERT INTO chapter VALUES(368, 14001, 14, 1); -INSERT INTO chapter VALUES(369, 14002, 14, 2); -INSERT INTO chapter VALUES(370, 14003, 14, 3); -INSERT INTO chapter VALUES(371, 14004, 14, 4); -INSERT INTO chapter VALUES(372, 14005, 14, 5); -INSERT INTO chapter VALUES(373, 14006, 14, 6); -INSERT INTO chapter VALUES(374, 14007, 14, 7); -INSERT INTO chapter VALUES(375, 14008, 14, 8); -INSERT INTO chapter VALUES(376, 14009, 14, 9); -INSERT INTO chapter VALUES(377, 14010, 14, 10); -INSERT INTO chapter VALUES(378, 14011, 14, 11); -INSERT INTO chapter VALUES(379, 14012, 14, 12); -INSERT INTO chapter VALUES(380, 14013, 14, 13); -INSERT INTO chapter VALUES(381, 14014, 14, 14); -INSERT INTO chapter VALUES(382, 14015, 14, 15); -INSERT INTO chapter VALUES(383, 14016, 14, 16); -INSERT INTO chapter VALUES(384, 14017, 14, 17); -INSERT INTO chapter VALUES(385, 14018, 14, 18); -INSERT INTO chapter VALUES(386, 14019, 14, 19); -INSERT INTO chapter VALUES(387, 14020, 14, 20); -INSERT INTO chapter VALUES(388, 14021, 14, 21); -INSERT INTO chapter VALUES(389, 14022, 14, 22); -INSERT INTO chapter VALUES(390, 14023, 14, 23); -INSERT INTO chapter VALUES(391, 14024, 14, 24); -INSERT INTO chapter VALUES(392, 14025, 14, 25); -INSERT INTO chapter VALUES(393, 14026, 14, 26); -INSERT INTO chapter VALUES(394, 14027, 14, 27); -INSERT INTO chapter VALUES(395, 14028, 14, 28); -INSERT INTO chapter VALUES(396, 14029, 14, 29); -INSERT INTO chapter VALUES(397, 14030, 14, 30); -INSERT INTO chapter VALUES(398, 14031, 14, 31); -INSERT INTO chapter VALUES(399, 14032, 14, 32); -INSERT INTO chapter VALUES(400, 14033, 14, 33); -INSERT INTO chapter VALUES(401, 14034, 14, 34); -INSERT INTO chapter VALUES(402, 14035, 14, 35); -INSERT INTO chapter VALUES(403, 14036, 14, 36); -INSERT INTO chapter VALUES(404, 15001, 15, 1); -INSERT INTO chapter VALUES(405, 15002, 15, 2); -INSERT INTO chapter VALUES(406, 15003, 15, 3); -INSERT INTO chapter VALUES(407, 15004, 15, 4); -INSERT INTO chapter VALUES(408, 15005, 15, 5); -INSERT INTO chapter VALUES(409, 15006, 15, 6); -INSERT INTO chapter VALUES(410, 15007, 15, 7); -INSERT INTO chapter VALUES(411, 15008, 15, 8); -INSERT INTO chapter VALUES(412, 15009, 15, 9); -INSERT INTO chapter VALUES(413, 15010, 15, 10); -INSERT INTO chapter VALUES(414, 16001, 16, 1); -INSERT INTO chapter VALUES(415, 16002, 16, 2); -INSERT INTO chapter VALUES(416, 16003, 16, 3); -INSERT INTO chapter VALUES(417, 16004, 16, 4); -INSERT INTO chapter VALUES(418, 16005, 16, 5); -INSERT INTO chapter VALUES(419, 16006, 16, 6); -INSERT INTO chapter VALUES(420, 16007, 16, 7); -INSERT INTO chapter VALUES(421, 16008, 16, 8); -INSERT INTO chapter VALUES(422, 16009, 16, 9); -INSERT INTO chapter VALUES(423, 16010, 16, 10); -INSERT INTO chapter VALUES(424, 16011, 16, 11); -INSERT INTO chapter VALUES(425, 16012, 16, 12); -INSERT INTO chapter VALUES(426, 16013, 16, 13); -INSERT INTO chapter VALUES(427, 17001, 17, 1); -INSERT INTO chapter VALUES(428, 17002, 17, 2); -INSERT INTO chapter VALUES(429, 17003, 17, 3); -INSERT INTO chapter VALUES(430, 17004, 17, 4); -INSERT INTO chapter VALUES(431, 17005, 17, 5); -INSERT INTO chapter VALUES(432, 17006, 17, 6); -INSERT INTO chapter VALUES(433, 17007, 17, 7); -INSERT INTO chapter VALUES(434, 17008, 17, 8); -INSERT INTO chapter VALUES(435, 17009, 17, 9); -INSERT INTO chapter VALUES(436, 17010, 17, 10); -INSERT INTO chapter VALUES(437, 18001, 18, 1); -INSERT INTO chapter VALUES(438, 18002, 18, 2); -INSERT INTO chapter VALUES(439, 18003, 18, 3); -INSERT INTO chapter VALUES(440, 18004, 18, 4); -INSERT INTO chapter VALUES(441, 18005, 18, 5); -INSERT INTO chapter VALUES(442, 18006, 18, 6); -INSERT INTO chapter VALUES(443, 18007, 18, 7); -INSERT INTO chapter VALUES(444, 18008, 18, 8); -INSERT INTO chapter VALUES(445, 18009, 18, 9); -INSERT INTO chapter VALUES(446, 18010, 18, 10); -INSERT INTO chapter VALUES(447, 18011, 18, 11); -INSERT INTO chapter VALUES(448, 18012, 18, 12); -INSERT INTO chapter VALUES(449, 18013, 18, 13); -INSERT INTO chapter VALUES(450, 18014, 18, 14); -INSERT INTO chapter VALUES(451, 18015, 18, 15); -INSERT INTO chapter VALUES(452, 18016, 18, 16); -INSERT INTO chapter VALUES(453, 18017, 18, 17); -INSERT INTO chapter VALUES(454, 18018, 18, 18); -INSERT INTO chapter VALUES(455, 18019, 18, 19); -INSERT INTO chapter VALUES(456, 18020, 18, 20); -INSERT INTO chapter VALUES(457, 18021, 18, 21); -INSERT INTO chapter VALUES(458, 18022, 18, 22); -INSERT INTO chapter VALUES(459, 18023, 18, 23); -INSERT INTO chapter VALUES(460, 18024, 18, 24); -INSERT INTO chapter VALUES(461, 18025, 18, 25); -INSERT INTO chapter VALUES(462, 18026, 18, 26); -INSERT INTO chapter VALUES(463, 18027, 18, 27); -INSERT INTO chapter VALUES(464, 18028, 18, 28); -INSERT INTO chapter VALUES(465, 18029, 18, 29); -INSERT INTO chapter VALUES(466, 18030, 18, 30); -INSERT INTO chapter VALUES(467, 18031, 18, 31); -INSERT INTO chapter VALUES(468, 18032, 18, 32); -INSERT INTO chapter VALUES(469, 18033, 18, 33); -INSERT INTO chapter VALUES(470, 18034, 18, 34); -INSERT INTO chapter VALUES(471, 18035, 18, 35); -INSERT INTO chapter VALUES(472, 18036, 18, 36); -INSERT INTO chapter VALUES(473, 18037, 18, 37); -INSERT INTO chapter VALUES(474, 18038, 18, 38); -INSERT INTO chapter VALUES(475, 18039, 18, 39); -INSERT INTO chapter VALUES(476, 18040, 18, 40); -INSERT INTO chapter VALUES(477, 18041, 18, 41); -INSERT INTO chapter VALUES(478, 18042, 18, 42); -INSERT INTO chapter VALUES(479, 19001, 19, 1); -INSERT INTO chapter VALUES(480, 19002, 19, 2); -INSERT INTO chapter VALUES(481, 19003, 19, 3); -INSERT INTO chapter VALUES(482, 19004, 19, 4); -INSERT INTO chapter VALUES(483, 19005, 19, 5); -INSERT INTO chapter VALUES(484, 19006, 19, 6); -INSERT INTO chapter VALUES(485, 19007, 19, 7); -INSERT INTO chapter VALUES(486, 19008, 19, 8); -INSERT INTO chapter VALUES(487, 19009, 19, 9); -INSERT INTO chapter VALUES(488, 19010, 19, 10); -INSERT INTO chapter VALUES(489, 19011, 19, 11); -INSERT INTO chapter VALUES(490, 19012, 19, 12); -INSERT INTO chapter VALUES(491, 19013, 19, 13); -INSERT INTO chapter VALUES(492, 19014, 19, 14); -INSERT INTO chapter VALUES(493, 19015, 19, 15); -INSERT INTO chapter VALUES(494, 19016, 19, 16); -INSERT INTO chapter VALUES(495, 19017, 19, 17); -INSERT INTO chapter VALUES(496, 19018, 19, 18); -INSERT INTO chapter VALUES(497, 19019, 19, 19); -INSERT INTO chapter VALUES(498, 19020, 19, 20); -INSERT INTO chapter VALUES(499, 19021, 19, 21); -INSERT INTO chapter VALUES(500, 19022, 19, 22); -INSERT INTO chapter VALUES(501, 19023, 19, 23); -INSERT INTO chapter VALUES(502, 19024, 19, 24); -INSERT INTO chapter VALUES(503, 19025, 19, 25); -INSERT INTO chapter VALUES(504, 19026, 19, 26); -INSERT INTO chapter VALUES(505, 19027, 19, 27); -INSERT INTO chapter VALUES(506, 19028, 19, 28); -INSERT INTO chapter VALUES(507, 19029, 19, 29); -INSERT INTO chapter VALUES(508, 19030, 19, 30); -INSERT INTO chapter VALUES(509, 19031, 19, 31); -INSERT INTO chapter VALUES(510, 19032, 19, 32); -INSERT INTO chapter VALUES(511, 19033, 19, 33); -INSERT INTO chapter VALUES(512, 19034, 19, 34); -INSERT INTO chapter VALUES(513, 19035, 19, 35); -INSERT INTO chapter VALUES(514, 19036, 19, 36); -INSERT INTO chapter VALUES(515, 19037, 19, 37); -INSERT INTO chapter VALUES(516, 19038, 19, 38); -INSERT INTO chapter VALUES(517, 19039, 19, 39); -INSERT INTO chapter VALUES(518, 19040, 19, 40); -INSERT INTO chapter VALUES(519, 19041, 19, 41); -INSERT INTO chapter VALUES(520, 19042, 19, 42); -INSERT INTO chapter VALUES(521, 19043, 19, 43); -INSERT INTO chapter VALUES(522, 19044, 19, 44); -INSERT INTO chapter VALUES(523, 19045, 19, 45); -INSERT INTO chapter VALUES(524, 19046, 19, 46); -INSERT INTO chapter VALUES(525, 19047, 19, 47); -INSERT INTO chapter VALUES(526, 19048, 19, 48); -INSERT INTO chapter VALUES(527, 19049, 19, 49); -INSERT INTO chapter VALUES(528, 19050, 19, 50); -INSERT INTO chapter VALUES(529, 19051, 19, 51); -INSERT INTO chapter VALUES(530, 19052, 19, 52); -INSERT INTO chapter VALUES(531, 19053, 19, 53); -INSERT INTO chapter VALUES(532, 19054, 19, 54); -INSERT INTO chapter VALUES(533, 19055, 19, 55); -INSERT INTO chapter VALUES(534, 19056, 19, 56); -INSERT INTO chapter VALUES(535, 19057, 19, 57); -INSERT INTO chapter VALUES(536, 19058, 19, 58); -INSERT INTO chapter VALUES(537, 19059, 19, 59); -INSERT INTO chapter VALUES(538, 19060, 19, 60); -INSERT INTO chapter VALUES(539, 19061, 19, 61); -INSERT INTO chapter VALUES(540, 19062, 19, 62); -INSERT INTO chapter VALUES(541, 19063, 19, 63); -INSERT INTO chapter VALUES(542, 19064, 19, 64); -INSERT INTO chapter VALUES(543, 19065, 19, 65); -INSERT INTO chapter VALUES(544, 19066, 19, 66); -INSERT INTO chapter VALUES(545, 19067, 19, 67); -INSERT INTO chapter VALUES(546, 19068, 19, 68); -INSERT INTO chapter VALUES(547, 19069, 19, 69); -INSERT INTO chapter VALUES(548, 19070, 19, 70); -INSERT INTO chapter VALUES(549, 19071, 19, 71); -INSERT INTO chapter VALUES(550, 19072, 19, 72); -INSERT INTO chapter VALUES(551, 19073, 19, 73); -INSERT INTO chapter VALUES(552, 19074, 19, 74); -INSERT INTO chapter VALUES(553, 19075, 19, 75); -INSERT INTO chapter VALUES(554, 19076, 19, 76); -INSERT INTO chapter VALUES(555, 19077, 19, 77); -INSERT INTO chapter VALUES(556, 19078, 19, 78); -INSERT INTO chapter VALUES(557, 19079, 19, 79); -INSERT INTO chapter VALUES(558, 19080, 19, 80); -INSERT INTO chapter VALUES(559, 19081, 19, 81); -INSERT INTO chapter VALUES(560, 19082, 19, 82); -INSERT INTO chapter VALUES(561, 19083, 19, 83); -INSERT INTO chapter VALUES(562, 19084, 19, 84); -INSERT INTO chapter VALUES(563, 19085, 19, 85); -INSERT INTO chapter VALUES(564, 19086, 19, 86); -INSERT INTO chapter VALUES(565, 19087, 19, 87); -INSERT INTO chapter VALUES(566, 19088, 19, 88); -INSERT INTO chapter VALUES(567, 19089, 19, 89); -INSERT INTO chapter VALUES(568, 19090, 19, 90); -INSERT INTO chapter VALUES(569, 19091, 19, 91); -INSERT INTO chapter VALUES(570, 19092, 19, 92); -INSERT INTO chapter VALUES(571, 19093, 19, 93); -INSERT INTO chapter VALUES(572, 19094, 19, 94); -INSERT INTO chapter VALUES(573, 19095, 19, 95); -INSERT INTO chapter VALUES(574, 19096, 19, 96); -INSERT INTO chapter VALUES(575, 19097, 19, 97); -INSERT INTO chapter VALUES(576, 19098, 19, 98); -INSERT INTO chapter VALUES(577, 19099, 19, 99); -INSERT INTO chapter VALUES(578, 19100, 19, 100); -INSERT INTO chapter VALUES(579, 19101, 19, 101); -INSERT INTO chapter VALUES(580, 19102, 19, 102); -INSERT INTO chapter VALUES(581, 19103, 19, 103); -INSERT INTO chapter VALUES(582, 19104, 19, 104); -INSERT INTO chapter VALUES(583, 19105, 19, 105); -INSERT INTO chapter VALUES(584, 19106, 19, 106); -INSERT INTO chapter VALUES(585, 19107, 19, 107); -INSERT INTO chapter VALUES(586, 19108, 19, 108); -INSERT INTO chapter VALUES(587, 19109, 19, 109); -INSERT INTO chapter VALUES(588, 19110, 19, 110); -INSERT INTO chapter VALUES(589, 19111, 19, 111); -INSERT INTO chapter VALUES(590, 19112, 19, 112); -INSERT INTO chapter VALUES(591, 19113, 19, 113); -INSERT INTO chapter VALUES(592, 19114, 19, 114); -INSERT INTO chapter VALUES(593, 19115, 19, 115); -INSERT INTO chapter VALUES(594, 19116, 19, 116); -INSERT INTO chapter VALUES(595, 19117, 19, 117); -INSERT INTO chapter VALUES(596, 19118, 19, 118); -INSERT INTO chapter VALUES(597, 19119, 19, 119); -INSERT INTO chapter VALUES(598, 19120, 19, 120); -INSERT INTO chapter VALUES(599, 19121, 19, 121); -INSERT INTO chapter VALUES(600, 19122, 19, 122); -INSERT INTO chapter VALUES(601, 19123, 19, 123); -INSERT INTO chapter VALUES(602, 19124, 19, 124); -INSERT INTO chapter VALUES(603, 19125, 19, 125); -INSERT INTO chapter VALUES(604, 19126, 19, 126); -INSERT INTO chapter VALUES(605, 19127, 19, 127); -INSERT INTO chapter VALUES(606, 19128, 19, 128); -INSERT INTO chapter VALUES(607, 19129, 19, 129); -INSERT INTO chapter VALUES(608, 19130, 19, 130); -INSERT INTO chapter VALUES(609, 19131, 19, 131); -INSERT INTO chapter VALUES(610, 19132, 19, 132); -INSERT INTO chapter VALUES(611, 19133, 19, 133); -INSERT INTO chapter VALUES(612, 19134, 19, 134); -INSERT INTO chapter VALUES(613, 19135, 19, 135); -INSERT INTO chapter VALUES(614, 19136, 19, 136); -INSERT INTO chapter VALUES(615, 19137, 19, 137); -INSERT INTO chapter VALUES(616, 19138, 19, 138); -INSERT INTO chapter VALUES(617, 19139, 19, 139); -INSERT INTO chapter VALUES(618, 19140, 19, 140); -INSERT INTO chapter VALUES(619, 19141, 19, 141); -INSERT INTO chapter VALUES(620, 19142, 19, 142); -INSERT INTO chapter VALUES(621, 19143, 19, 143); -INSERT INTO chapter VALUES(622, 19144, 19, 144); -INSERT INTO chapter VALUES(623, 19145, 19, 145); -INSERT INTO chapter VALUES(624, 19146, 19, 146); -INSERT INTO chapter VALUES(625, 19147, 19, 147); -INSERT INTO chapter VALUES(626, 19148, 19, 148); -INSERT INTO chapter VALUES(627, 19149, 19, 149); -INSERT INTO chapter VALUES(628, 19150, 19, 150); -INSERT INTO chapter VALUES(629, 20001, 20, 1); -INSERT INTO chapter VALUES(630, 20002, 20, 2); -INSERT INTO chapter VALUES(631, 20003, 20, 3); -INSERT INTO chapter VALUES(632, 20004, 20, 4); -INSERT INTO chapter VALUES(633, 20005, 20, 5); -INSERT INTO chapter VALUES(634, 20006, 20, 6); -INSERT INTO chapter VALUES(635, 20007, 20, 7); -INSERT INTO chapter VALUES(636, 20008, 20, 8); -INSERT INTO chapter VALUES(637, 20009, 20, 9); -INSERT INTO chapter VALUES(638, 20010, 20, 10); -INSERT INTO chapter VALUES(639, 20011, 20, 11); -INSERT INTO chapter VALUES(640, 20012, 20, 12); -INSERT INTO chapter VALUES(641, 20013, 20, 13); -INSERT INTO chapter VALUES(642, 20014, 20, 14); -INSERT INTO chapter VALUES(643, 20015, 20, 15); -INSERT INTO chapter VALUES(644, 20016, 20, 16); -INSERT INTO chapter VALUES(645, 20017, 20, 17); -INSERT INTO chapter VALUES(646, 20018, 20, 18); -INSERT INTO chapter VALUES(647, 20019, 20, 19); -INSERT INTO chapter VALUES(648, 20020, 20, 20); -INSERT INTO chapter VALUES(649, 20021, 20, 21); -INSERT INTO chapter VALUES(650, 20022, 20, 22); -INSERT INTO chapter VALUES(651, 20023, 20, 23); -INSERT INTO chapter VALUES(652, 20024, 20, 24); -INSERT INTO chapter VALUES(653, 20025, 20, 25); -INSERT INTO chapter VALUES(654, 20026, 20, 26); -INSERT INTO chapter VALUES(655, 20027, 20, 27); -INSERT INTO chapter VALUES(656, 20028, 20, 28); -INSERT INTO chapter VALUES(657, 20029, 20, 29); -INSERT INTO chapter VALUES(658, 20030, 20, 30); -INSERT INTO chapter VALUES(659, 20031, 20, 31); -INSERT INTO chapter VALUES(660, 21001, 21, 1); -INSERT INTO chapter VALUES(661, 21002, 21, 2); -INSERT INTO chapter VALUES(662, 21003, 21, 3); -INSERT INTO chapter VALUES(663, 21004, 21, 4); -INSERT INTO chapter VALUES(664, 21005, 21, 5); -INSERT INTO chapter VALUES(665, 21006, 21, 6); -INSERT INTO chapter VALUES(666, 21007, 21, 7); -INSERT INTO chapter VALUES(667, 21008, 21, 8); -INSERT INTO chapter VALUES(668, 21009, 21, 9); -INSERT INTO chapter VALUES(669, 21010, 21, 10); -INSERT INTO chapter VALUES(670, 21011, 21, 11); -INSERT INTO chapter VALUES(671, 21012, 21, 12); -INSERT INTO chapter VALUES(672, 22001, 22, 1); -INSERT INTO chapter VALUES(673, 22002, 22, 2); -INSERT INTO chapter VALUES(674, 22003, 22, 3); -INSERT INTO chapter VALUES(675, 22004, 22, 4); -INSERT INTO chapter VALUES(676, 22005, 22, 5); -INSERT INTO chapter VALUES(677, 22006, 22, 6); -INSERT INTO chapter VALUES(678, 22007, 22, 7); -INSERT INTO chapter VALUES(679, 22008, 22, 8); -INSERT INTO chapter VALUES(680, 23001, 23, 1); -INSERT INTO chapter VALUES(681, 23002, 23, 2); -INSERT INTO chapter VALUES(682, 23003, 23, 3); -INSERT INTO chapter VALUES(683, 23004, 23, 4); -INSERT INTO chapter VALUES(684, 23005, 23, 5); -INSERT INTO chapter VALUES(685, 23006, 23, 6); -INSERT INTO chapter VALUES(686, 23007, 23, 7); -INSERT INTO chapter VALUES(687, 23008, 23, 8); -INSERT INTO chapter VALUES(688, 23009, 23, 9); -INSERT INTO chapter VALUES(689, 23010, 23, 10); -INSERT INTO chapter VALUES(690, 23011, 23, 11); -INSERT INTO chapter VALUES(691, 23012, 23, 12); -INSERT INTO chapter VALUES(692, 23013, 23, 13); -INSERT INTO chapter VALUES(693, 23014, 23, 14); -INSERT INTO chapter VALUES(694, 23015, 23, 15); -INSERT INTO chapter VALUES(695, 23016, 23, 16); -INSERT INTO chapter VALUES(696, 23017, 23, 17); -INSERT INTO chapter VALUES(697, 23018, 23, 18); -INSERT INTO chapter VALUES(698, 23019, 23, 19); -INSERT INTO chapter VALUES(699, 23020, 23, 20); -INSERT INTO chapter VALUES(700, 23021, 23, 21); -INSERT INTO chapter VALUES(701, 23022, 23, 22); -INSERT INTO chapter VALUES(702, 23023, 23, 23); -INSERT INTO chapter VALUES(703, 23024, 23, 24); -INSERT INTO chapter VALUES(704, 23025, 23, 25); -INSERT INTO chapter VALUES(705, 23026, 23, 26); -INSERT INTO chapter VALUES(706, 23027, 23, 27); -INSERT INTO chapter VALUES(707, 23028, 23, 28); -INSERT INTO chapter VALUES(708, 23029, 23, 29); -INSERT INTO chapter VALUES(709, 23030, 23, 30); -INSERT INTO chapter VALUES(710, 23031, 23, 31); -INSERT INTO chapter VALUES(711, 23032, 23, 32); -INSERT INTO chapter VALUES(712, 23033, 23, 33); -INSERT INTO chapter VALUES(713, 23034, 23, 34); -INSERT INTO chapter VALUES(714, 23035, 23, 35); -INSERT INTO chapter VALUES(715, 23036, 23, 36); -INSERT INTO chapter VALUES(716, 23037, 23, 37); -INSERT INTO chapter VALUES(717, 23038, 23, 38); -INSERT INTO chapter VALUES(718, 23039, 23, 39); -INSERT INTO chapter VALUES(719, 23040, 23, 40); -INSERT INTO chapter VALUES(720, 23041, 23, 41); -INSERT INTO chapter VALUES(721, 23042, 23, 42); -INSERT INTO chapter VALUES(722, 23043, 23, 43); -INSERT INTO chapter VALUES(723, 23044, 23, 44); -INSERT INTO chapter VALUES(724, 23045, 23, 45); -INSERT INTO chapter VALUES(725, 23046, 23, 46); -INSERT INTO chapter VALUES(726, 23047, 23, 47); -INSERT INTO chapter VALUES(727, 23048, 23, 48); -INSERT INTO chapter VALUES(728, 23049, 23, 49); -INSERT INTO chapter VALUES(729, 23050, 23, 50); -INSERT INTO chapter VALUES(730, 23051, 23, 51); -INSERT INTO chapter VALUES(731, 23052, 23, 52); -INSERT INTO chapter VALUES(732, 23053, 23, 53); -INSERT INTO chapter VALUES(733, 23054, 23, 54); -INSERT INTO chapter VALUES(734, 23055, 23, 55); -INSERT INTO chapter VALUES(735, 23056, 23, 56); -INSERT INTO chapter VALUES(736, 23057, 23, 57); -INSERT INTO chapter VALUES(737, 23058, 23, 58); -INSERT INTO chapter VALUES(738, 23059, 23, 59); -INSERT INTO chapter VALUES(739, 23060, 23, 60); -INSERT INTO chapter VALUES(740, 23061, 23, 61); -INSERT INTO chapter VALUES(741, 23062, 23, 62); -INSERT INTO chapter VALUES(742, 23063, 23, 63); -INSERT INTO chapter VALUES(743, 23064, 23, 64); -INSERT INTO chapter VALUES(744, 23065, 23, 65); -INSERT INTO chapter VALUES(745, 23066, 23, 66); -INSERT INTO chapter VALUES(746, 24001, 24, 1); -INSERT INTO chapter VALUES(747, 24002, 24, 2); -INSERT INTO chapter VALUES(748, 24003, 24, 3); -INSERT INTO chapter VALUES(749, 24004, 24, 4); -INSERT INTO chapter VALUES(750, 24005, 24, 5); -INSERT INTO chapter VALUES(751, 24006, 24, 6); -INSERT INTO chapter VALUES(752, 24007, 24, 7); -INSERT INTO chapter VALUES(753, 24008, 24, 8); -INSERT INTO chapter VALUES(754, 24009, 24, 9); -INSERT INTO chapter VALUES(755, 24010, 24, 10); -INSERT INTO chapter VALUES(756, 24011, 24, 11); -INSERT INTO chapter VALUES(757, 24012, 24, 12); -INSERT INTO chapter VALUES(758, 24013, 24, 13); -INSERT INTO chapter VALUES(759, 24014, 24, 14); -INSERT INTO chapter VALUES(760, 24015, 24, 15); -INSERT INTO chapter VALUES(761, 24016, 24, 16); -INSERT INTO chapter VALUES(762, 24017, 24, 17); -INSERT INTO chapter VALUES(763, 24018, 24, 18); -INSERT INTO chapter VALUES(764, 24019, 24, 19); -INSERT INTO chapter VALUES(765, 24020, 24, 20); -INSERT INTO chapter VALUES(766, 24021, 24, 21); -INSERT INTO chapter VALUES(767, 24022, 24, 22); -INSERT INTO chapter VALUES(768, 24023, 24, 23); -INSERT INTO chapter VALUES(769, 24024, 24, 24); -INSERT INTO chapter VALUES(770, 24025, 24, 25); -INSERT INTO chapter VALUES(771, 24026, 24, 26); -INSERT INTO chapter VALUES(772, 24027, 24, 27); -INSERT INTO chapter VALUES(773, 24028, 24, 28); -INSERT INTO chapter VALUES(774, 24029, 24, 29); -INSERT INTO chapter VALUES(775, 24030, 24, 30); -INSERT INTO chapter VALUES(776, 24031, 24, 31); -INSERT INTO chapter VALUES(777, 24032, 24, 32); -INSERT INTO chapter VALUES(778, 24033, 24, 33); -INSERT INTO chapter VALUES(779, 24034, 24, 34); -INSERT INTO chapter VALUES(780, 24035, 24, 35); -INSERT INTO chapter VALUES(781, 24036, 24, 36); -INSERT INTO chapter VALUES(782, 24037, 24, 37); -INSERT INTO chapter VALUES(783, 24038, 24, 38); -INSERT INTO chapter VALUES(784, 24039, 24, 39); -INSERT INTO chapter VALUES(785, 24040, 24, 40); -INSERT INTO chapter VALUES(786, 24041, 24, 41); -INSERT INTO chapter VALUES(787, 24042, 24, 42); -INSERT INTO chapter VALUES(788, 24043, 24, 43); -INSERT INTO chapter VALUES(789, 24044, 24, 44); -INSERT INTO chapter VALUES(790, 24045, 24, 45); -INSERT INTO chapter VALUES(791, 24046, 24, 46); -INSERT INTO chapter VALUES(792, 24047, 24, 47); -INSERT INTO chapter VALUES(793, 24048, 24, 48); -INSERT INTO chapter VALUES(794, 24049, 24, 49); -INSERT INTO chapter VALUES(795, 24050, 24, 50); -INSERT INTO chapter VALUES(796, 24051, 24, 51); -INSERT INTO chapter VALUES(797, 24052, 24, 52); -INSERT INTO chapter VALUES(798, 25001, 25, 1); -INSERT INTO chapter VALUES(799, 25002, 25, 2); -INSERT INTO chapter VALUES(800, 25003, 25, 3); -INSERT INTO chapter VALUES(801, 25004, 25, 4); -INSERT INTO chapter VALUES(802, 25005, 25, 5); -INSERT INTO chapter VALUES(803, 26001, 26, 1); -INSERT INTO chapter VALUES(804, 26002, 26, 2); -INSERT INTO chapter VALUES(805, 26003, 26, 3); -INSERT INTO chapter VALUES(806, 26004, 26, 4); -INSERT INTO chapter VALUES(807, 26005, 26, 5); -INSERT INTO chapter VALUES(808, 26006, 26, 6); -INSERT INTO chapter VALUES(809, 26007, 26, 7); -INSERT INTO chapter VALUES(810, 26008, 26, 8); -INSERT INTO chapter VALUES(811, 26009, 26, 9); -INSERT INTO chapter VALUES(812, 26010, 26, 10); -INSERT INTO chapter VALUES(813, 26011, 26, 11); -INSERT INTO chapter VALUES(814, 26012, 26, 12); -INSERT INTO chapter VALUES(815, 26013, 26, 13); -INSERT INTO chapter VALUES(816, 26014, 26, 14); -INSERT INTO chapter VALUES(817, 26015, 26, 15); -INSERT INTO chapter VALUES(818, 26016, 26, 16); -INSERT INTO chapter VALUES(819, 26017, 26, 17); -INSERT INTO chapter VALUES(820, 26018, 26, 18); -INSERT INTO chapter VALUES(821, 26019, 26, 19); -INSERT INTO chapter VALUES(822, 26020, 26, 20); -INSERT INTO chapter VALUES(823, 26021, 26, 21); -INSERT INTO chapter VALUES(824, 26022, 26, 22); -INSERT INTO chapter VALUES(825, 26023, 26, 23); -INSERT INTO chapter VALUES(826, 26024, 26, 24); -INSERT INTO chapter VALUES(827, 26025, 26, 25); -INSERT INTO chapter VALUES(828, 26026, 26, 26); -INSERT INTO chapter VALUES(829, 26027, 26, 27); -INSERT INTO chapter VALUES(830, 26028, 26, 28); -INSERT INTO chapter VALUES(831, 26029, 26, 29); -INSERT INTO chapter VALUES(832, 26030, 26, 30); -INSERT INTO chapter VALUES(833, 26031, 26, 31); -INSERT INTO chapter VALUES(834, 26032, 26, 32); -INSERT INTO chapter VALUES(835, 26033, 26, 33); -INSERT INTO chapter VALUES(836, 26034, 26, 34); -INSERT INTO chapter VALUES(837, 26035, 26, 35); -INSERT INTO chapter VALUES(838, 26036, 26, 36); -INSERT INTO chapter VALUES(839, 26037, 26, 37); -INSERT INTO chapter VALUES(840, 26038, 26, 38); -INSERT INTO chapter VALUES(841, 26039, 26, 39); -INSERT INTO chapter VALUES(842, 26040, 26, 40); -INSERT INTO chapter VALUES(843, 26041, 26, 41); -INSERT INTO chapter VALUES(844, 26042, 26, 42); -INSERT INTO chapter VALUES(845, 26043, 26, 43); -INSERT INTO chapter VALUES(846, 26044, 26, 44); -INSERT INTO chapter VALUES(847, 26045, 26, 45); -INSERT INTO chapter VALUES(848, 26046, 26, 46); -INSERT INTO chapter VALUES(849, 26047, 26, 47); -INSERT INTO chapter VALUES(850, 26048, 26, 48); -INSERT INTO chapter VALUES(851, 27001, 27, 1); -INSERT INTO chapter VALUES(852, 27002, 27, 2); -INSERT INTO chapter VALUES(853, 27003, 27, 3); -INSERT INTO chapter VALUES(854, 27004, 27, 4); -INSERT INTO chapter VALUES(855, 27005, 27, 5); -INSERT INTO chapter VALUES(856, 27006, 27, 6); -INSERT INTO chapter VALUES(857, 27007, 27, 7); -INSERT INTO chapter VALUES(858, 27008, 27, 8); -INSERT INTO chapter VALUES(859, 27009, 27, 9); -INSERT INTO chapter VALUES(860, 27010, 27, 10); -INSERT INTO chapter VALUES(861, 27011, 27, 11); -INSERT INTO chapter VALUES(862, 27012, 27, 12); -INSERT INTO chapter VALUES(863, 28001, 28, 1); -INSERT INTO chapter VALUES(864, 28002, 28, 2); -INSERT INTO chapter VALUES(865, 28003, 28, 3); -INSERT INTO chapter VALUES(866, 28004, 28, 4); -INSERT INTO chapter VALUES(867, 28005, 28, 5); -INSERT INTO chapter VALUES(868, 28006, 28, 6); -INSERT INTO chapter VALUES(869, 28007, 28, 7); -INSERT INTO chapter VALUES(870, 28008, 28, 8); -INSERT INTO chapter VALUES(871, 28009, 28, 9); -INSERT INTO chapter VALUES(872, 28010, 28, 10); -INSERT INTO chapter VALUES(873, 28011, 28, 11); -INSERT INTO chapter VALUES(874, 28012, 28, 12); -INSERT INTO chapter VALUES(875, 28013, 28, 13); -INSERT INTO chapter VALUES(876, 28014, 28, 14); -INSERT INTO chapter VALUES(877, 29001, 29, 1); -INSERT INTO chapter VALUES(878, 29002, 29, 2); -INSERT INTO chapter VALUES(879, 29003, 29, 3); -INSERT INTO chapter VALUES(880, 30001, 30, 1); -INSERT INTO chapter VALUES(881, 30002, 30, 2); -INSERT INTO chapter VALUES(882, 30003, 30, 3); -INSERT INTO chapter VALUES(883, 30004, 30, 4); -INSERT INTO chapter VALUES(884, 30005, 30, 5); -INSERT INTO chapter VALUES(885, 30006, 30, 6); -INSERT INTO chapter VALUES(886, 30007, 30, 7); -INSERT INTO chapter VALUES(887, 30008, 30, 8); -INSERT INTO chapter VALUES(888, 30009, 30, 9); -INSERT INTO chapter VALUES(889, 31001, 31, 1); -INSERT INTO chapter VALUES(890, 32001, 32, 1); -INSERT INTO chapter VALUES(891, 32002, 32, 2); -INSERT INTO chapter VALUES(892, 32003, 32, 3); -INSERT INTO chapter VALUES(893, 32004, 32, 4); -INSERT INTO chapter VALUES(894, 33001, 33, 1); -INSERT INTO chapter VALUES(895, 33002, 33, 2); -INSERT INTO chapter VALUES(896, 33003, 33, 3); -INSERT INTO chapter VALUES(897, 33004, 33, 4); -INSERT INTO chapter VALUES(898, 33005, 33, 5); -INSERT INTO chapter VALUES(899, 33006, 33, 6); -INSERT INTO chapter VALUES(900, 33007, 33, 7); -INSERT INTO chapter VALUES(901, 34001, 34, 1); -INSERT INTO chapter VALUES(902, 34002, 34, 2); -INSERT INTO chapter VALUES(903, 34003, 34, 3); -INSERT INTO chapter VALUES(904, 35001, 35, 1); -INSERT INTO chapter VALUES(905, 35002, 35, 2); -INSERT INTO chapter VALUES(906, 35003, 35, 3); -INSERT INTO chapter VALUES(907, 36001, 36, 1); -INSERT INTO chapter VALUES(908, 36002, 36, 2); -INSERT INTO chapter VALUES(909, 36003, 36, 3); -INSERT INTO chapter VALUES(910, 37001, 37, 1); -INSERT INTO chapter VALUES(911, 37002, 37, 2); -INSERT INTO chapter VALUES(912, 38001, 38, 1); -INSERT INTO chapter VALUES(913, 38002, 38, 2); -INSERT INTO chapter VALUES(914, 38003, 38, 3); -INSERT INTO chapter VALUES(915, 38004, 38, 4); -INSERT INTO chapter VALUES(916, 38005, 38, 5); -INSERT INTO chapter VALUES(917, 38006, 38, 6); -INSERT INTO chapter VALUES(918, 38007, 38, 7); -INSERT INTO chapter VALUES(919, 38008, 38, 8); -INSERT INTO chapter VALUES(920, 38009, 38, 9); -INSERT INTO chapter VALUES(921, 38010, 38, 10); -INSERT INTO chapter VALUES(922, 38011, 38, 11); -INSERT INTO chapter VALUES(923, 38012, 38, 12); -INSERT INTO chapter VALUES(924, 38013, 38, 13); -INSERT INTO chapter VALUES(925, 38014, 38, 14); -INSERT INTO chapter VALUES(926, 39001, 39, 1); -INSERT INTO chapter VALUES(927, 39002, 39, 2); -INSERT INTO chapter VALUES(928, 39003, 39, 3); -INSERT INTO chapter VALUES(929, 39004, 39, 4); -INSERT INTO chapter VALUES(930, 40001, 40, 1); -INSERT INTO chapter VALUES(931, 40002, 40, 2); -INSERT INTO chapter VALUES(932, 40003, 40, 3); -INSERT INTO chapter VALUES(933, 40004, 40, 4); -INSERT INTO chapter VALUES(934, 40005, 40, 5); -INSERT INTO chapter VALUES(935, 40006, 40, 6); -INSERT INTO chapter VALUES(936, 40007, 40, 7); -INSERT INTO chapter VALUES(937, 40008, 40, 8); -INSERT INTO chapter VALUES(938, 40009, 40, 9); -INSERT INTO chapter VALUES(939, 40010, 40, 10); -INSERT INTO chapter VALUES(940, 40011, 40, 11); -INSERT INTO chapter VALUES(941, 40012, 40, 12); -INSERT INTO chapter VALUES(942, 40013, 40, 13); -INSERT INTO chapter VALUES(943, 40014, 40, 14); -INSERT INTO chapter VALUES(944, 40015, 40, 15); -INSERT INTO chapter VALUES(945, 40016, 40, 16); -INSERT INTO chapter VALUES(946, 40017, 40, 17); -INSERT INTO chapter VALUES(947, 40018, 40, 18); -INSERT INTO chapter VALUES(948, 40019, 40, 19); -INSERT INTO chapter VALUES(949, 40020, 40, 20); -INSERT INTO chapter VALUES(950, 40021, 40, 21); -INSERT INTO chapter VALUES(951, 40022, 40, 22); -INSERT INTO chapter VALUES(952, 40023, 40, 23); -INSERT INTO chapter VALUES(953, 40024, 40, 24); -INSERT INTO chapter VALUES(954, 40025, 40, 25); -INSERT INTO chapter VALUES(955, 40026, 40, 26); -INSERT INTO chapter VALUES(956, 40027, 40, 27); -INSERT INTO chapter VALUES(957, 40028, 40, 28); -INSERT INTO chapter VALUES(958, 41001, 41, 1); -INSERT INTO chapter VALUES(959, 41002, 41, 2); -INSERT INTO chapter VALUES(960, 41003, 41, 3); -INSERT INTO chapter VALUES(961, 41004, 41, 4); -INSERT INTO chapter VALUES(962, 41005, 41, 5); -INSERT INTO chapter VALUES(963, 41006, 41, 6); -INSERT INTO chapter VALUES(964, 41007, 41, 7); -INSERT INTO chapter VALUES(965, 41008, 41, 8); -INSERT INTO chapter VALUES(966, 41009, 41, 9); -INSERT INTO chapter VALUES(967, 41010, 41, 10); -INSERT INTO chapter VALUES(968, 41011, 41, 11); -INSERT INTO chapter VALUES(969, 41012, 41, 12); -INSERT INTO chapter VALUES(970, 41013, 41, 13); -INSERT INTO chapter VALUES(971, 41014, 41, 14); -INSERT INTO chapter VALUES(972, 41015, 41, 15); -INSERT INTO chapter VALUES(973, 41016, 41, 16); -INSERT INTO chapter VALUES(974, 42001, 42, 1); -INSERT INTO chapter VALUES(975, 42002, 42, 2); -INSERT INTO chapter VALUES(976, 42003, 42, 3); -INSERT INTO chapter VALUES(977, 42004, 42, 4); -INSERT INTO chapter VALUES(978, 42005, 42, 5); -INSERT INTO chapter VALUES(979, 42006, 42, 6); -INSERT INTO chapter VALUES(980, 42007, 42, 7); -INSERT INTO chapter VALUES(981, 42008, 42, 8); -INSERT INTO chapter VALUES(982, 42009, 42, 9); -INSERT INTO chapter VALUES(983, 42010, 42, 10); -INSERT INTO chapter VALUES(984, 42011, 42, 11); -INSERT INTO chapter VALUES(985, 42012, 42, 12); -INSERT INTO chapter VALUES(986, 42013, 42, 13); -INSERT INTO chapter VALUES(987, 42014, 42, 14); -INSERT INTO chapter VALUES(988, 42015, 42, 15); -INSERT INTO chapter VALUES(989, 42016, 42, 16); -INSERT INTO chapter VALUES(990, 42017, 42, 17); -INSERT INTO chapter VALUES(991, 42018, 42, 18); -INSERT INTO chapter VALUES(992, 42019, 42, 19); -INSERT INTO chapter VALUES(993, 42020, 42, 20); -INSERT INTO chapter VALUES(994, 42021, 42, 21); -INSERT INTO chapter VALUES(995, 42022, 42, 22); -INSERT INTO chapter VALUES(996, 42023, 42, 23); -INSERT INTO chapter VALUES(997, 42024, 42, 24); -INSERT INTO chapter VALUES(998, 43001, 43, 1); -INSERT INTO chapter VALUES(999, 43002, 43, 2); -INSERT INTO chapter VALUES(1000, 43003, 43, 3); -INSERT INTO chapter VALUES(1001, 43004, 43, 4); -INSERT INTO chapter VALUES(1002, 43005, 43, 5); -INSERT INTO chapter VALUES(1003, 43006, 43, 6); -INSERT INTO chapter VALUES(1004, 43007, 43, 7); -INSERT INTO chapter VALUES(1005, 43008, 43, 8); -INSERT INTO chapter VALUES(1006, 43009, 43, 9); -INSERT INTO chapter VALUES(1007, 43010, 43, 10); -INSERT INTO chapter VALUES(1008, 43011, 43, 11); -INSERT INTO chapter VALUES(1009, 43012, 43, 12); -INSERT INTO chapter VALUES(1010, 43013, 43, 13); -INSERT INTO chapter VALUES(1011, 43014, 43, 14); -INSERT INTO chapter VALUES(1012, 43015, 43, 15); -INSERT INTO chapter VALUES(1013, 43016, 43, 16); -INSERT INTO chapter VALUES(1014, 43017, 43, 17); -INSERT INTO chapter VALUES(1015, 43018, 43, 18); -INSERT INTO chapter VALUES(1016, 43019, 43, 19); -INSERT INTO chapter VALUES(1017, 43020, 43, 20); -INSERT INTO chapter VALUES(1018, 43021, 43, 21); -INSERT INTO chapter VALUES(1019, 44001, 44, 1); -INSERT INTO chapter VALUES(1020, 44002, 44, 2); -INSERT INTO chapter VALUES(1021, 44003, 44, 3); -INSERT INTO chapter VALUES(1022, 44004, 44, 4); -INSERT INTO chapter VALUES(1023, 44005, 44, 5); -INSERT INTO chapter VALUES(1024, 44006, 44, 6); -INSERT INTO chapter VALUES(1025, 44007, 44, 7); -INSERT INTO chapter VALUES(1026, 44008, 44, 8); -INSERT INTO chapter VALUES(1027, 44009, 44, 9); -INSERT INTO chapter VALUES(1028, 44010, 44, 10); -INSERT INTO chapter VALUES(1029, 44011, 44, 11); -INSERT INTO chapter VALUES(1030, 44012, 44, 12); -INSERT INTO chapter VALUES(1031, 44013, 44, 13); -INSERT INTO chapter VALUES(1032, 44014, 44, 14); -INSERT INTO chapter VALUES(1033, 44015, 44, 15); -INSERT INTO chapter VALUES(1034, 44016, 44, 16); -INSERT INTO chapter VALUES(1035, 44017, 44, 17); -INSERT INTO chapter VALUES(1036, 44018, 44, 18); -INSERT INTO chapter VALUES(1037, 44019, 44, 19); -INSERT INTO chapter VALUES(1038, 44020, 44, 20); -INSERT INTO chapter VALUES(1039, 44021, 44, 21); -INSERT INTO chapter VALUES(1040, 44022, 44, 22); -INSERT INTO chapter VALUES(1041, 44023, 44, 23); -INSERT INTO chapter VALUES(1042, 44024, 44, 24); -INSERT INTO chapter VALUES(1043, 44025, 44, 25); -INSERT INTO chapter VALUES(1044, 44026, 44, 26); -INSERT INTO chapter VALUES(1045, 44027, 44, 27); -INSERT INTO chapter VALUES(1046, 44028, 44, 28); -INSERT INTO chapter VALUES(1047, 45001, 45, 1); -INSERT INTO chapter VALUES(1048, 45002, 45, 2); -INSERT INTO chapter VALUES(1049, 45003, 45, 3); -INSERT INTO chapter VALUES(1050, 45004, 45, 4); -INSERT INTO chapter VALUES(1051, 45005, 45, 5); -INSERT INTO chapter VALUES(1052, 45006, 45, 6); -INSERT INTO chapter VALUES(1053, 45007, 45, 7); -INSERT INTO chapter VALUES(1054, 45008, 45, 8); -INSERT INTO chapter VALUES(1055, 45009, 45, 9); -INSERT INTO chapter VALUES(1056, 45010, 45, 10); -INSERT INTO chapter VALUES(1057, 45011, 45, 11); -INSERT INTO chapter VALUES(1058, 45012, 45, 12); -INSERT INTO chapter VALUES(1059, 45013, 45, 13); -INSERT INTO chapter VALUES(1060, 45014, 45, 14); -INSERT INTO chapter VALUES(1061, 45015, 45, 15); -INSERT INTO chapter VALUES(1062, 45016, 45, 16); -INSERT INTO chapter VALUES(1063, 46001, 46, 1); -INSERT INTO chapter VALUES(1064, 46002, 46, 2); -INSERT INTO chapter VALUES(1065, 46003, 46, 3); -INSERT INTO chapter VALUES(1066, 46004, 46, 4); -INSERT INTO chapter VALUES(1067, 46005, 46, 5); -INSERT INTO chapter VALUES(1068, 46006, 46, 6); -INSERT INTO chapter VALUES(1069, 46007, 46, 7); -INSERT INTO chapter VALUES(1070, 46008, 46, 8); -INSERT INTO chapter VALUES(1071, 46009, 46, 9); -INSERT INTO chapter VALUES(1072, 46010, 46, 10); -INSERT INTO chapter VALUES(1073, 46011, 46, 11); -INSERT INTO chapter VALUES(1074, 46012, 46, 12); -INSERT INTO chapter VALUES(1075, 46013, 46, 13); -INSERT INTO chapter VALUES(1076, 46014, 46, 14); -INSERT INTO chapter VALUES(1077, 46015, 46, 15); -INSERT INTO chapter VALUES(1078, 46016, 46, 16); -INSERT INTO chapter VALUES(1079, 47001, 47, 1); -INSERT INTO chapter VALUES(1080, 47002, 47, 2); -INSERT INTO chapter VALUES(1081, 47003, 47, 3); -INSERT INTO chapter VALUES(1082, 47004, 47, 4); -INSERT INTO chapter VALUES(1083, 47005, 47, 5); -INSERT INTO chapter VALUES(1084, 47006, 47, 6); -INSERT INTO chapter VALUES(1085, 47007, 47, 7); -INSERT INTO chapter VALUES(1086, 47008, 47, 8); -INSERT INTO chapter VALUES(1087, 47009, 47, 9); -INSERT INTO chapter VALUES(1088, 47010, 47, 10); -INSERT INTO chapter VALUES(1089, 47011, 47, 11); -INSERT INTO chapter VALUES(1090, 47012, 47, 12); -INSERT INTO chapter VALUES(1091, 47013, 47, 13); -INSERT INTO chapter VALUES(1092, 48001, 48, 1); -INSERT INTO chapter VALUES(1093, 48002, 48, 2); -INSERT INTO chapter VALUES(1094, 48003, 48, 3); -INSERT INTO chapter VALUES(1095, 48004, 48, 4); -INSERT INTO chapter VALUES(1096, 48005, 48, 5); -INSERT INTO chapter VALUES(1097, 48006, 48, 6); -INSERT INTO chapter VALUES(1098, 49001, 49, 1); -INSERT INTO chapter VALUES(1099, 49002, 49, 2); -INSERT INTO chapter VALUES(1100, 49003, 49, 3); -INSERT INTO chapter VALUES(1101, 49004, 49, 4); -INSERT INTO chapter VALUES(1102, 49005, 49, 5); -INSERT INTO chapter VALUES(1103, 49006, 49, 6); -INSERT INTO chapter VALUES(1104, 50001, 50, 1); -INSERT INTO chapter VALUES(1105, 50002, 50, 2); -INSERT INTO chapter VALUES(1106, 50003, 50, 3); -INSERT INTO chapter VALUES(1107, 50004, 50, 4); -INSERT INTO chapter VALUES(1108, 51001, 51, 1); -INSERT INTO chapter VALUES(1109, 51002, 51, 2); -INSERT INTO chapter VALUES(1110, 51003, 51, 3); -INSERT INTO chapter VALUES(1111, 51004, 51, 4); -INSERT INTO chapter VALUES(1112, 52001, 52, 1); -INSERT INTO chapter VALUES(1113, 52002, 52, 2); -INSERT INTO chapter VALUES(1114, 52003, 52, 3); -INSERT INTO chapter VALUES(1115, 52004, 52, 4); -INSERT INTO chapter VALUES(1116, 52005, 52, 5); -INSERT INTO chapter VALUES(1117, 53001, 53, 1); -INSERT INTO chapter VALUES(1118, 53002, 53, 2); -INSERT INTO chapter VALUES(1119, 53003, 53, 3); -INSERT INTO chapter VALUES(1120, 54001, 54, 1); -INSERT INTO chapter VALUES(1121, 54002, 54, 2); -INSERT INTO chapter VALUES(1122, 54003, 54, 3); -INSERT INTO chapter VALUES(1123, 54004, 54, 4); -INSERT INTO chapter VALUES(1124, 54005, 54, 5); -INSERT INTO chapter VALUES(1125, 54006, 54, 6); -INSERT INTO chapter VALUES(1126, 55001, 55, 1); -INSERT INTO chapter VALUES(1127, 55002, 55, 2); -INSERT INTO chapter VALUES(1128, 55003, 55, 3); -INSERT INTO chapter VALUES(1129, 55004, 55, 4); -INSERT INTO chapter VALUES(1130, 56001, 56, 1); -INSERT INTO chapter VALUES(1131, 56002, 56, 2); -INSERT INTO chapter VALUES(1132, 56003, 56, 3); -INSERT INTO chapter VALUES(1133, 57001, 57, 1); -INSERT INTO chapter VALUES(1134, 58001, 58, 1); -INSERT INTO chapter VALUES(1135, 58002, 58, 2); -INSERT INTO chapter VALUES(1136, 58003, 58, 3); -INSERT INTO chapter VALUES(1137, 58004, 58, 4); -INSERT INTO chapter VALUES(1138, 58005, 58, 5); -INSERT INTO chapter VALUES(1139, 58006, 58, 6); -INSERT INTO chapter VALUES(1140, 58007, 58, 7); -INSERT INTO chapter VALUES(1141, 58008, 58, 8); -INSERT INTO chapter VALUES(1142, 58009, 58, 9); -INSERT INTO chapter VALUES(1143, 58010, 58, 10); -INSERT INTO chapter VALUES(1144, 58011, 58, 11); -INSERT INTO chapter VALUES(1145, 58012, 58, 12); -INSERT INTO chapter VALUES(1146, 58013, 58, 13); -INSERT INTO chapter VALUES(1147, 59001, 59, 1); -INSERT INTO chapter VALUES(1148, 59002, 59, 2); -INSERT INTO chapter VALUES(1149, 59003, 59, 3); -INSERT INTO chapter VALUES(1150, 59004, 59, 4); -INSERT INTO chapter VALUES(1151, 59005, 59, 5); -INSERT INTO chapter VALUES(1152, 60001, 60, 1); -INSERT INTO chapter VALUES(1153, 60002, 60, 2); -INSERT INTO chapter VALUES(1154, 60003, 60, 3); -INSERT INTO chapter VALUES(1155, 60004, 60, 4); -INSERT INTO chapter VALUES(1156, 60005, 60, 5); -INSERT INTO chapter VALUES(1157, 61001, 61, 1); -INSERT INTO chapter VALUES(1158, 61002, 61, 2); -INSERT INTO chapter VALUES(1159, 61003, 61, 3); -INSERT INTO chapter VALUES(1160, 62001, 62, 1); -INSERT INTO chapter VALUES(1161, 62002, 62, 2); -INSERT INTO chapter VALUES(1162, 62003, 62, 3); -INSERT INTO chapter VALUES(1163, 62004, 62, 4); -INSERT INTO chapter VALUES(1164, 62005, 62, 5); -INSERT INTO chapter VALUES(1165, 63001, 63, 1); -INSERT INTO chapter VALUES(1166, 64001, 64, 1); -INSERT INTO chapter VALUES(1167, 65001, 65, 1); -INSERT INTO chapter VALUES(1168, 66001, 66, 1); -INSERT INTO chapter VALUES(1169, 66002, 66, 2); -INSERT INTO chapter VALUES(1170, 66003, 66, 3); -INSERT INTO chapter VALUES(1171, 66004, 66, 4); -INSERT INTO chapter VALUES(1172, 66005, 66, 5); -INSERT INTO chapter VALUES(1173, 66006, 66, 6); -INSERT INTO chapter VALUES(1174, 66007, 66, 7); -INSERT INTO chapter VALUES(1175, 66008, 66, 8); -INSERT INTO chapter VALUES(1176, 66009, 66, 9); -INSERT INTO chapter VALUES(1177, 66010, 66, 10); -INSERT INTO chapter VALUES(1178, 66011, 66, 11); -INSERT INTO chapter VALUES(1179, 66012, 66, 12); -INSERT INTO chapter VALUES(1180, 66013, 66, 13); -INSERT INTO chapter VALUES(1181, 66014, 66, 14); -INSERT INTO chapter VALUES(1182, 66015, 66, 15); -INSERT INTO chapter VALUES(1183, 66016, 66, 16); -INSERT INTO chapter VALUES(1184, 66017, 66, 17); -INSERT INTO chapter VALUES(1185, 66018, 66, 18); -INSERT INTO chapter VALUES(1186, 66019, 66, 19); -INSERT INTO chapter VALUES(1187, 66020, 66, 20); -INSERT INTO chapter VALUES(1188, 66021, 66, 21); -INSERT INTO chapter VALUES(1189, 66022, 66, 22); \ No newline at end of file diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Resources/ScrollMapperBible/readme.md b/iOS/ScrollMapperBible/ScrollMapperBible/Resources/ScrollMapperBible/readme.md deleted file mode 100644 index 73323834..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Resources/ScrollMapperBible/readme.md +++ /dev/null @@ -1,13 +0,0 @@ -# Source -[Bible-sqlite.db](https://github.com/scrollmapper/bible_databases.git) - -# Addition -The table "book_info" was added to database "bible-sqlite.db" with script "book_info.sql" -| order | title_short | title_full | abbreviation | category | otnt | chapters | -| ---:| --- | --- |:---:| --- |:---:| ---:| -| 1 | Genesis | The First Book of Moses Called Genesis | Gen. | Law | OT | 50 | -| ... | ... | ... | ... | ... | ... | ... | -| 39 | Malachi | The Book of Malachi | Mal. | Minor Prophets | OT | 4 | -| 40 | Matthew | The Gospel According to Matthew | Matt. | New Testament Narrative | NT | 28 | -| ... | ... | ... | ... | ... | ... | ... | -| 66 | Revelation | The Book of Revelation | Rev. | Apocalyptic | NT | 22 | diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Resources/ScrollMapperBible/tricks.md b/iOS/ScrollMapperBible/ScrollMapperBible/Resources/ScrollMapperBible/tricks.md deleted file mode 100644 index ccc27aaf..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Resources/ScrollMapperBible/tricks.md +++ /dev/null @@ -1,10 +0,0 @@ -# Tricks - -## 1 How to generate (dump) a table to a .sql script -In Mac Terminal, -``` -$ sqlite3 -> .output output.sql -> .dump -> .quit -``` diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/SceneDelegate.swift b/iOS/ScrollMapperBible/ScrollMapperBible/SceneDelegate.swift deleted file mode 100644 index 4d0bb059..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/SceneDelegate.swift +++ /dev/null @@ -1,64 +0,0 @@ -// -// SceneDelegate.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-01. -// Copyright © 2020 Kuang. All rights reserved. -// - -import UIKit -import SwiftUI - -class SceneDelegate: UIResponder, UIWindowSceneDelegate { - - var window: UIWindow? - - - func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { - // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. - // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. - // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). - - // Create the SwiftUI view that provides the window contents. - let mainView = ScrollMapperBibleMainView() - - // Use a UIHostingController as window root view controller. - if let windowScene = scene as? UIWindowScene { - let window = UIWindow(windowScene: windowScene) - window.rootViewController = UIHostingController(rootView: mainView) - self.window = window - window.makeKeyAndVisible() - } - } - - func sceneDidDisconnect(_ scene: UIScene) { - // Called as the scene is being released by the system. - // This occurs shortly after the scene enters the background, or when its session is discarded. - // Release any resources associated with this scene that can be re-created the next time the scene connects. - // The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead). - } - - func sceneDidBecomeActive(_ scene: UIScene) { - // Called when the scene has moved from an inactive state to an active state. - // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. - } - - func sceneWillResignActive(_ scene: UIScene) { - // Called when the scene will move from an active state to an inactive state. - // This may occur due to temporary interruptions (ex. an incoming phone call). - } - - func sceneWillEnterForeground(_ scene: UIScene) { - // Called as the scene transitions from the background to the foreground. - // Use this method to undo the changes made on entering the background. - } - - func sceneDidEnterBackground(_ scene: UIScene) { - // Called as the scene transitions from the foreground to the background. - // Use this method to save data, release shared resources, and store enough scene-specific state information - // to restore the scene back to its current state. - } - - -} - diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Services/Database/SQLite/JKCSSQLite.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Services/Database/SQLite/JKCSSQLite.swift deleted file mode 100644 index c996468b..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Services/Database/SQLite/JKCSSQLite.swift +++ /dev/null @@ -1,118 +0,0 @@ -// -// JKCSSQLite.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-06. -// Copyright © 2020 Kuang. All rights reserved. -// - -import Foundation -import SQLite3 - -// https://www.raywenderlich.com/6620276-sqlite-with-swift-tutorial-getting-started - -public enum JKCSSQLiteError: Error { - case noError(message: String = "No error") - case genericError(message: String = "Generic error") - case customError(message: String) - case codedError((code: Int, message: String)) - - public var code: Int? { - switch self { - case .customError, .genericError, .noError: - return nil - case .codedError((let code, _)): - return code - } - } - - public var message: String { - switch self { - case .customError(let msg), .genericError(let msg), .noError(let msg): - return msg - case .codedError((_, let msg)): - return msg - } - } -} - -public class JKCSSQLite { - private var resourceName: String? = nil - private var resourceExt: String? = nil - var db: OpaquePointer? = nil - - public init?(resourceName: String, resourceExt: String) { - let result = openDatabase(resourceName: resourceName, resourceExt: resourceExt) - switch result { - case .success(_): - break - default: - return nil - } - } - - deinit { - closeDatabase() - } - - @discardableResult - private func openDatabase(resourceName: String, resourceExt: String) -> Result { - guard let dbPath = pathOfResource(name: resourceName, ext: resourceExt) else { - let message = "Unable to find the path for resource" - print("useDatabase(name: \(resourceName), ext: \(resourceExt)) failed: \(message)") - return Result.failure(.customError(message: message)) - } - var db: OpaquePointer? = nil - guard sqlite3_open(dbPath, &db) == SQLITE_OK else { - let message = "Unable to open database at \"\(dbPath)\"" - print("useDatabase(name: \(resourceName), ext: \(resourceExt)) failed: \(message)") - return Result.failure(.customError(message: message)) - } - print("useDatabase(name: \(resourceName), ext: \(resourceExt)) success") - self.db = db - self.resourceName = resourceName - self.resourceExt = resourceExt - return Result.success(nil) - } - - private func closeDatabase() { - guard let db = db else { return } - sqlite3_close(db) - } - - private func pathOfResource(name: String, ext: String) -> String? { - let path = Bundle.main.path(forResource: name, ofType: ext) - return path - } -} - -public class JKCSSQLiteQuery { - let sqlite: JKCSSQLite - var statement: String - var queryStatement: OpaquePointer? - - public init?(resourceName: String, resourceExt: String, statement: String) { - guard - let sqlite = JKCSSQLite(resourceName: resourceName, resourceExt: resourceExt), - let db = sqlite.db - else { - return nil - } - self.sqlite = sqlite - self.statement = statement - if sqlite3_prepare_v2(db, statement, -1, &queryStatement, nil) != SQLITE_OK { - print("query(\(statement)) failed: \(String(cString: sqlite3_errmsg(db)))") - return nil - } - } - - deinit { - finalize() - } - - public func finalize() { - if let qStatement = queryStatement { - sqlite3_finalize(qStatement) - } - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/UIKitWidgets/JKCSSearchBarUIViewRepresentable/JKCSSearchBarUIViewRepresentable.swift b/iOS/ScrollMapperBible/ScrollMapperBible/UIKitWidgets/JKCSSearchBarUIViewRepresentable/JKCSSearchBarUIViewRepresentable.swift deleted file mode 100644 index 7d4b6b7d..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/UIKitWidgets/JKCSSearchBarUIViewRepresentable/JKCSSearchBarUIViewRepresentable.swift +++ /dev/null @@ -1,106 +0,0 @@ -// -// JKCSSearchBarUIViewRepresentable.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-10. -// Copyright © 2020 Kuang. All rights reserved. -// - -import SwiftUI -import UIKit - -struct JKCSSearchBarUIViewRepresentable: UIViewRepresentable { - @Binding var searchText: String - private var mutatingWrapper = MutatingWrapper() - - class MutatingWrapper { - var searchBar: UISearchBar? = nil - var placeholder: String? = nil - var keyboardType: UIKeyboardType = .default - var coordinator: Coordinator? = nil - } - - init(binding searchText: Binding) { - _searchText = searchText - makeCoordinator() - } - - func placeholder(_ placeholder: String) -> Self { - mutatingWrapper.placeholder = placeholder - return self - } - - func keyboardType(_ keyboardType: UIKeyboardType) -> Self { - mutatingWrapper.keyboardType = keyboardType - return self - } - - func onSearchButtonClicked(delegate: @escaping (String) -> ()) -> Self { - mutatingWrapper.coordinator?.onSearchButtonClickedDelegate = delegate - return self - } - - func onSearchTextChanged(delegate: @escaping (String) -> ()) -> Self { - mutatingWrapper.coordinator?.onSearchTextChangedDelegate = delegate - return self - } - - class Coordinator: NSObject, UISearchBarDelegate { - @Binding var searchText: String - var onSearchButtonClickedDelegate: ((String) -> ())? = nil - var onSearchTextChangedDelegate: ((String) -> ())? = nil - - init(binding searchText: Binding) { - _searchText = searchText - } - - func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) { - searchBar.setShowsCancelButton(true, animated: true) - } - - func searchBarTextDidEndEditing(_ searchBar: UISearchBar) { - searchBar.setShowsCancelButton(false, animated: false) - } - - func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { - self.searchText = searchText - if let delegate = onSearchTextChangedDelegate { - delegate(searchText) - } - } - - func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { - searchBar.resignFirstResponder() - if let delegate = onSearchButtonClickedDelegate { - delegate(searchText) - } - } - - func searchBarCancelButtonClicked(_ searchBar: UISearchBar) { - searchBar.resignFirstResponder() - } - } - - @discardableResult func makeCoordinator() -> JKCSSearchBarUIViewRepresentable.Coordinator { - if mutatingWrapper.coordinator == nil { - mutatingWrapper.coordinator = Coordinator(binding: $searchText) - } - return mutatingWrapper.coordinator! - } - - func makeUIView(context: UIViewRepresentableContext) -> UISearchBar { - if mutatingWrapper.searchBar == nil { - mutatingWrapper.searchBar = UISearchBar(frame: .zero) - mutatingWrapper.searchBar!.delegate = makeCoordinator() - mutatingWrapper.searchBar!.placeholder = mutatingWrapper.placeholder - mutatingWrapper.searchBar!.searchBarStyle = .minimal - mutatingWrapper.searchBar!.autocapitalizationType = .none - mutatingWrapper.searchBar!.keyboardType = mutatingWrapper.keyboardType - } - return mutatingWrapper.searchBar! - } - - func updateUIView(_ uiView: UISearchBar, context: UIViewRepresentableContext) { - uiView.text = searchText - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/CopyrightAndLicense/ScrollMapperBibleCopyrightAndLicenseView.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/CopyrightAndLicense/ScrollMapperBibleCopyrightAndLicenseView.swift deleted file mode 100644 index 3dc690df..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/CopyrightAndLicense/ScrollMapperBibleCopyrightAndLicenseView.swift +++ /dev/null @@ -1,55 +0,0 @@ -// -// ScrollMapperBibleCopyrightAndLicenseView.swift -// ScrollMapperBible -// -// Created by John K on 2020-09-19. -// Copyright © 2020 Kuang. All rights reserved. -// - -import SwiftUI - -struct ScrollMapperBibleCopyrightAndLicenseView: View { - @ObservedObject var viewModel = ScrollMapperBibleCopyrightAndLicenseViewModel() - - var body: some View { - VStack { - Spacer().frame(height: 20) - HStack { - Spacer().frame(width: 8) - self.bodyView - Spacer().frame(width: 8) - } - Spacer() - }.navigationBarTitle("Copyright \u{00A9}") - } - - private var bodyView: AnyView { - var repo: AnyView - if #available(iOS 14, *), let url = URL(string: viewModel.repo) { - repo = AnyView(Link(viewModel.repo, destination: url)) - } - else { - repo = AnyView(Text(viewModel.repo)) - } - - return AnyView( - VStack{ - HStack { - Text("This is an open source project forked from ") - Spacer() - } - HStack { - repo - Spacer() - } - } - ) - } - -} - -struct ScrollMapperBibleCopyrightAndLicenseView_Previews: PreviewProvider { - static var previews: some View { - ScrollMapperBibleCopyrightAndLicenseView() - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/CopyrightAndLicense/ScrollMapperBibleCopyrightAndLicenseViewModel.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/CopyrightAndLicense/ScrollMapperBibleCopyrightAndLicenseViewModel.swift deleted file mode 100644 index aae20e80..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/CopyrightAndLicense/ScrollMapperBibleCopyrightAndLicenseViewModel.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// ScrollMapperBibleCopyrightAndLicenseViewModel.swift -// ScrollMapperBible -// -// Created by John K on 2020-09-19. -// Copyright © 2020 Kuang. All rights reserved. -// - -import Foundation - -class ScrollMapperBibleCopyrightAndLicenseViewModel: ObservableObject { - let repo: String = "https://github.com/scrollmapper/bible_databases" -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/CrossReference/ScrollMapperBibleCrossReferenceView.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/CrossReference/ScrollMapperBibleCrossReferenceView.swift deleted file mode 100644 index 3f4f18d3..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/CrossReference/ScrollMapperBibleCrossReferenceView.swift +++ /dev/null @@ -1,72 +0,0 @@ -// -// ScrollMapperBibleCrossReferenceView.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-16. -// Copyright © 2020 Kuang. All rights reserved. -// - -import SwiftUI - -struct ScrollMapperBibleCrossReferenceView: View { - @ObservedObject var viewModel: ScrollMapperBibleCrossReferenceViewModel - private var vid: Int - - init(vid: Int) { - self.vid = vid - viewModel = ScrollMapperBibleCrossReferenceViewModel(vid: vid) - } - - var body: some View { - GeometryReader { (geometryProxy) in - VStack { - self.viewHeader(geometryProxy: geometryProxy) - List { - ForEach(self.viewModel.listData) { section in - Section(header: self.sectionHeader(section)) { - ForEach(section.items) { (item) in - Text("\(item.verse.t)") - } - } - } - } - } - } - } - - private func viewHeader(geometryProxy: GeometryProxy) -> some View { - let b = vid / 1_000_000 - let c = vid / 1_000 % 1_000 - let v = vid % 1_000 - let book = ScrollMapperBibleBookInfo.BibleBook(rawValue: b)?.bookInfo()?.abbreviation ?? "" - return Text("\(book) \(c):\(v)").frame(width: geometryProxy.size.width).background(Color(.systemBackground)) - } - - private func sectionHeader(_ section: ScrollMapperBibleCrossReferenceViewModel.Section) -> some View { - let sb = ScrollMapperBibleBookInfo.BookInfo(order: section.sv / 1_000_000)?.abbreviation ?? "" - let sc = section.sv / 1_000 % 1_000 - let sv = section.sv % 1_000 - let eb = ((section.ev == 0) ? sb : (ScrollMapperBibleBookInfo.BookInfo(order: section.ev / 1_000_000)?.abbreviation ?? "")) - let ec = ((section.ev == 0) ? sc : (section.ev / 1_000 % 1_000)) - let ev = ((section.ev == 0) ? sv : (section.ev % 1_000)) - var header = "\(sb) \(sc):\(sv)" - if section.ev != 0 { - header += "-" - if eb != sb { - header += "\(eb) " - } - if (eb != sb) || (ec != sc) { - header += "\(ec):" - } - header += "\(ev)" - } - - return Text("\(header)") - } -} - -struct ScrollMapperBibleCrossReferenceView_Previews: PreviewProvider { - static var previews: some View { - ScrollMapperBibleCrossReferenceView(vid: 0) - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/CrossReference/ScrollMapperBibleCrossReferenceViewModel.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/CrossReference/ScrollMapperBibleCrossReferenceViewModel.swift deleted file mode 100644 index 02eeb29e..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/CrossReference/ScrollMapperBibleCrossReferenceViewModel.swift +++ /dev/null @@ -1,80 +0,0 @@ -// -// ScrollMapperBibleCrossReferenceViewModel.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-16. -// Copyright © 2020 Kuang. All rights reserved. -// - -import Foundation -import Combine - -class ScrollMapperBibleCrossReferenceViewModel: ObservableObject { - @Published var translation: ScrollMapperBibleVersion.BibleVersion = .KJV { - didSet { - if translation != oldValue { - setupList() - } - } - } - var translationSubscriber: AnyCancellable? = nil - - var vid: Int { - didSet { - if vid != oldValue { - setupList() - } - } - } - - init(vid: Int) { - self.vid = vid - subscribe() - DispatchQueue.main.async { - self.setupList() - } - } - - deinit { - unsubscribe() - } - - func subscribe() { - translationSubscriber = scrollMapperBiblePublishers.tranlationPublisher.sink(receiveValue: { (translation) in - self.translation = ScrollMapperBibleVersion.BibleVersion(rawValue: translation) ?? ScrollMapperBibleVersion.BibleVersion.KJV - }) - } - - func unsubscribe() { - translationSubscriber?.cancel() - translationSubscriber = nil - } - - struct Section: Identifiable { - let id = UUID() - let rank: Int - let sv: Int - let ev: Int - let items: [Item] - } - - struct Item: Identifiable { - let id = UUID() - let verse: ScrollMapperBibleText.BibleText - } - - @Published var listData: [Section] = [] - - private func setupList() { - var list: [Section] = [] - guard let result = ScrollMapperBibleCrossReference(version: translation, vid: vid)?.result else { return } - for row in result { - var verses: [Item] = [] - for verse in row.verses { - verses.append(Item(verse: verse)) - } - list.append(Section(rank: row.r, sv: row.sv, ev: row.ev, items: verses)) - } - self.listData = list - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/JumpTo/ScrollMapperBibleJumpToView.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/JumpTo/ScrollMapperBibleJumpToView.swift deleted file mode 100644 index 3f7850ab..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/JumpTo/ScrollMapperBibleJumpToView.swift +++ /dev/null @@ -1,106 +0,0 @@ -// -// ScrollMapperBibleJumpToView.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-14. -// Copyright © 2020 Kuang. All rights reserved. -// - -import SwiftUI - -struct ScrollMapperBibleJumpToView: View { - @ObservedObject var viewModel = ScrollMapperBibleJumpToViewModel() - @Environment(\.presentationMode) var presentationMode - - var body: some View { - GeometryReader { (geometryProxy) in - VStack { - Picker(selection: self.$viewModel.selectedScopeIndex, label: Text("Scope")) { - ForEach(self.viewModel.scopes) { scope in - Text("\(scope.title)") - } - } - .pickerStyle(SegmentedPickerStyle()) - - List { - ForEach(self.viewModel.listData) { section in - Section(header: Text(section.title.uppercased())) { - ForEach(section.books) { item in - VStack(alignment: .leading) { - Text(item.book.title_short).font(.system(size: 15)) - Text(item.book.title_full).foregroundColor(Color(.systemGray)).font(.system(size: 11)) - self.chaptersView(item: item, geometryProxy: geometryProxy) - } - .onTapGesture { - self.viewModel.expand(book: item.book) - } - } - } - } - } - } - .navigationBarTitle("Jump To") - } - } - - private func chaptersView(item: ScrollMapperBibleJumpToViewModel.Item, geometryProxy: GeometryProxy) -> AnyView? { - guard - let expandedBook = viewModel.expandedBook, - expandedBook.title_short == item.book.title_short - else { - return nil - } - - let itemWidth: CGFloat = 32 - let horizontalSpace: CGFloat = 8 - let verticalSpace: CGFloat = 16 - let leadingSpace: CGFloat = 8 - let trailingSpace: CGFloat = 8 - let numberOfColumns: Int = Int((geometryProxy.size.width - (leadingSpace + trailingSpace)) / (itemWidth + horizontalSpace)) - if numberOfColumns < 1 { return nil } - let numberOfRows = (item.book.chapters + (numberOfColumns - 1)) / numberOfColumns - - let gridView = HStack { - Spacer().frame(width: leadingSpace) - VStack { - ForEach(0.. ScrollMapperBibleBookInfo.BookInfo? in - if (bookInfo.otnt == "OT") && (selectedScopeIndex == 1) { return nil } - if (bookInfo.otnt == "NT") && (selectedScopeIndex == 0) { return nil } - if bookInfo.category != currentCategory { - if currentCategory.count > 0 { - listData.append(Section(title: currentCategory, books: items)) - items = [] - } - currentCategory = bookInfo.category - } - items.append(Item(book: bookInfo)) - return nil - } - listData.append(Section(title: currentCategory, books: items)) - self.listData = listData - } - - func expand(book: ScrollMapperBibleBookInfo.BookInfo) { - if expandedBook == book { - expandedBook = nil - } - else { - expandedBook = book - } - } - - func jumpTo(book: ScrollMapperBibleBookInfo.BookInfo, chapter: Int) { - let cid = book.order * 1_000 + chapter - scrollMapperBiblePublishers.publishCurrentChapter(cid: cid) - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/Search/ScrollMapperBibleSearchView.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/Search/ScrollMapperBibleSearchView.swift deleted file mode 100644 index c402729a..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/Search/ScrollMapperBibleSearchView.swift +++ /dev/null @@ -1,99 +0,0 @@ -// -// ScrollMapperBibleSearchView.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-08. -// Copyright © 2020 Kuang. All rights reserved. -// - -import SwiftUI -import Combine - -struct ScrollMapperBibleSearchView: View { - @ObservedObject private var viewModel: ScrollMapperBibleSearchViewModel - @Environment(\.presentationMode) var presentationMode - @State private var showActivityIndicator = false - @State private var searchTerm = "" - - init() { - self.viewModel = ScrollMapperBibleSearchViewModel() - -// UISegmentedControl.appearance().selectedSegmentTintColor = .blue -// UISegmentedControl.appearance().setTitleTextAttributes([.foregroundColor: UIColor.white], for: .selected) -// UISegmentedControl.appearance().setTitleTextAttributes([.foregroundColor: UIColor.blue], for: .normal) - UISegmentedControl.appearance().setTitleTextAttributes([.foregroundColor: UIColor.systemBlue], for: .selected) - } - - var body: some View { - ZStack { - VStack { - // https://www.swiftkickmobile.com/creating-a-segmented-control-in-swiftui/?utm_source=rss&utm_medium=rss&utm_campaign=creating-a-segmented-control-in-swiftui - Picker(selection: $viewModel.selectedScopeInt, label: Text("Search Scope")) { - ForEach(viewModel.scopes, id: \.rawValue) { scope in - Text("\(scope.titleFull)") - } - } - .pickerStyle(SegmentedPickerStyle()) - - JKCSSearchBarUIViewRepresentable(binding: $viewModel.searchTerm) - .placeholder("Input some keywords and search") - .onSearchButtonClicked { (searchText) in - // - } - - List { - ForEach(viewModel.listData) { section in - Section(header: Text(section.book.title_short)) { - ForEach(0.. Int { - if section.book == viewModel.expandedBook { - return section.items.count - } - return min(3, section.items.count) - } - - private func itemView(book: ScrollMapperBibleBookInfo.BookInfo, item: ScrollMapperBibleSearchViewModel.Item, index: Int) -> AnyView { - if (book == viewModel.expandedBook) || (index < 2) { - return AnyView( - Text("\(item.verse.c):\(item.verse.v) \(item.verse.t)") - .onTapGesture { - self.viewModel.jumpTo(item: item) - self.presentationMode.wrappedValue.dismiss() - } - ) - } - return AnyView( - Text("See more...") - .onTapGesture { - self.viewModel.expandedBook = book - } - ) - } - - private func itemTapped(_ item: ScrollMapperBibleSearchViewModel.Item) { - - } -} - -struct ScrollMapperBibleSearchView_Previews: PreviewProvider { - static var previews: some View { - ScrollMapperBibleSearchView() - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/Search/ScrollMapperBibleSearchViewModel.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/Search/ScrollMapperBibleSearchViewModel.swift deleted file mode 100644 index ee1ad30b..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/Search/ScrollMapperBibleSearchViewModel.swift +++ /dev/null @@ -1,135 +0,0 @@ -// -// ScrollMapperBibleSearchViewModel.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-08. -// Copyright © 2020 Kuang. All rights reserved. -// - -import Foundation -import Combine - -fileprivate let scrollMapperBibleSceneStorageKeySearchScope = "268C5DE5-D9D3-491C-9147-C6217DBF876E" -fileprivate let scrollMapperBibleSceneStorageKeySearchTerm = "8BD9E40A-A2F3-49B7-9F69-2055AA38EC9E" - -class ScrollMapperBibleSearchViewModel: ObservableObject { - @Published var translation: ScrollMapperBibleVersion.BibleVersion = .KJV { - didSet { - if translation != oldValue { - search() - } - } - } - var translationSubscriber: AnyCancellable? = nil - - let scopes: [ScrollMapperBibleSearchScope] = ScrollMapperBibleSearchScope.allCases - @Published var selectedScopeInt: Int = 0 { - didSet { - var rawValue = selectedScopeInt + 3 - if rawValue > 3 { - rawValue -= 3 - } - selectedScope = ScrollMapperBibleSearchScope(rawValue: rawValue)! - if selectedScopeInt != oldValue { - UserDefaults.standard.set(selectedScopeInt, forKey: scrollMapperBibleSceneStorageKeySearchScope) - } - } - } - private var selectedScope: ScrollMapperBibleSearchScope = .All { - didSet { - if selectedScope != oldValue { - expandedBook = nil - search() - } - } - } - - @Published var expandedBook: ScrollMapperBibleBookInfo.BookInfo? = nil - - @Published var searchTerm: String = "" { - didSet { - search() - if searchTerm != oldValue { - UserDefaults.standard.set(searchTerm, forKey: scrollMapperBibleSceneStorageKeySearchTerm) - } - } - } - - init() { - subscribe() - - if let searchScopeInt = UserDefaults.standard.value(forKey: scrollMapperBibleSceneStorageKeySearchScope) as? Int, - let _ = ScrollMapperBibleSearchScope(rawValue: searchScopeInt), - searchScopeInt != self.selectedScopeInt { - self.selectedScopeInt = searchScopeInt - } - else { - selectedScopeInt = ScrollMapperBibleSearchScope.All.rawValue - } - - DispatchQueue.main.async { - if let searchTerm = UserDefaults.standard.string(forKey: scrollMapperBibleSceneStorageKeySearchTerm) { - self.searchTerm = searchTerm - } - } - } - - deinit { - unsubscribe() - } - - func subscribe() { - translationSubscriber = scrollMapperBiblePublishers.tranlationPublisher.sink(receiveValue: { (translation) in - self.translation = ScrollMapperBibleVersion.BibleVersion(rawValue: translation) ?? ScrollMapperBibleVersion.BibleVersion.KJV - }) - } - - func unsubscribe() { - translationSubscriber?.cancel() - translationSubscriber = nil - } - - struct Section: Identifiable { - var id = UUID() - var book: ScrollMapperBibleBookInfo.BookInfo - var items: [Item] - } - - struct Item: Identifiable { - var id = UUID() - var verse: ScrollMapperBibleText.BibleText - } - - @Published var listData: [Section] = [] - - private func search() { - let term = searchTerm.trimmingCharacters(in: .whitespaces) - guard term.count > 0 else { - listData = [] - return - } - guard let result = ScrollMapperBibleText(version: translation, searchBy: term, in: selectedScope)?.result else { return } - var currentBook: ScrollMapperBibleBookInfo.BookInfo? = nil - var items: [Item] = [] - var list: [Section] = [] - for verse in result { - if verse.b != currentBook?.order { - if currentBook != nil { - list.append(Section(book: currentBook!, items: items)) - items = [] - } - currentBook = ScrollMapperBibleBookInfo.BookInfo(order: verse.b) - } - items.append(Item(verse: verse)) - } - if let currentBook = currentBook { - list.append(Section(book: currentBook, items: items)) - } - self.listData = list - } - - func jumpTo(item: Item) { - let cid = item.verse.b * 1_000 + item.verse.c - scrollMapperBiblePublishers.publishCurrentChapter(cid: cid) - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/Translations/ScrollMapperBibleTranslationsView.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/Translations/ScrollMapperBibleTranslationsView.swift deleted file mode 100644 index f7dfe1c0..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/Translations/ScrollMapperBibleTranslationsView.swift +++ /dev/null @@ -1,140 +0,0 @@ -// -// ScrollMapperBibleTranslationsView.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-07. -// Copyright © 2020 Kuang. All rights reserved. -// - -import SwiftUI -import Combine - -struct ScrollMapperBibleTranslationsView: View, ScrollMapperBibleTranslationsViewAlertActionDelegate { - @ObservedObject private var viewModel: ScrollMapperBibleTranslationsViewModel - @Environment(\.presentationMode) var presentationMode - @State private var showActivityIndicator = false - @State private var showAlert = false - @State private var alert: ScrollMapperBibleTranslationsViewAlert = .none { - didSet { - switch alert { - case .confirmSwitch: - showAlert = true - default: - break - } - } - } - func onAlertActionConfirm(alert: ScrollMapperBibleTranslationsViewAlert) { - switch alert { - case .confirmSwitch(let target): - self.showActivityIndicator = true - DispatchQueue.main.async { - self.viewModel.switchTranslation(to: target) - self.presentationMode.wrappedValue.dismiss() - self.showActivityIndicator = false - } - default: - break - } - } - - init() { - self.viewModel = ScrollMapperBibleTranslationsViewModel() - } - - var body: some View { - ZStack { - List { - ForEach(viewModel.listData) { section in - Section(header: Text(section.title)) { - ForEach(section.items) { item in - self.itemView(item: item) - } - } - } - } - .disabled(showActivityIndicator) - .alert(isPresented: $showAlert) { - return alert.alert(delegate: self) - } - - if showActivityIndicator { - JKCSActivityIndicatorView().startAnimating() - } - else { - JKCSActivityIndicatorView().stopAnimating() - } - } - .navigationBarTitle(Text("Translations"), displayMode: .inline) - } - - private func itemView(item: ScrollMapperBibleTranslationsViewModel.Item) -> AnyView { - let view = AnyView( - HStack { - self.itemImage(item) - VStack(alignment: .leading) { - Text(item.title) - self.itemDetailView(item) - } - if (item.title == viewModel.translation) { - Spacer() - Image(systemName: "checkmark") - } - } - ) - .gesture(TapGesture().onEnded({ (_) in - self.itemTapped(item) - })) - return AnyView(view) - } - - private func itemImage(_ item: ScrollMapperBibleTranslationsViewModel.Item) -> Image { - return Image(imageName: item.imageName ?? JKCSImageName.system(systemName: "list.bullet")) - } - - private func itemDetailView(_ item: ScrollMapperBibleTranslationsViewModel.Item) -> Text? { - guard let detail = item.detail else { - return nil - } - return Text(detail).font(.subheadline).foregroundColor(.gray) - } - - private func itemTapped(_ item: ScrollMapperBibleTranslationsViewModel.Item) { - if (item.title == viewModel.translation) { - return - } - alert = .confirmSwitch(target: item.title) - } -} - -struct ScrollMapperBibleTranslationsView_Previews: PreviewProvider { - static var previews: some View { - ScrollMapperBibleTranslationsView() - } -} - -// MARK: - Alert - -protocol ScrollMapperBibleTranslationsViewAlertActionDelegate { - func onAlertActionConfirm(alert: ScrollMapperBibleTranslationsViewAlert) -} - -enum ScrollMapperBibleTranslationsViewAlert { - case none - case confirmSwitch(target: String) - - func alert(delegate: T) -> Alert { - var title: String - var message: String - switch self { - case .none: - return Alert(title: Text("NONE")) - case .confirmSwitch(let target): - title = "SWITCH TRANSLATION" - message = "Do you want to switch to \(target)?" - } - return Alert(title: Text(title), message: Text(message), primaryButton: .destructive(Text("Yes")) { - delegate.onAlertActionConfirm(alert: self) - }, secondaryButton: .cancel()) - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/Translations/ScrollMapperBibleTranslationsViewModel.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/Translations/ScrollMapperBibleTranslationsViewModel.swift deleted file mode 100644 index 84e29c88..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Branches/Translations/ScrollMapperBibleTranslationsViewModel.swift +++ /dev/null @@ -1,78 +0,0 @@ -// -// ScrollMapperBibleTranslationsViewModel.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-07. -// Copyright © 2020 Kuang. All rights reserved. -// - -import Foundation -import Combine - -class ScrollMapperBibleTranslationsViewModel: ObservableObject { - @Published var bibleVersion: ScrollMapperBibleVersion.BibleVersion = .KJV - var translation: String = ScrollMapperBibleVersion.BibleVersion.KJV.rawValue { - didSet { - if translation != oldValue, - let biberVersion = ScrollMapperBibleVersion.BibleVersion(rawValue: translation), - biberVersion != self.bibleVersion { - self.bibleVersion = biberVersion - } - } - } - var translationSubscriber: AnyCancellable? = nil - - init() { - subscribe() - setupListData() - } - - deinit { - unsubscribe() - } - - func subscribe() { - translationSubscriber = scrollMapperBiblePublishers.tranlationPublisher.sink(receiveValue: { (translation) in - self.translation = translation - }) - } - - func unsubscribe() { - translationSubscriber?.cancel() - translationSubscriber = nil - } - - struct Section: Identifiable { - var id = UUID() - var title: String - var items: [Item] - } - - struct Item: Identifiable { - var id = UUID() - var title: String - var detail: String? = nil - var imageName: JKCSImageName? = nil - var navigationLink: Bool = false - } - - static let itemAlertAndPopTitle = "Alert And Pop" - - lazy var translations: [ScrollMapperBibleVersion.BibleVersionKey] = { - let translations = ScrollMapperBibleVersion()?.result ?? [] - return translations - }() - @Published var listData: [Section] = [] - - private func setupListData() { - var items = [Item]() - _ = translations.map { (bibleVersionKey) in - items.append(Item(title: bibleVersionKey.abbreviation, detail: bibleVersionKey.version, imageName: .system(systemName: "book"))) - } - self.listData = [Section(title: "TRANSLATIONS", items: items)] - } - - func switchTranslation(to translation: String) { - scrollMapperBiblePublishers.publishTranslation(translation: translation) - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Bible/JKCSUIViewModel.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Bible/JKCSUIViewModel.swift deleted file mode 100644 index 63628f90..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Bible/JKCSUIViewModel.swift +++ /dev/null @@ -1,41 +0,0 @@ -// -// JKCSUIViewModel.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-08-01. -// Copyright © 2020 Kuang. All rights reserved. -// - -import UIKit -import Combine - -let isPad = UIDevice.current.isPad -let isPhone = UIDevice.current.isPhone - -class JKCSUIViewModel { - var isPortrait: Bool { - UIDevice.current.isPortrait - } - var isLandscape: Bool { - UIDevice.current.isLandscape - } - - var interfaceOrientationDidChangeDelegate: ((UIInterfaceOrientation) -> ())? = nil - var interfaceOrientationSubscriber: AnyCancellable? = nil - - init() { - interfaceOrientationSubscriber = scrollMapperBibleUIPublishers.interfaceOrientationPublisher.sink(receiveValue: { (orientation) in - self.interfaceOrientationDidChangeDelegate?(orientation) - }) - } - - @discardableResult - func onInterfaceOrientationChange(_ closure: @escaping (UIInterfaceOrientation) -> ()) -> Self { - interfaceOrientationDidChangeDelegate = closure - return self - } - - deinit { - interfaceOrientationSubscriber?.cancel() - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Bible/PeekabooWKWebView.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Bible/PeekabooWKWebView.swift deleted file mode 100644 index 5fc71419..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Bible/PeekabooWKWebView.swift +++ /dev/null @@ -1,158 +0,0 @@ -// -// PeekabooWKWebView.swift -// -// Created by Zhengqian Kuang on 2020-06-26. -// Copyright © 2019 Zhengqian Kuang. All rights reserved. -// - -import SwiftUI -import UIKit -import WebKit -import Combine - -enum PeekabooWKWebViewEvent: String { - case wordClickHandler -} - -// A bug in enum with associated value: https://github.com/textmate/swift.tmbundle/issues/35 -enum PeekabooWKWebViewLoad { - case url(_ url: URL) - case urlString(_ urlString: String) - case file(_ resourceName: String, _ resourceExt: String) - case htmlString(htmlString: String) -} - -typealias PeekabooWKWebViewMessage = [String : Any] - -protocol PeekabooWKWebViewControllerDelegate { - func reload(htmlString: String) -} - -struct PeekabooWKWebView: UIViewRepresentable { - private var viewModel: ScrollMapperBibleTextViewModel - private let postMessageHandlers: [PeekabooWKWebViewEvent]? - private let webView: WKWebView - private var viewController = PeekabooWKWebViewController() - - class PeekabooWKWebViewController: UIViewController, WKScriptMessageHandler { - var delegate: PeekabooWKWebViewControllerDelegate? = nil - var viewModel: ScrollMapperBibleTextViewModel? = nil { - didSet { - currentChapterUpdatedSubscriber?.cancel() - currentChapterUpdatedSubscriber = viewModel?.currentChapterUpdatedPublisher.sink(receiveValue: { (htmlString) in - self.delegate?.reload(htmlString: htmlString) - }) - } - } - var currentChapterUpdatedSubscriber: AnyCancellable? = nil - - var onClickDelegate: ((PeekabooWKWebViewMessage) -> ())? = nil - var onSwipeDelegate: ((UISwipeGestureRecognizer.Direction) -> ())? = nil - - deinit { - currentChapterUpdatedSubscriber?.cancel() - currentChapterUpdatedSubscriber = nil - } - - @objc func didSwipe(swipeGestureRecognizer: UISwipeGestureRecognizer) { - onSwipeDelegate?(swipeGestureRecognizer.direction) - } - - func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { - if message.name == PeekabooWKWebViewEvent.wordClickHandler.rawValue { - guard - let body = message.body as? [String: Any] - else { - return - } - onClickDelegate?(body) - } - } - } - - init(viewModel: ScrollMapperBibleTextViewModel, postMessageHandlers: [PeekabooWKWebViewEvent]? = nil) { - self.viewModel = viewModel - - self.postMessageHandlers = postMessageHandlers - let config = WKWebViewConfiguration() - if let postMessagehandlers = self.postMessageHandlers { - for postMessagehandler in postMessagehandlers { - config.userContentController.add(viewController, name: postMessagehandler.rawValue) - } - } - webView = WKWebView(frame: .zero, configuration: config) - webView.isOpaque = false - let leftSwipeGestureRecognizer = UISwipeGestureRecognizer(target: viewController, action: #selector(viewController.didSwipe(swipeGestureRecognizer:))) - leftSwipeGestureRecognizer.direction = .left - webView.addGestureRecognizer(leftSwipeGestureRecognizer) - let rightSwipeGestureRecognizer = UISwipeGestureRecognizer(target: viewController, action: #selector(viewController.didSwipe(swipeGestureRecognizer:))) - rightSwipeGestureRecognizer.direction = .right - webView.addGestureRecognizer(rightSwipeGestureRecognizer) - webView.isUserInteractionEnabled = true - - viewController.delegate = self - viewController.viewModel = viewModel - } - - /// UIViewRepresentable - - func makeUIView(context: UIViewRepresentableContext) -> WKWebView { - webView.navigationDelegate = context.coordinator - webView.loadHTMLString(viewModel.currentChapterHTMLString, baseURL: nil) - return webView - } - - func updateUIView(_ uiView: WKWebView, context: UIViewRepresentableContext) { - - } - - class Coordinator: NSObject, WKNavigationDelegate { - private var viewModel: ScrollMapperBibleTextViewModel - - init(_ viewModel: ScrollMapperBibleTextViewModel) { - self.viewModel = viewModel - } - - func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { - self.viewModel.webViewDidFinishNavigation() - } - } - - func makeCoordinator() -> Self.Coordinator { - Coordinator(viewModel) - } -} - -extension PeekabooWKWebView { - @discardableResult func evaluateJavaScript(javaScriptString: String, completionHandler: ((Any?, Error?) -> Void)?) -> Self { - webView.evaluateJavaScript(javaScriptString) { (result, error) in - if let completionHandler = completionHandler { - completionHandler(result, error) - } - } - return self - - // e.g. - // if you had a page that contained
@twostraws
, - // you would use "document.getElementById('username').innerText" as javaScriptString - // and the result would be "@twostraws" - } -} - -extension PeekabooWKWebView { // modifiers - @discardableResult func onClick(delegate: @escaping (PeekabooWKWebViewMessage) -> ()) -> Self { - viewController.onClickDelegate = delegate - return self - } - - @discardableResult func onSwipe(delegate: @escaping (UISwipeGestureRecognizer.Direction) -> ()) -> Self { - viewController.onSwipeDelegate = delegate - return self - } -} - -extension PeekabooWKWebView: PeekabooWKWebViewControllerDelegate { - func reload(htmlString: String) { - webView.loadHTMLString(htmlString, baseURL: nil) - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Bible/ScrollMapperBibleTextView.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Bible/ScrollMapperBibleTextView.swift deleted file mode 100644 index 4bdace15..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Bible/ScrollMapperBibleTextView.swift +++ /dev/null @@ -1,140 +0,0 @@ -// -// ScrollMapperBibleTextView.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-07. -// Copyright © 2020 Kuang. All rights reserved. -// - -import SwiftUI -import Combine - -struct ScrollMapperBibleTextView: View { - @ObservedObject private var viewModel: ScrollMapperBibleTextViewModel - @Environment(\.colorScheme) var colorScheme - @State private var showActivityIndicator = false - @State private var pushJumpToView = false - @State private var pushSearchView = false - - @State var reloadChapter = false - - init() { - viewModel = ScrollMapperBibleTextViewModel() - } - - var body: some View { - NavigationView { - ZStack { - HStack { - Spacer().frame(width: 8) - createWebView() - Spacer().frame(width: 8) - } - .alert(isPresented: self.$viewModel.showAlert, content: { () -> Alert in - switch self.viewModel.alert { - case .verseNumber(let book, let chapter, let verse): - return Alert(title: Text("CROSS REFERENCE"), message: Text("Show cross reference for \(book.bookInfo()?.abbreviation ?? "") \(chapter):\(verse)?"), primaryButton: .destructive(Text("YES"), action: { - self.viewModel.retrieveCrossReference(book: book, chapter: chapter, verse: verse) - }), secondaryButton: .cancel()) - default: - return Alert(title: Text("TO BE ACCOMPLISHED"), message: nil, dismissButton: .destructive(Text("OK"))) - } - }) - - GeometryReader { (geometryProxy) in - self.crossRefView(geometryProxy: geometryProxy) - } - - NavigationLink(destination: ScrollMapperBibleJumpToView(), isActive: self.$pushJumpToView) { - Text("") - }.hidden() - - NavigationLink(destination: ScrollMapperBibleSearchView(), isActive: self.$pushSearchView) { - Text("") - }.hidden() - - if showActivityIndicator { - JKCSActivityIndicatorView().startAnimating() - } - else { - JKCSActivityIndicatorView().stopAnimating() - } - } - .navigationBarTitle(Text("\(viewModel.translation.rawValue)"), displayMode: .inline) - .navigationBarItems(leading: navigationBarLeading(), trailing: navigationBarTrailing()) - } - .navigationViewStyle(StackNavigationViewStyle()) // to prevent it from showing as split view on iPad - } - - private func createWebView() -> PeekabooWKWebView { - viewModel.colorSchemeDidChange(darkMode: colorScheme == .dark) - let webView = PeekabooWKWebView(viewModel: viewModel, postMessageHandlers: [.wordClickHandler]) - .onClick(delegate: { (message) in - DispatchQueue.main.async { - self.viewModel.checkClickedMessage(message: message) - } - }) - .onSwipe(delegate: { (direction) in - if direction == .left { - self.viewModel.gotoNextChapter() - } - else if direction == .right { - self.viewModel.gotoPreviousChapter() - } - }) - return webView - } - - private func crossRefView(geometryProxy: GeometryProxy) -> AnyView? { - guard viewModel.crossReferenceVid != 0 else { - return nil - } - return AnyView( - ZStack { - AnyView( - Text("") - .frame(width: geometryProxy.size.width, height: geometryProxy.size.height) - .background(Color.black) - .opacity(0.5) - .onTapGesture { - DispatchQueue.main.async { - self.viewModel.dismissCrossReference() - } - } - ) - - VStack { - Spacer() - HStack { - Spacer() - ScrollMapperBibleCrossReferenceView(vid: viewModel.crossReferenceVid).frame(width: geometryProxy.size.width * 0.8, height: geometryProxy.size.height * 0.8) - Spacer() - } - Spacer() - } - } - ) - } - - private func navigationBarLeading() -> some View { - Button(action: { - self.pushJumpToView = true - }) { - Image(systemName: "map") - } - } - - private func navigationBarTrailing() -> some View { - Button(action: { - self.pushSearchView = true - }) { - Image(systemName: "magnifyingglass") - } - } -} - -struct ScrollMapperBibleTextView_Previews: PreviewProvider { - static var previews: some View { - ScrollMapperBibleTextView() - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Bible/ScrollMapperBibleTextViewModel.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Bible/ScrollMapperBibleTextViewModel.swift deleted file mode 100644 index 04cdf0ba..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Bible/ScrollMapperBibleTextViewModel.swift +++ /dev/null @@ -1,215 +0,0 @@ -// -// ScrollMapperBibleTextViewModel.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-07. -// Copyright © 2020 Kuang. All rights reserved. -// - -import Foundation -import Combine - -class ScrollMapperBibleTextViewModel: ObservableObject { - private var uiViewModel = JKCSUIViewModel() - - @Published var translation: ScrollMapperBibleVersion.BibleVersion = .KJV { - didSet { - if translation != oldValue { - createCurrentChapterPage() - } - } - } - var translationSubscriber: AnyCancellable? = nil - - var alert: AlertType = .unknown { - didSet { - switch alert { - case .verseNumber( _, _, _): - showAlert = true - default: - break - } - } - } - @Published var showAlert = false - - @Published var crossReferenceVid: Int = 0 - - private var currentChapter: ScrollMapperBibleChapter.BibleChapter = ScrollMapperBibleChapter.BibleChapter(b: 1, c: 1)! { - didSet { - if currentChapter != oldValue { - createCurrentChapterPage() - scrollMapperBiblePublishers.publishCurrentChapter(cid: currentChapter.cid) - } - } - } - var currentChapterSubscriber: AnyCancellable? = nil - - private var darkMode: Bool = false { - didSet { - if darkMode != oldValue { - createCurrentChapterPage() - } - } - } - - var bibleText: [ScrollMapperBibleText.BibleText] = [] - var currentChapterHTMLString: String = "" - let currentChapterUpdatedSubject = CurrentValueSubject("") - let currentChapterUpdatedPublisher: AnyPublisher - - init() { - currentChapterUpdatedPublisher = currentChapterUpdatedSubject.eraseToAnyPublisher() - subscribe() - createCurrentChapterPage() - } - - deinit { - unsubscribe() - } - - func subscribe() { - translationSubscriber = scrollMapperBiblePublishers.tranlationPublisher.sink(receiveValue: { (translation) in - self.translation = ScrollMapperBibleVersion.BibleVersion(rawValue: translation) ?? ScrollMapperBibleVersion.BibleVersion.KJV - }) - currentChapterSubscriber = scrollMapperBiblePublishers.currentChapterCidPublisher.sink(receiveValue: { (cid) in - self.currentChapter = ScrollMapperBibleChapter.BibleChapter(cid: cid) ?? ScrollMapperBibleChapter.BibleChapter(b: 1, c: 1)! - }) - - uiViewModel.onInterfaceOrientationChange { (_) in - self.createCurrentChapterPage() - } - } - - func unsubscribe() { - translationSubscriber?.cancel() - translationSubscriber = nil - currentChapterSubscriber?.cancel() - currentChapterSubscriber = nil - } - - private func createCurrentChapterPage() { - bibleText.removeAll() - - // https://useyourloaf.com/blog/supporting-dark-mode-in-wkwebview/ - - let textFontSize = (isPhone && uiViewModel.isPortrait) ? 60 : 24 - let verseNumberFontSize = (isPhone && uiViewModel.isPortrait) ? 36 : 14 - - var htmlString = "" - htmlString += "\n" - htmlString += "\n" - htmlString += " \n" - htmlString += " \n" - htmlString += " \n" - htmlString += " \n" - htmlString += " \n" - htmlString += "

\(currentChapter.bibleBook.bookInfo()?.title_short ?? "") \(currentChapter.c)

\n" - htmlString += " \n" - var bodyContent = "" - if let result = ScrollMapperBibleVerseWithCrossReference(version: translation, book: currentChapter.bibleBook, chapter: currentChapter.c)?.result { - for verse in result { - bibleText.append(ScrollMapperBibleText.BibleText(id: verse.id, b: verse.b, c: verse.c, v: verse.v, t: verse.t)) - bodyContent += "\(" ".withHTMLTags(fontSize: textFontSize))\("\(verse.v)".withHTMLTags(fontSize: verseNumberFontSize, color: ((verse.cr.count > 0) ? (darkMode ? "#FFFF00" : "#0000FF") : ""), sup: true))\(" ".withHTMLTags(fontSize: textFontSize))\(verse.t.withHTMLTags(fontSize: textFontSize, color: darkMode ? "white" : "black"))" - } - } - htmlString += "

\(bodyContent)

\n" - htmlString += " \n" - htmlString += "\n" - - currentChapterHTMLString = htmlString - currentChapterUpdatedSubject.send(currentChapterHTMLString) - } - - func gotoPreviousChapter() { - if let previousChapter = <~currentChapter { - currentChapter = previousChapter - - } - } - - func gotoNextChapter() { - if let nextChapter = currentChapter~> { - currentChapter = nextChapter - } - } - - func webViewDidFinishNavigation() { - - } - - func colorSchemeDidChange(darkMode: Bool) { - self.darkMode = darkMode - } -} - -extension ScrollMapperBibleTextViewModel { - enum AlertType { - case unknown - case verseNumber(_ book: ScrollMapperBibleBookInfo.BibleBook, _ chapter: Int, _ number: Int) - case word(_ word: String) - } - - func checkClickedMessage(message: Any?) { - guard - let message = message as? [String : Any], - let clicked = message["clicked"] as? [String : Any], - let word = clicked["word"] as? String, - let sentence = clicked["sentence"] as? String - else { - return - } - if CharacterSet.decimalDigits.isSuperset(of: CharacterSet(charactersIn: word)) { // number - for text in bibleText { - let verse = "\(text.v) \(text.t)" - let length = min(sentence.count, verse.count) - if sentence.prefix(length) == verse.prefix(length), - let number = Int(word) { - alert = .verseNumber(currentChapter.bibleBook, currentChapter.c, number) - return - } - } - } - else { // word - alert = .word(word) - } - } - - func retrieveCrossReference(book: ScrollMapperBibleBookInfo.BibleBook, chapter: Int, verse: Int) { - crossReferenceVid = book.rawValue * 1_000_000 + chapter * 1_000 + verse - } - - func lookUp(_ word: String) { - print("*** lookUp: \(word)") - } - - func dismissCrossReference() { - crossReferenceVid = 0 - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Bible/ScrollMapperBibleWebViewColor.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Bible/ScrollMapperBibleWebViewColor.swift deleted file mode 100644 index 5cb39c23..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Bible/ScrollMapperBibleWebViewColor.swift +++ /dev/null @@ -1,59 +0,0 @@ -// -// ScrollMapperBibleWebViewColor.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-16. -// Copyright © 2020 Kuang. All rights reserved. -// - -import Foundation -import UIKit - -class WebViewColor { - enum Color { - case undefined - case black(darkMode: Bool) - case white(darkMode: Bool) - - var color: UIColor { - switch self { - case .undefined: - return .clear - case .black(let darkMode): - return darkMode ? .white : .black - case .white(let darkMode): - return darkMode ? .black : .white - } - } - var string: String { - switch self { - case .undefined: - return "undefined" - case .black(let darkMode): - return darkMode ? "white" : "black" - case .white(let darkMode): - return darkMode ? "black" : "white" - } - } - } - static var black: Color { - var color: Color = .black(darkMode: false) - if #available(iOS 13, *) { - let _ = UIColor.init { (traitCollection) -> UIColor in - color = Color.black(darkMode: traitCollection.userInterfaceStyle == .dark) - return .black - } - } - return color - } - static var white: Color { - var color: Color = .white(darkMode: false) - if #available(iOS 13, *) { - let _ = UIColor.init { (traitCollection) -> UIColor in - color = Color.white(darkMode: traitCollection.userInterfaceStyle == .dark) - return .black - } - } - return color - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Main/ScrollMapperBibleMainView.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Main/ScrollMapperBibleMainView.swift deleted file mode 100644 index de456e5f..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Main/ScrollMapperBibleMainView.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// ScrollMapperBibleMainView.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-07. -// Copyright © 2020 Kuang. All rights reserved. -// - -import SwiftUI - -struct ScrollMapperBibleMainView: View { - @ObservedObject var viewModel = ScrollMapperBibleMainViewModel() - - var body: some View { - TabView { - ScrollMapperBibleTextView() - .tabItem { - Image(systemName: "book") - Text("Bible") - } - ScrollMapperBibleSettingsView() - .tabItem { - Image(systemName: "gear") - Text("Settings") - } - } - } - -} - -struct ScrollMapperBibleMainView_Previews: PreviewProvider { - static var previews: some View { - ScrollMapperBibleMainView() - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Main/ScrollMapperBibleMainViewModel.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Main/ScrollMapperBibleMainViewModel.swift deleted file mode 100644 index bc07ec45..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Main/ScrollMapperBibleMainViewModel.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// ScrollMapperBibleMainViewModel.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-07. -// Copyright © 2020 Kuang. All rights reserved. -// - -import Foundation - -class ScrollMapperBibleMainViewModel: ObservableObject { - // @Published var someFlag = false -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Settings/ScrollMapperBibleSettingsView.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Settings/ScrollMapperBibleSettingsView.swift deleted file mode 100644 index 5ff3dd39..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Settings/ScrollMapperBibleSettingsView.swift +++ /dev/null @@ -1,89 +0,0 @@ -// -// ScrollMapperBibleSettingsView.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-07. -// Copyright © 2020 Kuang. All rights reserved. -// - -import SwiftUI -import Combine - -struct ScrollMapperBibleSettingsView: View { - @ObservedObject private var viewModel: ScrollMapperBibleSettingsViewModel - - init() { - self.viewModel = ScrollMapperBibleSettingsViewModel() - } - - var body: some View { - NavigationView { - List { - ForEach(viewModel.listData) { section in - Section(header: Text(section.title)) { - ForEach(section.items) { item in - self.itemView(item: item) - } - } - } - } - .navigationBarTitle(Text("Settings"), displayMode: .inline) - } - .navigationViewStyle(StackNavigationViewStyle()) // to prevent it from showing as split view on iPad - } - - private func itemView(item: ScrollMapperBibleSettingsViewModel.Item) -> AnyView { - if item.navigationLink { - let navigationLink = NavigationLink(destination: self.itemDestinationView(item: item)) { - HStack { - self.itemImage(item).frame(width: 20) - VStack(alignment: .leading) { - Text(item.title) - self.itemDetailView(item) - } - } - } - return AnyView(navigationLink) - } - else { - let view = AnyView( - HStack { - self.itemImage(item).frame(width: 20) - VStack(alignment: .leading) { - Text(item.title) - self.itemDetailView(item) - } - } - ) - return AnyView(view) - } - } - - private func itemImage(_ item: ScrollMapperBibleSettingsViewModel.Item) -> Image { - return Image(imageName: item.imageName ?? JKCSImageName.system(systemName: "list.bullet")) - } - - private func itemDetailView(_ item: ScrollMapperBibleSettingsViewModel.Item) -> Text? { - guard let detail = item.detail else { - return nil - } - return Text(detail).font(.subheadline).foregroundColor(.gray) - } - - private func itemDestinationView(item: ScrollMapperBibleSettingsViewModel.Item) -> AnyView { - switch item.title { - case ScrollMapperBibleSettingsViewModel.itemTranslationsTitle: - return AnyView(ScrollMapperBibleTranslationsView()) - case ScrollMapperBibleSettingsViewModel.itemCopyrightAndLicenseTitle: - return AnyView(ScrollMapperBibleCopyrightAndLicenseView()) - default: - return AnyView(EmptyView()) - } - } -} - -struct ScrollMapperBibleSettingsView_Previews: PreviewProvider { - static var previews: some View { - ScrollMapperBibleSettingsView() - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Settings/ScrollMapperBibleSettingsViewModel.swift b/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Settings/ScrollMapperBibleSettingsViewModel.swift deleted file mode 100644 index 540c1380..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBible/Views/Roots/Settings/ScrollMapperBibleSettingsViewModel.swift +++ /dev/null @@ -1,82 +0,0 @@ -// -// ScrollMapperBibleSettingsViewModel.swift -// ScrollMapperBible -// -// Created by Zhengqian Kuang on 2020-07-07. -// Copyright © 2020 Kuang. All rights reserved. -// - -import Foundation -import Combine - -class ScrollMapperBibleSettingsViewModel: ObservableObject { - @Published var translation: ScrollMapperBibleVersion.BibleVersion = .KJV { - didSet { - if translation != oldValue { - setupListData() - } - } - } - var translationSubscriber: AnyCancellable? = nil - - init() { - subscribe() - setupListData() - } - - deinit { - unsubscribe() - } - - func subscribe() { - translationSubscriber = scrollMapperBiblePublishers.tranlationPublisher.sink(receiveValue: { (translation) in - self.translation = ScrollMapperBibleVersion.BibleVersion(rawValue: translation) ?? ScrollMapperBibleVersion.BibleVersion.KJV - }) - } - - func unsubscribe() { - translationSubscriber?.cancel() - translationSubscriber = nil - } - - struct Section: Identifiable { - var id = UUID() - var title: String - var items: [Item] - } - - struct Item: Identifiable { - var id = UUID() - var title: String - var detail: String? = nil - var imageName: JKCSImageName? = nil - var navigationLink: Bool = false - } - - static let itemTranslationsTitle = "Translations" - - static let itemCopyrightAndLicenseTitle = "Copyright \u{00A9}" - static let itemVersionTitle = "Version" // Unclickable - - @Published var listData: [Section] = [] - - private func setupListData() { - var listData: [Section] = [] - listData.append( - Section(title: "PREFERENCES", items: [ - Item(title: ScrollMapperBibleSettingsViewModel.itemTranslationsTitle, detail: translation.rawValue, imageName: JKCSImageName.system(systemName: "t.circle"), navigationLink: true) - ]) - ) - listData.append( - Section(title: "ABOUT", items: [ - Item(title: ScrollMapperBibleSettingsViewModel.itemCopyrightAndLicenseTitle, imageName: JKCSImageName.system(systemName: "c.circle"), navigationLink: true), - Item(title: ScrollMapperBibleSettingsViewModel.itemVersionTitle, detail: version(), imageName: JKCSImageName.system(systemName: "arkit")), - ]) - ) - self.listData = listData - } - - private func version() -> String { - return "\(Bundle.main.releaseVersionNumber() ?? "0.0") (\(Bundle.main.buildVersionNumber() ?? "0"))" - } -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBibleTests/Info.plist b/iOS/ScrollMapperBible/ScrollMapperBibleTests/Info.plist deleted file mode 100644 index 64d65ca4..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBibleTests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - $(PRODUCT_BUNDLE_PACKAGE_TYPE) - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/iOS/ScrollMapperBible/ScrollMapperBibleTests/ScrollMapperBibleTests.swift b/iOS/ScrollMapperBible/ScrollMapperBibleTests/ScrollMapperBibleTests.swift deleted file mode 100644 index 86acb68f..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBibleTests/ScrollMapperBibleTests.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// ScrollMapperBibleTests.swift -// ScrollMapperBibleTests -// -// Created by Zhengqian Kuang on 2020-07-01. -// Copyright © 2020 Kuang. All rights reserved. -// - -import XCTest -@testable import ScrollMapperBible - -class ScrollMapperBibleTests: XCTestCase { - - override func setUpWithError() throws { - // Put setup code here. This method is called before the invocation of each test method in the class. - } - - override func tearDownWithError() throws { - // Put teardown code here. This method is called after the invocation of each test method in the class. - } - - func testExample() throws { - // This is an example of a functional test case. - // Use XCTAssert and related functions to verify your tests produce the correct results. - } - - func testPerformanceExample() throws { - // This is an example of a performance test case. - self.measure { - // Put the code you want to measure the time of here. - } - } - -} diff --git a/iOS/ScrollMapperBible/ScrollMapperBibleUITests/Info.plist b/iOS/ScrollMapperBible/ScrollMapperBibleUITests/Info.plist deleted file mode 100644 index 64d65ca4..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBibleUITests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - $(PRODUCT_BUNDLE_PACKAGE_TYPE) - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/iOS/ScrollMapperBible/ScrollMapperBibleUITests/ScrollMapperBibleUITests.swift b/iOS/ScrollMapperBible/ScrollMapperBibleUITests/ScrollMapperBibleUITests.swift deleted file mode 100644 index 5ea5ed45..00000000 --- a/iOS/ScrollMapperBible/ScrollMapperBibleUITests/ScrollMapperBibleUITests.swift +++ /dev/null @@ -1,43 +0,0 @@ -// -// ScrollMapperBibleUITests.swift -// ScrollMapperBibleUITests -// -// Created by Zhengqian Kuang on 2020-07-01. -// Copyright © 2020 Kuang. All rights reserved. -// - -import XCTest - -class ScrollMapperBibleUITests: XCTestCase { - - override func setUpWithError() throws { - // Put setup code here. This method is called before the invocation of each test method in the class. - - // In UI tests it is usually best to stop immediately when a failure occurs. - continueAfterFailure = false - - // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. - } - - override func tearDownWithError() throws { - // Put teardown code here. This method is called after the invocation of each test method in the class. - } - - func testExample() throws { - // UI tests must launch the application that they test. - let app = XCUIApplication() - app.launch() - - // Use recording to get started writing UI tests. - // Use XCTAssert and related functions to verify your tests produce the correct results. - } - - func testLaunchPerformance() throws { - if #available(macOS 10.15, iOS 13.0, tvOS 13.0, *) { - // This measures how long it takes to launch your application. - measure(metrics: [XCTOSSignpostMetric.applicationLaunch]) { - XCUIApplication().launch() - } - } - } -} diff --git a/iOS/ScrollMapperBible/journal.txt b/iOS/ScrollMapperBible/journal.txt deleted file mode 100644 index a6200291..00000000 --- a/iOS/ScrollMapperBible/journal.txt +++ /dev/null @@ -1,18 +0,0 @@ -======== -[@EnvironmentObject] -// https://www.hackingwithswift.com/quick-start/swiftui/how-to-use-environmentobject-to-share-data-between-views - -======== -[PeekabooWKWebView] - -// Ref. -// https://medium.com/john-lewis-software-engineering/ios-wkwebview-communication-using-javascript-and-swift-ee077e0127eb -// https://www.hackingwithswift.com/quick-start/swiftui/how-to-wrap-a-custom-uiview-for-swiftui -// https://www.hackingwithswift.com/articles/112/the-ultimate-guide-to-wkwebview -// https://www.thetopsites.net/article/58336457.shtml // SwiftUI WKWebView detect url changing - -// Trouble-shooting -// https://forums.swift.org/t/uiviewrepresentable-not-updated-when-observed-object-changed/33890 -// https://stackoverflow.com/questions/60971068/swiftui-wkwebview-not-loading - -========