99% of OSIS import now working.

This commit is contained in:
Raoul Snyman 2009-12-24 00:31:14 +02:00
parent 1181152c5a
commit b7f224e280

View File

@ -55,10 +55,18 @@ class BibleOSISImpl():
"""
log.info(u'BibleOSISImpl Initialising')
self.verse_regex = re.compile(r'<verse osisID="([a-zA-Z0-9 ]*).([0-9]*).([0-9]*)">(.*?)</verse>')
self.note_regex = re.compile(r'<note([a-zA-Z0-9 "=]*)>(.*?)</note>')
self.note_regex = re.compile(r'<note(.*?)>(.*?)</note>')
self.title_regex = re.compile(r'<title(.*?)>(.*?)</title>')
self.milestone_regex = re.compile(r'<milestone(.*?)/>')
self.lb_regex = re.compile(r'<lb(.*?)>')
self.l_regex = re.compile(r'<l (.*?)>')
self.w_regex = re.compile(r'<w (.*?)>')
self.q_regex = re.compile(r'<q (.*?)>')
self.spaces_regex = re.compile(r'([ ]{2,})')
self.bibledb = bibledb
# books of the bible linked to bibleid {osis , name}
self.booksOfBible = {}
self.books = {}
# books of the bible linked to bibleid {osis ,Abbrev }
self.abbrevOfBible = {}
filepath = os.path.split(os.path.abspath(__file__))[0]
@ -70,8 +78,9 @@ class BibleOSISImpl():
fbibles = open(filepath, u'r')
for line in fbibles:
p = line.split(u',')
self.booksOfBible[p[0]] = p[1].replace(u'\n', u'')
self.abbrevOfBible[p[0]] = p[2].replace(u'\n', u'')
#self.booksOfBible[p[0]] = p[1].replace(u'\n', u'')
self.books[p[0]] = (p[1].lstrip().rstrip(), p[2].lstrip().rstrip())
#self.abbrevOfBible[p[0]] = p[2].replace(u'\n', u'')
except:
log.exception(u'OSIS bible import failed')
finally:
@ -111,53 +120,46 @@ class BibleOSISImpl():
osis = None
try:
osis = codecs.open(osisfile_record, u'r', details['encoding'])
last_chapter = u'0'
last_chapter = 0
testament = 1
for file_record in osis:
match = self.verse_regex.search(file_record)
if match:
print 'Found:', match.group(4)
#if last_chapter != match.group(2):
print match.group(2)
# dialogobject.incrementProgressBar(
# u'Importing %s %s...' % \
# (self.books[match.group(1)], match.group(2)))
# last_chapter = match.group(2)
book = match.group(1)
chapter = int(match.group(2))
verse = int(match.group(3))
verse_text = match.group(4)
#verse_text = self.remove_block(
#verse_text = self.note_regex.sub(lambda match: u'', verse_text)
print verse_text
else:
print 'Not found...', file_record[:10]
# (self.booksOfBible[p[0]], p[1]))
# book_ptr = None
# count = 0
# verseText = u'<verse osisID='
# testament = 1
# for file_record in osis:
# # cancel pressed on UI
# if not self.loadbible:
# break
# pos = file_record.find(verseText)
# # we have a verse
# if pos > -1:
# epos = file_record.find(u'>', pos)
# # Book Reference
# ref = file_record[pos+15:epos-1]
# #lets find the bible text only
# # find start of text
# pos = epos + 1
# # end of text
# epos = file_record.find(u'</verse>', pos)
# text = file_record[pos : epos]
# #remove tags of extra information
# text = self.remove_block(u'<title', u'</title>', text)
# text = self.remove_block(u'<note', u'</note>', text)
# text = self.remove_block(
# u'<divineName', u'</divineName>', text)
# text = self.remove_tag(u'<lb', text)
# text = self.remove_tag(u'<q', text)
# text = self.remove_tag(u'<l', text)
# text = self.remove_tag(u'<lg', text)
if last_chapter == 0:
if book == u'Gen':
dialogobject.ImportProgressBar.setMaximum(1188)
else:
dialogobject.ImportProgressBar.setMaximum(260)
if last_chapter != chapter:
if last_chapter != 0:
self.bibledb.save_verses()
dialogobject.incrementProgressBar(
u'Importing %s %s...' % \
(self.books[match.group(1)][0], chapter))
if book == u'Matt':
testament += 1
db_book = self.bibledb.create_book(
unicode(self.books[book][0]),
unicode(self.books[book][1]),
testament)
last_chapter = chapter
verse_text = self.note_regex.sub(u'', verse_text)
verse_text = self.title_regex.sub(u'', verse_text)
verse_text = self.milestone_regex.sub(u'', verse_text)
verse_text = self.lb_regex.sub(u'', verse_text)
verse_text = self.l_regex.sub(u'', verse_text)
verse_text = self.w_regex.sub(u'', verse_text)
verse_text = self.q_regex.sub(u'', verse_text)
verse_text = verse_text.replace(u'</lb>', u'')\
.replace(u'</l>', u'').replace(u'<lg>', u'')\
.replace(u'</lg>', u'').replace(u'</q>', u'')\
.replace(u'</div>', u'')
verse_text = self.spaces_regex.sub(u' ', verse_text)
self.bibledb.add_verse(db_book.id, chapter, verse, verse_text)
# # Strange tags where the end is not the same as the start
# # The must be in this order as at least one bible has them
# # crossing and the removal does not work.
@ -174,39 +176,8 @@ class BibleOSISImpl():
# epos = text.find(u'<Rf>', pos)
# text = text[:pos] + text[epos + 4: ]
# pos = text.find(u'<RF>')
# print ref
# continue
# # split up the reference
# p = ref.split(u'.', 3)
# if book_ptr != p[0]:
# # first time through
# if book_ptr is None:
# # set the max book size depending
# # on the first book read
# if p[0] == u'Gen':
# dialogobject.ImportProgressBar.setMaximum(1188)
# else:
# dialogobject.ImportProgressBar.setMaximum(260)
# # First book of NT
# if p[0] == u'Matt':
# testament += 1
# dialogobject.incrementProgressBar(u'Importing %s %s...' % \
# (self.booksOfBible[p[0]], p[1]))
# Receiver.send_message(u'process_events')
# self.bibledb.save_verses()
# book_ptr = p[0]
# book = self.bibledb.create_book(
# unicode(self.booksOfBible[p[0]]),
# unicode(self.abbrevOfBible[p[0]]),
# testament)
# count = 0
# self.bibledb.add_verse(book.id, p[1], p[2], text)
# #count += 1
# #Every 3 verses repaint the screen
# #if count % 3 == 0:
# # Receiver.send_message(u'process_events')
# # count = 0
# #self.bibledb.save_verses()
self.bibledb.save_verses()
dialogobject.incrementProgressBar(u'Finishing import...')
except:
log.exception(u'Loading bible from OSIS file failed')
finally: