Hello Werner

> Please resend the patch using diff option `-u'.

I have found a switch in WinDiff that sounds like -u option. Please find
attached a new patch. Is it right?

Tobias
--- C:/Program Files 
(x86)/LilyPond-2.19.36/usr/share/lilypond/current/python/musicxml.orig.py  Sun 
Jan 31 17:37:00 2016
+++ C:/Program Files 
(x86)/LilyPond-2.19.36/usr/share/lilypond/current/python/musicxml.py       Tue 
Mar 10 21:07:01 2015
@@ -143,6 +143,7 @@
         Xml_node.__init__ (self)
         self.duration = Rational (0)
         self.start = Rational (0)
+        self.voice_id = None;
 
 class Work (Xml_node):
     def get_work_information (self, tag):
@@ -282,11 +283,11 @@
 
 class Measure_element (Music_xml_node):
     def get_voice_id (self):
-        voice_id = self.get_maybe_exist_named_child ('voice')
-        if voice_id:
-            return voice_id.get_text ()
+        voice = self.get_maybe_exist_named_child ('voice')
+        if voice:
+            return voice.get_text ()
         else:
-            return None
+            return self.voice_id;
 
     def is_first (self):
         # Look at all measure elements (previously we had self.__class__, which
@@ -657,7 +658,25 @@
                 measure_start_moment = now
                 measure_position = Rational (0)
 
+            voice_id = None;
+            assign_to_next_voice = []
             for n in m.get_all_children ():
+                # assign a voice to all measure elements
+                if (n.get_name() == 'backup'):
+                    voice_id = None;
+
+                if isinstance(n, Measure_element):
+                    if n.get_voice_id ():
+                        voice_id = n.get_voice_id () 
+                        for i in assign_to_next_voice:
+                            i.voice_id = voice_id
+                        assign_to_next_voice = []
+                    else:
+                        if voice_id:
+                            n.voice_id = voice_id
+                        else:
+                            assign_to_next_voice.append (n)
+
                 # figured bass has a duration, but applies to the next note
                 # and should not change the current measure position!
                 if isinstance (n, FiguredBass):
@@ -862,15 +881,10 @@
                 continue
 
             if isinstance (n, Direction):
-                staff_id = n.get_maybe_exist_named_child (u'staff')
-                if staff_id:
-                    staff_id = staff_id.get_text ()
-                if staff_id:
-                    dir_voices = staff_to_voice_dict.get (staff_id, 
voices.keys ())
+                if (n.voice_id):
+                    voices[n.voice_id].add_element (n)
                 else:
-                    dir_voices = voices.keys ()
-                for v in dir_voices:
-                    voices[v].add_element (n)
+                    assign_to_next_note.append (n)
                 continue
 
             if isinstance (n, Harmony) or isinstance (n, FiguredBass):
@@ -1069,7 +1083,7 @@
 class Staff (Music_xml_node):
     pass
 
-class Direction (Music_xml_node):
+class Direction (Measure_element):
     pass
 class DirType (Music_xml_node):
     pass
_______________________________________________
bug-lilypond mailing list
bug-lilypond@gnu.org
https://lists.gnu.org/mailman/listinfo/bug-lilypond

Reply via email to