localisation off seperators.

This commit is contained in:
M2j 2010-12-17 14:21:55 +01:00
parent fb80a09120
commit a46ea7c4eb
4 changed files with 82 additions and 77 deletions

View File

@ -32,24 +32,32 @@ import re
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
# English: def get_reference_match(match_type):
BIBLE_SEPARATORS = {u'sep_v': r'\s*:\s*', u'sep_r': r'\s*-\s*', u'sep_l': r','} local_separator = unicode(u':;;\s*[:vV]\s*;;-;;\s*-\s*;;,;;\s*,\s*;;end'
# German: ).split(u';;') # English
#BIBLE_SEPARATORS = {u'sep_v': r'\s*,\s*', u'sep_r': r'\s*-\s*', u'sep_l': r'\.'} # local_separator = unicode(u',;;\s*,\s*;;-;;\s*-\s*;;.;;\.;;[Ee]nde'
# ).split(u';;') # German
separators = {
u'sep_v_display': local_separator[0], u'sep_v': local_separator[1],
u'sep_r_display': local_separator[2], u'sep_r': local_separator[3],
u'sep_l_display': local_separator[4], u'sep_l': local_separator[5],
u'sep_e': local_separator[6]}
# RegEx for a verse span: (<chapter>:)?<verse>(-(<chapter>:)?<verse>?)? # verse range match: (<chapter>:)?<verse>(-(<chapter>:)?<verse>?)?
BIBLE_RANGE_REGEX = str(r'(?:(?P<from_chapter>[0-9]+)%(sep_v)s)?' range_string = str(r'(?:(?P<from_chapter>[0-9]+)%(sep_v)s)?(?P<from_verse>'
r'(?P<from_verse>[0-9]+)(?P<range_to>%(sep_r)s(?:(?:(?P<to_chapter>[0-9]+)' r'[0-9]+)(?P<range_to>%(sep_r)s(?:(?:(?P<to_chapter>[0-9]+)%(sep_v)s)?'
r'%(sep_v)s)?(?P<to_verse>[0-9]+))?)?' % BIBLE_SEPARATORS) r'(?P<to_verse>[0-9]+)|%(sep_e)s)?)?' % separators)
if match_type == u'range':
BIBLE_RANGE = re.compile(r'^\s*' + BIBLE_RANGE_REGEX + r'\s*$', re.UNICODE) return re.compile(r'^\s*' + range_string + r'\s*$', re.UNICODE)
elif match_type == u'range_separator':
BIBLE_RANGE_SPLIT = re.compile(BIBLE_SEPARATORS[u'sep_l']) return re.compile(separators[u'sep_l'])
elif match_type == u'full':
# RegEx for a reference <book>(<range>(,|(?=$)))+ # full reference match: <book>(<range>(,|(?=$)))+
BIBLE_REFERENCE = re.compile(str(r'^\s*(?!\s)(?P<book>[\d]*[^\d]+)(?<!\s)\s*' return re.compile(str(r'^\s*(?!\s)(?P<book>[\d]*[^\d]+)(?<!\s)\s*'
r'(?P<ranges>(?:' + BIBLE_RANGE_REGEX + r'(?:%(sep_l)s|(?=\s*$)))+)\s*$') % r'(?P<ranges>(?:' + range_string + r'(?:%(sep_l)s|(?=\s*$)))+)\s*$')
BIBLE_SEPARATORS, re.UNICODE) % separators, re.UNICODE)
else:
return separators[match_type]
def parse_reference(reference): def parse_reference(reference):
""" """
@ -57,7 +65,6 @@ def parse_reference(reference):
typed in string and converts it to a reference list, a list of references to typed in string and converts it to a reference list, a list of references to
be queried from the Bible database files. be queried from the Bible database files.
#####
This is a user manual like description, how the references are working. This is a user manual like description, how the references are working.
- Each reference starts with the book name. A chapter name is manditory. - Each reference starts with the book name. A chapter name is manditory.
@ -80,9 +87,8 @@ def parse_reference(reference):
chapter 3 verse 1 chapter 3 verse 1
- If there is a range separator without further verse declaration the last - If there is a range separator without further verse declaration the last
refered chapter is addressed until the end. refered chapter is addressed until the end.
#####
The ``BIBLE_RANGE`` regular expression produces match groups for verse range ``range_string`` is a regular expression which matches for verse range
declarations: declarations:
1. ``(?:(?P<from_chapter>[0-9]+)%(sep_v)s)?' 1. ``(?:(?P<from_chapter>[0-9]+)%(sep_v)s)?'
@ -90,28 +96,25 @@ def parse_reference(reference):
a verse separator. a verse separator.
2. ``(?P<from_verse>[0-9]+)`` 2. ``(?P<from_verse>[0-9]+)``
The verse reference ``from_verse`` is manditory The verse reference ``from_verse`` is manditory
3. ``(?P<range_to>%(sep_r)s(?:`` ... ``)?)?`` 3. ``(?P<range_to>%(sep_r)s(?:`` ... ``|%(sep_e)s)?)?``
A ``range_to`` declaration is optional. It starts with a range seperator A ``range_to`` declaration is optional. It starts with a range seperator
and contains a optional chapter and verse declaration and contains optional a chapter and verse declaration or a end
separator.
4. ``(?:(?P<to_chapter>[0-9]+)%(sep_v)s)?`` 4. ``(?:(?P<to_chapter>[0-9]+)%(sep_v)s)?``
The ``to_chapter`` reference with seperator is equivalent to group 1. The ``to_chapter`` reference with seperator is equivalent to group 1.
5. ``(?P<to_verse>[0-9]+)?)?`` 5. ``(?P<to_verse>[0-9]+)``
The ``to_verse`` reference is equivalent to group 2. The ``to_verse`` reference is equivalent to group 2.
The ``BIBLE_REFERENCE`` regular expression produces matched groups for the The full reference is matched against get_reference_match(u'full'). This
whole reference string: regular expression looks like this:
1. ``^\s*(?!\s)(?P<book>[\d]*[^\d]+)(?<!\s)\s*`` 1. ``^\s*(?!\s)(?P<book>[\d]*[^\d]+)(?<!\s)\s*``
The ``book`` group starts with the first non-whitespace character. There The ``book`` group starts with the first non-whitespace character. There
are optional leading digits followed by non-digits. The group ends are optional leading digits followed by non-digits. The group ends
before the whitspace in front of the next digit. before the whitspace in front of the next digit.
2. ``(?P<ranges>(?:`` + BIBLE_RANGE_REGEX + 2. ``(?P<ranges>(?:`` + range_string + ``(?:%(sep_l)s|(?=\s*$)))+)\s*$``
``(?:%(sep_l)s|(?=\s*$)))+)\s*$`` The second group contains all ``ranges``. This can be multiple
The sechon group contains all ``ranges``. This can be multiple declarations of a range_string separated by a list separator.
declarations of a BIBLE_RANGE separated by a list separator.
``BIBLE_SEPARATORS`` is a dict which defines the separator formats. It might
be used to localize the bible references.
The reference list is a list of tuples, with each tuple structured like The reference list is a list of tuples, with each tuple structured like
this:: this::
@ -125,20 +128,21 @@ def parse_reference(reference):
""" """
log.debug('parse_reference("%s")', reference) log.debug('parse_reference("%s")', reference)
match = BIBLE_REFERENCE.match(reference) match = get_reference_match(u'full').match(reference)
if match: if match:
log.debug(u'Matched reference %s' % reference) log.debug(u'Matched reference %s' % reference)
book = match.group(u'book') book = match.group(u'book')
ranges = BIBLE_RANGE_SPLIT.split(match.group(u'ranges')) ranges = match.group(u'ranges')
range_list = get_reference_match(u'range_separator').split(ranges)
ref_list = [] ref_list = []
chapter = 0 chapter = 0
for this_range in ranges: for this_range in range_list:
range_match = BIBLE_RANGE.match(this_range) range_match = get_reference_match(u'range').match(this_range)
from_chapter = range_match.group('from_chapter') from_chapter = range_match.group(u'from_chapter')
from_verse = range_match.group('from_verse') from_verse = range_match.group(u'from_verse')
has_range = range_match.group('range_to') has_range = range_match.group(u'range_to')
to_chapter = range_match.group('to_chapter') to_chapter = range_match.group(u'to_chapter')
to_verse = range_match.group('to_verse') to_verse = range_match.group(u'to_verse')
if from_chapter: if from_chapter:
from_chapter = int(from_chapter) from_chapter = int(from_chapter)
if from_verse: if from_verse:
@ -147,7 +151,7 @@ def parse_reference(reference):
to_chapter = int(to_chapter) to_chapter = int(to_chapter)
if to_verse: if to_verse:
to_verse = int(to_verse) to_verse = int(to_verse)
# Fill chapters with reasonable values. # Fill chapter fields with reasonable values.
if from_chapter: if from_chapter:
chapter = from_chapter chapter = from_chapter
elif chapter: elif chapter:
@ -173,10 +177,10 @@ def parse_reference(reference):
to_verse = -1 to_verse = -1
if to_chapter > from_chapter: if to_chapter > from_chapter:
ref_list.append((book, from_chapter, from_verse, -1)) ref_list.append((book, from_chapter, from_verse, -1))
for i in range(int(from_chapter) + 1, int(to_chapter) - 1): for i in range(from_chapter + 1, to_chapter - 1):
ref_list.append((book, i, 1, -1)) ref_list.append((book, i, 1, -1))
ref_list.append((book, to_chapter, 1, to_verse)) ref_list.append((book, to_chapter, 1, to_verse))
elif to_verse >= from_verse: elif to_verse >= from_verse or to_verse == -1:
ref_list.append((book, from_chapter, from_verse, to_verse)) ref_list.append((book, from_chapter, from_verse, to_verse))
elif from_verse: elif from_verse:
ref_list.append((book, from_chapter, from_verse, from_verse)) ref_list.append((book, from_chapter, from_verse, from_verse))

View File

@ -273,7 +273,7 @@ class BSExtract(object):
chapter_url = u'http://m.bibleserver.com/text/%s/%s%s000' % \ chapter_url = u'http://m.bibleserver.com/text/%s/%s%s000' % \
(version, bookindex, chapter_string) (version, bookindex, chapter_string)
''' '''
chapter_url = u'http://m.bibleserver.com/#/%s/%s%s' % \ chapter_url = u'http://m.bibleserver.com/text/%s/%s%s' % \
(version, bookname, chapter) (version, bookname, chapter)
log.debug(u'URL: %s', chapter_url) log.debug(u'URL: %s', chapter_url)

View File

@ -32,6 +32,7 @@ from PyQt4 import QtCore, QtGui
from openlp.core.lib import MediaManagerItem, Receiver, BaseListWithDnD, \ from openlp.core.lib import MediaManagerItem, Receiver, BaseListWithDnD, \
ItemCapabilities, translate ItemCapabilities, translate
from openlp.plugins.bibles.forms import BibleImportForm from openlp.plugins.bibles.forms import BibleImportForm
from openlp.plugins.bibles.lib import get_reference_match
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -553,12 +554,15 @@ class BibleMediaItem(MediaManagerItem):
bible = unicode(self.AdvancedVersionComboBox.currentText()) bible = unicode(self.AdvancedVersionComboBox.currentText())
second_bible = unicode(self.AdvancedSecondBibleComboBox.currentText()) second_bible = unicode(self.AdvancedSecondBibleComboBox.currentText())
book = unicode(self.AdvancedBookComboBox.currentText()) book = unicode(self.AdvancedBookComboBox.currentText())
chapter_from = int(self.AdvancedFromChapter.currentText()) chapter_from = self.AdvancedFromChapter.currentText()
chapter_to = int(self.AdvancedToChapter.currentText()) chapter_to = self.AdvancedToChapter.currentText()
verse_from = int(self.AdvancedFromVerse.currentText()) verse_from = self.AdvancedFromVerse.currentText()
verse_to = int(self.AdvancedToVerse.currentText()) verse_to = self.AdvancedToVerse.currentText()
versetext = u'%s %s:%s-%s:%s' % (book, chapter_from, verse_from, verse_separator = get_reference_match(u'sep_v_display')
chapter_to, verse_to) range_separator = get_reference_match(u'sep_r_display')
verse_range = chapter_from + verse_separator + verse_from + \
range_separator + chapter_to + verse_separator + verse_to
versetext = u'%s %s' % (book, verse_range)
self.search_results = self.parent.manager.get_verses(bible, versetext) self.search_results = self.parent.manager.get_verses(bible, versetext)
if second_bible: if second_bible:
self.second_search_results = self.parent.manager.get_verses( self.second_search_results = self.parent.manager.get_verses(
@ -709,7 +713,7 @@ class BibleMediaItem(MediaManagerItem):
obj = reference[QtCore.QString(key)] obj = reference[QtCore.QString(key)]
if isinstance(obj, QtCore.QVariant): if isinstance(obj, QtCore.QVariant):
obj = obj.toPyObject() obj = obj.toPyObject()
return unicode(obj) return unicode(obj).strip()
def generateSlideData(self, service_item, item=None, xmlVersion=False): def generateSlideData(self, service_item, item=None, xmlVersion=False):
""" """
@ -816,36 +820,31 @@ class BibleMediaItem(MediaManagerItem):
``old_item`` ``old_item``
The last item of a range. The last item of a range.
""" """
verse_separator = get_reference_match(u'sep_v_display')
range_separator = get_reference_match(u'sep_r_display')
old_bitem = self.listView.item(old_item.row()) old_bitem = self.listView.item(old_item.row())
old_chapter = int(self._decodeQtObject(old_bitem, 'chapter')) old_chapter = self._decodeQtObject(old_bitem, 'chapter')
old_verse = int(self._decodeQtObject(old_bitem, 'verse')) old_verse = self._decodeQtObject(old_bitem, 'verse')
start_bitem = self.listView.item(start_item.row()) start_bitem = self.listView.item(start_item.row())
start_book = self._decodeQtObject(start_bitem, 'book') start_book = self._decodeQtObject(start_bitem, 'book')
start_chapter = int(self._decodeQtObject(start_bitem, 'chapter')) start_chapter = self._decodeQtObject(start_bitem, 'chapter')
start_verse = int(self._decodeQtObject(start_bitem, 'verse')) start_verse = self._decodeQtObject(start_bitem, 'verse')
start_bible = self._decodeQtObject(start_bitem, 'bible') start_bible = self._decodeQtObject(start_bitem, 'bible')
start_second_bible = self._decodeQtObject(start_bitem, 'second_bible') start_second_bible = self._decodeQtObject(start_bitem, 'second_bible')
if start_second_bible: if start_second_bible:
if start_verse == old_verse and start_chapter == old_chapter: bibles = u'%s, %s' % (start_bible, start_second_bible)
title = u'%s %s:%s (%s, %s)' % (start_book, start_chapter,
start_verse, start_bible, start_second_bible)
elif start_chapter == old_chapter:
title = u'%s %s:%s-%s (%s, %s)' % (start_book, start_chapter,
start_verse, old_verse, start_bible, start_second_bible)
else:
title = u'%s %s:%s-%s:%s (%s, %s)' % (start_book, start_chapter,
start_verse, old_chapter, old_verse, start_bible,
start_second_bible)
else: else:
if start_verse == old_verse and start_chapter == old_chapter: bibles = start_bible
title = u'%s %s:%s (%s)' % (start_book, start_chapter, if start_chapter == old_chapter:
start_verse, start_bible) if start_verse == old_verse:
elif start_chapter == old_chapter: verse_range = start_chapter + verse_separator + start_verse
title = u'%s %s:%s-%s (%s)' % (start_book, start_chapter,
start_verse, old_verse, start_bible)
else: else:
title = u'%s %s:%s-%s:%s (%s)' % (start_book, start_chapter, verse_range = start_chapter + verse_separator + start_verse + \
start_verse, old_chapter, old_verse, start_bible) range_separator + old_verse
else:
verse_range = start_chapter + verse_separator + start_verse + \
range_separator + old_chapter + verse_separator + old_verse
title = u'%s %s (%s)' % (start_book, verse_range, bibles)
return title return title
def checkTitle(self, item, old_item): def checkTitle(self, item, old_item):
@ -907,9 +906,11 @@ class BibleMediaItem(MediaManagerItem):
``verse`` ``verse``
The verse number (int). The verse number (int).
""" """
verse_separator = get_reference_match(u'sep_v_display')
if not self.parent.settings_tab.show_new_chapters or \ if not self.parent.settings_tab.show_new_chapters or \
old_chapter != chapter: old_chapter != chapter:
verse_text = u'%s:%s' % (chapter, verse) verse_text = unicode(chapter) + verse_separator + unicode(verse)
else: else:
verse_text = u'%s' % verse verse_text = u'%s' % verse
if self.parent.settings_tab.display_style == 1: if self.parent.settings_tab.display_style == 1:

View File

@ -23,7 +23,7 @@ Neue Genfer Übersetzung, NGÜ
New International Readers Version, NIRV New International Readers Version, NIRV
New International Version, NIV New International Version, NIV
Neues Leben, NL Neues Leben, NL
En Levende Bok, NOR En Levende Bok (NOR), NOR
Nádej pre kazdého, NPK Nádej pre kazdého, NPK
Noua traducere în limba românã, NTR Noua traducere în limba românã, NTR
Nueva Versión Internacional, NVI Nueva Versión Internacional, NVI
@ -33,7 +33,7 @@ O Livro, PRT
Новый перевод на русский язык, RUS Новый перевод на русский язык, RUS
Slovo na cestu, SNC Slovo na cestu, SNC
Schlachter 2000, SLT Schlachter 2000, SLT
En Levande Bok, SVL En Levande Bok (SWE), SVL
Today's New International Version, TNIV Today's New International Version, TNIV
Türkçe, TR Türkçe, TR
Vulgata, VUL Vulgata, VUL

1 عربي ARA
23 New International Readers Version NIRV
24 New International Version NIV
25 Neues Leben NL
26 En Levende Bok En Levende Bok (NOR) NOR
27 Nádej pre kazdého NPK
28 Noua traducere în limba românã NTR
29 Nueva Versión Internacional NVI
33 Новый перевод на русский язык RUS
34 Slovo na cestu SNC
35 Schlachter 2000 SLT
36 En Levande Bok En Levande Bok (SWE) SVL
37 Today's New International Version TNIV
38 Türkçe TR
39 Vulgata VUL