Pārlūkot izejas kodu

fix lint errors, refactor. still some bad articulation placements and disappearances (function test all) (#887)

sschmid 4 gadi atpakaļ
vecāks
revīzija
f4c24ca5e3

+ 11 - 14
src/MusicalScore/Graphical/VexFlow/VexFlowConverter.ts

@@ -450,17 +450,21 @@ export class VexFlowConverter {
         if (!vfnote || vfnote.getAttribute("type") === "GhostNote") {
             return;
         }
-        // Articulations:
-        let vfArtPosition: number = Vex.Flow.Modifier.Position.ABOVE;
-
-        if (vfnote.getStemDirection() === Vex.Flow.Stem.UP) {
-            vfArtPosition = Vex.Flow.Modifier.Position.BELOW;
-        }
 
         for (const articulation of articulations) {
-            // tslint:disable-next-line:switch-default
+            // Articulations:
+            let vfArtPosition: number = Vex.Flow.Modifier.Position.ABOVE;
+
+            if (vfnote.getStemDirection() === Vex.Flow.Stem.UP) {
+                vfArtPosition = Vex.Flow.Modifier.Position.BELOW;
+            }
             let vfArt: Vex.Flow.Articulation = undefined;
             const articulationEnum: ArticulationEnum = articulation.articulationEnum;
+            if (articulation.placement === PlacementEnum.Above) {
+                vfArtPosition = Vex.Flow.Modifier.Position.ABOVE;
+            } else if (articulation.placement === PlacementEnum.Below) {
+                vfArtPosition = Vex.Flow.Modifier.Position.BELOW;
+            } // else if undefined: don't change
             switch (articulationEnum) {
                 case ArticulationEnum.accent: {
                     vfArt = new Vex.Flow.Articulation("a>");
@@ -477,12 +481,10 @@ export class VexFlowConverter {
                 }
                 case ArticulationEnum.marcatodown: {
                     vfArt = new Vex.Flow.Articulation("a|"); // Vexflow only knows marcato up, so we use a down stroke here.
-                    vfArtPosition = Vex.Flow.Modifier.Position.ABOVE; // TODO take position from xml? can be below
                     break;
                 }
                 case ArticulationEnum.marcatoup: {
                     vfArt = new Vex.Flow.Articulation("a^");
-                    vfArtPosition = Vex.Flow.Modifier.Position.ABOVE;
                     break;
                 }
                 case ArticulationEnum.invertedfermata: {
@@ -522,11 +524,6 @@ export class VexFlowConverter {
                     break;
                 }
             }
-            if (articulation.placement === PlacementEnum.Above) {
-                vfArtPosition = Vex.Flow.Modifier.Position.ABOVE;
-            } else {
-                vfArtPosition = Vex.Flow.Modifier.Position.BELOW;
-            }
             if (vfArt) {
                 vfArt.setPosition(vfArtPosition);
                 (vfnote as StaveNote).addModifier(0, vfArt);

+ 1 - 1
src/MusicalScore/ScoreIO/MusicSymbolModules/ArticulationReader.ts

@@ -49,7 +49,7 @@ export class ArticulationReader {
         try {
           // some Articulations appear in Xml separated with a "-" (eg strong-accent), we remove it for enum parsing
           name = name.replace("-", "");
-          let articulationEnum: ArticulationEnum = ArticulationEnum[name];
+          const articulationEnum: ArticulationEnum = ArticulationEnum[name];
           if (VoiceEntry.isSupportedArticulation(articulationEnum)) {
             let placement: PlacementEnum = PlacementEnum.Above;
             if (childNode.attribute("placement")?.value === "below") {

+ 2 - 2
src/MusicalScore/VoiceData/Articulation.ts

@@ -2,7 +2,7 @@ import { PlacementEnum } from "./Expressions/AbstractExpression";
 import { ArticulationEnum } from "./VoiceEntry";
 
 export class Articulation {
-    public placement: PlacementEnum = PlacementEnum.Above;
+    public placement: PlacementEnum;
     public articulationEnum: ArticulationEnum;
 
     constructor(articulationEnum: ArticulationEnum, placement: PlacementEnum = PlacementEnum.Above) {
@@ -13,4 +13,4 @@ export class Articulation {
     public Equals(otherArticulation: Articulation): boolean {
         return otherArticulation.articulationEnum === this.articulationEnum && otherArticulation.placement === this.placement;
     }
-}
+}

+ 1 - 1
src/MusicalScore/VoiceData/VoiceEntry.ts

@@ -156,7 +156,7 @@ export class VoiceEntry {
         this.stemColor = value;
     }
 
-    public hasArticulation(articulation: Articulation) {
+    public hasArticulation(articulation: Articulation): boolean {
         for (const existingArticulation of this.articulations) {
             if (existingArticulation.Equals(articulation)) {
                 return true;