]> git.donarmstrong.com Git - lilypond.git/blobdiff - python/musicxml.py
Merge branch 'master' of ssh+git://hanwen@git.sv.gnu.org/srv/git/lilypond
[lilypond.git] / python / musicxml.py
index cb8e1957cb2f500ff7b5219529e4295d189d6e4c..9d6fa054dbddd136b8184021dc0fbfe97ccdb46a 100644 (file)
@@ -5,6 +5,13 @@ from rational import *
 import re
 import sys
 import copy
+import lilylib
+
+_ = lilylib._
+
+def error (str):
+    ly.stderr_write ((_ ("error: %s") % str) + "\n")
+
 
 def escape_ly_output_string (input_string):
     return_string = input_string
@@ -44,7 +51,7 @@ class Xml_node:
        return ''.join ([c.get_text () for c in self._children])
 
     def message (self, msg):
-        sys.stderr.write (msg+'\n')
+        lilylib.stderr_write (msg+'\n')
 
         p = self
         while p:
@@ -202,6 +209,21 @@ class Pitch (Music_xml_node):
            alter = int (ch.get_text ().strip ())
        return alter
 
+class Unpitched (Music_xml_node):
+    def get_step (self):
+       ch = self.get_unique_typed_child (get_class (u'display-step'))
+       step = ch.get_text ().strip ()
+       return step
+
+    def get_octave (self):
+       ch = self.get_unique_typed_child (get_class (u'display-octave'))
+
+       if ch:
+           octave = ch.get_text ().strip ()
+           return int (octave)
+       else:
+           return None
+
 class Measure_element (Music_xml_node):
     def get_voice_id (self):
        voice_id = self.get_maybe_exist_named_child ('voice')
@@ -247,7 +269,7 @@ class Attributes (Measure_element):
             else:
                 return (4, 4)
         except KeyError:
-            sys.stderr.write ('error: requested time signature, but time sig unknown\n')
+            error (_ ("requested time signature, but time sig is unknown"))
             return (4, 4)
 
     # returns clef information in the form ("cleftype", position, octave-shift)
@@ -309,8 +331,11 @@ class Note (Measure_element):
                     'whole': 0,
                     'breve': -1,
                     'long': -2}.get (log, 0)
+       elif self.get_maybe_exist_named_child (u'grace'):
+           # FIXME: is it ok to default to eight note for grace notes?
+           return 3
         else:
-            self.message ("Encountered note at %s without %s duration (no <type> element):" % (self.start, self.duration) )
+            self.message (_ ("Encountered note at %s with %s duration (no <type> element):") % (self.start, self.duration) )
             return 0
 
     def get_factor (self):
@@ -344,7 +369,7 @@ class Part_list (Music_xml_node):
         if instrument_name:
             return instrument_name
         else:
-            sys.stderr.write ("Opps, couldn't find instrument for ID=%s\n" % id)
+            lilylib.stderr_write (_ ("Unable to find find instrument for ID=%s\n") % id)
             return "Grand Piano"
 
 class Part_group (Music_xml_node):
@@ -442,7 +467,7 @@ class Musicxml_voice:
 class Part (Music_xml_node):
     def __init__ (self):
         Music_xml_node.__init__ (self)
-       self._voices = []
+       self._voices = {}
         self._staff_attributes_dict = {}
 
     def get_part_list (self):
@@ -688,6 +713,8 @@ class Part (Music_xml_node):
 
     def get_voices (self):
        return self._voices
+    def get_staff_attributes (self):
+        return self._staff_attributes_dict
 
 class Notations (Music_xml_node):
     def get_tie (self):
@@ -698,8 +725,8 @@ class Notations (Music_xml_node):
        else:
            return None
 
-    def get_tuplet (self):
-       return self.get_maybe_exist_typed_child (Tuplet)
+    def get_tuplets (self):
+       return self.get_typed_children (Tuplet)
 
 class Time_modification(Music_xml_node):
     def get_fraction (self):
@@ -731,6 +758,12 @@ class Wedge (Music_xml_spanner):
 class Tuplet (Music_xml_spanner):
     pass
 
+class Bracket (Music_xml_spanner):
+    pass
+
+class Dashes (Music_xml_spanner):
+    pass
+
 class Slur (Music_xml_spanner):
     def get_type (self):
        return self.type
@@ -750,6 +783,9 @@ class Pedal (Music_xml_spanner):
 class Glissando (Music_xml_spanner):
     pass
 
+class Slide (Music_xml_spanner):
+    pass
+
 class Octave_shift (Music_xml_spanner):
     # default is 8 for the octave-shift!
     def get_size (self):
@@ -847,7 +883,9 @@ class_dict = {
         'bar-style': BarStyle,
        'beam' : Beam,
         'bend' : Bend,
+        'bracket' : Bracket,
        'chord': Chord,
+        'dashes' : Dashes,
        'dot': Dot,
        'direction': Direction,
         'direction-type': DirType,
@@ -870,6 +908,7 @@ class_dict = {
        'pitch': Pitch,
        'rest': Rest,
     'score-part': Score_part,
+        'slide': Slide,
        'slur': Slur,
        'staff': Staff,
         'syllabic': Syllabic,
@@ -877,6 +916,7 @@ class_dict = {
        'time-modification': Time_modification,
         'tuplet': Tuplet,
        'type': Type,
+       'unpitched': Unpitched,
         'wavy-line': Wavy_line,
         'wedge': Wedge,
         'words': Words,