(node: XmlNode)
| 1350 | } |
| 1351 | |
| 1352 | private _parseMasterBar(node: XmlNode): void { |
| 1353 | const masterBar: MasterBar = new MasterBar(); |
| 1354 | if (this._masterBars.length === 0 && this._hasAnacrusis) { |
| 1355 | masterBar.isAnacrusis = true; |
| 1356 | } |
| 1357 | for (const c of node.childElements()) { |
| 1358 | switch (c.localName) { |
| 1359 | case 'Time': |
| 1360 | const timeParts: string[] = c.innerText.split('/'); |
| 1361 | masterBar.timeSignatureNumerator = GpifParser._parseIntSafe(timeParts[0], 4); |
| 1362 | masterBar.timeSignatureDenominator = GpifParser._parseIntSafe(timeParts[1], 4); |
| 1363 | break; |
| 1364 | case 'FreeTime': |
| 1365 | masterBar.isFreeTime = true; |
| 1366 | break; |
| 1367 | case 'DoubleBar': |
| 1368 | masterBar.isDoubleBar = true; |
| 1369 | this._doubleBars.add(masterBar); |
| 1370 | break; |
| 1371 | case 'Section': |
| 1372 | masterBar.section = new Section(); |
| 1373 | masterBar.section.marker = c.findChildElement('Letter')?.innerText ?? ''; |
| 1374 | masterBar.section.text = c.findChildElement('Text')?.innerText ?? ''; |
| 1375 | break; |
| 1376 | case 'Repeat': |
| 1377 | if (c.getAttribute('start').toLowerCase() === 'true') { |
| 1378 | masterBar.isRepeatStart = true; |
| 1379 | } |
| 1380 | if (c.getAttribute('end').toLowerCase() === 'true' && c.getAttribute('count')) { |
| 1381 | masterBar.repeatCount = GpifParser._parseIntSafe(c.getAttribute('count'), 1); |
| 1382 | } |
| 1383 | break; |
| 1384 | case 'AlternateEndings': |
| 1385 | const alternateEndings: string[] = GpifParser._splitSafe(c.innerText); |
| 1386 | let i: number = 0; |
| 1387 | for (let k: number = 0; k < alternateEndings.length; k++) { |
| 1388 | i = i | (1 << (-1 + GpifParser._parseIntSafe(alternateEndings[k], 0))); |
| 1389 | } |
| 1390 | masterBar.alternateEndings = i; |
| 1391 | break; |
| 1392 | case 'Bars': |
| 1393 | this._barsOfMasterBar.push(GpifParser._splitSafe(c.innerText)); |
| 1394 | break; |
| 1395 | case 'TripletFeel': |
| 1396 | switch (c.innerText) { |
| 1397 | case 'NoTripletFeel': |
| 1398 | masterBar.tripletFeel = TripletFeel.NoTripletFeel; |
| 1399 | break; |
| 1400 | case 'Triplet8th': |
| 1401 | masterBar.tripletFeel = TripletFeel.Triplet8th; |
| 1402 | break; |
| 1403 | case 'Triplet16th': |
| 1404 | masterBar.tripletFeel = TripletFeel.Triplet16th; |
| 1405 | break; |
| 1406 | case 'Dotted8th': |
| 1407 | masterBar.tripletFeel = TripletFeel.Dotted8th; |
| 1408 | break; |
| 1409 | case 'Dotted16th': |
no test coverage detected