Amend verse tagging code for translations

bzr-revno: 833
This commit is contained in:
Tim Bentley 2010-06-06 18:12:10 +01:00
commit ce2bab50cd
8 changed files with 135 additions and 154 deletions

View File

@ -537,17 +537,9 @@ class SlideController(QtGui.QWidget):
if self.serviceItem.is_text(): if self.serviceItem.is_text():
if frame[u'verseTag']: if frame[u'verseTag']:
bits = frame[u'verseTag'].split(u':') bits = frame[u'verseTag'].split(u':')
tag = None
#If verse handle verse number else tag only
if bits[0] == self.trUtf8('Verse') or \
bits[0] == self.trUtf8('Chorus'):
tag = u'%s\n%s' % (bits[0][0], bits[1][0:] ) tag = u'%s\n%s' % (bits[0][0], bits[1][0:] )
tag1 = u'%s%s' % (bits[0][0], bits[1][0:] ) tag1 = u'%s%s' % (bits[0][0], bits[1][0:] )
row = tag row = tag
else:
tag = bits[0]
tag1 = tag
row = bits[0][0:1]
else: else:
row += 1 row += 1
if self.isLive and frame[u'verseTag'] is not None: if self.isLive and frame[u'verseTag'] is not None:

View File

@ -23,6 +23,52 @@
# Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Temple Place, Suite 330, Boston, MA 02111-1307 USA #
############################################################################### ###############################################################################
from openlp.core.lib import translate
class VerseType(object):
Verse = 0
Chorus = 1
Bridge = 2
PreChorus = 3
Intro = 4
Ending = 5
Other = 6
@staticmethod
def to_string(verse_type):
if verse_type == VerseType.Verse:
return translate('VerseType', 'Verse')
elif verse_type == VerseType.Chorus:
return translate('VerseType', 'Chorus')
elif verse_type == VerseType.Bridge:
return translate('VerseType', 'Bridge')
elif verse_type == VerseType.PreChorus:
return translate('VerseType', 'Pre-Chorus')
elif verse_type == VerseType.Intro:
return translate('VerseType', 'Intro')
elif verse_type == VerseType.Ending:
return translate('VerseType', 'Ending')
elif verse_type == VerseType.Other:
return translate('VerseType', 'Other')
@staticmethod
def from_string(verse_type):
verse_type = verse_type.lower()
if verse_type == unicode(VerseType.to_string(VerseType.Verse)).lower():
return VerseType.Verse
elif verse_type == unicode(VerseType.to_string(VerseType.Chorus)).lower():
return VerseType.Chorus
elif verse_type == unicode(VerseType.to_string(VerseType.Bridge)).lower():
return VerseType.Bridge
elif verse_type == unicode(VerseType.to_string(VerseType.PreChorus)).lower():
return VerseType.PreChorus
elif verse_type == unicode(VerseType.to_string(VerseType.Intro)).lower():
return VerseType.Intro
elif verse_type == unicode(VerseType.to_string(VerseType.Ending)).lower():
return VerseType.Ending
elif verse_type == unicode(VerseType.to_string(VerseType.Other)).lower():
return VerseType.Other
from authorsform import AuthorsForm from authorsform import AuthorsForm
from topicsform import TopicsForm from topicsform import TopicsForm
from songbookform import SongBookForm from songbookform import SongBookForm

View File

@ -471,27 +471,18 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
self.SongTabWidget.setCurrentIndex(1) self.SongTabWidget.setCurrentIndex(1)
self.AuthorsListView.setFocus() self.AuthorsListView.setFocus()
#split the verse list by space and mark lower case for testing #split the verse list by space and mark lower case for testing
taglist = unicode(self.trUtf8(' bitpeo')) taglist = unicode(self.trUtf8(' bitpeovc'))
for verse in unicode(self.VerseOrderEdit.text()).lower().split(u' '): for verse in unicode(self.VerseOrderEdit.text()).lower().split(u' '):
if len(verse) > 1: if len(verse) > 1:
if (verse[0:1] == u'%s' % self.trUtf8('v') or if taglist.find(verse[0:1]) > -1 \
verse[0:1] == u'%s' % self.trUtf8('c')) \
and verse[1:].isdigit(): and verse[1:].isdigit():
pass pass
else:
self.SongTabWidget.setCurrentIndex(0)
self.VerseOrderEdit.setFocus()
return False, \
self.trUtf8('Invalid verse entry - Vx or Cx')
else:
if taglist.find(verse) > -1:
pass
else: else:
self.SongTabWidget.setCurrentIndex(0) self.SongTabWidget.setCurrentIndex(0)
self.VerseOrderEdit.setFocus() self.VerseOrderEdit.setFocus()
return False, \ return False, \
self.trUtf8(\ self.trUtf8(\
'Invalid verse entry, values must be I,B,T,P,E,O,Vx,Cx') 'Invalid verse entry, values must be I,B,T,P,E,O,V,C followed by a number')
return True, u'' return True, u''
def onTitleEditItemLostFocus(self): def onTitleEditItemLostFocus(self):

View File

@ -24,7 +24,9 @@
############################################################################### ###############################################################################
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import translate from openlp.core.lib import translate
from openlp.plugins.songs.forms import VerseType
class Ui_EditVerseDialog(object): class Ui_EditVerseDialog(object):
def setupUi(self, EditVerseDialog): def setupUi(self, EditVerseDialog):
@ -92,13 +94,12 @@ class Ui_EditVerseDialog(object):
def retranslateUi(self, EditVerseDialog): def retranslateUi(self, EditVerseDialog):
EditVerseDialog.setWindowTitle(translate('EditVerseForm', 'Edit Verse')) EditVerseDialog.setWindowTitle(translate('EditVerseForm', 'Edit Verse'))
self.VerseTypeLabel.setText(translate('EditVerseForm', 'Verse Type:')) self.VerseTypeLabel.setText(translate('EditVerseForm', 'Verse Type:'))
self.VerseTypeComboBox.setItemText(0, translate('EditVerseForm', 'Verse')) self.VerseTypeComboBox.setItemText(0, VerseType.to_string(VerseType.Verse))
self.VerseTypeComboBox.setItemText(1, translate('EditVerseForm', 'Chorus')) self.VerseTypeComboBox.setItemText(1, VerseType.to_string(VerseType.Chorus))
self.VerseTypeComboBox.setItemText(2, translate('EditVerseForm', 'Bridge')) self.VerseTypeComboBox.setItemText(2, VerseType.to_string(VerseType.Bridge))
self.VerseTypeComboBox.setItemText(3, translate('EditVerseForm', 'Pre-Chorus')) self.VerseTypeComboBox.setItemText(3, VerseType.to_string(VerseType.PreChorus))
self.VerseTypeComboBox.setItemText(4, translate('EditVerseForm', 'Intro')) self.VerseTypeComboBox.setItemText(4, VerseType.to_string(VerseType.Intro))
self.VerseTypeComboBox.setItemText(5, translate('EditVerseForm', 'Ending')) self.VerseTypeComboBox.setItemText(5, VerseType.to_string(VerseType.Ending))
self.VerseTypeComboBox.setItemText(6, translate('EditVerseForm', 'Other')) self.VerseTypeComboBox.setItemText(6, VerseType.to_string(VerseType.Other))
self.InsertButton.setText(translate('EditVerseForm', 'Insert')) self.InsertButton.setText(translate('EditVerseForm', 'Insert'))

View File

@ -28,55 +28,12 @@ import logging
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.plugins.songs.forms import VerseType
from editversedialog import Ui_EditVerseDialog from editversedialog import Ui_EditVerseDialog
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
class VerseType(object):
Verse = 0
Chorus = 1
Bridge = 2
PreChorus = 3
Intro = 4
Ending = 5
Other = 6
@staticmethod
def to_string(verse_type):
if verse_type == VerseType.Verse:
return u'Verse'
elif verse_type == VerseType.Chorus:
return u'Chorus'
elif verse_type == VerseType.Bridge:
return u'Bridge'
elif verse_type == VerseType.PreChorus:
return u'Pre-Chorus'
elif verse_type == VerseType.Intro:
return u'Intro'
elif verse_type == VerseType.Ending:
return u'Ending'
elif verse_type == VerseType.Other:
return u'Other'
@staticmethod
def from_string(verse_type):
verse_type = verse_type.lower()
if verse_type == u'verse':
return VerseType.Verse
elif verse_type == u'chorus':
return VerseType.Chorus
elif verse_type == u'bridge':
return VerseType.Bridge
elif verse_type == u'pre-chorus':
return VerseType.PreChorus
elif verse_type == u'intro':
return VerseType.Intro
elif verse_type == u'ending':
return VerseType.Ending
elif verse_type == u'other':
return VerseType.Other
class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
""" """
This is the form that is used to edit the verses of the song. This is the form that is used to edit the verses of the song.
@ -97,8 +54,6 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
QtCore.SIGNAL(u'cursorPositionChanged()'), QtCore.SIGNAL(u'cursorPositionChanged()'),
self.onCursorPositionChanged self.onCursorPositionChanged
) )
# QtCore.QObject.connect(self.VerseListComboBox,
# QtCore.SIGNAL(u'activated(int)'), self.onVerseComboChanged)
self.verse_regex = re.compile(r'---\[([-\w]+):([\d]+)\]---') self.verse_regex = re.compile(r'---\[([-\w]+):([\d]+)\]---')
def insertVerse(self, title, num=1): def insertVerse(self, title, num=1):
@ -112,19 +67,21 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
self.VerseTextEdit.insertPlainText(u'\n') self.VerseTextEdit.insertPlainText(u'\n')
verse_type = self.VerseTypeComboBox.currentIndex() verse_type = self.VerseTypeComboBox.currentIndex()
if verse_type == VerseType.Verse: if verse_type == VerseType.Verse:
self.insertVerse('Verse', self.VerseNumberBox.value()) self.insertVerse(VerseType.to_string(VerseType.Verse),
self.VerseNumberBox.value())
elif verse_type == VerseType.Chorus: elif verse_type == VerseType.Chorus:
self.insertVerse('Chorus', self.VerseNumberBox.value()) self.insertVerse(VerseType.to_string(VerseType.Chorus),
self.VerseNumberBox.value())
elif verse_type == VerseType.Bridge: elif verse_type == VerseType.Bridge:
self.insertVerse('Bridge') self.insertVerse(VerseType.to_string(VerseType.Bridge))
elif verse_type == VerseType.PreChorus: elif verse_type == VerseType.PreChorus:
self.insertVerse('Pre-Chorus') self.insertVerse(VerseType.to_string(VerseType.PreChorus))
elif verse_type == VerseType.Intro: elif verse_type == VerseType.Intro:
self.insertVerse('Intro') self.insertVerse(VerseType.to_string(VerseType.Intro))
elif verse_type == VerseType.Ending: elif verse_type == VerseType.Ending:
self.insertVerse('Ending') self.insertVerse(VerseType.to_string(VerseType.Ending))
elif verse_type == VerseType.Other: elif verse_type == VerseType.Other:
self.insertVerse('Other') self.insertVerse(VerseType.to_string(VerseType.Other))
def onCursorPositionChanged(self): def onCursorPositionChanged(self):
position = self.VerseTextEdit.textCursor().position() position = self.VerseTextEdit.textCursor().position()
@ -149,7 +106,8 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
self.VerseTypeComboBox.setCurrentIndex(VerseType.from_string(verse_type)) self.VerseTypeComboBox.setCurrentIndex(VerseType.from_string(verse_type))
self.VerseNumberBox.setValue(verse_number) self.VerseNumberBox.setValue(verse_number)
def setVerse(self, text, single=False, tag=u'Verse:1'): def setVerse(self, text, single=False,
tag=u'%s:1' % VerseType.to_string(VerseType.Verse)):
if single: if single:
verse_type, verse_number = tag.split(u':') verse_type, verse_number = tag.split(u':')
self.VerseTypeComboBox.setCurrentIndex(VerseType.from_string(verse_type)) self.VerseTypeComboBox.setCurrentIndex(VerseType.from_string(verse_type))
@ -157,12 +115,13 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
self.InsertButton.setVisible(False) self.InsertButton.setVisible(False)
else: else:
if not text: if not text:
text = u'---[Verse:1]---\n' text = u'---[%s:1]---\n' % VerseType.to_string(VerseType.Verse)
self.VerseTypeComboBox.setCurrentIndex(0) self.VerseTypeComboBox.setCurrentIndex(0)
self.VerseNumberBox.setValue(1) self.VerseNumberBox.setValue(1)
self.InsertButton.setVisible(True) self.InsertButton.setVisible(True)
self.VerseTextEdit.setPlainText(text) self.VerseTextEdit.setPlainText(text)
self.VerseTextEdit.setFocus(QtCore.Qt.OtherFocusReason) self.VerseTextEdit.setFocus(QtCore.Qt.OtherFocusReason)
self.VerseTextEdit.moveCursor(QtGui.QTextCursor.End)
def getVerse(self): def getVerse(self):
return self.VerseTextEdit.toPlainText(), \ return self.VerseTextEdit.toPlainText(), \
@ -172,7 +131,6 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
def getVerseAll(self): def getVerseAll(self):
text = self.VerseTextEdit.toPlainText() text = self.VerseTextEdit.toPlainText()
if not text.startsWith(u'---['): if not text.startsWith(u'---['):
text = u'---[Verse:1]---\n%s' % text text = u'---[%s:1]---\n%s' % (VerseType.to_string(VerseType.Verse), text)
return text return text

View File

@ -29,3 +29,4 @@ from mediaitem import SongMediaItem
from sofimport import SofImport from sofimport import SofImport
from oooimport import OooImport from oooimport import OooImport
from songimport import SongImport from songimport import SongImport

View File

@ -198,8 +198,8 @@ class SongMediaItem(MediaManagerItem):
self.ListView.clear() self.ListView.clear()
for author in searchresults: for author in searchresults:
for song in author.songs: for song in author.songs:
song_detail = unicode(self.trUtf8('%s (%s)') % \ song_detail = unicode(self.trUtf8('%s (%s)') %
(author.display_name, song.title) (author.display_name, song.title))
song_name = QtGui.QListWidgetItem(song_detail) song_name = QtGui.QListWidgetItem(song_detail)
song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id)) song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id))
self.ListView.addItem(song_name) self.ListView.addItem(song_name)
@ -329,21 +329,12 @@ class SongMediaItem(MediaManagerItem):
if len(order) == 0: if len(order) == 0:
break break
for verse in verseList: for verse in verseList:
if verse[1]:
if verse[0][u'type'] == "Verse" \
or verse[0][u'type'] == "Chorus":
if verse[0][u'label'] == order[1:] and \ if verse[0][u'label'] == order[1:] and \
verse[0][u'type'][0] == order[0]: verse[0][u'type'][0] == order[0]:
verseTag = u'%s:%s' % \ verseTag = u'%s:%s' % \
(verse[0][u'type'], verse[0][u'label']) (verse[0][u'type'], verse[0][u'label'])
service_item.add_from_text\ service_item.add_from_text\
(verse[1][:30], verse[1], verseTag) (verse[1][:30], verse[1], verseTag)
else:
if verse[0][u'type'][0] == order[0]:
verseTag = u'%s:%s' % \
(verse[0][u'type'], verse[0][u'label'])
service_item.add_from_text\
(verse[1][:30], verse[1], verseTag)
else: else:
verses = song.lyrics.split(u'\n\n') verses = song.lyrics.split(u'\n\n')
for slide in verses: for slide in verses:

View File

@ -29,6 +29,7 @@ from PyQt4 import QtGui
from openlp.core.lib import SongXMLBuilder from openlp.core.lib import SongXMLBuilder
from openlp.plugins.songs.lib.models import Song, Author, Topic, Book from openlp.plugins.songs.lib.models import Song, Author, Topic, Book
from openlp.plugins.songs.forms import VerseType
class SongImport(object): class SongImport(object):
""" """
@ -293,19 +294,19 @@ class SongImport(object):
sxml.add_lyrics_to_song() sxml.add_lyrics_to_song()
for (versetag, versetext) in self.verses: for (versetag, versetext) in self.verses:
if versetag[0] == u'C': if versetag[0] == u'C':
versetype = u'Chorus' versetype = VerseType.to_string(VerseType.Chorus)
elif versetag[0] == u'V': elif versetag[0] == u'V':
versetype = u'Verse' versetype = VerseType.to_string(VerseType.Verse)
elif versetag[0] == u'B': elif versetag[0] == u'B':
versetype = u'Bridge' versetype = VerseType.to_string(VerseType.Bridge)
elif versetag[0] == u'I': elif versetag[0] == u'I':
versetype = u'Intro' versetype = VerseType.to_string(VerseType.Intro)
elif versetag[0] == u'P': elif versetag[0] == u'P':
versetype = u'Prechorus' versetype = VerseType.to_string(VerseType.PreChorus)
elif versetag[0] == u'E': elif versetag[0] == u'E':
versetype = u'Ending' versetype = VerseType.to_string(VerseType.Ending)
else: else:
versetype = u'Other' versetype = VerseType.to_string(VerseType.Other)
sxml.add_verse_to_lyrics(versetype, versetag[1:], versetext) sxml.add_verse_to_lyrics(versetype, versetag[1:], versetext)
song.search_lyrics += u' ' + self.remove_punctuation(versetext) song.search_lyrics += u' ' + self.remove_punctuation(versetext)
song.lyrics = unicode(sxml.extract_xml(), u'utf-8') song.lyrics = unicode(sxml.extract_xml(), u'utf-8')