← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~phill-ridout/openlp/1096450 into lp:openlp

 

Phill has proposed merging lp:~phill-ridout/openlp/1096450 into lp:openlp.

Requested reviews:
  OpenLP Core (openlp-core)
Related bugs:
  Bug #1096450 in OpenLP: "Opensong Import - some lines missing"
  https://bugs.launchpad.net/openlp/+bug/1096450

For more details, see:
https://code.launchpad.net/~phill-ridout/openlp/1096450/+merge/178463

Fixes #1096450 Stripping the leading and trailing spaces at the end rather than begginning (the space means something, see added comments)
Semi-colons (;) denotes comments ONLY when it is the first char of the line ie the whole line is a comment
Finally fixed an issue when a verse was being added to the verse order multiple times, thus repeating it over and over and ....
-- 
https://code.launchpad.net/~phill-ridout/openlp/1096450/+merge/178463
Your team OpenLP Core is requested to review the proposed merge of lp:~phill-ridout/openlp/1096450 into lp:openlp.
=== modified file 'openlp/plugins/songs/lib/opensongimport.py'
--- openlp/plugins/songs/lib/opensongimport.py	2013-03-07 08:05:43 +0000
+++ openlp/plugins/songs/lib/opensongimport.py	2013-08-04 16:16:25 +0000
@@ -45,13 +45,14 @@
     Import songs exported from OpenSong
 
     The format is described loosly on the `OpenSong File Format Specification
-    <http://www.opensong.org/d/manual/song_file_format_specification>`_ page on
-    the OpenSong web site. However, it doesn't describe the <lyrics> section,
-    so here's an attempt:
-
-    Verses can be expressed in one of 2 ways, either in complete verses, or by
-    line grouping, i.e. grouping all line 1's of a verse together, all line 2's
-    of a verse together, and so on.
+    <http://www.opensong.org/d/manual/song_file_format_specification>`_ page on the OpenSong web site. However, it
+    doesn't describe the <lyrics> section, so here's an attempt:
+
+    If the first charachter of a line is a space, then the rest of that line is lyrics. If it is not a space the
+    following applies.
+
+    Verses can be expressed in one of 2 ways, either in complete verses, or by line grouping, i.e. grouping all line 1's
+    of a verse together, all line 2's of a verse together, and so on.
 
     An example of complete verses::
 
@@ -78,9 +79,8 @@
         2etc...
         </lyrics>
 
-    Either or both forms can be used in one song. The number does not
-    necessarily appear at the start of the line. Additionally, the [v1] labels
-    can have either upper or lower case Vs.
+    Either or both forms can be used in one song. The number does not necessarily appear at the start of the line.
+    Additionally, the [v1] labels can have either upper or lower case Vs.
 
     Other labels can be used also:
 
@@ -92,18 +92,16 @@
 
     All verses are imported and tagged appropriately.
 
-    Guitar chords can be provided "above" the lyrics (the line is preceeded by
-    a period "."), and one or more "_" can be used to signify long-drawn-out
-    words. Chords and "_" are removed by this importer. For example::
+    Guitar chords can be provided "above" the lyrics (the line is preceeded by a period "."), and one or more "_" can
+    be used to signify long-drawn-out words. Chords and "_" are removed by this importer. For example::
 
         . A7        Bm
         1 Some____ Words
 
-    The <presentation> tag is used to populate the OpenLP verse display order
-    field. The Author and Copyright tags are also imported to the appropriate
-    places.
-
+    The <presentation> tag is used to populate the OpenLP verse display order field. The Author and Copyright tags are
+    also imported to the appropriate places.
     """
+
     def __init__(self, manager, **kwargs):
         """
         Initialise the class.
@@ -169,13 +167,11 @@
         else:
             lyrics = u''
         for this_line in lyrics.split(u'\n'):
-            # remove comments
-            semicolon = this_line.find(u';')
-            if semicolon >= 0:
-                this_line = this_line[:semicolon]
-            this_line = this_line.strip()
             if not this_line:
                 continue
+            # skip this line if it is a comment
+            if this_line.startswith(u';'):
+                continue
             # skip guitar chords and page and column breaks
             if this_line.startswith(u'.') or this_line.startswith(u'---') or this_line.startswith(u'-!!'):
                 continue
@@ -204,7 +200,6 @@
             if this_line[0].isdigit():
                 verse_num = this_line[0]
                 this_line = this_line[1:].strip()
-                our_verse_order.append([verse_tag, verse_num, inst])
             verses.setdefault(verse_tag, {})
             verses[verse_tag].setdefault(verse_num, {})
             if inst not in verses[verse_tag][verse_num]:
@@ -214,6 +209,7 @@
             this_line = self.tidyText(this_line)
             this_line = this_line.replace(u'_', u'')
             this_line = this_line.replace(u'|', u'\n')
+            this_line = this_line.strip()
             verses[verse_tag][verse_num][inst].append(this_line)
         # done parsing
         # add verses in original order


Follow ups