소스 검색

fix tests, Haydn multi rest error bar 128

#861

testing if a source measure for which the xml gave a multi rest should be reduced to a multi rest
is not a good idea at the moment, because the first multi rest measure will still be created.
also, this works fine for the Haydn.

the previous commit caused an infinite loop in the Haydn sample.
sschmid 4 년 전
부모
커밋
8bd9a0ade1
1개의 변경된 파일15개의 추가작업 그리고 24개의 파일을 삭제
  1. 15 24
      src/MusicalScore/Graphical/MusicSheetCalculator.ts

+ 15 - 24
src/MusicalScore/Graphical/MusicSheetCalculator.ts

@@ -167,29 +167,20 @@ export abstract class MusicSheetCalculator {
                 activeClefs
             );
             measureList.push(graphicalMeasures);
-            if (sourceMeasure.multipleRestMeasures && this.rules.RenderMultipleRestMeasures) {
-                if (sourceMeasure.canBeReducedToMultiRest()) {
-                    sourceMeasure.isReducedToMultiRest = true;
-                    sourceMeasure.multipleRestMeasureNumber = 1;
-                    const measuresToSkip: number = sourceMeasure.multipleRestMeasures - 1;
-                    // console.log(`skipping ${measuresToSkip} measures for measure #${sourceMeasure.MeasureNumber}.`);
-                    idx += measuresToSkip;
-                    for (let idx2: number = 1; idx2 <= measuresToSkip; idx2++) {
-                        const nextSourceMeasure: SourceMeasure = musicSheet.SourceMeasures[sourceMeasure.MeasureNumber - 1 + idx2];
-                        // TODO handle the case that a measure after the first multiple rest measure can't be reduced
-                        nextSourceMeasure.multipleRestMeasureNumber = idx2 + 1;
-                        nextSourceMeasure.isReducedToMultiRest = true;
-                        measureList.push([undefined]);
-                        // TODO we could push an object here or push nothing entirely,
-                        //   but then the index doesn't correspond to measure numbers anymore.
-                    }
-                } else {
-                    // the original number of multiple rests given needs to be reduced,
-                    //   because the multirest needs to be "postponed" to the next possible location,
-                    //   because we could not do a multirest over all vertical measures
-                    sourceMeasure.multipleRestMeasures = 0;
-                    const nextMeasure: SourceMeasure = musicSheet.SourceMeasures[sourceMeasure.MeasureNumber]; // MeasureNumber - 1 = index, + 1 = next
-                    nextMeasure.multipleRestMeasures = sourceMeasure.multipleRestMeasures - 1;
+            if (sourceMeasure.multipleRestMeasures > 0 && this.rules.RenderMultipleRestMeasures) {
+                sourceMeasure.isReducedToMultiRest = true;
+                sourceMeasure.multipleRestMeasureNumber = 1;
+                const measuresToSkip: number = sourceMeasure.multipleRestMeasures - 1;
+                // console.log(`skipping ${measuresToSkip} measures for measure #${sourceMeasure.MeasureNumber}.`);
+                idx += measuresToSkip;
+                for (let idx2: number = 1; idx2 <= measuresToSkip; idx2++) {
+                    const nextSourceMeasure: SourceMeasure = musicSheet.SourceMeasures[sourceMeasure.MeasureNumber - 1 + idx2];
+                    // TODO handle the case that a measure after the first multiple rest measure can't be reduced
+                    nextSourceMeasure.multipleRestMeasureNumber = idx2 + 1;
+                    nextSourceMeasure.isReducedToMultiRest = true;
+                    measureList.push([undefined]);
+                    // TODO we could push an object here or push nothing entirely,
+                    //   but then the index doesn't correspond to measure numbers anymore.
                 }
             }
         }
@@ -201,7 +192,7 @@ export abstract class MusicSheetCalculator {
             //go through all source measures again. Need to calc auto-multi-rests
             for (let idx: number = 0, len: number = musicSheet.SourceMeasures.length; idx < len; ++idx) {
                 const sourceMeasure: SourceMeasure = musicSheet.SourceMeasures[idx];
-                if (sourceMeasure.canBeReducedToMultiRest() && !sourceMeasure.multipleRestMeasures) {
+                if (!sourceMeasure.isReducedToMultiRest && sourceMeasure.canBeReducedToMultiRest()) {
                     //we've already been initialized, we are in the midst of a multirest sequence
                     if (multiRestCount > 0) {
                         beginMultiRestMeasure.isReducedToMultiRest = true;