diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py
index dae60a3b7..6a8daae54 100644
--- a/openlp/plugins/songs/lib/opensongimport.py
+++ b/openlp/plugins/songs/lib/opensongimport.py
@@ -29,6 +29,7 @@ import os
from zipfile import ZipFile
from lxml import objectify
from lxml.etree import Error, LxmlError
+import re
from openlp.plugins.songs.lib.songimport import SongImport
@@ -190,9 +191,9 @@ class OpenSongImport(SongImport):
topics.append(unicode(root.theme))
if u'alttheme' in fields and unicode(root.alttheme) not in topics:
topics.append(unicode(root.alttheme))
+ lyrics = unicode(root.lyrics)
# data storage while importing
verses = {}
- lyrics = unicode(root.lyrics)
# keep track of a "default" verse order, in case none is specified
our_verse_order = []
verses_seen = {}
@@ -214,24 +215,28 @@ class OpenSongImport(SongImport):
continue
# verse/chorus/etc. marker
if thisline[0] == u'[':
- versetype = thisline[1].upper()
- if versetype.isdigit():
- versenum = versetype
- versetype = u''
- elif thisline[2] != u']':
- # there's a number to go with it - extract that as well
- right_bracket = thisline.find(u']')
- versenum = thisline[2:right_bracket]
+ # drop the square brackets
+ right_bracket = thisline.find(u']')
+ content = thisline[1:right_bracket].upper()
+ print '"', content, '"'
+ # have we got any digits? If so, versenumber is everything from the digits
+ # to the end (even if there are some alpha chars on the end)
+ match = re.match(u'(.*)(\d+.*)', content)
+ if match is not None:
+ print "Got digits"
+ versetype = match.group(1)
+ versenum = match.group(2)
+ # otherwise we assume number 1 and take the whole prefix as versetype
else:
- # if there's no number, assume it's no.1
+ versetype = content
versenum = u'1'
+ print versetype, versenum
continue
words = None
# number at start of line.. it's verse number
if thisline[0].isdigit():
versenum = thisline[0]
words = thisline[1:].strip()
-
if words is None:# and \
#versenum is not None and \
#versetype is not None:
@@ -248,6 +253,7 @@ class OpenSongImport(SongImport):
if not verses_seen.has_key(versetag):
verses_seen[versetag] = 1
our_verse_order.append(versetag)
+ print ">>", (versetype,), (versenum,), versetag, words
if words:
# Tidy text and remove the ____s from extended words
words = self.tidy_text(words)
@@ -273,18 +279,21 @@ class OpenSongImport(SongImport):
order = []
if u'presentation' in fields and root.presentation != u'':
order = unicode(root.presentation)
- order = order.split()
+ # We make all the tags in the lyrics upper case, so match that here
+ # and then split into a list on the whitespace
+ order = order.upper().split()
else:
if len(our_verse_order) > 0:
order = our_verse_order
else:
log.warn(u'No verse order available (either explicit or inferred) for %s, skipping.', self.title)
for tag in order:
- if len(tag) == 1:
- if not tag.isdigit():
- tag = tag + u'1' # Assume it's no.1 if it's not there
- else:
- tag = u'V' + tag # Assume it's a verse if it has no prefix
+ print tag
+ if tag[0].isdigit():
+ tag = u'V' + tag # Assume it's a verse if it has no prefix
+ elif not re.search('\d+', tag):
+ tag = tag + u'1' # Assume it's no.1 if there's no digits
+ print tag
if not versetags.has_key(tag):
log.info(u'Got order %s but not in versetags, dropping this item from presentation order', tag)
else:
diff --git a/openlp/plugins/songs/lib/test/test.opensong b/openlp/plugins/songs/lib/test/test.opensong
index 3633e7d62..0390f99b2 100644
--- a/openlp/plugins/songs/lib/test/test.opensong
+++ b/openlp/plugins/songs/lib/test/test.opensong
@@ -4,7 +4,7 @@
MartiÑ & Martin2 Thómpson
2010 Martin Thompson
1
- V1 C V2 C2 3 B1 V1 T U
+ V1 C V2 C2 3a B1 V1 T U
Blah
@@ -17,7 +17,7 @@
TestAltTheme
- [3]
+ [3a]
. G A B
V3 Line 1
. G A B
diff --git a/openlp/plugins/songs/lib/test/test_opensongimport.py b/openlp/plugins/songs/lib/test/test_opensongimport.py
index 6aa954b06..c994d8685 100644
--- a/openlp/plugins/songs/lib/test/test_opensongimport.py
+++ b/openlp/plugins/songs/lib/test/test_opensongimport.py
@@ -63,9 +63,9 @@ def test():
assert [u'B1', u'Bridge 1\nBridge 1 line 2'] in o.verses
assert [u'V1', u'v1 Line 1\nV1 Line 2'] in o.verses
assert [u'V2', u'v2 Line 1\nV2 Line 2'] in o.verses
- assert [u'V3', u'V3 Line 1\nV3 Line 2'] in o.verses
+ assert [u'V3A', u'V3 Line 1\nV3 Line 2'] in o.verses
assert [u'X1', u'Unreferenced verse line 1'] in o.verses
- assert o.verse_order_list == [u'V1', u'C1', u'V2', u'C2', u'V3', u'B1', u'V1', u'T1']
+ assert o.verse_order_list == [u'V1', u'C1', u'V2', u'C2', u'V3A', u'B1', u'V1', u'T1']
assert o.ccli_number == u'Blah'
assert o.topics == [u'TestTheme', u'TestAltTheme']