本文整理汇总了Python中Bible.BibleBook.objectTypeString方法的典型用法代码示例。如果您正苦于以下问题:Python BibleBook.objectTypeString方法的具体用法?Python BibleBook.objectTypeString怎么用?Python BibleBook.objectTypeString使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Bible.BibleBook
的用法示例。
在下文中一共展示了BibleBook.objectTypeString方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: __validateAndExtractBook
# 需要导入模块: from Bible import BibleBook [as 别名]
# 或者: from Bible.BibleBook import objectTypeString [as 别名]
def __validateAndExtractBook( self, book ):
"""
Check/validate and extract book data from the given XML book record
finding chapter subelements.
"""
if Globals.verbosityLevel > 3: print( _("Validating XML book...") )
# Process the div attributes first
BBB = bookName = bookShortName = bookNumber = None
for attrib,value in book.items():
if attrib=="bnumber":
bookNumber = value
elif attrib=="bname":
bookName = value
elif attrib=="bsname":
bookShortName = value
else: logging.warning( "Unprocessed '{}' attribute ({}) in book element".format( attrib, value ) )
if bookNumber:
try: BBB = Globals.BibleBooksCodes.getBBBFromReferenceNumber( bookNumber )
except KeyError:
logging.warning( "Unable to deduce which book is number={}, name={}, shortName={} -- ignoring it" \
.format( bookNumber, bookName, bookShortName ) )
elif bookName:
BBB = self.genericBOS.getBBB( bookName )
if BBB:
if Globals.verbosityLevel > 2: print( _("Validating {} {}...").format( BBB, bookName ) )
thisBook = BibleBook( self.name, BBB )
thisBook.objectNameString = "Zefania XML Bible Book object"
thisBook.objectTypeString = "Zefania"
#thisBook.sourceFilepath = self.sourceFilepath
for element in book:
if element.tag == ZefaniaXMLBible.chapterTag:
sublocation = "chapter in {}".format( BBB )
Globals.checkXMLNoText( element, sublocation, 'j3jd' )
Globals.checkXMLNoTail( element, sublocation, 'al1d' )
self.__validateAndExtractChapter( BBB, thisBook, element )
else: logging.error( "Expected to find '{}' but got '{}'".format( ZefaniaXMLBible.chapterTag, element.tag ) )
if Globals.verbosityLevel > 2: print( " Saving {} into results...".format( BBB ) )
self.saveBook( thisBook )
示例2: __validateAndExtractBook
# 需要导入模块: from Bible import BibleBook [as 别名]
# 或者: from Bible.BibleBook import objectTypeString [as 别名]
def __validateAndExtractBook( self, book ):
"""
Check/validate and extract book data from the given XML book record
finding chapter subelements.
"""
if Globals.verbosityLevel > 3: print( _("Validating OpenSong XML book...") )
# Process the div attributes first
BBB = bookName = None
for attrib,value in book.items():
if attrib=="n":
bookName = value
else: logging.warning( "Unprocessed '{}' attribute ({}) in book element".format( attrib, value ) )
if bookName:
BBB = self.genericBOS.getBBB( bookName )
if BBB:
if Globals.verbosityLevel > 2: print( _("Validating {} {}...").format( BBB, bookName ) )
thisBook = BibleBook( self, BBB )
thisBook.objectNameString = "OpenSong XML Bible Book object"
thisBook.objectTypeString = "OpenSong"
#thisBook.sourceFilepath = self.sourceFilepath
USFMAbbreviation = Globals.BibleBooksCodes.getUSFMAbbreviation( BBB )
thisBook.appendLine( 'id', '{} imported by {}'.format( USFMAbbreviation.upper(), ProgNameVersion ) )
thisBook.appendLine( 'h', bookName )
thisBook.appendLine( 'mt1', bookName )
for element in book:
if element.tag == OpenSongXMLBible.chapterTag:
sublocation = "chapter in {}".format( BBB )
Globals.checkXMLNoText( element, sublocation, 'j3jd' )
Globals.checkXMLNoTail( element, sublocation, 'al1d' )
self.__validateAndExtractChapter( BBB, thisBook, element )
else: logging.error( "Expected to find '{}' but got '{}'".format( OpenSongXMLBible.chapterTag, element.tag ) )
if Globals.verbosityLevel > 2: print( " Saving {} into results...".format( BBB ) )
self.saveBook( thisBook )
else: logging.error( _("OpenSong load doesn't recognize book name: '{}'").format( bookName ) ) # no BBB
else: logging.error( _("OpenSong load can't find a book name") ) # no bookName
示例3: load
# 需要导入模块: from Bible import BibleBook [as 别名]
# 或者: from Bible.BibleBook import objectTypeString [as 别名]
def load( self ):
"""
Load a single source file and load book elements.
"""
if Globals.verbosityLevel > 2: print( _("Loading {}...").format( self.sourceFilepath ) )
loadErrors = []
fileExtensionUpper = self.fileExtension.upper()
if fileExtensionUpper not in filenameEndingsToAccept:
logging.critical( "{} doesn't appear to be a e-Sword file".format( self.sourceFilename ) )
elif not self.sourceFilename.upper().endswith( BibleFilenameEndingsToAccept[0] ):
logging.critical( "{} doesn't appear to be a e-Sword Bible file".format( self.sourceFilename ) )
connection = sqlite3.connect( self.sourceFilepath )
connection.row_factory = sqlite3.Row # Enable row names
cursor = connection.cursor()
# First get the settings
cursor.execute( 'select * from Details' )
row = cursor.fetchone()
for key in row.keys():
self.settingsDict[key] = row[key]
#print( self.settingsDict ); halt
if 'Description' in self.settingsDict and len(self.settingsDict['Description'])<40: self.name = self.settingsDict['Description']
if 'Abbreviation' in self.settingsDict: self.abbreviation = self.settingsDict['Abbreviation']
if 'encryption' in self.settingsDict: logging.critical( "{} is encrypted: level {}".format( self.sourceFilename, self.settingsDict['encryption'] ) )
# Just get some information from the file
cursor.execute( 'select * from Bible' )
rows = cursor.fetchall()
numRows = len(rows)
if Globals.debugFlag or Globals.verbosityLevel>2: print( '{} rows found'.format( numRows ) )
BBBn1 = rows[0][0]
if Globals.debugFlag or Globals.verbosityLevel>2: print( 'First book number is {}'.format( BBBn1 ) )
del rows
BBB1 = None
if BBBn1 <= 66: BBB1 = Globals.BibleBooksCodes.getBBBFromReferenceNumber( BBBn1 )
testament = BBB = None
booksExpected = textLineCountExpected = 0
if self.settingsDict['OT'] and self.settingsDict['NT']:
testament, BBB = 'BOTH', 'GEN'
booksExpected, textLineCountExpected = 66, 31102
elif self.settingsDict['OT']:
testament, BBB = 'OT', 'GEN'
booksExpected, textLineCountExpected = 39, 23145
elif self.settingsDict['NT']:
testament, BBB = 'NT', 'MAT'
booksExpected, textLineCountExpected = 27, 7957
elif self.settingsDict['Abbreviation'] == 'VIN2011': # Handle encoding error
logging.critical( "e-Sword settings encoding error -- no testament set: {}".format( self.settingsDict ) )
loadErrors.append( "e-Sword settings encoding error -- no testament set: {}".format( self.settingsDict ) )
testament, BBB = 'BOTH', 'GEN'
booksExpected, textLineCountExpected = 66, 31102
elif self.settingsDict['Apocrypha']: # incomplete
testament, BBB = 'AP', 'XXX'
booksExpected, textLineCountExpected = 99, 999999
halt
if not BBB:
logging.critical( "e-Sword settings encoding error -- no testament set: {}".format( self.settingsDict ) )
loadErrors.append( "e-Sword settings encoding error -- no testament set: {}".format( self.settingsDict ) )
if 0:
cursor.execute( 'select * from Bible' )
rows = cursor.fetchall()
print( "rows", len(rows) )
for row in rows:
assert( len(row) == 4 )
BBBn, C, V, text = row # First three are integers, the last is a string
print( BBBn, C, V, repr(text) )
if C==2: break
del rows # Takes a lot of memory
if Globals.debugFlag or Globals.verbosityLevel>2:
print( "Testament={} BBB={} BBB1={}, bE={}, tLCE={} nR={}".format( testament, BBB, BBB1, booksExpected, textLineCountExpected, numRows ) )
if BBB1 != BBB:
logging.critical( "First book seems wrong: {} instead of {}".format( BBB1, BBB ) )
loadErrors.append( "First book seems wrong: {} instead of {}".format( BBB1, BBB ) )
if not BBB: BBB = BBB1
if numRows != textLineCountExpected:
logging.critical( "Row count seems wrong: {} instead of {}".format( numRows, textLineCountExpected ) )
loadErrors.append( "Row count seems wrong: {} instead of {}".format( numRows, textLineCountExpected ) )
#halt
BOS = BibleOrganizationalSystem( "GENERIC-KJV-66-ENG" )
# Create the first book
thisBook = BibleBook( self.name, BBB )
thisBook.objectNameString = "e-Sword Bible Book object"
thisBook.objectTypeString = "e-Sword"
verseList = BOS.getNumVersesList( BBB )
numC, numV = len(verseList), verseList[0]
nBBB = Globals.BibleBooksCodes.getReferenceNumber( BBB )
C = V = 1
bookCount = 0
ourGlobals = {}
continued = ourGlobals['haveParagraph'] = False
haveLines = False
#.........这里部分代码省略.........
示例4: load
# 需要导入模块: from Bible import BibleBook [as 别名]
# 或者: from Bible.BibleBook import objectTypeString [as 别名]
def load( self ):
"""
Load a single source file and load book elements.
"""
if BibleOrgSysGlobals.verbosityLevel > 2: print( _("Loading {}…").format( self.sourceFilepath ) )
status = 0 # 1 = getting chapters, 2 = getting verse data
lastLine, lineCount = '', 0
BBB = lastBBB = None
bookDetails = {}
with open( self.sourceFilepath, encoding=self.encoding ) as myFile: # Automatically closes the file when done
for line in myFile:
lineCount += 1
if lineCount==1:
if line[0]==chr(65279): #U+FEFF
logging.info( "DrupalBible.load1: Detected Unicode Byte Order Marker (BOM) in {}".format( self.sourceFilepath ) )
line = line[1:] # Remove the UTF-16 Unicode Byte Order Marker (BOM)
elif line[:3] == '': # 0xEF,0xBB,0xBF
logging.info( "DrupalBible.load2: Detected Unicode Byte Order Marker (BOM) in {}".format( self.sourceFilepath ) )
line = line[3:] # Remove the UTF-8 Unicode Byte Order Marker (BOM)
if line and line[-1]=='\n': line=line[:-1] # Removing trailing newline character
if not line: continue # Just discard blank lines
#print ( 'DB file line is "' + line + '"' )
if line[0] == '#': continue # Just discard comment lines
lastLine = line
if lineCount == 1:
if line != '*Bible':
logging.warning( "Unknown DrupalBible first line: {}".format( repr(line) ) )
elif status == 0:
if line == '*Chapter': status = 1
else: # Get the version name details
bits = line.split( '|' )
shortName, fullName, language = bits
self.name = fullName
elif status == 1:
if line == '*Context': status = 2
else: # Get the book name details
bits = line.split( '|' )
bookCode, bookFullName, bookShortName, numChapters = bits
assert bookShortName == bookCode
BBBresult = BibleOrgSysGlobals.BibleBooksCodes.getBBBFromDrupalBibleCode( bookCode )
BBB = BBBresult if isinstance( BBBresult, str ) else BBBresult[0] # Result can be string or list of strings (best guess first)
bookDetails[BBB] = bookFullName, bookShortName, numChapters
elif status == 2: # Get the verse text
bits = line.split( '|' )
bookCode, chapterNumberString, verseNumberString, lineMark, verseText = bits
#chapterNumber, verseNumber = int( chapterNumberString ), int( verseNumberString )
if lineMark: print( repr(lineMark) ); halt
BBBresult = BibleOrgSysGlobals.BibleBooksCodes.getBBBFromDrupalBibleCode( bookCode )
BBB = BBBresult if isinstance( BBBresult, str ) else BBBresult[0] # Result can be string or list of strings (best guess first)
if BBB != lastBBB:
if lastBBB is not None:
self.stashBook( thisBook )
thisBook = BibleBook( self, BBB )
thisBook.objectNameString = 'DrupalBible Bible Book object'
thisBook.objectTypeString = 'DrupalBible'
lastChapterNumberString = None
lastBBB = BBB
if chapterNumberString != lastChapterNumberString:
thisBook.addLine( 'c', chapterNumberString )
lastChapterNumberString = chapterNumberString
verseText = verseText.replace( '<', '\\it ' ).replace( '>', '\\it*' )
thisBook.addLine( 'v', verseNumberString + ' ' + verseText )
else: halt
# Save the final book
self.stashBook( thisBook )
self.doPostLoadProcessing()
示例5: load
# 需要导入模块: from Bible import BibleBook [as 别名]
# 或者: from Bible.BibleBook import objectTypeString [as 别名]
#.........这里部分代码省略.........
index += len( block0080 )
keep['bookDataStartIndex'] = (index,bookDataStartIndex)
assert index == bookDataStartIndex # Should now be at the start of the first book (already fetched above)
# Look at extra stuff right at the end of the file
assert len(rawBooks) == 66
index = bookStart + bookLength # of the last book
endBytes = fileBytes[index:]
#if BibleOrgSysGlobals.debugFlag and debuggingThisModule:
#print( 'endBytes', len(endBytes), hexlify(endBytes), endBytes )
assert len(endBytes) == 16
keep['endBytes'] = (index,endBytes)
assert endBytes == b'\x18:\x00\x00\x00\x00\x00\x00ezwBible' # b'183a000000000000657a774269626c65'
del fileBytes # Not needed any more
# Now we have to decode the book text (compressed about 4x with zlib)
if BibleOrgSysGlobals.verbosityLevel > 1: print( "EWB loading books for {}…".format( self.abbreviation ) )
for j, BBB in enumerate( BOS.getBookList() ):
bookAbbrev, numChapters, numVerses, bookStart, bookLength, bookBytes = rawBooks[j]
if bookLength == 0:
assert not bookBytes
logging.critical( " Skipped empty {}".format( BBB ) )
continue
if BibleOrgSysGlobals.verbosityLevel > 2: print( ' Decoding {}…'.format( BBB ) )
bookBytes, bookExtra = bookBytes[:-10], bookBytes[-10:]
assert len(bookExtra) == 10
keep['bookExtra-{}'.format(j+1)] = (-10,bookExtra)
assert bookExtra[:4] == b'QK\x03\x04'
uncompressedBookLength, = struct.unpack( "<I", bookExtra[4:8] )
assert bookExtra[8:] == b'\x08\x00'
byteResult = zlib.decompress( bookBytes )
assert len(byteResult) == uncompressedBookLength
try: textResult = byteResult.decode( 'utf8' )
except UnicodeDecodeError:
logging.critical( "Unable to decode {} {} bookText -- maybe it's not utf-8???".format( self.abbreviation, BBB ) )
continue
if debuggingThisModule:
rewriteResult1 = zlib.compress( byteResult, 9 )
byteResult1 = zlib.decompress( rewriteResult1 )
if rewriteResult1 != bookBytes:
print( "\nbookBytes", len(bookBytes), hexlify(bookBytes) )
print( "\nrewriteResult1", len(rewriteResult1), hexlify(rewriteResult1) )
halt
if byteResult1 != byteResult:
print( len(byteResult), hexlify(byteResult) )
print( len(byteResult1), hexlify(byteResult1) )
halt
if '\t' in textResult:
logging.warning( "Replacing tab characters in {} = {}".format( BBB, bookAbbrev ) )
textResult = textResult.replace( '\t', ' ' )
#print( textResult )
if BibleOrgSysGlobals.strictCheckingFlag: assert ' ' not in textResult
thisBook = BibleBook( self, BBB )
thisBook.objectNameString = 'EasyWorship Bible Book object'
thisBook.objectTypeString = 'EasyWorship Bible'
if bookAbbrev: thisBook.addLine( 'toc3', bookAbbrev )
C, V = '-1', '-1' # So first/id line starts at -1:0
for line in textResult.split( '\r\n' ):
if not line: continue # skip blank lines
#if BibleOrgSysGlobals.debugFlag and debuggingThisModule:
#print( 'Processing {} {} line: {!r}'.format( self.abbreviation, BBB, line ) )
assert line[0].isdigit()
assert ':' in line[:4]
CV,verseText = line.split( ' ', 1 )
newC,newV = CV.split( ':' )
#print( newC, V, repr(verseText) )
if newC != C:
if self.abbreviation=='hcsb' and BBB in ('SA2',): # Handle a bad bug -- chapter 24 has verses out of order
logging.critical( "Skipping error for out-of-order chapters in {}!".format( BBB ) )
else: assert int(newC) > int(C)
C, V = newC, '0'
thisBook.addLine( 'c', C )
if self.abbreviation=='TB' and BBB=='JOL': # Handle a bug -- chapter 3 repeats
if int(newV) < int(V): break
elif self.abbreviation=='drv' and BBB in ('GEN','EXO','NUM',): # Handle a bug -- Gen 18:1&12, Exo 28:42&43 out of order
logging.critical( "Skipping error for out-of-order verses in {} {}".format( self.abbreviation, BBB ) )
elif self.abbreviation=='rsv' and BBB in ('EXO','HAG',): # Handle a bug -- chapter 22 has verses out of order
logging.critical( "Skipping error for out-of-order verses in {} {}".format( self.abbreviation, BBB ) )
elif self.abbreviation=='gnt' and BBB in ('ISA','ZEC','MRK',): # Handle a bug -- chapter 38 has verses out of order
logging.critical( "Skipping error for out-of-order verses in {} {}".format( self.abbreviation, BBB ) )
elif self.abbreviation=='hcsb' and BBB in ('SA2',): # Handle a bug -- chapter 24 has verses out of order
logging.critical( "Skipping error for out-of-order verses in {} {}".format( self.abbreviation, BBB ) )
elif self.abbreviation=='msg' and BBB in ('NUM','JDG','SA2','CH2','EZE','ACT',): # Handle a bug -- chapter 24 has verses out of order
logging.critical( "Skipping error for out-of-order verses in {} {}".format( self.abbreviation, BBB ) )
else:
try: assert int(newV) > int(V)
except ValueError:
logging.critical( "Something's not an integer around {} {} {}:{} {}".format( self.abbreviation, BBB, C, V, verseText ) )
except AssertionError:
logging.critical( "Something's out of order around {} {} {}:{} {}".format( self.abbreviation, BBB, C, V, verseText ) )
V = newV
thisBook.addLine( 'v', V + ' ' + verseText )
if BibleOrgSysGlobals.verbosityLevel > 3: print( "Saving", BBB )
self.stashBook( thisBook )
self.doPostLoadProcessing()
return keep
示例6: load
# 需要导入模块: from Bible import BibleBook [as 别名]
# 或者: from Bible.BibleBook import objectTypeString [as 别名]
def load( self ):
"""
Load a single source file and load book elements.
"""
if BibleOrgSysGlobals.verbosityLevel > 2: print( _("Loading {}...").format( self.sourceFilepath ) )
fileExtensionUpper = self.fileExtension.upper()
if fileExtensionUpper not in filenameEndingsToAccept:
logging.critical( "{} doesn't appear to be a MySword file".format( self.sourceFilename ) )
elif not self.sourceFilename.upper().endswith( BibleFilenameEndingsToAccept[0] ):
logging.critical( "{} doesn't appear to be a MySword Bible file".format( self.sourceFilename ) )
connection = sqlite3.connect( self.sourceFilepath )
connection.row_factory = sqlite3.Row # Enable row names
cursor = connection.cursor()
# First get the settings
cursor.execute( 'select * from Details' )
row = cursor.fetchone()
for key in row.keys():
self.settingsDict[key] = row[key]
#print( self.settingsDict ); halt
if 'Description' in self.settingsDict and len(self.settingsDict['Description'])<40: self.name = self.settingsDict['Description']
if 'Abbreviation' in self.settingsDict: self.abbreviation = self.settingsDict['Abbreviation']
if 'encryption' in self.settingsDict: logging.critical( "{} is encrypted: level {}".format( self.sourceFilename, self.settingsDict['encryption'] ) )
if self.settingsDict['OT'] and self.settingsDict['NT']:
testament, BBB = 'BOTH', 'GEN'
booksExpected, textLineCountExpected = 66, 31102
elif self.settingsDict['OT']:
testament, BBB = 'OT', 'GEN'
booksExpected, textLineCountExpected = 39, 23145
elif self.settingsDict['NT']:
testament, BBB = 'NT', 'MAT'
booksExpected, textLineCountExpected = 27, 7957
BOS = BibleOrganizationalSystem( "GENERIC-KJV-66-ENG" )
# Create the first book
thisBook = BibleBook( self, BBB )
thisBook.objectNameString = "MySword Bible Book object"
thisBook.objectTypeString = "MySword"
verseList = BOS.getNumVersesList( BBB )
numC, numV = len(verseList), verseList[0]
nBBB = BibleOrgSysGlobals.BibleBooksCodes.getReferenceNumber( BBB )
C = V = 1
bookCount = 0
ourGlobals = {}
continued = ourGlobals['haveParagraph'] = False
haveLines = False
while True:
cursor.execute('select Scripture from Bible where Book=? and Chapter=? and Verse=?', (nBBB,C,V) )
try:
row = cursor.fetchone()
line = row[0]
except TypeError: # This reference is missing (row is None)
#print( "something wrong at", BBB, C, V )
#if BibleOrgSysGlobals.debugFlag: halt
#print( row )
line = None
#print ( nBBB, BBB, C, V, 'MySw file line is "' + line + '"' )
if line is None: logging.warning( "MySwordBible.load: Found missing verse line at {} {}:{}".format( BBB, C, V ) )
else: # line is not None
if not isinstance( line, str ):
if 'encryption' in self.settingsDict:
logging.critical( "MySwordBible.load: Unable to decrypt verse line at {} {}:{} {}".format( BBB, C, V, repr(line) ) )
break
else:
logging.critical( "MySwordBible.load: Unable to decode verse line at {} {}:{} {} {}".format( BBB, C, V, repr(line), self.settingsDict ) )
elif not line: logging.warning( "MySwordBible.load: Found blank verse line at {} {}:{}".format( BBB, C, V ) )
else:
haveLines = True
# Some modules end lines with \r\n or have it in the middle!
# (We just ignore these for now)
while line and line[-1] in '\r\n': line = line[:-1]
if '\r' in line or '\n' in line: # (in the middle)
logging.warning( "MySwordBible.load: Found CR or LF characters in verse line at {} {}:{}".format( BBB, C, V ) )
line = line.replace( '\r\n', ' ' ).replace( '\r', ' ' ).replace( '\n', ' ' )
#print( "MySword.load", BBB, C, V, repr(line) )
handleLine( self.name, BBB, C, V, line, thisBook, ourGlobals )
V += 1
if V > numV:
C += 1
if C > numC: # Save this book now
if haveLines:
if BibleOrgSysGlobals.verbosityLevel > 3: print( "Saving", BBB, bookCount+1 )
self.saveBook( thisBook )
#else: print( "Not saving", BBB )
bookCount += 1 # Not the number saved but the number we attempted to process
if bookCount >= booksExpected: break
BBB = BOS.getNextBookCode( BBB )
# Create the next book
thisBook = BibleBook( self, BBB )
thisBook.objectNameString = "MySword Bible Book object"
thisBook.objectTypeString = "MySword"
#.........这里部分代码省略.........
示例7: load
# 需要导入模块: from Bible import BibleBook [as 别名]
# 或者: from Bible.BibleBook import objectTypeString [as 别名]
def load( self ):
"""
Load a single source file and load book elements.
"""
if BibleOrgSysGlobals.verbosityLevel > 2: print( _("Loading {}...").format( self.sourceFilepath ) )
lastLine, lineCount = '', 0
BBB = None
lastBookCode = lastChapterNumber = lastVerseNumber = -1
lastVText = ''
with open( self.sourceFilepath, encoding=self.encoding ) as myFile: # Automatically closes the file when done
for line in myFile:
lineCount += 1
if lineCount==1 and self.encoding.lower()=='utf-8' and line[0]==chr(65279): #U+FEFF
logging.info( " VPLBible.load: Detected UTF-16 Byte Order Marker" )
line = line[1:] # Remove the UTF-8 Byte Order Marker
if line[-1]=='\n': line=line[:-1] # Removing trailing newline character
if not line: continue # Just discard blank lines
lastLine = line
#print ( 'VLP file line is "' + line + '"' )
if line[0]=='#': continue # Just discard comment lines
bits = line.split( ' ', 2 )
#print( self.givenName, BBB, bits )
if len(bits) == 3 and ':' in bits[1]:
bookCode, CVString, vText = bits
chapterNumberString, verseNumberString = CVString.split( ':' )
else: print( "Unexpected number of bits", self.givenName, BBB, bookCode, chapterNumberString, verseNumberString, len(bits), bits )
if not bookCode and not chapterNumberString and not verseNumberString:
print( "Skipping empty line in {} {} {} {}:{}".format( self.givenName, BBB, bookCode, chapterNumberString, verseNumberString ) )
continue
if BibleOrgSysGlobals.debugFlag: assert( 2 <= len(bookCode) <= 4 )
if BibleOrgSysGlobals.debugFlag: assert( chapterNumberString.isdigit() )
if not verseNumberString.isdigit():
logging.error( "Invalid verse number field at {}/{} {}:{!r}".format( bookCode, BBB, chapterNumberString, verseNumberString ) )
if BibleOrgSysGlobals.debugFlag and debuggingThisModule: assert( verseNumberString.isdigit() )
continue
chapterNumber = int( chapterNumberString )
verseNumber = int( verseNumberString )
if bookCode != lastBookCode: # We've started a new book
if lastBookCode != -1: # Better save the last book
self.saveBook( thisBook )
#if bookCode in ('Ge',): BBB = 'GEN'
#elif bookCode in ('Le',): BBB = 'LEV'
##elif bookCode in ('Jud',): BBB = 'JDG'
#elif bookCode in ('Es',): BBB = 'EST'
#elif bookCode in ('Pr',): BBB = 'PRO'
#elif bookCode in ('So',): BBB = 'SNG'
#elif bookCode in ('La',): BBB = 'LAM'
#elif bookCode in ('Jude',): BBB = 'JDE'
BBB = BibleOrgSysGlobals.BibleBooksCodes.getBBB( bookCode ) # Try to guess
if BBB:
thisBook = BibleBook( self, BBB )
thisBook.objectNameString = "VPL Bible Book object"
thisBook.objectTypeString = "VPL"
lastBookCode = bookCode
lastChapterNumber = lastVerseNumber = -1
else:
logging.critical( "VPLBible could not figure out {!r} book code".format( bookCode ) )
if BibleOrgSysGlobals.debugFlag: halt
if chapterNumber != lastChapterNumber: # We've started a new chapter
if BibleOrgSysGlobals.debugFlag: assert( chapterNumber > lastChapterNumber or BBB=='ESG' ) # Esther Greek might be an exception
if chapterNumber == 0:
logging.info( "Have chapter zero in {} {} {} {}:{}".format( self.givenName, BBB, bookCode, chapterNumberString, verseNumberString ) )
thisBook.addLine( 'c', chapterNumberString )
lastChapterNumber = chapterNumber
lastVerseNumber = -1
# Handle special formatting
# [brackets] are for Italicized words
# <brackets> are for the Words of Christ in Red
# «brackets» are for the Titles in the Book of Psalms.
vText = vText.replace( '[', '\\add ' ).replace( ']', '\\add*' ) \
.replace( '<', '\\wj ' ).replace( '>', '\\wj*' )
if vText and vText[0]=='«':
#print( "Oh!", BBB, chapterNumberString, verseNumberString, repr(vText) )
if BBB=='PSA' and verseNumberString=='1': # Psalm title
vBits = vText[1:].split( '»' )
#print( "vBits", vBits )
thisBook.addLine( 'd', vBits[0] ) # Psalm title
vText = vBits[1].lstrip()
# Handle the verse info
if verseNumber==lastVerseNumber and vText==lastVText:
logging.warning( _("Ignored duplicate verse line in {} {} {} {}:{}").format( self.givenName, BBB, bookCode, chapterNumberString, verseNumberString ) )
continue
if BBB=='PSA' and verseNumberString=='1' and vText.startswith('<') and self.givenName=='basic_english':
# Move Psalm titles to verse zero
verseNumber = 0
if verseNumber < lastVerseNumber:
logging.warning( _("Ignored receding verse number (from {} to {}) in {} {} {} {}:{}").format( lastVerseNumber, verseNumber, self.givenName, BBB, bookCode, chapterNumberString, verseNumberString ) )
elif verseNumber == lastVerseNumber:
if vText == lastVText:
logging.warning( _("Ignored duplicated {} verse in {} {} {} {}:{}").format( verseNumber, self.givenName, BBB, bookCode, chapterNumberString, verseNumberString ) )
else:
logging.warning( _("Ignored duplicated {} verse number in {} {} {} {}:{}").format( verseNumber, self.givenName, BBB, bookCode, chapterNumberString, verseNumberString ) )
thisBook.addLine( 'v', verseNumberString + ' ' + vText )
#.........这里部分代码省略.........
示例8: load
# 需要导入模块: from Bible import BibleBook [as 别名]
# 或者: from Bible.BibleBook import objectTypeString [as 别名]
def load( self ):
"""
Load a single source file and load book elements.
"""
if Globals.verbosityLevel > 2: print( _("Loading {}...").format( self.sourceFilepath ) )
lastLine, lineCount = '', 0
BBB = None
lastBookNumber = lastChapterNumber = lastVerseNumber = -1
lastVText = ''
quoted = None
with open( self.sourceFilepath, encoding=self.encoding ) as myFile: # Automatically closes the file when done
for line in myFile:
lineCount += 1
#if lineCount==1 and self.encoding.lower()=='utf-8' and line[0]==chr(65279): #U+FEFF
#logging.info( " CSVBible.load: Detected UTF-16 Byte Order Marker" )
#line = line[1:] # Remove the UTF-8 Byte Order Marker
if line[-1]=='\n': line=line[:-1] # Removing trailing newline character
if not line: continue # Just discard blank lines
if line==' ': continue # Handle special case which has blanks on every second line -- HACK
lastLine = line
#print ( "CSV file line {} is {}".format( lineCount, repr(line) ) )
if line[0]=='#': continue # Just discard comment lines
if lineCount==1:
if line.startswith( '"Book",' ):
quoted = True
continue # Just discard header line
elif line.startswith( 'Book,' ):
quoted = False
continue # Just discard header line
bits = line.split( ',', 3 )
#print( lineCount, self.givenName, BBB, bits )
if len(bits) == 4:
bString, chapterNumberString, verseNumberString, vText = bits
#print( "bString, chapterNumberString, verseNumberString, vText", bString, chapterNumberString, verseNumberString, vText )
else: print( "Unexpected number of bits", self.givenName, BBB, bString, chapterNumberString, verseNumberString, vText, len(bits), bits )
# Remove quote marks from these strings
if quoted:
if len(bString)>=2 and bString[0]==bString[-1] and bString[0] in '"\'': bString = bString[1:-1]
if len(chapterNumberString)>=2 and chapterNumberString[0]==chapterNumberString[-1] and chapterNumberString[0] in '"\'': chapterNumberString = chapterNumberString[1:-1]
if len(verseNumberString)>=2 and verseNumberString[0]==verseNumberString[-1] and verseNumberString[0] in '"\'': verseNumberString = verseNumberString[1:-1]
if len(vText)>=2 and vText[0]==vText[-1] and vText[0] in '"\'': vText = vText[1:-1]
#print( "bString, chapterNumberString, verseNumberString, vText", bString, chapterNumberString, verseNumberString, vText )
#if not bookCode and not chapterNumberString and not verseNumberString:
#print( "Skipping empty line in {} {} {} {}:{}".format( self.givenName, BBB, bookCode, chapterNumberString, verseNumberString ) )
#continue
#if Globals.debugFlag: assert( 2 <= len(bookCode) <= 4 )
#if Globals.debugFlag: assert( chapterNumberString.isdigit() )
#if Globals.debugFlag: assert( verseNumberString.isdigit() )
bookNumber = int( bString )
chapterNumber = int( chapterNumberString )
verseNumber = int( verseNumberString )
if bookNumber != lastBookNumber: # We've started a new book
if lastBookNumber != -1: # Better save the last book
self.saveBook( thisBook )
BBB = Globals.BibleBooksCodes.getBBBFromReferenceNumber( bookNumber ) # Try to guess
assert( BBB )
thisBook = BibleBook( self, BBB )
thisBook.objectNameString = "CSV Bible Book object"
thisBook.objectTypeString = "CSV"
lastBookNumber = bookNumber
lastChapterNumber = lastVerseNumber = -1
if chapterNumber != lastChapterNumber: # We've started a new chapter
if Globals.debugFlag: assert( chapterNumber > lastChapterNumber or BBB=='ESG' ) # Esther Greek might be an exception
if chapterNumber == 0:
logging.info( "Have chapter zero in {} {} {} {}:{}".format( self.givenName, BBB, bookNumber, chapterNumberString, verseNumberString ) )
thisBook.appendLine( 'c', chapterNumberString )
lastChapterNumber = chapterNumber
lastVerseNumber = -1
# Now we have to convert any possible RTF codes to our internal codes
vTextOriginal = vText
# First do special characters
vText = vText.replace( '\\ldblquote', '“' ).replace( '\\rdblquote', '”' ).replace( '\\lquote', '‘' ).replace( '\\rquote', '’' )
vText = vText.replace( '\\emdash', '—' ).replace( '\\endash', '–' )
# Now do Unicode characters
while True: # Find patterns like \\'d3
match = re.search( r"\\'[0-9a-f][0-9a-f]", vText )
if not match: break
i = int( vText[match.start()+2:match.end()], 16 ) # Convert two hex characters to decimal
vText = vText[:match.start()] + chr( i ) + vText[match.end():]
while True: # Find patterns like \\u253?
match = re.search( r"\\u[1-2][0-9][0-9]\?", vText )
if not match: break
i = int( vText[match.start()+2:match.end()-1] ) # Convert three digits to decimal
vText = vText[:match.start()] + chr( i ) + vText[match.end():]
#if vText != vTextOriginal: print( repr(vTextOriginal) ); print( repr(vText) )
## Handle special formatting
## [brackets] are for Italicized words
## <brackets> are for the Words of Christ in Red
## «brackets» are for the Titles in the Book of Psalms.
#vText = vText.replace( '[', '\\add ' ).replace( ']', '\\add*' ) \
#.replace( '<', '\\wj ' ).replace( '>', '\\wj*' )
#if vText and vText[0]=='«':
#.........这里部分代码省略.........
示例9: load
# 需要导入模块: from Bible import BibleBook [as 别名]
# 或者: from Bible.BibleBook import objectTypeString [as 别名]
#.........这里部分代码省略.........
#if lastBookCode != -1: # Better save the last book
#self.saveBook( thisBook )
#BBB = Globals.BibleBooksCodes.getBBBFromYETBibleCode( bookCode )
#thisBook = BibleBook( self.name, BBB )
#thisBook.objectNameString = "YET Bible Book object"
#thisBook.objectTypeString = "YET"
#lastBookCode = bookCode
#lastChapterNumber = lastVerseNumber = -1
#if chapterNumber != lastChapterNumber: # We've started a new chapter
#if Globals.debugFlag: assert( chapterNumber > lastChapterNumber or BBB=='ESG' ) # Esther Greek might be an exception
#if chapterNumber == 0:
#logging.info( "Have chapter zero in {} {} {} {}:{}".format( self.givenName, BBB, bookCode, chapterNumberString, verseNumberString ) )
#thisBook.appendLine( 'c', chapterNumberString )
#lastChapterNumber = chapterNumber
#lastVerseNumber = -1
## Handle the verse info
#if verseNumber==lastVerseNumber and vText==lastVText:
#logging.warning( _("Ignored duplicate verse line in {} {} {} {}:{}").format( self.givenName, BBB, bookCode, chapterNumberString, verseNumberString ) )
#continue
#if BBB=='PSA' and verseNumberString=='1' and vText.startswith('<') and self.givenName=='basic_english':
## Move Psalm titles to verse zero
#verseNumber = 0
#if verseNumber < lastVerseNumber:
#logging.warning( _("Ignored receding verse number (from {} to {}) in {} {} {} {}:{}").format( lastVerseNumber, verseNumber, self.givenName, BBB, bookCode, chapterNumberString, verseNumberString ) )
#elif verseNumber == lastVerseNumber:
#if vText == lastVText:
#logging.warning( _("Ignored duplicated {} verse in {} {} {} {}:{}").format( verseNumber, self.givenName, BBB, bookCode, chapterNumberString, verseNumberString ) )
#else:
#logging.warning( _("Ignored duplicated {} verse number in {} {} {} {}:{}").format( verseNumber, self.givenName, BBB, bookCode, chapterNumberString, verseNumberString ) )
#thisBook.appendLine( 'v', verseNumberString + ' ' + vText )
#lastVText = vText
#lastVerseNumber = verseNumber
# Now process the books
for BBB,bkData in bookDict.items():
#print( "Processing", BBB )
thisBook = BibleBook( self.name, BBB )
thisBook.objectNameString = "YET Bible Book object"
thisBook.objectTypeString = "YET"
lastChapterNumberString = None
for (chapterNumberString,verseNumberString), verseString in bkData.items():
# Insert headings (can only occur before verses)
if (BBB,chapterNumberString,verseNumberString) in headingDict:
heading, refList = headingDict[(BBB,chapterNumberString,verseNumberString)]
#print( 's', BBB, chapterNumberString, verseNumberString, repr(heading), refList )
thisBook.appendLine( 's', heading )
if refList:
refString = ""
#print( 's', BBB, chapterNumberString, verseNumberString, repr(heading), refList )
for ref in refList:
refString += ('; ' if refString else '') + ref
#print( 's', BBB, chapterNumberString, verseNumberString, repr(heading), refList, repr(refString) )
thisBook.appendLine( 'r', '('+refString+')' )
# Insert footnotes and cross-references
while( '\\ff' in verseString ):
#print( "footnote", repr(verseString) )
fIx = verseString.index( '\\ff' )
caller = verseString[fIx+3]
#print( "fcaller", repr(caller) )
assert( caller.isdigit() )
note = footnoteDict[(BBB,chapterNumberString,verseNumberString,caller)]
#print( "fnote", repr(note) )
verseString = verseString[:fIx] + '\\f + \\ft ' + note + '\\f*' + verseString[fIx+4:]
#print( "fvS", repr(verseString) )
while( '\\xx' in verseString ):
#print( "xref", repr(verseString) )
fIx = verseString.index( '\\xx' )
caller = verseString[fIx+3]
#print( "xcaller", repr(caller) )
assert( caller.isdigit() )
note = xrefDict[(BBB,chapterNumberString,verseNumberString,caller)]
#print( "xnote", repr(note) )
verseString = verseString[:fIx] + '\\x - \\xt ' + note + '\\x*' + verseString[fIx+4:]
#print( "xvS", repr(verseString) )
# Save the Bible data fields
if chapterNumberString != lastChapterNumberString:
thisBook.appendLine( 'c', chapterNumberString )
lastChapterNumberString = chapterNumberString
#print( BBB, chapterNumberString, verseNumberString, repr(verseString) )
if verseString.startswith( '\\\\' ): # It's an initial paragraph marker
if verseString[3]==' ': marker, verseString = verseString[2], verseString[4:]
elif verseString[4]==' ': marker, verseString = verseString[2:4], verseString[5:]
else: halt
#print( '', '\\'+marker )
thisBook.appendLine( marker, '' )
assert( not verseString.startswith( '\\\\' ) )
bits = verseString.split( '\\\\' ) # Split on paragraph markers (but not character markers)
for j,bit in enumerate(bits):
#print( "loop", j, repr(bit), repr(verseString) )
if j==0: thisBook.appendLine( 'v', verseNumberString + ' ' + verseString.rstrip() )
else:
if bit[1]==' ': marker, bit = bit[0], bit[2:]
elif bit[2]==' ': marker, bit = bit[0:2], bit[3:]
else: halt
#print( "mV", marker, repr(bit), repr(verseString) )
thisBook.appendLine( marker, bit.rstrip() )
self.saveBook( thisBook )
self.doPostLoadProcessing()
示例10: load
# 需要导入模块: from Bible import BibleBook [as 别名]
# 或者: from Bible.BibleBook import objectTypeString [as 别名]
def load( self ):
"""
Load a single source file and load book elements.
"""
if BibleOrgSysGlobals.verbosityLevel > 2: print( _("Loading {}...").format( self.sourceFilepath ) )
lastLine, lineCount = '', 0
BBB = None
NRSVA_bookCode = NRSVA_chapterNumberString = NRSVA_verseNumberString = None
subverseNumberString = sequenceNumberString = None
lastBookCode = lastChapterNumber = lastVerseNumber = lastSequence = -1
lastVText = ''
with open( self.sourceFilepath, encoding=self.encoding ) as myFile: # Automatically closes the file when done
for line in myFile:
lineCount += 1
#if lineCount==1 and self.encoding.lower()=='utf-8' and line[0]==chr(65279): #U+FEFF
#logging.info( " UnboundBible.load: Detected UTF-16 Byte Order Marker" )
#line = line[1:] # Remove the UTF-8 Byte Order Marker
if line[-1]=='\n': line=line[:-1] # Removing trailing newline character
if not line: continue # Just discard blank lines
lastLine = line
#print ( 'UB file line is "' + line + '"' )
if line[0]=='#':
hashBits = line[1:].split( '\t' )
if len(hashBits)==2 and hashBits[1]: # We have some valid meta-data
if hashBits[0] == 'name': self.name = hashBits[1]
elif hashBits[0] == 'filetype': self.filetype = hashBits[1]
elif hashBits[0] == 'copyright': self.copyright = hashBits[1]
elif hashBits[0] == 'abbreviation': self.abbreviation = hashBits[1]
elif hashBits[0] == 'language': self.language = hashBits[1]
elif hashBits[0] == 'note': self.note = hashBits[1]
elif hashBits[0] == 'columns': self.columns = hashBits[1]
# Should some of these be placed into self.settingsDict???
logging.warning( "Unknown UnboundBible meta-data field {!r} = {!r}".format( hashBits[0], hashBits[1] ) )
continue # Just discard comment lines
bits = line.split( '\t' )
#print( self.givenName, BBB, bits )
if len(bits) == 4:
bookCode, chapterNumberString, verseNumberString, vText = bits
elif len(bits) == 6:
bookCode, chapterNumberString, verseNumberString, subverseNumberString, sequenceNumberString, vText = bits
elif len(bits) == 9:
NRSVA_bookCode, NRSVA_chapterNumberString, NRSVA_verseNumberString, bookCode, chapterNumberString, verseNumberString, subverseNumberString, sequenceNumberString, vText = bits
elif len(bits) == 1 and self.givenName.startswith( 'lxx_a_parsing_' ):
logging.warning( _("Skipping bad {!r} line in {} {} {} {}:{}").format( line, self.givenName, BBB, bookCode, chapterNumberString, verseNumberString ) )
continue
else: print( "Unexpected number of bits", self.givenName, BBB, bookCode, chapterNumberString, verseNumberString, len(bits), bits ); halt
if NRSVA_bookCode: assert( len(NRSVA_bookCode) == 3 )
if NRSVA_chapterNumberString: assert( NRSVA_chapterNumberString.isdigit() )
if NRSVA_verseNumberString: assert( NRSVA_verseNumberString.isdigit() )
if not bookCode and not chapterNumberString and not verseNumberString:
print( "Skipping empty line in {} {} {} {}:{}".format( self.givenName, BBB, bookCode, chapterNumberString, verseNumberString ) )
continue
if BibleOrgSysGlobals.debugFlag: assert( len(bookCode) == 3 )
if BibleOrgSysGlobals.debugFlag: assert( chapterNumberString.isdigit() )
if BibleOrgSysGlobals.debugFlag: assert( verseNumberString.isdigit() )
if subverseNumberString:
logging.warning( _("subverseNumberString {!r} in {} {} {}:{}").format( subverseNumberString, BBB, bookCode, chapterNumberString, verseNumberString ) )
vText = vText.strip() # Remove leading and trailing spaces
if not vText: continue # Just ignore blank verses I think
if vText == '+': continue # Not sure what this means in basic_english JHN 1:38
chapterNumber = int( chapterNumberString )
verseNumber = int( verseNumberString )
if sequenceNumberString:
if BibleOrgSysGlobals.debugFlag: assert( sequenceNumberString.isdigit() )
sequenceNumber = int( sequenceNumberString )
if BibleOrgSysGlobals.debugFlag: assert( sequenceNumber > lastSequence or \
self.givenName in ('gothic_latin', 'hebrew_bhs_consonants', 'hebrew_bhs_vowels', 'latvian_nt', 'ukrainian_1871',) ) # Why???
lastSequence = sequenceNumber
if bookCode != lastBookCode: # We've started a new book
if lastBookCode != -1: # Better save the last book
self.saveBook( thisBook )
BBB = BibleOrgSysGlobals.BibleBooksCodes.getBBBFromUnboundBibleCode( bookCode )
thisBook = BibleBook( self, BBB )
thisBook.objectNameString = 'Unbound Bible Book object'
thisBook.objectTypeString = 'Unbound'
lastBookCode = bookCode
lastChapterNumber = lastVerseNumber = -1
if chapterNumber != lastChapterNumber: # We've started a new chapter
if BibleOrgSysGlobals.debugFlag: assert( chapterNumber > lastChapterNumber or BBB=='ESG' ) # Esther Greek might be an exception
if chapterNumber == 0:
logging.info( "Have chapter zero in {} {} {} {}:{}".format( self.givenName, BBB, bookCode, chapterNumberString, verseNumberString ) )
thisBook.addLine( 'c', chapterNumberString )
lastChapterNumber = chapterNumber
lastVerseNumber = -1
# Handle the verse info
if verseNumber==lastVerseNumber and vText==lastVText:
logging.warning( _("Ignored duplicate verse line in {} {} {} {}:{}").format( self.givenName, BBB, bookCode, chapterNumberString, verseNumberString ) )
continue
if BBB=='PSA' and verseNumberString=='1' and vText.startswith('<') and self.givenName=='basic_english':
# Move Psalm titles to verse zero
#.........这里部分代码省略.........
示例11: load
# 需要导入模块: from Bible import BibleBook [as 别名]
# 或者: from Bible.BibleBook import objectTypeString [as 别名]
#.........这里部分代码省略.........
logging.warning(
_("subverseNumberString {!r} in {} {} {}:{}").format(
subverseNumberString, BBB, bookCode, chapterNumberString, verseNumberString
)
)
vText = vText.strip() # Remove leading and trailing spaces
if not vText:
continue # Just ignore blank verses I think
if vText == "+":
continue # Not sure what this means in basic_english JHN 1:38
chapterNumber = int(chapterNumberString)
verseNumber = int(verseNumberString)
if sequenceNumberString:
if BibleOrgSysGlobals.debugFlag:
assert sequenceNumberString.isdigit()
sequenceNumber = int(sequenceNumberString)
if BibleOrgSysGlobals.debugFlag:
assert sequenceNumber > lastSequence or self.givenName in (
"gothic_latin",
"hebrew_bhs_consonants",
"hebrew_bhs_vowels",
"latvian_nt",
"ukrainian_1871",
) # Why???
lastSequence = sequenceNumber
if bookCode != lastBookCode: # We've started a new book
if lastBookCode != -1: # Better save the last book
self.stashBook(thisBook)
BBB = BibleOrgSysGlobals.BibleBooksCodes.getBBBFromUnboundBibleCode(bookCode)
thisBook = BibleBook(self, BBB)
thisBook.objectNameString = "Unbound Bible Book object"
thisBook.objectTypeString = "Unbound"
lastBookCode = bookCode
lastChapterNumber = lastVerseNumber = -1
if chapterNumber != lastChapterNumber: # We've started a new chapter
if BibleOrgSysGlobals.debugFlag:
assert chapterNumber > lastChapterNumber or BBB == "ESG" # Esther Greek might be an exception
if chapterNumber == 0:
logging.info(
"Have chapter zero in {} {} {} {}:{}".format(
self.givenName, BBB, bookCode, chapterNumberString, verseNumberString
)
)
thisBook.addLine("c", chapterNumberString)
lastChapterNumber = chapterNumber
lastVerseNumber = -1
# Handle the verse info
if verseNumber == lastVerseNumber and vText == lastVText:
logging.warning(
_("Ignored duplicate verse line in {} {} {} {}:{}").format(
self.givenName, BBB, bookCode, chapterNumberString, verseNumberString
)
)
continue
if (
BBB == "PSA"
and verseNumberString == "1"
and vText.startswith("<")
and self.givenName == "basic_english"
):
# Move Psalm titles to verse zero
verseNumber = 0
if verseNumber < lastVerseNumber:
logging.warning(
_("Ignored receding verse number (from {} to {}) in {} {} {} {}:{}").format(
lastVerseNumber,
verseNumber,
self.givenName,
BBB,
bookCode,
chapterNumberString,
verseNumberString,
)
)
elif verseNumber == lastVerseNumber:
if vText == lastVText:
logging.warning(
_("Ignored duplicated {} verse in {} {} {} {}:{}").format(
verseNumber, self.givenName, BBB, bookCode, chapterNumberString, verseNumberString
)
)
else:
logging.warning(
_("Ignored duplicated {} verse number in {} {} {} {}:{}").format(
verseNumber, self.givenName, BBB, bookCode, chapterNumberString, verseNumberString
)
)
thisBook.addLine("v", verseNumberString + " " + vText)
lastVText = vText
lastVerseNumber = verseNumber
# Save the final book
self.stashBook(thisBook)
self.applySuppliedMetadata("Unbound") # Copy some to self.settingsDict
self.doPostLoadProcessing()