/// <summary> /// Extension method, search for layout elements inside Part object and convers them to list of pages /// </summary> /// <param name="part"></param> /// <returns>Collection of Pages(Collections of system(first measure number, last measure number)</returns> public static List <List <Tuple <string, string> > > TryGetLinesPerPage(this ScorePartwisePartMusicXML part) { List <Tuple <string, string> > measuresPerLine = new List <Tuple <string, string> >(); int pagesCount = part.TryGetNumberOfPages(); List <List <Tuple <string, string> > > linesPerPage = new List <List <Tuple <string, string> > >(); string fistNumber = ""; string lastNumber = ""; foreach (var measure in part.Measure) { var print = measure.Items.OfType <PrintMusicXML>().FirstOrDefault(); if (print != null) { if (print.NewSystemSpecified) { if (print.NewSystem == Model.Helpers.SimpleTypes.YesNoMusicXML.yes) { lastNumber = part.Measure[part.Measure.IndexOf(measure) - 1].Number; Tuple <string, string> t = new Tuple <string, string>(fistNumber, lastNumber); if (part.Measure.IndexOf(measure) != 0) { measuresPerLine.Add(t); } fistNumber = measure.Number; } } if (print.NewPageSpecified) { if (print.NewPage == Model.Helpers.SimpleTypes.YesNoMusicXML.yes) { lastNumber = part.Measure[part.Measure.IndexOf(measure) - 1].Number; Tuple <string, string> t = new Tuple <string, string>(fistNumber, lastNumber); measuresPerLine.Add(t); linesPerPage.Add(new List <Tuple <string, string> >(measuresPerLine)); measuresPerLine.Clear(); fistNumber = measure.Number; } } if (part.Measure.IndexOf(measure) == 0) { fistNumber = measure.Number; } if (part.Measure.IndexOf(measure) == part.Measure.Count - 1) { lastNumber = measure.Number; Tuple <string, string> t = new Tuple <string, string>(fistNumber, lastNumber); measuresPerLine.Add(t); if (measuresPerLine.Count != 0) { linesPerPage.Add(new List <Tuple <string, string> >(measuresPerLine)); } } } else { if (part.Measure.IndexOf(measure) == 0) { fistNumber = measure.Number; } if (part.Measure.IndexOf(measure) == part.Measure.Count - 1) { lastNumber = measure.Number; Tuple <string, string> t = new Tuple <string, string>(fistNumber, lastNumber); measuresPerLine.Add(t); if (measuresPerLine.Count != 0) { linesPerPage.Add(new List <Tuple <string, string> >(measuresPerLine)); } } lastNumber = measure.Number; } } return(linesPerPage); }