private void ParseMasterBar(IXmlNode node)
{
var masterBar = new MasterBar();
node.IterateChildren(c =>
{
if (c.NodeType == XmlNodeType.Element)
{
switch (c.LocalName)
{
case "Time":
var timeParts = GetValue(c).Split('/');
masterBar.TimeSignatureNumerator = Std.ParseInt(timeParts[0]);
masterBar.TimeSignatureDenominator = Std.ParseInt(timeParts[1]);
break;
case "DoubleBar":
masterBar.IsDoubleBar = true;
break;
case "Section":
masterBar.Section = new Section();
masterBar.Section.Marker = GetValue(FindChildElement(c, "Letter"));
masterBar.Section.Text = GetValue(FindChildElement(c, "Text"));
break;
case "Repeat":
if (c.GetAttribute("start").ToLower() == "true")
{
masterBar.IsRepeatStart = true;
}
if (c.GetAttribute("end").ToLower() == "true" && c.GetAttribute("count") != null)
{
masterBar.RepeatCount = Std.ParseInt(c.GetAttribute("count"));
}
break;
// TODO case "Directions": // Coda segno etc.
case "AlternateEndings":
var alternateEndings = GetValue(c).Split(' ');
var i = 0;
for (int k = 0; k < alternateEndings.Length; k++)
{
i |= 1 << (-1 + Std.ParseInt(alternateEndings[k]));
}
masterBar.AlternateEndings = (byte)i;
break;
case "Bars":
_barsOfMasterBar.Add(GetValue(c).Split(' '));
break;
case "TripletFeel":
switch (GetValue(c))
{
case "NoTripletFeel":
masterBar.TripletFeel = TripletFeel.NoTripletFeel;
break;
case "Triplet8th":
masterBar.TripletFeel = TripletFeel.Triplet8th;
break;
case "Triplet16th":
masterBar.TripletFeel = TripletFeel.Triplet16th;
break;
case "Dotted8th":
masterBar.TripletFeel = TripletFeel.Dotted8th;
break;
case "Dotted16th":
masterBar.TripletFeel = TripletFeel.Dotted16th;
break;
case "Scottish8th":
masterBar.TripletFeel = TripletFeel.Scottish8th;
break;
case "Scottish16th":
masterBar.TripletFeel = TripletFeel.Scottish16th;
break;
}
break;
case "Key":
masterBar.KeySignature = Std.ParseInt(GetValue(FindChildElement(c, "AccidentalCount")));
var mode = FindChildElement(c, "Mode");
if (mode != null)
{
switch (GetValue(mode).ToLower())
{
case "major":
masterBar.KeySignatureType = KeySignatureType.Major;
break;
case "minor":
masterBar.KeySignatureType = KeySignatureType.Minor;
break;
}
}
break;
}
}
});
_masterBars.Add(masterBar);
}