def demo(): """ Demonstrate how some of the above classes can be used. """ from VerseReferences import SimpleVerseKey if BibleOrgSysGlobals.verbosityLevel > 0: print(ProgNameVersion) testRefs = ( ('GEN', '1', '1'), ('JER', '33', '3'), ('MAL', '4', '6'), ('MAT', '1', '1'), ('JHN', '3', '16'), ('JDE', '1', '14'), ('REV', '22', '21'), ) if 1: # Test the GenericOnlineBible class print() dbpBible1 = GenericOnlineBible() print(dbpBible1) for testRef in testRefs: verseKey = SimpleVerseKey(*testRef) print(verseKey) dbpBible1.cacheVerse(verseKey, [f"Verse text for {verseKey}"]) print(f" Cache length: {len(dbpBible1.cache)}") print(" ", dbpBible1.getCachedVerseDataList(verseKey)) # Now test the GenericOnlineBible class caching print() for testRef in testRefs: verseKey = SimpleVerseKey(*testRef) print(verseKey, "cached") print(" ", dbpBible1.getCachedVerseDataList(verseKey))
def demo(): """ Main program to handle command line parameters and then run what they want. """ if BibleOrgSysGlobals.verbosityLevel > 0: print(ProgNameVersion) fileFolder = "../../../ExternalPrograms/morphgnt/sblgnt/" # Demonstrate the Greek NT class if BibleOrgSysGlobals.verbosityLevel > 1: print("\nDemonstrating the Greek NT class…") testReference = SimpleVerseKey('MAT', '1', '1') #print( testFolder, testReference ) gNT = GreekNT(fileFolder) # Load and process the XML gNT.loadBooks() #gNT.analyzeWords() # File and sort the Greek words for later use print(gNT) # Just print a summary print() print(testReference, gNT.getVerseDataList(testReference)) print() for testReference in SimpleVerseKey('MAT', '28', '1'), SimpleVerseKey( 'MRK', '2', '2'), SimpleVerseKey('REV', '21', '21'): verseText = gNT.getVerseText(testReference) print(testReference, verseText) print()
def demo(): """ Main program to handle command line parameters and then run what they want. """ from VerseReferences import SimpleVerseKey if BibleOrgSysGlobals.verbosityLevel > 1: print( ProgNameVersion ) # Demo the BibleReferencesLinks object brl = BibleReferencesLinks().loadData() # Doesn't reload the XML unnecessarily :) print( brl ) # Just print a summary testKeys = ( 'MAT_1:23', 'MAT_3:12', 'MRK_7:7', 'ACT_7:8', 'ISA_7:14', ) print( "\nTest full passage list…" ) for verseReferenceString in testKeys: svk = SimpleVerseKey( verseReferenceString ) print( svk.getShortText() ) #print( svk, brl.getFullRelatedPassagesList( svk ) ) relatedPassageList = brl.getFullRelatedPassagesList( svk ) if relatedPassageList: for relatedPassage in relatedPassageList: #print( ' ', relatedPassage ) sourceReference,sourceComponent,parsedSourceReference,actualLinksList = relatedPassage print( ' ', sourceReference ) for actualLink in actualLinksList: #print( ' ', actualLink ) targetReference,targetComponent,parsedTargetReference,linkType = actualLink print( ' ', linkType, targetReference ) print( "\nTest passage list…" ) for verseReferenceString in testKeys: svk = SimpleVerseKey( verseReferenceString ) print( svk.getVerseKeyText(), brl.getRelatedPassagesList( svk ) )
def updateGenericGlossingReferences( self ): """ Go through the entire WLC and check for words that we already have a gloss for and update the reference fields. """ from VerseReferences import SimpleVerseKey if BibleOrgSysGlobals.verbosityLevel > 1: print( _("Updating references for WLC generic glosses…") ) self.loadBooks() numRefsAdded = 0 for BBB,bookObject in self.books.items(): # These don't seem to be in order! # The following few lines show a way to iterate through all verses # (assuming all chapters are full of verses -- not sure how it handles bridged verses) C = V = 1 #print( BBB ) while True: currentVerseKey = SimpleVerseKey( BBB, C, V ) try: verseDataList, context = self.getContextVerseData( currentVerseKey ) except KeyError: C, V = C+1, 1 currentVerseKey = SimpleVerseKey( BBB, C, V ) try: verseDataList, context = self.getContextVerseData( currentVerseKey ) except KeyError: break # start next book #print( "context", context ) #print( "verseDataList", verseDataList ) for verseDataEntry in verseDataList: #print( "verseDataEntry", verseDataEntry ) assert isinstance( verseDataEntry, InternalBibleEntry ) marker, cleanText, extras = verseDataEntry.getMarker(), verseDataEntry.getCleanText(), verseDataEntry.getExtras() adjustedText, originalText = verseDataEntry.getAdjustedText(), verseDataEntry.getOriginalText() if marker in ('v~','p~'): verseDictList = self.getVerseDictList( verseDataEntry, currentVerseKey ) #print( currentVerseKey.getShortText(), "verseDictList", verseDictList ) for j,verseDict in enumerate( verseDictList ): # each verseDict represents one word or token fullRefTuple = (BBB,str(C),str(V),str(j+1)) #print( fullRefTuple, verseDict ) word = verseDict['word'] normalizedHebrewWord = self.removeCantillationMarks( word, removeMetegOrSiluq=True ) \ .replace( ORIGINAL_MORPHEME_BREAK_CHAR, OUR_MORPHEME_BREAK_CHAR ) #print( ' ', len(word), repr(word), len(normalizedHebrewWord), repr(normalizedHebrewWord) ) genericGloss,genericReferencesList,specificReferencesDict = self.glossingDict[normalizedHebrewWord] \ if normalizedHebrewWord in self.glossingDict else ('',[],{}) #if genericGloss: print( fullRefTuple, repr(genericGloss) ) if genericGloss and genericGloss not in '־׃ספ-' and fullRefTuple not in genericReferencesList: #print( " Adding {}".format( fullRefTuple ) ) self.addNewGenericGlossingReference( normalizedHebrewWord, fullRefTuple ) numRefsAdded += 1 V = V + 1 if BibleOrgSysGlobals.verbosityLevel > 0: print( " {} new references added ({} words in dict)".format( numRefsAdded, len(self.glossingDict) ) )
def mapParallelVerseKey( forGroupCode, mainVerseKey ): """ Returns the verse key for synoptic references in the NT, etc. Returns None if we don't have a mapping. """ if BibleOrgSysGlobals.debugFlag and debuggingThisModule: print( exp("mapParallelVerseKey( {}, {} )").format( forGroupCode, mainVerseKey.getShortText() ) ) groupIndex = BIBLE_GROUP_CODES.index( forGroupCode ) - 1 parallelVerseKeyDict = { SimpleVerseKey('MAT','3','13'): (SimpleVerseKey('MRK','1','9'), SimpleVerseKey('LUK','3','21'), SimpleVerseKey('JHN','1','31') ) } if mainVerseKey in parallelVerseKeyDict: if BibleOrgSysGlobals.debugFlag and debuggingThisModule: print( ' returning {}'.format( parallelVerseKeyDict[mainVerseKey][groupIndex].getShortText() ) ) return parallelVerseKeyDict[mainVerseKey][groupIndex]
def mapReferenceVerseKey( mainVerseKey ): """ Returns the verse key for OT references in the NT (and vv), etc. Returns None if we don't have a mapping. """ if BibleOrgSysGlobals.debugFlag and debuggingThisModule: print( exp("mapReferenceVerseKey( {} )").format( mainVerseKey.getShortText() ) ) # A (temporary) dictionary containing NT references to OT REFERENCE_VERSE_KEY_DICT = { SimpleVerseKey('MAT','2','18'): SimpleVerseKey('JER','31','15'), SimpleVerseKey('MAT','3','3'): SimpleVerseKey('ISA','40','3'), } if mainVerseKey in REFERENCE_VERSE_KEY_DICT: if BibleOrgSysGlobals.debugFlag and debuggingThisModule: print( ' returning {}'.format( REFERENCE_VERSE_KEY_DICT[mainVerseKey].getShortText() ) ) return REFERENCE_VERSE_KEY_DICT[mainVerseKey]
def demo(): """ Demonstrate how some of the above classes can be used. """ if Globals.verbosityLevel > 0: print(ProgNameVersion) if 1: # Test the DBPBibles class print() dbpBibles = DBPBibles() print(dbpBibles) #if 0: #for someName in dbpBibles.volumeNameList: #if 'English' in someName: print( "English:", someName, dbpBibles.volumeNameList[someName] ) print("English search", dbpBibles.searchNames("English")) print("MS search", dbpBibles.searchNames("Salug")) if 1: # Test the DBPBible class print() dbpBible1 = DBPBible("ENGESV") print(dbpBible1) for verseKey in ( SimpleVerseKey('GEN', '1', '1'), SimpleVerseKey('MAT', '1', '1'), SimpleVerseKey('JHN', '3', '16'), ): print(verseKey) print(dbpBible1.getVerseData(verseKey)) if 1: # Test the DBPBible class print() dbpBible2 = DBPBible("MBTWBT") print(dbpBible2) for verseKey in ( SimpleVerseKey('MAT', '1', '1'), SimpleVerseKey('JHN', '3', '16'), ): print(verseKey) print(dbpBible2.getVerseData(verseKey))
def updateShownBCV(self, newReferenceVerseKey, originator=None): """ """ if BibleOrgSysGlobals.debugFlag and debuggingThisModule: print( "BibleReferenceCollectionWindow.updateShownBCV( {}, {} ) for". format(newReferenceVerseKey, originator), self.moduleID) assert isinstance(newReferenceVerseKey, SimpleVerseKey) refBBB, refC, refV, refS = newReferenceVerseKey.getBCVS() BBB, C, V, S = self.BibleOrganisationalSystem.convertFromReferenceVersification( refBBB, refC, refV, refS) newVerseKey = SimpleVerseKey(BBB, C, V, S) self.updateShownReferences(mapReferencesVerseKey(newVerseKey))
def demo(): """ Main program to handle command line parameters and then run what they want. """ if BibleOrgSysGlobals.verbosityLevel > 0: print(ProgNameVersion) from VerseReferences import SimpleVerseKey # Demonstrate the Hebrew WLC class #testFile = "../morphhb/wlc/Ruth.xml" # Hebrew Ruth testFile = "../morphhb/wlc/Dan.xml" # Hebrew Daniel testReference = ('DAN', '1', '5') testKey = SimpleVerseKey(testReference[0], testReference[1], testReference[2]) if BibleOrgSysGlobals.verbosityLevel > 1: print("\nDemonstrating the Hebrew WLC class...") #print( testFile, testReference ) wlc = HebrewWLC(testFile) wlc.load() # Load and process the XML print(wlc) # Just print a summary print() print(wlc.getVerseData(testKey)) print() verseText = wlc.getVerseText(testKey) wlc.currentText = verseText print("These all display left-to-right in the terminal unfortunately :-(") print(verseText) verseText = wlc.removeMorphemeBreaks() print() print(verseText) verseText = wlc.removeCantillationMarks() print() print(verseText) consonantalVerseText = wlc.removeVowelPointing() print() print(consonantalVerseText) print()
def updateShownReferences(self, newReferenceObject): """ Updates self in various ways depending on the contextViewMode held by the enclosing window. The new verse references are in the reference versification system in one of these objects: SimpleVerseKey (accepts 'GEN_1:1' or 'GEN','1','1') SimpleVersesKey (accepts 'MAT_6:1,4') VerseRangeKey (accepts 'JNA_2:1-7') Leaves the textbox in the disabled state. """ if BibleOrgSysGlobals.debugFlag and debuggingThisModule: print( "BibleReferenceBox.updateShownReferences( {} ) for {}".format( newReferenceObject, self.internalBible.getAName())) assert isinstance( newReferenceObject, SimpleVerseKey) or isinstance( newReferenceObject, SimpleVersesKey) or isinstance( newReferenceObject, VerseRangeKey) for j, referenceVerse in enumerate(newReferenceObject): #print( " refVerse", j, referenceVerse ) assert isinstance(referenceVerse, SimpleVerseKey) refBBB, refC, refV, refS = referenceVerse.getBCVS() BBB, C, V, S = self.BibleOrganisationalSystem.convertFromReferenceVersification( refBBB, refC, refV, refS) newVerseKey = SimpleVerseKey(BBB, C, V, S) #print( " newVK", newVerseKey ) # Set firstFlag as False (rather than j==0) so don't get context displayed self.displayAppendVerse(False, newVerseKey, self.getCachedVerseData(newVerseKey), lastFlag=False) self.textBox.configure(state=tk.DISABLED) # Don't allow editing
def demo(): """ Main program to handle command line parameters and then run what they want. """ from VerseReferences import SimpleVerseKey if BibleOrgSysGlobals.verbosityLevel > 1: print(ProgNameVersion) # Demo the BibleReferencesLinks object brl = BibleReferencesLinks().loadData( ) # Doesn't reload the XML unnecessarily :) print(brl) # Just print a summary testKeys = ( 'MAT_1:23', 'MAT_3:12', 'MRK_7:7', 'ACT_7:8', 'ISA_7:14', ) print("\nTest full passage list...") for verseReferenceString in testKeys: svk = SimpleVerseKey(verseReferenceString) print(svk.getShortText()) #print( svk, brl.getFullRelatedPassagesList( svk ) ) relatedPassageList = brl.getFullRelatedPassagesList(svk) if relatedPassageList: for relatedPassage in relatedPassageList: #print( ' ', relatedPassage ) sourceReference, sourceComponent, parsedSourceReference, actualLinksList = relatedPassage print(' ', sourceReference) for actualLink in actualLinksList: #print( ' ', actualLink ) targetReference, targetComponent, parsedTargetReference, linkType = actualLink print(' ', linkType, targetReference) print("\nTest passage list...") for verseReferenceString in testKeys: svk = SimpleVerseKey(verseReferenceString) print(svk.getVerseKeyText(), brl.getRelatedPassagesList(svk))
def findCurrentSection( currentVerseKey, getNumChapters, getNumVerses, getVerseData ): """ Given the current verseKey and functions to find the number of chapters and verses in the book and a function to get verse data (probably cached), find the beginning and end of the current section. Returns the verseKey for the start of the section and for the end of the section -- well actually the start of the next section. If no sections are found, it goes a maximum of one chapter back or one chapter forward. """ if BibleOrgSysGlobals.debugFlag and debuggingThisModule: print( exp("findCurrentSection( {}, … )").format( currentVerseKey.getShortText() ) ) def sectionFoundIn( verseData ): """ Given some verse data (a string or an InternalBibleEntryList returns True or False whether a section heading is found in it """ if BibleOrgSysGlobals.debugFlag and debuggingThisModule: print( exp("sectionFoundIn( {!r} )").format( verseData ) ) if verseData is None: return False elif isinstance( verseData, str ): #print( " It's a string!" ) if '\\s ' in thisVerseData or '\\s1' in thisVerseData \ or '\\s2' in thisVerseData or '\\s3' in thisVerseData: return True elif isinstance( verseData, tuple ): #print( " It's an InternalBibleEntryList!" ) assert len(verseData) == 2 verseDataList, context = verseData #print( ' dataList', repr(verseDataList) ) #print( ' context', repr(context) ) for verseDataEntry in verseDataList: if isinstance( verseDataEntry, InternalBibleEntry ): marker, cleanText = verseDataEntry.getMarker(), verseDataEntry.getCleanText() elif isinstance( verseDataEntry, tuple ): marker, cleanText = verseDataEntry[0], verseDataEntry[3] elif isinstance( verseDataEntry, str ): if verseDataEntry=='': continue verseDataEntry += '\n' if verseDataEntry[0]=='\\': marker = '' for char in verseDataEntry[1:]: if char!='¬' and not char.isalnum(): break marker += char cleanText = verseDataEntry[len(marker)+1:].lstrip() else: marker, cleanText = None, verseDataEntry elif BibleOrgSysGlobals.debugFlag: halt if marker in ( 's','s1','s2','s3','s4' ): return True else: print( 'Ooops', repr(verseData) ) print( verseData.__type__ ) halt # Programming error return False # end of sectionFoundIn # Start of main section of findCurrentSection BBB, C, V = currentVerseKey.getBCV() intC, intV = currentVerseKey.getChapterNumberInt(), currentVerseKey.getVerseNumberInt() #print( 'fCS at', BBB, C, intC, V, intV ) # First let's find the beginning of the section # which could be in the current verse/chapter, # or in the previous chapter (at most we assume) #print( 'fCS finding start…' ) firstC = max( intC-1, 0 ) found = False for thisC in reversed( range( firstC, intC+1 ) ): # Look backwards numVerses = getNumVerses( BBB, thisC ) startV, endV = 0, numVerses if thisC == intC: endV = min( intV, numVerses ) for thisV in reversed( range( startV, endV+1 ) ): thisVerseKey = SimpleVerseKey( BBB, thisC, thisV ) thisVerseData = getVerseData( thisVerseKey ) if debuggingThisModule: ( ' ', thisC, thisV, repr(thisVerseData) ) if sectionFoundIn( thisVerseData ): found = thisC, thisV; break if found: break if not found: found = firstC, 0 startKey = SimpleVerseKey( BBB, found[0], found[1] ) # Now let's find the end of the section # which could be in the current chapter, or in the next chapter (at most we assume) #print( 'fCS finding end…' ) lastC = min( intC+1, getNumChapters( BBB ) ) found = False for thisC in range( intC, lastC+1 ): numVerses = getNumVerses( BBB, thisC ) startV, endV = 0, numVerses if thisC == intC: startV = min( intV+1, numVerses ) for thisV in range( startV, endV+1 ): thisVerseKey = SimpleVerseKey( BBB, thisC, thisV ) thisVerseData = getVerseData( thisVerseKey ) if debuggingThisModule: ( ' ', thisC, thisV, repr(thisVerseData) ) if sectionFoundIn( thisVerseData ): found = thisC, thisV; break if found: break if not found: found = lastC, numVerses endKey = SimpleVerseKey( BBB, found[0], found[1] ) #print( "fCS returning", startKey.getShortText(), endKey.getShortText() ) return startKey, endKey
def demo(): """ Demonstrate how some of the above classes can be used. """ from VerseReferences import SimpleVerseKey if BibleOrgSysGlobals.verbosityLevel > 0: print(ProgNameVersion, end='\n\n') if 1: # Test the DCSBibles class dcsBibles = DCSBibles() if BibleOrgSysGlobals.verbosityLevel > 0: print(dcsBibles, end='\n\n') #dcsBibles.load() # takes a minute #print( dcsBibles ) if 1: dcsBibles.fetchAllBibles() if BibleOrgSysGlobals.verbosityLevel > 0: print("Bible list ({}):".format(len(dcsBibles.BibleList))) for j, BibleDict in enumerate(dcsBibles.BibleList): ownerName = BibleDict['owner']['full_name'] if not ownerName: ownerName = BibleDict['owner']['username'] if BibleOrgSysGlobals.verbosityLevel > 1: print( f" Entry {j:3} '{BibleDict['name']}' '{ownerName}'") testRefs = ( ('GEN', '1', '1'), ('GEN', '2', '2'), ('JER', '33', '3'), ('MAL', '4', '6'), ('MAT', '1', '1'), ('JHN', '3', '16'), ('JDE', '1', '14'), ('REV', '22', '21'), ) if 1: # Test the DCSBible class with the ULT downloadAllBooks = True if BibleOrgSysGlobals.verbosityLevel > 0: print() searchResult = dcsBibles.searchRepos('unfoldingWord', 'en_ult') #print( 'searchResult', searchResult ) if searchResult and isinstance(searchResult, dict): dcsBible1 = DCSBible(searchResult, downloadAllBooks=downloadAllBooks) try: dcsBible1.preload() except FileNotFoundError: assert downloadAllBooks == False if BibleOrgSysGlobals.verbosityLevel > 1: print(dcsBible1, end='\n\n') for testRef in testRefs: verseKey = SimpleVerseKey(*testRef) if BibleOrgSysGlobals.verbosityLevel > 0: print(verseKey) print(" ", dcsBible1.getVerseDataList(verseKey)) elif BibleOrgSysGlobals.verbosityLevel > 0: print(f"Unexpected search result: {searchResult}") if 1: # Test the DCSBible class with the UST downloadAllBooks = False if BibleOrgSysGlobals.verbosityLevel > 0: print() searchResult = dcsBibles.searchRepos('unfoldingWord', 'en_ust') #print( 'searchResult', searchResult ) if searchResult and isinstance(searchResult, dict): dcsBible1 = DCSBible(searchResult, downloadAllBooks=downloadAllBooks) try: dcsBible1.preload() except FileNotFoundError: assert downloadAllBooks == False if BibleOrgSysGlobals.verbosityLevel > 1: print(dcsBible1, end='\n\n') for testRef in testRefs: verseKey = SimpleVerseKey(*testRef) if BibleOrgSysGlobals.verbosityLevel > 0: print(verseKey) print(" ", dcsBible1.getVerseDataList(verseKey)) elif BibleOrgSysGlobals.verbosityLevel > 0: print(f"Unexpected search result: {searchResult}")
def importDataToPython(self): """ Loads (and pivots) the data (not including the header) into suitable Python containers to use in a Python program. (Of course, you can just use the elementTree in self._XMLtree if you prefer.) """ def makeList(parameter1, parameter2): """ Returns a list containing all parameters. Parameter1 may already be a list. """ if isinstance(parameter1, list): #assert( parameter2 not in parameter1 ) parameter1.append(parameter2) return parameter1 else: return [parameter1, parameter2] # end of makeList assert (self._XMLtree) if self.__DataList: # We've already done an import/restructuring -- no need to repeat it return self.__DataList, self.__DataDict # We'll create a number of dictionaries with different elements as the key rawRefLinkList = [] actualLinkCount = 0 for element in self._XMLtree: #print( BibleOrgSysGlobals.elementStr( element ) ) # Get these first for helpful error messages sourceReference = element.find('sourceReference').text sourceComponent = element.find('sourceComponent').text assert (sourceComponent in ( 'Section', 'Verses', 'Verse', )) BibleOrgSysGlobals.checkXMLNoText(element, sourceReference, 'kls1') BibleOrgSysGlobals.checkXMLNoAttributes(element, sourceReference, 'kd21') BibleOrgSysGlobals.checkXMLNoTail(element, sourceReference, 'so20') actualRawLinksList = [] for subelement in element: #print( BibleOrgSysGlobals.elementStr( subelement ) ) if subelement.tag in ( 'sourceReference', 'sourceComponent', ): # already processed these BibleOrgSysGlobals.checkXMLNoAttributes( subelement, sourceReference, 'ls12') BibleOrgSysGlobals.checkXMLNoSubelements( subelement, sourceReference, 'ks02') BibleOrgSysGlobals.checkXMLNoTail(subelement, sourceReference, 'sqw1') elif subelement.tag == 'BibleReferenceLink': BibleOrgSysGlobals.checkXMLNoText(subelement, sourceReference, 'haw9') BibleOrgSysGlobals.checkXMLNoAttributes( subelement, sourceReference, 'hs19') BibleOrgSysGlobals.checkXMLNoTail(subelement, sourceReference, 'jsd9') targetReference = subelement.find('targetReference').text targetComponent = subelement.find('targetComponent').text assert (targetComponent in ( 'Section', 'Verses', 'Verse', )) linkType = subelement.find('linkType').text assert (linkType in ( 'TSK', 'QuotedOTReference', 'AlludedOTReference', 'PossibleOTReference', )) actualRawLinksList.append(( targetReference, targetComponent, linkType, )) actualLinkCount += 1 rawRefLinkList.append(( sourceReference, sourceComponent, actualRawLinksList, )) if BibleOrgSysGlobals.verbosityLevel > 1: print(" {} raw links loaded (with {} actual raw link entries)". format(len(rawRefLinkList), actualLinkCount)) myRefLinkList = [] actualLinkCount = 0 BOS = BibleOrganizationalSystem("GENERIC-KJV-66-ENG") for j, (sourceReference, sourceComponent, actualRawLinksList) in enumerate(rawRefLinkList): # Just do some testing first if sourceComponent == 'Verse': x = SimpleVerseKey(sourceReference) else: flag = False try: x = SimpleVerseKey(sourceReference, ignoreParseErrors=True) flag = True except TypeError: pass # This should happen coz it should fail the SVK if flag: logging.error("{} {!r} failed!".format( sourceComponent, sourceReference)) raise TypeError # Now do the actual parsing parsedSourceReference = FlexibleVersesKey(sourceReference) if BibleOrgSysGlobals.debugFlag and debuggingThisModule: print(j, sourceComponent, sourceReference, parsedSourceReference) #assert( parsedSourceReference.getShortText().replace(' ','_') == sourceReference ) actualLinksList = [] for k, (targetReference, targetComponent, linkType) in enumerate(actualRawLinksList): # Just do some testing first if targetComponent == 'Verse': x = SimpleVerseKey(targetReference) else: flag = False try: x = SimpleVerseKey(targetReference, ignoreParseErrors=True) flag = True except TypeError: pass # This should happen coz it should fail the SVK if flag: logging.error("{} {!r} failed!".format( targetComponent, targetReference)) raise TypeError # Now do the actual parsing try: parsedTargetReference = FlexibleVersesKey(targetReference) except TypeError: print( " Temporarily ignored {!r} (TypeError from FlexibleVersesKey)" .format(targetReference)) parsedTargetReference = None if BibleOrgSysGlobals.debugFlag and debuggingThisModule: print(' ', targetComponent, targetReference, parsedTargetReference) #assert( parsedTargetReference.getShortText().replace(' ','_',1) == targetReference ) actualLinksList.append(( targetReference, targetComponent, parsedTargetReference, linkType, )) actualLinkCount += 1 myRefLinkList.append(( sourceReference, sourceComponent, parsedSourceReference, actualLinksList, )) if BibleOrgSysGlobals.verbosityLevel > 1: print(" {} links processed (with {} actual link entries)".format( len(rawRefLinkList), actualLinkCount)) #print( myRefLinkList ); halt self.__DataList = myRefLinkList # Now put it into my dictionaries for easy access # This part should be customized or added to for however you need to process the data # Create a link dictionary (by verse key) myRefLinkDict = {} for sourceReference, sourceComponent, parsedSourceReference, actualLinksList in myRefLinkList: #print( sourceReference, sourceComponent, parsedSourceReference ) #print( sourceReference, sourceComponent, parsedSourceReference, actualLinksList ) for verseRef in parsedSourceReference.getIncludedVerses(): #print( verseRef ) assert (isinstance(verseRef, SimpleVerseKey)) if verseRef not in myRefLinkDict: myRefLinkDict[verseRef] = [] myRefLinkDict[verseRef].append(( sourceReference, sourceComponent, parsedSourceReference, actualLinksList, )) #print( myRefLinkDict ); halt originalLinks = len(myRefLinkDict) print( " {} verse links added to dictionary (includes filling out spans)" .format(originalLinks)) #print( myRefLinkDict ); halt # Create a reversed link dictionary (by verse key) for sourceReference, sourceComponent, parsedSourceReference, actualLinksList in myRefLinkList: #print( sourceReference, sourceComponent, parsedSourceReference ) #print( sourceReference, sourceComponent, parsedSourceReference, actualLinksList ) for targetReference, targetComponent, parsedTargetReference, linkType in actualLinksList: if parsedTargetReference is not None: for verseRef in parsedTargetReference.getIncludedVerses(): #print( verseRef ) assert (isinstance(verseRef, SimpleVerseKey)) if linkType == 'TSK': reverseLinkType = 'TSKQuoted' elif linkType == 'QuotedOTReference': reverseLinkType = 'OTReferenceQuoted' elif linkType == 'AlludedOTReference': reverseLinkType = 'OTReferenceAlluded' elif linkType == 'PossibleOTReference': reverseLinkType = 'OTReferencePossible' else: halt # Have a new linkType! if verseRef not in myRefLinkDict: myRefLinkDict[verseRef] = [] myRefLinkDict[verseRef].append( (targetReference, targetComponent, parsedTargetReference, [ (sourceReference, sourceComponent, parsedSourceReference, reverseLinkType) ])) #print( myRefLinkDict ); halt totalLinks = len(myRefLinkDict) reverseLinks = totalLinks - originalLinks print(" {} reverse links added to dictionary to give {} total".format( reverseLinks, totalLinks)) #print( myRefLinkDict ); halt self.__DataDict = myRefLinkDict # Let's find the most number of references for a verse mostReferences = totalReferences = 0 for verseRef, entryList in self.__DataDict.items(): numRefs = len(entryList) if numRefs > mostReferences: mostReferences, mostVerseRef = numRefs, verseRef totalReferences += numRefs print(" {} maximum links for any one reference ({})".format( mostReferences, mostVerseRef.getShortText())) print(" {} total links for all references".format(totalReferences)) return self.__DataList, self.__DataDict
def demo(): """ Demonstrate how some of the above classes can be used. """ if BibleOrgSysGlobals.verbosityLevel > 0: print(ProgNameVersion) if 1: # Test the DBPBibles class print() dbpBibles = DBPBibles() print(dbpBibles) #dbpBibles.load() # takes a minute #print( dbpBibles ) if 0: dbpBibles.fetchAllLanguages() print("\nLanguage list ({}):".format(len(dbpBibles.languageList))) for j, lgDict in enumerate(dbpBibles.languageList): print('Lg', j, repr(lgDict)) if 0: dbpBibles.fetchAllVersions() print("\nVersion list ({}):".format(len(dbpBibles.versionList))) for j, verDict in enumerate(dbpBibles.versionList): print('Ver', j, repr(verDict)) if 0: dbpBibles.fetchAllVolumes() print("\nVolume list ({}):".format(len(dbpBibles.volumeList))) for j, volDict in enumerate(dbpBibles.volumeList): print(' ', j, repr(volDict)) print("393", dbpBibles.volumeList[393]) print("394", dbpBibles.volumeList[394]) print("395", dbpBibles.volumeList[395]) if 0: dbpBibles.fetchTextVolumes() print("\nVolume name dict ({}):".format( len(dbpBibles.volumeNameDict))) for j, someName in enumerate(dbpBibles.volumeNameDict): #if 'English' in someName: #print( "English:", repr(someName), repr(dbpBibles.volumeNameDict[someName]) ) print(j, repr(someName), repr(dbpBibles.volumeNameDict[someName])) #if 'English' in someName: #print( " English:", repr(someName), repr(dbpBibles.volumeNameDict[someName]) ) print("English search", dbpBibles.searchNames("English")) print("MS search", dbpBibles.searchNames("Salug")) if 1: dbpBibles.fetchAllEnglishTextVolumes() print("\nEnglish volume name dict ({}):".format( len(dbpBibles.EnglishVolumeNameDict))) for j, someName in enumerate(dbpBibles.EnglishVolumeNameDict): #if 'English' in someName: #print( "English:", repr(someName), repr(dbpBibles.EnglishVolumeNameDict[someName]) ) print(" {}/ {!r} {!r}".format( j, someName, dbpBibles.EnglishVolumeNameDict[someName])) #if 'English' in someName: #print( " English:", repr(someName), repr(dbpBibles.EnglishVolumeNameDict[someName]) ) testRefs = ( ('GEN', '1', '1'), ('JER', '33', '3'), ('MAL', '4', '6'), ('MAT', '1', '1'), ('JHN', '3', '16'), ('JDE', '1', '14'), ('REV', '22', '21'), ) if 1: # Test the DBPBible class with the ESV print() dbpBible1 = DBPBible("ENGESV") print(dbpBible1) for testRef in testRefs: verseKey = SimpleVerseKey(*testRef) print(verseKey) print(" ", dbpBible1.getVerseData(verseKey)) # Now test the DBPBible class caching for testRef in testRefs: verseKey = SimpleVerseKey(*testRef) print(verseKey, "cached") print(" ", dbpBible1.getVerseData(verseKey)) if 1: # Test the DBPBible class with the MS print() dbpBible2 = DBPBible("MBTWBT") print(dbpBible2) for testRef in testRefs: verseKey = SimpleVerseKey(*testRef) print(verseKey) print(" ", dbpBible2.getVerseData(verseKey))
def __init__( self, parentWindow, parentApp, internalBible, referenceObject ): if BibleOrgSysGlobals.debugFlag: print( exp("BibleReferenceBox.__init__( {}, {}, {}, {} )").format( parentWindow, parentApp, internalBible.name, referenceObject ) ) self.parentWindow, self.parentApp, self.internalBible, self.referenceObject = parentWindow, parentApp, internalBible, referenceObject #self.parentApp = self.parentWindow.parentApp Frame.__init__( self, parentWindow ) BibleBox.__init__( self, self.parentApp ) # Set some dummy values required soon self._viewRadioVar, self._groupRadioVar = tk.IntVar(), tk.StringVar() self.groupCode = BIBLE_GROUP_CODES[0] # Put into first/default BCV group self.contextViewMode = DEFAULT self.viewMode = DEFAULT self.currentVerseKey = SimpleVerseKey( 'UNK','1','1' ) # Unknown book if self.contextViewMode == DEFAULT: self.contextViewMode = 'ByVerse' self.parentWindow.viewVersesBefore, self.parentWindow.viewVersesAfter = 2, 6 # Create a title bar titleBar = Frame( self ) Button( titleBar, text=_('Close'), command=self.doClose ).pack( side=tk.RIGHT ) ## Try to get the title width somewhere near correct (if moduleID is a long path) #adjModuleID = moduleID #self.update() # so we can get the geometry #width = parseWindowSize( self.parentWindow.geometry() )[0] - 60 # Allow for above button #if len(adjModuleID)*10 > width: # Note: this doesn't adjust if the window size is changed #print( "BRB here1", len(adjModuleID), width, repr(adjModuleID) ) #x = len(adjModuleID)*100/width # not perfect (too small) for narrow windows #adjModuleID = '…' + adjModuleID[int(x):] #print( "BRB here2", len(adjModuleID), x, repr(adjModuleID) ) #titleText = '{} ({})'.format( adjModuleID, boxType.replace( 'BibleReferenceBox', '' ) ) titleText = self.referenceObject.getShortText() self.titleLabel = tk.Label( titleBar, text=titleText ) self.titleLabel.pack( side=tk.TOP, fill=tk.X ) titleBar.pack( side=tk.TOP, fill=tk.X ) # Create a scroll bar to fill the right-hand side of the window self.vScrollbar = Scrollbar( self ) self.vScrollbar.pack( side=tk.RIGHT, fill=tk.Y ) self.textBox = tk.Text( self, height=4, yscrollcommand=self.vScrollbar.set ) self.textBox['wrap'] = 'word' self.textBox.pack( expand=tk.YES, fill=tk.X ) # Full width self.vScrollbar.config( command=self.textBox.yview ) # link the scrollbar to the text box self.createStandardKeyboardBindings() self.textBox.bind( "<Button-1>", self.setFocus ) # So disabled text box can still do select and copy functions # Set-up our standard Bible styles for USFMKey, styleDict in self.parentApp.stylesheet.getTKStyles().items(): self.textBox.tag_configure( USFMKey, **styleDict ) # Create the style # Add our extra specialised styles self.textBox.tag_configure( 'contextHeader', background='pink', font='helvetica 6 bold' ) self.textBox.tag_configure( 'context', background='pink', font='helvetica 6' ) self.pack( expand=tk.YES, fill=tk.BOTH ) # Pack the frame # Set-up our Bible system and our callables self.BibleOrganisationalSystem = BibleOrganizationalSystem( "GENERIC-KJV-66-ENG" ) # temp self.getNumChapters = self.BibleOrganisationalSystem.getNumChapters self.getNumVerses = lambda b,c: 99 if c=='0' or c==0 else self.BibleOrganisationalSystem.getNumVerses( b, c ) self.isValidBCVRef = self.BibleOrganisationalSystem.isValidBCVRef self.getFirstBookCode = self.BibleOrganisationalSystem.getFirstBookCode self.getPreviousBookCode = self.BibleOrganisationalSystem.getPreviousBookCode self.getNextBookCode = self.BibleOrganisationalSystem.getNextBookCode self.getBBB = self.BibleOrganisationalSystem.getBBB self.getBookName = self.BibleOrganisationalSystem.getBookName self.getBookList = self.BibleOrganisationalSystem.getBookList self.maxChapters, self.maxVerses = 150, 150 # temp self.verseCache = OrderedDict() self.updateShownReferences( self.referenceObject )
class BibleReferenceBox( Frame, BibleBox ): """ """ def __init__( self, parentWindow, parentApp, internalBible, referenceObject ): if BibleOrgSysGlobals.debugFlag: print( exp("BibleReferenceBox.__init__( {}, {}, {}, {} )").format( parentWindow, parentApp, internalBible.name, referenceObject ) ) self.parentWindow, self.parentApp, self.internalBible, self.referenceObject = parentWindow, parentApp, internalBible, referenceObject #self.parentApp = self.parentWindow.parentApp Frame.__init__( self, parentWindow ) BibleBox.__init__( self, self.parentApp ) # Set some dummy values required soon self._viewRadioVar, self._groupRadioVar = tk.IntVar(), tk.StringVar() self.groupCode = BIBLE_GROUP_CODES[0] # Put into first/default BCV group self.contextViewMode = DEFAULT self.viewMode = DEFAULT self.currentVerseKey = SimpleVerseKey( 'UNK','1','1' ) # Unknown book if self.contextViewMode == DEFAULT: self.contextViewMode = 'ByVerse' self.parentWindow.viewVersesBefore, self.parentWindow.viewVersesAfter = 2, 6 # Create a title bar titleBar = Frame( self ) Button( titleBar, text=_('Close'), command=self.doClose ).pack( side=tk.RIGHT ) ## Try to get the title width somewhere near correct (if moduleID is a long path) #adjModuleID = moduleID #self.update() # so we can get the geometry #width = parseWindowSize( self.parentWindow.geometry() )[0] - 60 # Allow for above button #if len(adjModuleID)*10 > width: # Note: this doesn't adjust if the window size is changed #print( "BRB here1", len(adjModuleID), width, repr(adjModuleID) ) #x = len(adjModuleID)*100/width # not perfect (too small) for narrow windows #adjModuleID = '…' + adjModuleID[int(x):] #print( "BRB here2", len(adjModuleID), x, repr(adjModuleID) ) #titleText = '{} ({})'.format( adjModuleID, boxType.replace( 'BibleReferenceBox', '' ) ) titleText = self.referenceObject.getShortText() self.titleLabel = tk.Label( titleBar, text=titleText ) self.titleLabel.pack( side=tk.TOP, fill=tk.X ) titleBar.pack( side=tk.TOP, fill=tk.X ) # Create a scroll bar to fill the right-hand side of the window self.vScrollbar = Scrollbar( self ) self.vScrollbar.pack( side=tk.RIGHT, fill=tk.Y ) self.textBox = tk.Text( self, height=4, yscrollcommand=self.vScrollbar.set ) self.textBox['wrap'] = 'word' self.textBox.pack( expand=tk.YES, fill=tk.X ) # Full width self.vScrollbar.config( command=self.textBox.yview ) # link the scrollbar to the text box self.createStandardKeyboardBindings() self.textBox.bind( "<Button-1>", self.setFocus ) # So disabled text box can still do select and copy functions # Set-up our standard Bible styles for USFMKey, styleDict in self.parentApp.stylesheet.getTKStyles().items(): self.textBox.tag_configure( USFMKey, **styleDict ) # Create the style # Add our extra specialised styles self.textBox.tag_configure( 'contextHeader', background='pink', font='helvetica 6 bold' ) self.textBox.tag_configure( 'context', background='pink', font='helvetica 6' ) self.pack( expand=tk.YES, fill=tk.BOTH ) # Pack the frame # Set-up our Bible system and our callables self.BibleOrganisationalSystem = BibleOrganizationalSystem( "GENERIC-KJV-66-ENG" ) # temp self.getNumChapters = self.BibleOrganisationalSystem.getNumChapters self.getNumVerses = lambda b,c: 99 if c=='0' or c==0 else self.BibleOrganisationalSystem.getNumVerses( b, c ) self.isValidBCVRef = self.BibleOrganisationalSystem.isValidBCVRef self.getFirstBookCode = self.BibleOrganisationalSystem.getFirstBookCode self.getPreviousBookCode = self.BibleOrganisationalSystem.getPreviousBookCode self.getNextBookCode = self.BibleOrganisationalSystem.getNextBookCode self.getBBB = self.BibleOrganisationalSystem.getBBB self.getBookName = self.BibleOrganisationalSystem.getBookName self.getBookList = self.BibleOrganisationalSystem.getBookList self.maxChapters, self.maxVerses = 150, 150 # temp self.verseCache = OrderedDict() self.updateShownReferences( self.referenceObject ) # end of BibleReferenceBox.__init__ def createStandardKeyboardBindings( self ): """ Create keyboard bindings for this widget. """ if BibleOrgSysGlobals.debugFlag and debuggingThisModule: print( exp("BibleReferenceBox.createStandardKeyboardBindings()") ) for name,command in ( ('SelectAll',self.doSelectAll), ('Copy',self.doCopy), ('Find',self.doFind), ('Refind',self.doRefind), ('Info',self.doShowInfo), ('Close',self.doClose) ): self.createStandardKeyboardBinding( name, command ) # end of BibleReferenceBox.createStandardKeyboardBindings() def xxxgotoBCV( self, BBB, C, V ): """ """ if BibleOrgSysGlobals.debugFlag: print( exp("BibleReferenceBox.gotoBCV( {} {}:{} from {} )").format( BBB, C, V, self.currentVerseKey ) ) # We really need to convert versification systems here adjBBB, adjC, adjV, adjS = self.BibleOrganisationalSystem.convertToReferenceVersification( BBB, C, V ) self.parentWindow.gotoGroupBCV( self.groupCode, adjBBB, adjC, adjV ) # then the App will update me by calling updateShownBCV # end of BibleReferenceBox.gotoBCV def getContextVerseData( self, verseKey ): """ Fetches and returns the internal Bible data for the given reference. """ if BibleOrgSysGlobals.debugFlag and debuggingThisModule: print( exp("BibleReferenceBox.getContextVerseData( {} )").format( verseKey ) ) if self.internalBible is not None: try: return self.internalBible.getContextVerseData( verseKey ) except KeyError: logging.critical( exp("BibleReferenceBox.getContextVerseData for {} {} got a KeyError!") \ .format( self.boxType, verseKey ) ) # end of BibleReferenceBox.getContextVerseData def XXXgetSwordVerseKey( self, verseKey ): #if BibleOrgSysGlobals.debugFlag and debuggingThisModule: print( exp("getSwordVerseKey( {} )").format( verseKey ) ) BBB, C, V = verseKey.getBCV() return self.parentApp.SwordInterface.makeKey( BBB, C, V ) # end of BibleReferenceBox.getSwordVerseKey def getCachedVerseData( self, verseKey ): """ Checks to see if the requested verse is in our cache, otherwise calls getContextVerseData (from the superclass) to fetch it. The cache keeps the newest or most recently used entries at the end. When it gets too large, it drops the first entry. """ #if BibleOrgSysGlobals.debugFlag and debuggingThisModule: print( exp("getCachedVerseData( {} )").format( verseKey ) ) verseKeyHash = verseKey.makeHash() if verseKeyHash in self.verseCache: #if BibleOrgSysGlobals.debugFlag and debuggingThisModule: print( " " + exp("Retrieved from BibleReferenceBox cache") ) self.verseCache.move_to_end( verseKeyHash ) #print( " returning", self.verseCache[verseKeyHash][0] ) return self.verseCache[verseKeyHash] verseContextData = self.getContextVerseData( verseKey ) self.verseCache[verseKeyHash] = verseContextData if len(self.verseCache) > MAX_CACHED_VERSES: #print( "Removing oldest cached entry", len(self.verseCache) ) self.verseCache.popitem( last=False ) return verseContextData # end of BibleReferenceBox.getCachedVerseData def XXXXgetBeforeAndAfterBibleData( self, newVerseKey ): """ Returns the requested verse, the previous verse, and the next n verses. """ if BibleOrgSysGlobals.debugFlag: print( exp("BibleReferenceBox.getBeforeAndAfterBibleData( {} )").format( newVerseKey ) ) assert( isinstance( newVerseKey, SimpleVerseKey ) ) BBB, C, V = newVerseKey.getBCV() intC, intV = newVerseKey.getChapterNumberInt(), newVerseKey.getVerseNumberInt() prevBBB, prevIntC, prevIntV = BBB, intC, intV previousVersesData = [] for n in range( -self.parentWindow.viewVersesBefore, 0 ): failed = False #print( " getBeforeAndAfterBibleData here with", n, prevIntC, prevIntV ) if prevIntV > 0: prevIntV -= 1 elif prevIntC > 0: prevIntC -= 1 try: prevIntV = self.getNumVerses( prevBBB, prevIntC ) except KeyError: if prevIntC != 0: # we can expect an error for chapter zero logging.critical( exp("getBeforeAndAfterBibleData failed at"), prevBBB, prevIntC ) failed = True #if not failed: #if BibleOrgSysGlobals.debugFlag: print( " Went back to previous chapter", prevIntC, prevIntV, "from", BBB, C, V ) else: prevBBB = self.BibleOrganisationalSystem.getPreviousBookCode( BBB ) if prevBBB is None: failed = True else: prevIntC = self.getNumChapters( prevBBB ) prevIntV = self.getNumVerses( prevBBB, prevIntC ) if BibleOrgSysGlobals.debugFlag: print( " Went back to previous book", prevBBB, prevIntC, prevIntV, "from", BBB, C, V ) if not failed and prevIntV is not None: #print( "getBeforeAndAfterBibleData XXX", repr(prevBBB), repr(prevIntC), repr(prevIntV) ) assert( prevBBB and isinstance(prevBBB, str) ) previousVerseKey = SimpleVerseKey( prevBBB, prevIntC, prevIntV ) previousVerseData = self.getCachedVerseData( previousVerseKey ) if previousVerseData: previousVersesData.insert( 0, (previousVerseKey,previousVerseData,) ) # Put verses in backwards # Determine the next valid verse numbers nextBBB, nextIntC, nextIntV = BBB, intC, intV nextVersesData = [] for n in range( 0, self.parentWindow.viewVersesAfter ): try: numVerses = self.getNumVerses( nextBBB, nextIntC ) except KeyError: numVerses = None # for an invalid BBB nextIntV += 1 if numVerses is None or nextIntV > numVerses: nextIntV = 1 nextIntC += 1 # Need to check................................ nextVerseKey = SimpleVerseKey( nextBBB, nextIntC, nextIntV ) nextVerseData = self.getCachedVerseData( nextVerseKey ) if nextVerseData: nextVersesData.append( (nextVerseKey,nextVerseData,) ) verseData = self.getCachedVerseData( newVerseKey ) return verseData, previousVersesData, nextVersesData # end of BibleReferenceBox.getBeforeAndAfterBibleData def XXXsetCurrentVerseKey( self, newVerseKey ): """ Called to set the current verse key. """ if BibleOrgSysGlobals.debugFlag and debuggingThisModule: print( exp("BibleReferenceBox.setCurrentVerseKey( {} )").format( newVerseKey ) ) self.parentApp.setDebugText( "BRW setCurrentVerseKey..." ) assert( isinstance( newVerseKey, SimpleVerseKey ) ) self.currentVerseKey = newVerseKey BBB = self.currentVerseKey.getBBB() self.maxChapters = self.getNumChapters( BBB ) self.maxVerses = self.getNumVerses( BBB, self.currentVerseKey.getChapterNumber() ) # end of BibleReferenceBox.setCurrentVerseKey def updateShownReferences( self, newReferenceObject ): """ Updates self in various ways depending on the contextViewMode held by the enclosing window. The new verse references are in the reference versification system in one of these objects: SimpleVerseKey (accepts 'GEN_1:1' or 'GEN','1','1') SimpleVersesKey (accepts 'MAT_6:1,4') VerseRangeKey (accepts 'JNA_2:1-7') Leaves the textbox in the disabled state. """ if BibleOrgSysGlobals.debugFlag and debuggingThisModule: print( "BibleReferenceBox.updateShownReferences( {} ) for {}".format( newReferenceObject, self.internalBible.name ) ) assert( isinstance( newReferenceObject, SimpleVerseKey ) or isinstance( newReferenceObject, SimpleVersesKey ) or isinstance( newReferenceObject, VerseRangeKey )) for j, referenceVerse in enumerate( newReferenceObject ): #print( " refVerse", j, referenceVerse ) assert( isinstance( referenceVerse, SimpleVerseKey ) ) refBBB, refC, refV, refS = referenceVerse.getBCVS() BBB, C, V, S = self.BibleOrganisationalSystem.convertFromReferenceVersification( refBBB, refC, refV, refS ) newVerseKey = SimpleVerseKey( BBB, C, V, S ) #print( " newVK", newVerseKey ) # Set firstFlag as False (rather than j==0) so don't get context displayed self.displayAppendVerse( False, newVerseKey, self.getCachedVerseData( newVerseKey ), lastFlag=False ) #self.setCurrentVerseKey( newVerseKey ) #self.clearText() # Leaves the text box enabled #startingFlag = True ## Safety-check in case they edited the settings file #if 'DBP' in self.boxType and self.contextViewMode in ('ByBook','ByChapter',): #print( exp("updateShownReferences: Safety-check converted {} contextViewMode for DBP").format( repr(self.contextViewMode) ) ) #self._viewRadioVar.set( 3 ) # ByVerse #self.changeBibleContextView() #if self.contextViewMode == 'BeforeAndAfter': #bibleData = self.getBeforeAndAfterBibleData( newVerseKey ) #if bibleData: #verseData, previousVerses, nextVerses = bibleData #for verseKey,previousVerseData in previousVerses: #self.displayAppendVerse( startingFlag, verseKey, previousVerseData ) #startingFlag = False #self.displayAppendVerse( startingFlag, newVerseKey, verseData, currentVerse=True ) #for verseKey,nextVerseData in nextVerses: #self.displayAppendVerse( False, verseKey, nextVerseData ) #elif self.contextViewMode == 'ByVerse': #self.displayAppendVerse( True, newVerseKey, self.getCachedVerseData( newVerseKey ), currentVerse=True ) #elif self.contextViewMode == 'BySection': #self.displayAppendVerse( True, newVerseKey, self.getCachedVerseData( newVerseKey ), currentVerse=True ) #BBB, C, V = newVerseKey.getBCV() #intC, intV = newVerseKey.getChapterNumberInt(), newVerseKey.getVerseNumberInt() #print( "\nBySection is not finished yet -- just shows a single verse!\n" ) # XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ##for thisC in range( 0, self.getNumChapters( BBB ) ): ##try: numVerses = self.getNumVerses( BBB, thisC ) ##except KeyError: numVerses = 0 ##for thisV in range( 0, numVerses ): ##thisVerseKey = SimpleVerseKey( BBB, thisC, thisV ) ##thisVerseData = self.getCachedVerseData( thisVerseKey ) ##self.displayAppendVerse( startingFlag, thisVerseKey, thisVerseData, ##currentVerse=thisC==intC and thisV==intV ) ##startingFlag = False #elif self.contextViewMode == 'ByBook': #BBB, C, V = newVerseKey.getBCV() #intC, intV = newVerseKey.getChapterNumberInt(), newVerseKey.getVerseNumberInt() #for thisC in range( 0, self.getNumChapters( BBB ) ): #try: numVerses = self.getNumVerses( BBB, thisC ) #except KeyError: numVerses = 0 #for thisV in range( 0, numVerses ): #thisVerseKey = SimpleVerseKey( BBB, thisC, thisV ) #thisVerseData = self.getCachedVerseData( thisVerseKey ) #self.displayAppendVerse( startingFlag, thisVerseKey, thisVerseData, #currentVerse=thisC==intC and thisV==intV ) #startingFlag = False #elif self.contextViewMode == 'ByChapter': #BBB, C, V = newVerseKey.getBCV() #intV = newVerseKey.getVerseNumberInt() #try: numVerses = self.getNumVerses( BBB, C ) #except KeyError: numVerses = 0 #for thisV in range( 0, numVerses ): #thisVerseKey = SimpleVerseKey( BBB, C, thisV ) #thisVerseData = self.getCachedVerseData( thisVerseKey ) #self.displayAppendVerse( startingFlag, thisVerseKey, thisVerseData, currentVerse=thisV==intV ) #startingFlag = False #else: #logging.critical( exp("BibleReferenceBox.updateShownBCV: Bad context view mode {}").format( self.contextViewMode ) ) #if BibleOrgSysGlobals.debugFlag: halt # Unknown context view mode self.textBox['state'] = tk.DISABLED # Don't allow editing # end of BibleReferenceBox.updateShownReferences def doClose( self, event=None ): """ Called from the GUI. Can be overridden. """ self.closeReferenceBox() # end of BibleReferenceBox.doClose def closeReferenceBox( self ): """ Called to finally and irreversibly remove this box from our list and close it. """ if BibleOrgSysGlobals.debugFlag and debuggingThisModule: print( exp("BibleReferenceBox.closeReferenceBox()") ) if self in self.parentWindow.referenceBoxes: self.parentWindow.referenceBoxes.remove( self ) self.destroy() else: # we might not have finished making our box yet if BibleOrgSysGlobals.debugFlag: print( exp("BibleReferenceBox.closeReferenceBox() for {} wasn't in list").format( self.winType ) ) try: self.destroy() except tk.TclError: pass # never mind if BibleOrgSysGlobals.debugFlag: self.parentApp.setDebugText( "Closed resource box" )
def demo(): """ Main program to handle command line parameters and then run what they want. """ from VerseReferences import SimpleVerseKey from InternalBibleInternals import InternalBibleEntryList, InternalBibleEntry if BibleOrgSysGlobals.verbosityLevel > 0: print( ProgNameVersion ) # Demonstrate the Hebrew WLC class standardTestReferences = ('GEN', '1', '1'), ('SA1','1','1'), ('DAN', '1', '5') if 1: # Test one book #testFile = "../morphhb/wlc/Ruth.xml" # Hebrew Ruth testFile = '../morphhb/wlc/Dan.xml' # Hebrew Daniel if BibleOrgSysGlobals.verbosityLevel > 0: print( "\nA/ Demonstrating the Hebrew WLC class (one book only)…" ) #print( testFile ) wlc = OSISHebrewWLCBible( testFile ) wlc.load() # Load and process the XML book if BibleOrgSysGlobals.verbosityLevel > 0: print( wlc ) # Just print a summary print() for testReference in standardTestReferences: testKey = SimpleVerseKey( testReference[0], testReference[1], testReference[2] ) verseDataList = wlc.getVerseDataList( testKey ) if verseDataList is not None: assert isinstance( verseDataList, InternalBibleEntryList ) if BibleOrgSysGlobals.verbosityLevel > 1: print( testKey ) print( "VDL", verseDataList ) print() verseText = wlc.getVerseText( testKey ) wlc.currentText = verseText if BibleOrgSysGlobals.verbosityLevel > 0: #print( "These all display left-to-right in the terminal unfortunately :-(" ) print( verseText ) verseText = wlc.removeMorphemeBreaks() if BibleOrgSysGlobals.verbosityLevel > 1: print( "Without morpheme breaks" ) print( verseText ) verseText = wlc.removeCantillationMarks() if BibleOrgSysGlobals.verbosityLevel > 1: print( "Without cantillation marks" ) print( verseText ) consonantalVerseText = wlc.removeVowelPointing() if BibleOrgSysGlobals.verbosityLevel > 1: print( "Without vowel pointing" ) print( consonantalVerseText ) print() if 1: # Load all books and test testFolder = DEFAULT_OSIS_WLC_FILEPATH # Hebrew if BibleOrgSysGlobals.verbosityLevel > 0: print( "\nB/ Demonstrating the Hebrew WLC class (whole Bible)…" ) #print( testFolder ) wlc = OSISHebrewWLCBible( testFolder ) wlc.loadBooks() # Load and process the XML files if BibleOrgSysGlobals.verbosityLevel > 0: print( wlc ) # Just print a summary print() for testReference in standardTestReferences: testKey = SimpleVerseKey( testReference[0], testReference[1], testReference[2] ) verseDataList = wlc.getVerseDataList( testKey ) if verseDataList is not None: assert isinstance( verseDataList, InternalBibleEntryList ) if BibleOrgSysGlobals.verbosityLevel > 1: print( testKey ) print( "VDL", verseDataList ) print() verseText = wlc.getVerseText( testKey ) wlc.currentText = verseText if BibleOrgSysGlobals.verbosityLevel > 0: #print( "These all display left-to-right in the terminal unfortunately :-(" ) print( verseText ) verseText = wlc.removeMorphemeBreaks() if BibleOrgSysGlobals.verbosityLevel > 1: print( "Without morpheme breaks" ) print( verseText ) verseText = wlc.removeCantillationMarks() if BibleOrgSysGlobals.verbosityLevel > 1: print( "Without cantillation marks" ) print( verseText ) consonantalVerseText = wlc.removeVowelPointing() if BibleOrgSysGlobals.verbosityLevel > 1: print( "Without vowel pointing" ) print( consonantalVerseText ) print() # Check code for expanding morphological abbreviations if verseDataList is not None: for verseDataEntry in verseDataList: assert isinstance( verseDataEntry, InternalBibleEntry ) marker = verseDataEntry.getMarker() if marker in ('v~','p~'): verseDictList = wlc.getVerseDictList( verseDataEntry, testKey ) print( "verseDictList", verseDictList ) for j, verseDict in enumerate( verseDictList ): print( "verseDict", verseDict ) # for one word #word = verseDict['word'] if 'morph' in verseDict: print( " {}".format( wlc.expandMorphologyAbbreviations( verseDict['morph'] ) ) ) if 1: # Load books as we test testFolder = DEFAULT_OSIS_WLC_FILEPATH # Hebrew if BibleOrgSysGlobals.verbosityLevel > 0: print( "\nC/ Demonstrating the Hebrew WLC class (load on the go)…" ) #print( testFolder ) wlc = OSISHebrewWLCBible( testFolder ) #wlc.load() # Load and process the XML if BibleOrgSysGlobals.verbosityLevel > 0: print( wlc ) # Just print a summary print() for testReference in standardTestReferences: testKey = SimpleVerseKey( testReference[0], testReference[1], testReference[2] ) if BibleOrgSysGlobals.verbosityLevel > 1: print( testKey ) print( "VD", wlc.getVerseDataList( testKey ) ) print() verseText = wlc.getVerseText( testKey ) wlc.currentText = verseText if BibleOrgSysGlobals.verbosityLevel > 0: #print( "These all display left-to-right in the terminal unfortunately :-(" ) print( verseText ) verseText = wlc.removeMorphemeBreaks() if BibleOrgSysGlobals.verbosityLevel > 1: print( "Without morpheme breaks" ) print( verseText ) verseText = wlc.removeCantillationMarks() if BibleOrgSysGlobals.verbosityLevel > 1: print( "Without cantillation marks" ) print( verseText ) consonantalVerseText = wlc.removeVowelPointing() if BibleOrgSysGlobals.verbosityLevel > 1: print( "Without vowel pointing" ) print( consonantalVerseText ) print() if 1: # Test some of the glossing functions if BibleOrgSysGlobals.verbosityLevel > 0: print( "\nD/ Demonstrating the Hebrew WLC glossing functions…" ) wlc = OSISHebrewWLCBible( DEFAULT_OSIS_WLC_FILEPATH ) wlc.loadGlossingDict() wlc.exportGlossingDictionary() wlc.saveAnyChangedGlosses() wlc.importGlossingDictionary() wlc.importGlossingDictionary( overrideFlag=True ) if 1: # Test some of the glossing functions if BibleOrgSysGlobals.verbosityLevel > 0: print( "\nE/ Adding new references to glossing dict…" ) wlc = OSISHebrewWLCBible() wlc.loadGlossingDict() wlc.updateGenericGlossingReferences() wlc.saveAnyChangedGlosses( exportAlso = True ) if 1: # Test some of the glossing functions if BibleOrgSysGlobals.verbosityLevel > 0: print( "\nF/ Demonstrating the Hebrew WLC glossing functions…" ) if not os.path.exists( DEFAULT_ZIPPED_PICKLED_WLC_FILEPATH ): logging.critical( "HebrewWLCBible.demoF: filepath doesn't exist: {}".format( DEFAULT_ZIPPED_PICKLED_WLC_FILEPATH ) ) else: wlc = PickledHebrewWLCBible( DEFAULT_ZIPPED_PICKLED_WLC_FILEPATH ) wlc.loadGlossingDict() wlc.exportGlossingDictionary() wlc.saveAnyChangedGlosses() wlc.importGlossingDictionary() wlc.importGlossingDictionary( overrideFlag=True ) if 1: # Test some of the glossing functions if BibleOrgSysGlobals.verbosityLevel > 0: print( "\nG/ Adding new references to glossing dict…" ) if not os.path.exists( DEFAULT_ZIPPED_PICKLED_WLC_FILEPATH ): logging.critical( "HebrewWLCBible.demoG: filepath doesn't exist: {}".format( DEFAULT_ZIPPED_PICKLED_WLC_FILEPATH ) ) else: wlc = PickledHebrewWLCBible() wlc.loadGlossingDict() wlc.updateGenericGlossingReferences() wlc.saveAnyChangedGlosses( exportAlso = True )
def __init__(self, parentWindow, parentFrame, parentApp, internalBible, referenceObject): """ """ if BibleOrgSysGlobals.debugFlag: print( exp("BibleReferenceBox.__init__( {}, {}. {}, {}, {} )").format( parentWindow, parentFrame, parentApp, internalBible.getAName(), referenceObject)) self.parentWindow, self.parentFrame, self.parentApp, self.referenceObject = parentWindow, parentFrame, parentApp, referenceObject self.internalBible = handleInternalBibles(self.parentApp, internalBible, self) Frame.__init__(self, parentFrame) BibleBox.__init__(self, parentApp) # Set some dummy values required soon #self._contextViewRadioVar, self._formatViewRadioVar, self._groupRadioVar = tk.IntVar(), tk.IntVar(), tk.StringVar() #self._groupCode = BIBLE_GROUP_CODES[0] # Put into first/default BCV group #self._contextViewMode = DEFAULT #self._formatViewMode = DEFAULT self.currentVerseKey = SimpleVerseKey('UNK', '1', '1') # Unknown book #if self._contextViewMode == DEFAULT: #self._contextViewMode = 'ByVerse' #self.parentWindow.viewVersesBefore, self.parentWindow.viewVersesAfter = 2, 6 #if self._formatViewMode == DEFAULT: #self._formatViewMode = 'Formatted' # Create a title bar titleBar = Frame(self) Button(titleBar, text=_('Close'), command=self.doClose).pack(side=tk.RIGHT) ## Try to get the title width somewhere near correct (if moduleID is a long path) #adjModuleID = moduleID #self.update() # so we can get the geometry #width = parseWindowSize( self.parentWindow.winfo_geometry() )[0] - 60 # Allow for above button #if len(adjModuleID)*10 > width: # Note: this doesn't adjust if the window size is changed #print( "BRB here1", len(adjModuleID), width, repr(adjModuleID) ) #x = len(adjModuleID)*100/width # not perfect (too small) for narrow windows #adjModuleID = '…' + adjModuleID[int(x):] #print( "BRB here2", len(adjModuleID), x, repr(adjModuleID) ) #titleText = '{} ({})'.format( adjModuleID, boxType.replace( 'BibleReferenceBox', '' ) ) titleText = self.referenceObject.getShortText() self.titleLabel = tk.Label(titleBar, text=titleText) self.titleLabel.pack(side=tk.TOP, fill=tk.X) titleBar.pack(side=tk.TOP, fill=tk.X) # Create a scroll bar to fill the right-hand side of the window self.vScrollbar = Scrollbar(self) self.vScrollbar.pack(side=tk.RIGHT, fill=tk.Y) self.textBox = BText(self, height=5, yscrollcommand=self.vScrollbar.set) self.textBox.configure(wrap='word') self.textBox.pack(expand=tk.YES, fill=tk.X) # Full width self.vScrollbar.configure( command=self.textBox.yview) # link the scrollbar to the text box self.createStandardBoxKeyboardBindings() self.textBox.bind( '<Button-1>', self.setFocus ) # So disabled text box can still do select and copy functions # Set-up our standard Bible styles for USFMKey, styleDict in self.parentApp.stylesheet.getTKStyles( ).items(): self.textBox.tag_configure(USFMKey, **styleDict) # Create the style # Add our extra specialised styles self.textBox.tag_configure('contextHeader', background='pink', font='helvetica 6 bold') self.textBox.tag_configure('context', background='pink', font='helvetica 6') self.textBox.tag_configure('markersHeader', background='yellow3', font='helvetica 6 bold') self.textBox.tag_configure('markers', background='yellow3', font='helvetica 6') self.pack(expand=tk.YES, fill=tk.BOTH) # Pack the frame # Set-up our Bible system and our callables self.BibleOrganisationalSystem = BibleOrganizationalSystem( 'GENERIC-KJV-81-ENG') # temp self.getNumChapters = self.BibleOrganisationalSystem.getNumChapters self.getNumVerses = lambda b,c: MAX_PSEUDOVERSES if c=='0' or c==0 \ else self.BibleOrganisationalSystem.getNumVerses( b, c ) self.isValidBCVRef = self.BibleOrganisationalSystem.isValidBCVRef self.getFirstBookCode = self.BibleOrganisationalSystem.getFirstBookCode self.getPreviousBookCode = self.BibleOrganisationalSystem.getPreviousBookCode self.getNextBookCode = self.BibleOrganisationalSystem.getNextBookCode self.getBBBFromText = self.BibleOrganisationalSystem.getBBBFromText self.getBookName = self.BibleOrganisationalSystem.getBookName self.getBookList = self.BibleOrganisationalSystem.getBookList self.maxChaptersThisBook, self.maxVersesThisChapter = 150, 150 # temp self.verseCache = OrderedDict() self.updateShownReferences(self.referenceObject)
def demo(): """ Demonstrate how some of the above classes can be used. """ from VerseReferences import SimpleVerseKey if BibleOrgSysGlobals.verbosityLevel > 0: print(ProgNameVersion, end='\n\n') # Test the Door43CatalogResources class door43CatalogResources = Door43CatalogResources() if BibleOrgSysGlobals.verbosityLevel > 0: print(door43CatalogResources) #Door43CatalogResources.load() # takes a minute #print( Door43CatalogResources ) door43CatalogResources.fetchCatalog() if BibleOrgSysGlobals.verbosityLevel > 0: print() print(door43CatalogResources) if BibleOrgSysGlobals.debugFlag and debuggingThisModule: if BibleOrgSysGlobals.verbosityLevel > 2: print( f"\nLanguage list ({len(door43CatalogResources.languageDict)}):" ) for j, (lg, lgDict) in enumerate( door43CatalogResources.languageDict.items()): if BibleOrgSysGlobals.verbosityLevel > 2: print(' Lg', j + 1, lg, lgDict['direction'], lgDict['title']) # lgDict.keys() are lgDict['identifier'] assert 4 <= len( lgDict.keys() ) <= 6 # 'category_labels', 'direction', 'identifier', 'resources', 'title', 'versification_labels' if BibleOrgSysGlobals.verbosityLevel > 2: print(' ', len(lgDict.keys()), lgDict.keys()) for something in lgDict['resources']: assert isinstance(something, dict) if BibleOrgSysGlobals.verbosityLevel > 2: print( f" \"{something['title']}\" ({something['subject']}) ({len(something.keys())}) {something.keys()}" ) if not something['subject']: logging.critical( f"Missing subject field from {lgDict['identifier']} {something['title']}" ) elif door43CatalogResources.subjectNameList and something[ 'subject'] not in door43CatalogResources.subjectNameList: logging.critical( f"Unknown '{something['subject']}' subject field from {lgDict['identifier']} {something['title']}" ) if 'category_labels' in lgDict: if BibleOrgSysGlobals.verbosityLevel > 2: print(' category_labels', lgDict['category_labels']) if 'versification_labels' in lgDict: if BibleOrgSysGlobals.verbosityLevel > 2: print(' versification_labels', lgDict['versification_labels']) if BibleOrgSysGlobals.verbosityLevel > 2: # Neatly list all available resources print( f"\n Resource list ({len(door43CatalogResources.resourceList)}):") for j, (lg, resourceTitle, resourceEntry) in enumerate( door43CatalogResources.resourceList): print( f" {j+1:3}/ {lg:5} '{resourceTitle}' ({resourceEntry['subject']})" ) if 'formats' in resourceEntry: formats = resourceEntry['formats'] else: assert len(resourceEntry['projects']) == 1 formats = resourceEntry['projects'][0]['formats'] assert formats for formatEntry in formats: assert isinstance(formatEntry, dict) print( f" '{formatEntry['format']}' {formatEntry['url']}" ) if BibleOrgSysGlobals.verbosityLevel > 1: # List all Bibles (i.e., all USFM format) print(f"\n Bible list ({len(door43CatalogResources.BibleList)}):") for j, (lg, resourceTitle, resourceEntry) in enumerate(door43CatalogResources.BibleList): print( f" {j+1:3}/ {lg:5} '{resourceTitle}' ({resourceEntry['subject']})" ) if 'formats' in resourceEntry: formats = resourceEntry['formats'] else: assert len(resourceEntry['projects']) == 1 formats = resourceEntry['projects'][0]['formats'] assert formats for formatEntry in formats: assert isinstance(formatEntry, dict) print( f" '{formatEntry['format']}' {formatEntry['url']}" ) # List all Open Bible Stories OBSList = [] for lg, lgEntry in door43CatalogResources.languageDict.items(): for resourceEntry in lgEntry['resources']: assert isinstance(resourceEntry, dict) resourceTuple = lg, resourceEntry['title'], resourceEntry if 'Bible Stories' in resourceEntry['subject']: OBSList.append(resourceTuple) print(f"\n Bible Stories list ({len(OBSList)}):") for j, (lg, resourceTitle, resourceEntry) in enumerate(OBSList): print( f" {j+1:3}/ {lg:5} '{resourceTitle}' ({resourceEntry['subject']})" ) if 'formats' in resourceEntry: formats = resourceEntry['formats'] else: assert len(resourceEntry['projects']) == 1 formats = resourceEntry['projects'][0]['formats'] assert formats for formatEntry in formats: assert isinstance(formatEntry, dict) print( f" '{formatEntry['format']}' {formatEntry['url']}" ) testRefs = ( ('GEN', '1', '1'), ('PSA', '150', '6'), ('JER', '33', '3'), ('MAL', '4', '6'), ('MAT', '1', '1'), ('JHN', '3', '16'), ('TIT', '2', '2'), ('JDE', '1', '14'), ('REV', '22', '21'), ) if 1: # Test the Door43CatalogBible class by finding a Bible for lgCode, desiredTitle in ( ('ru', 'Russian Synodal Bible'), ('ru', 'Russian Unlocked Literal Bible'), ('ru', 'Russian Open Bible'), ('ru', 'Russion Literal Bible'), ('en', 'unfoldingWord Literal Text'), ('en', 'unfoldingWord Simplified Text'), ('fr', 'unfoldingWord Literal Text'), ('el-x-koine', 'unfoldingWord Greek New Testament'), ): if BibleOrgSysGlobals.verbosityLevel > 0: print() searchResultDict = door43CatalogResources.searchBibles( lgCode, desiredTitle) if searchResultDict: Door43CatalogBible1 = Door43CatalogBible(searchResultDict) if BibleOrgSysGlobals.verbosityLevel > 0: print(Door43CatalogBible1) Door43CatalogBible1.preload() if BibleOrgSysGlobals.verbosityLevel > 0: print(Door43CatalogBible1) for testRef in testRefs: verseKey = SimpleVerseKey(*testRef) if BibleOrgSysGlobals.verbosityLevel > 0: print(verseKey) print(" ", Door43CatalogBible1.getVerseDataList(verseKey)) if BibleOrgSysGlobals.verbosityLevel > 0: print(Door43CatalogBible1) elif BibleOrgSysGlobals.verbosityLevel > 0: print(f"{lgCode} '{desiredTitle}' was not found!")
def main(): """ This is the main program for the app Note that the standard verbosityLevel is 2: -s (silent) is 0 -q (quiet) is 1 -i (information) is 3 -v (verbose) is 4. """ if BibleOrgSysGlobals.verbosityLevel > 0: print( ProgNameVersion, end='\n\n' ) # Download the online Door43 Resource Catalog door43CatalogResources = Door43CatalogResources() if BibleOrgSysGlobals.verbosityLevel > 2: print( door43CatalogResources ) door43CatalogResources.fetchCatalog() if BibleOrgSysGlobals.verbosityLevel > 2: print() print( door43CatalogResources, end='\n\n' ) # Download and load all books from the UGNT = unfoldingWord Greek New Testament UGNTDict = door43CatalogResources.searchBibles( 'el-x-koine', 'unfoldingWord Greek New Testament' ) if UGNTDict: Door43CatalogUGNTBible = Door43CatalogBible( UGNTDict ) #if BibleOrgSysGlobals.verbosityLevel > 0: print( Door43CatalogUGNTBible ) Door43CatalogUGNTBible.preload() #if BibleOrgSysGlobals.verbosityLevel > 0: print( Door43CatalogUGNTBible ) Door43CatalogUGNTBible.load() if BibleOrgSysGlobals.verbosityLevel > 0: print( Door43CatalogUGNTBible, end='\n\n' ) # Download the ULT = unfoldingWord Literal Text ULTDict = door43CatalogResources.searchBibles( 'en', 'unfoldingWord Literal Text' ) if ULTDict: Door43CatalogULTBible = Door43CatalogBible( ULTDict ) #if BibleOrgSysGlobals.verbosityLevel > 0: print( Door43CatalogULTBible ) Door43CatalogULTBible.preload() if BibleOrgSysGlobals.verbosityLevel > 0: print( Door43CatalogULTBible, end='\n\n' ) # Go through the UGNT verse by verse # and do some comparisions with the matching ULT verses # NOTE: This code assumes matching versification systems count1 = count2 = 0 for BBB, UGNTBook in Door43CatalogUGNTBible.books.items(): for C in range( 1, Door43CatalogUGNTBible.getNumChapters( BBB )+1 ): for V in range( 1, Door43CatalogUGNTBible.getNumVerses( BBB, C )+1 ): ref = SimpleVerseKey( BBB, C, V ) text1 = Door43CatalogUGNTBible.getVerseText( ref, fullTextFlag=False ) if not text1: logging.warning( f"Blank text at {ref.getShortText()} in UGNT" ) try: # NOTE: The following line will automatically load the ULT book into memory as required text2 = Door43CatalogULTBible.getVerseText( ref, fullTextFlag=False ) if not text2: logging.warning( f"Blank text at {ref.getShortText()} in ULT" ) except KeyError: logging.error( f"Can't find {ref.getShortText()} in ULT" ) text2 = '' # Now that we have text1 and text2 for the verse specified in ref, # do our analysis/comparison now J1 = 'Ἰησοῦς' in text1 or 'Ἰησοῦ' in text1 or 'Ἰησοῦν' in text1 J2 = 'Jesus' in text2 if J1 and not J2: if BibleOrgSysGlobals.verbosityLevel > 1: print( f"Found 'Jesus' in Grk {ref.getShortText()}: {text1}" ) print( f" {text2}" ) count1 += 1 if J2 and not J1: if BibleOrgSysGlobals.verbosityLevel > 1: print( f"Found 'Jesus' in ULT {ref.getShortText()}: {text2}" ) print( f" {text1}" ) count2 += 1 if BibleOrgSysGlobals.verbosityLevel > 0: print( f"\nFound {count1} unmatched occurrences in UGNT, {count2} in ULT." )