forked from openlp/openlp
Adding verses from multiple chapters fails
bzr-revno: 2085
This commit is contained in:
commit
ef5cb33a91
@ -355,37 +355,8 @@ def parse_reference(reference, bible, language_selection, book_ref_id=False):
|
|||||||
log.debug(u'Matched reference %s' % reference)
|
log.debug(u'Matched reference %s' % reference)
|
||||||
book = match.group(u'book')
|
book = match.group(u'book')
|
||||||
if not book_ref_id:
|
if not book_ref_id:
|
||||||
book_names = BibleStrings().BookNames
|
book_ref_id = bible.get_book_ref_id_by_localised_name(
|
||||||
# escape reserved characters
|
book, language_selection)
|
||||||
book_escaped = book
|
|
||||||
for character in u'\\.^$*+?{}[]()':
|
|
||||||
book_escaped = book_escaped.replace(
|
|
||||||
character, u'\\' + character)
|
|
||||||
regex_book = re.compile(u'\s*%s\s*' % u'\s*'.join(
|
|
||||||
book_escaped.split()), re.UNICODE | re.IGNORECASE)
|
|
||||||
if language_selection == LanguageSelection.Bible:
|
|
||||||
db_book = bible.get_book(book)
|
|
||||||
if db_book:
|
|
||||||
book_ref_id = db_book.book_reference_id
|
|
||||||
elif language_selection == LanguageSelection.Application:
|
|
||||||
books = filter(lambda key:
|
|
||||||
regex_book.match(unicode(book_names[key])), book_names.keys())
|
|
||||||
books = filter(None, map(BiblesResourcesDB.get_book, books))
|
|
||||||
for value in books:
|
|
||||||
if bible.get_book_by_book_ref_id(value[u'id']):
|
|
||||||
book_ref_id = value[u'id']
|
|
||||||
break
|
|
||||||
elif language_selection == LanguageSelection.English:
|
|
||||||
books = BiblesResourcesDB.get_books_like(book)
|
|
||||||
if books:
|
|
||||||
book_list = filter(
|
|
||||||
lambda value: regex_book.match(value[u'name']), books)
|
|
||||||
if not book_list:
|
|
||||||
book_list = books
|
|
||||||
for value in book_list:
|
|
||||||
if bible.get_book_by_book_ref_id(value[u'id']):
|
|
||||||
book_ref_id = value[u'id']
|
|
||||||
break
|
|
||||||
elif not bible.get_book_by_book_ref_id(book_ref_id):
|
elif not bible.get_book_by_book_ref_id(book_ref_id):
|
||||||
book_ref_id = False
|
book_ref_id = False
|
||||||
ranges = match.group(u'ranges')
|
ranges = match.group(u'ranges')
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
import chardet
|
import chardet
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import sqlite3
|
import sqlite3
|
||||||
|
|
||||||
from PyQt4 import QtCore
|
from PyQt4 import QtCore
|
||||||
@ -44,6 +45,8 @@ import upgrade
|
|||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
RESERVED_CHARACTERS = u'\\.^$*+?{}[]()'
|
||||||
|
|
||||||
class BibleMeta(BaseModel):
|
class BibleMeta(BaseModel):
|
||||||
"""
|
"""
|
||||||
Bible Meta Data
|
Bible Meta Data
|
||||||
@ -352,6 +355,53 @@ class BibleDB(QtCore.QObject, Manager):
|
|||||||
book, book_id, language_id)
|
book, book_id, language_id)
|
||||||
return book_id
|
return book_id
|
||||||
|
|
||||||
|
def get_book_ref_id_by_localised_name(self, book,
|
||||||
|
language_selection):
|
||||||
|
"""
|
||||||
|
Return the id of a named book.
|
||||||
|
|
||||||
|
``book``
|
||||||
|
The name of the book, according to the selected language.
|
||||||
|
|
||||||
|
``language_selection``
|
||||||
|
The language selection the user has chosen in the settings
|
||||||
|
section of the Bible.
|
||||||
|
"""
|
||||||
|
log.debug(u'get_book_ref_id_by_localised_name("%s", "%s")',
|
||||||
|
book, language_selection)
|
||||||
|
from openlp.plugins.bibles.lib import LanguageSelection, \
|
||||||
|
BibleStrings
|
||||||
|
book_names = BibleStrings().BookNames
|
||||||
|
# escape reserved characters
|
||||||
|
book_escaped = book
|
||||||
|
for character in RESERVED_CHARACTERS:
|
||||||
|
book_escaped = book_escaped.replace(
|
||||||
|
character, u'\\' + character)
|
||||||
|
regex_book = re.compile(u'\s*%s\s*' % u'\s*'.join(
|
||||||
|
book_escaped.split()), re.UNICODE | re.IGNORECASE)
|
||||||
|
if language_selection == LanguageSelection.Bible:
|
||||||
|
db_book = self.get_book(book)
|
||||||
|
if db_book:
|
||||||
|
return db_book.book_reference_id
|
||||||
|
elif language_selection == LanguageSelection.Application:
|
||||||
|
books = filter(lambda key:
|
||||||
|
regex_book.match(unicode(book_names[key])), book_names.keys())
|
||||||
|
books = filter(None, map(BiblesResourcesDB.get_book, books))
|
||||||
|
for value in books:
|
||||||
|
if self.get_book_by_book_ref_id(value[u'id']):
|
||||||
|
return value[u'id']
|
||||||
|
elif language_selection == LanguageSelection.English:
|
||||||
|
books = BiblesResourcesDB.get_books_like(book)
|
||||||
|
if books:
|
||||||
|
book_list = filter(
|
||||||
|
lambda value: regex_book.match(value[u'name']), books)
|
||||||
|
if not book_list:
|
||||||
|
book_list = books
|
||||||
|
for value in book_list:
|
||||||
|
if self.get_book_by_book_ref_id(value[u'id']):
|
||||||
|
return value[u'id']
|
||||||
|
return False
|
||||||
|
|
||||||
def get_verses(self, reference_list, show_error=True):
|
def get_verses(self, reference_list, show_error=True):
|
||||||
"""
|
"""
|
||||||
This is probably the most used function. It retrieves the list of
|
This is probably the most used function. It retrieves the list of
|
||||||
|
@ -277,8 +277,9 @@ class BibleManager(object):
|
|||||||
"""
|
"""
|
||||||
log.debug(u'BibleManager.get_verse_count("%s", "%s", %s)',
|
log.debug(u'BibleManager.get_verse_count("%s", "%s", %s)',
|
||||||
bible, book, chapter)
|
bible, book, chapter)
|
||||||
db_book = self.db_cache[bible].get_book(book)
|
language_selection = self.get_language_selection(bible)
|
||||||
book_ref_id = db_book.book_reference_id
|
book_ref_id = self.db_cache[bible].get_book_ref_id_by_localised_name(
|
||||||
|
book, language_selection)
|
||||||
return self.db_cache[bible].get_verse_count(book_ref_id, chapter)
|
return self.db_cache[bible].get_verse_count(book_ref_id, chapter)
|
||||||
|
|
||||||
def get_verse_count_by_book_ref_id(self, bible, book_ref_id, chapter):
|
def get_verse_count_by_book_ref_id(self, bible, book_ref_id, chapter):
|
||||||
|
Loading…
Reference in New Issue
Block a user