28
28
#include " libmscore/accidental.h"
29
29
#include " libmscore/articulation.h"
30
30
#include " libmscore/chord.h"
31
+ #include " types/symnames.h"
31
32
32
33
#include " musicxmlsupport.h"
33
34
34
35
#include " log.h"
35
36
37
+ using AccidentalType = mu::engraving::AccidentalType;
38
+ using SymId = mu::engraving::SymId;
39
+ const static QMap<QString, AccidentalType> smuflAccidentalTypes {
40
+ { " accidentalDoubleFlatOneArrowDown" , AccidentalType::DOUBLE_FLAT_ONE_ARROW_DOWN },
41
+ { " accidentalFlatOneArrowDown" , AccidentalType::FLAT_ONE_ARROW_DOWN },
42
+ { " accidentalNaturalOneArrowDown" , AccidentalType::NATURAL_ONE_ARROW_DOWN },
43
+ { " accidentalSharpOneArrowDown" , AccidentalType::SHARP_ONE_ARROW_DOWN },
44
+ { " accidentalDoubleSharpOneArrowDown" , AccidentalType::DOUBLE_SHARP_ONE_ARROW_DOWN },
45
+ { " accidentalDoubleFlatOneArrowUp" , AccidentalType::DOUBLE_FLAT_ONE_ARROW_UP },
46
+ { " accidentalFlatOneArrowUp" , AccidentalType::FLAT_ONE_ARROW_UP },
47
+ { " accidentalNaturalOneArrowUp" , AccidentalType::NATURAL_ONE_ARROW_UP },
48
+ { " accidentalSharpOneArrowUp" , AccidentalType::SHARP_ONE_ARROW_UP },
49
+ { " accidentalDoubleSharpOneArrowUp" , AccidentalType::DOUBLE_SHARP_ONE_ARROW_UP },
50
+ { " accidentalDoubleFlatTwoArrowsDown" , AccidentalType::DOUBLE_FLAT_TWO_ARROWS_DOWN },
51
+ { " accidentalFlatTwoArrowsDown" , AccidentalType::FLAT_TWO_ARROWS_DOWN },
52
+ { " accidentalNaturalTwoArrowsDown" , AccidentalType::NATURAL_TWO_ARROWS_DOWN },
53
+ { " accidentalSharpTwoArrowsDown" , AccidentalType::SHARP_TWO_ARROWS_DOWN },
54
+ { " accidentalDoubleSharpTwoArrowsDown" , AccidentalType::DOUBLE_SHARP_TWO_ARROWS_DOWN },
55
+ { " accidentalDoubleFlatTwoArrowsUp" , AccidentalType::DOUBLE_FLAT_TWO_ARROWS_UP },
56
+ { " accidentalFlatTwoArrowsUp" , AccidentalType::FLAT_TWO_ARROWS_UP },
57
+ { " accidentalNaturalTwoArrowsUp" , AccidentalType::NATURAL_TWO_ARROWS_UP },
58
+ { " accidentalSharpTwoArrowsUp" , AccidentalType::SHARP_TWO_ARROWS_UP },
59
+ { " accidentalDoubleSharpTwoArrowsUp" , AccidentalType::DOUBLE_SHARP_TWO_ARROWS_UP },
60
+ { " accidentalDoubleFlatThreeArrowsDown" , AccidentalType::DOUBLE_FLAT_THREE_ARROWS_DOWN },
61
+ { " accidentalFlatThreeArrowsDown" , AccidentalType::FLAT_THREE_ARROWS_DOWN },
62
+ { " accidentalNaturalThreeArrowsDown" , AccidentalType::NATURAL_THREE_ARROWS_DOWN },
63
+ { " accidentalSharpThreeArrowsDown" , AccidentalType::SHARP_THREE_ARROWS_DOWN },
64
+ { " accidentalDoubleSharpThreeArrowsDown" , AccidentalType::DOUBLE_SHARP_THREE_ARROWS_DOWN },
65
+ { " accidentalDoubleFlatThreeArrowsUp" , AccidentalType::DOUBLE_FLAT_THREE_ARROWS_UP },
66
+ { " accidentalFlatThreeArrowsUp" , AccidentalType::FLAT_THREE_ARROWS_UP },
67
+ { " accidentalNaturalThreeArrowsUp" , AccidentalType::NATURAL_THREE_ARROWS_UP },
68
+ { " accidentalSharpThreeArrowsUp" , AccidentalType::SHARP_THREE_ARROWS_UP },
69
+ { " accidentalDoubleSharpThreeArrowsUp" , AccidentalType::DOUBLE_SHARP_THREE_ARROWS_UP },
70
+ { " accidentalLowerOneSeptimalComma" , AccidentalType::LOWER_ONE_SEPTIMAL_COMMA },
71
+ { " accidentalRaiseOneSeptimalComma" , AccidentalType::RAISE_ONE_SEPTIMAL_COMMA },
72
+ { " accidentalLowerTwoSeptimalCommas" , AccidentalType::LOWER_TWO_SEPTIMAL_COMMAS },
73
+ { " accidentalRaiseTwoSeptimalCommas" , AccidentalType::RAISE_TWO_SEPTIMAL_COMMAS },
74
+ { " accidentalLowerOneUndecimalQuartertone" , AccidentalType::LOWER_ONE_UNDECIMAL_QUARTERTONE },
75
+ { " accidentalRaiseOneUndecimalQuartertone" , AccidentalType::RAISE_ONE_UNDECIMAL_QUARTERTONE },
76
+ { " accidentalLowerOneTridecimalQuartertone" , AccidentalType::LOWER_ONE_TRIDECIMAL_QUARTERTONE },
77
+ { " accidentalRaiseOneTridecimalQuartertone" , AccidentalType::RAISE_ONE_TRIDECIMAL_QUARTERTONE },
78
+ { " accidentalDoubleFlatEqualTempered" , AccidentalType::DOUBLE_FLAT_EQUAL_TEMPERED },
79
+ { " accidentalFlatEqualTempered" , AccidentalType::FLAT_EQUAL_TEMPERED },
80
+ { " accidentalNaturalEqualTempered" , AccidentalType::NATURAL_EQUAL_TEMPERED },
81
+ { " accidentalSharpEqualTempered" , AccidentalType::SHARP_EQUAL_TEMPERED },
82
+ { " accidentalDoubleSharpEqualTempered" , AccidentalType::DOUBLE_SHARP_EQUAL_TEMPERED },
83
+ { " accidentalQuarterFlatEqualTempered" , AccidentalType::QUARTER_FLAT_EQUAL_TEMPERED },
84
+ { " accidentalQuarterSharpEqualTempered" , AccidentalType::QUARTER_SHARP_EQUAL_TEMPERED }
85
+ };
86
+
36
87
namespace mu ::engraving {
37
88
NoteList::NoteList ()
38
89
{
@@ -492,32 +543,49 @@ QString accSymId2MxmlString(const SymId id)
492
543
case SymId::accidentalBuyukMucennebFlat: s = " double-slash-flat" ;
493
544
break ;
494
545
495
- // case SymId::noSym: s = "sharp1"; break;
496
- // case SymId::noSym: s = "sharp2"; break;
497
- // case SymId::noSym: s = "sharp3"; break;
498
- // case SymId::noSym: s = "sharp4"; break;
499
- // case SymId::noSym: s = "flat1"; break;
500
- // case SymId::noSym: s = "flat2"; break;
501
- // case SymId::noSym: s = "flat3"; break;
502
- // case SymId::noSym: s = "flat4"; break;
546
+ case SymId::accidental1CommaSharp: s = " sharp-1" ;
547
+ break ;
548
+ case SymId::accidental2CommaSharp: s = " sharp-2" ;
549
+ break ;
550
+ case SymId::accidental3CommaSharp: s = " sharp-3" ;
551
+ break ;
552
+ case SymId::accidental5CommaSharp: s = " sharp-5" ;
553
+ break ;
554
+ case SymId::accidental1CommaFlat: s = " flat-1" ;
555
+ break ;
556
+ case SymId::accidental2CommaFlat: s = " flat-2" ;
557
+ break ;
558
+ case SymId::accidental3CommaFlat: s = " flat-3" ;
559
+ break ;
560
+ case SymId::accidental4CommaFlat: s = " flat-4" ;
561
+ break ;
503
562
504
563
case SymId::accidentalSori: s = " sori" ;
505
564
break ;
506
565
case SymId::accidentalKoron: s = " koron" ;
507
566
break ;
508
567
default :
509
- // s = "other"; // actually pick up the SMuFL name or SymId
568
+ s = " other" ;
510
569
LOGD (" accSymId2MxmlString: unknown accidental %d" , static_cast <int >(id));
511
570
}
512
571
return s;
513
572
}
514
573
574
+ // ---------------------------------------------------------
575
+ // accSymId2SmuflMxmlString
576
+ // ---------------------------------------------------------
577
+
578
+ QString accSymId2SmuflMxmlString (const SymId id)
579
+ {
580
+ return SymNames::nameForSymId (id).ascii ();
581
+ }
582
+
515
583
// ---------------------------------------------------------
516
584
// mxmlString2accSymId
517
585
// see https://github.com/w3c/musicxml/blob/6e3a667b85855b04d7e4548ea508b537bc29fc52/schema/musicxml.xsd#L1392-L1439
518
586
// ---------------------------------------------------------
519
587
520
- SymId mxmlString2accSymId (const QString mxmlName)
588
+ SymId mxmlString2accSymId (const QString mxmlName, const QString smufl )
521
589
{
522
590
QMap<QString, SymId> map; // map MusicXML accidental name to MuseScore enum SymId
523
591
map[" sharp" ] = SymId::accidentalSharp;
@@ -557,22 +625,22 @@ SymId mxmlString2accSymId(const QString mxmlName)
557
625
map[" slash-flat" ] = SymId::accidentalBakiyeFlat;
558
626
map[" double-slash-flat" ] = SymId::accidentalBuyukMucennebFlat;
559
627
560
- // map["sharp1 "] = SymId::noSym ;
561
- // map["sharp2 "] = SymId::noSym ;
562
- // map["sharp3 "] = SymId::noSym ;
563
- // map["sharp4 "] = SymId::noSym ;
564
- // map["flat1 "] = SymId::noSym ;
565
- // map["flat2 "] = SymId::noSym ;
566
- // map["flat3 "] = SymId::noSym ;
567
- // map["flat3 "] = SymId::noSym ;
628
+ map[" sharp-1 " ] = SymId::accidental1CommaSharp ;
629
+ map[" sharp-2 " ] = SymId::accidental2CommaSharp ;
630
+ map[" sharp-3 " ] = SymId::accidental3CommaSharp ;
631
+ map[" sharp-5 " ] = SymId::accidental5CommaSharp ;
632
+ map[" flat-1 " ] = SymId::accidental1CommaFlat ;
633
+ map[" flat-2 " ] = SymId::accidental2CommaFlat ;
634
+ map[" flat-3 " ] = SymId::accidental3CommaFlat ;
635
+ map[" flat-4 " ] = SymId::accidental4CommaFlat ;
568
636
569
637
map[" sori" ] = SymId::accidentalSori;
570
638
map[" koron" ] = SymId::accidentalKoron;
571
639
572
- // map["other"] = SymId::noSym; // actually pick up the SMuFL name or SymId
573
-
574
640
if (map.contains (mxmlName)) {
575
641
return map.value (mxmlName);
642
+ } else if (mxmlName == " other" ) {
643
+ return SymNames::symIdByName (smufl);
576
644
} else {
577
645
LOGD (" mxmlString2accSymId: unknown accidental '%s'" , qPrintable (mxmlName));
578
646
}
@@ -654,26 +722,42 @@ QString accidentalType2MxmlString(const AccidentalType type)
654
722
case AccidentalType::FLAT_SLASH2: s = " double-slash-flat" ;
655
723
break ;
656
724
657
- // case AccidentalType::NONE: s = "sharp1"; break;
658
- // case AccidentalType::NONE: s = "sharp2"; break;
659
- // case AccidentalType::NONE: s = "sharp3"; break;
660
- // case AccidentalType::NONE: s = "sharp4"; break;
661
- // case AccidentalType::NONE: s = "flat1"; break;
662
- // case AccidentalType::NONE: s = "flat2"; break;
663
- // case AccidentalType::NONE: s = "flat3"; break;
664
- // case AccidentalType::NONE: s = "flat3"; break;
725
+ case AccidentalType::ONE_COMMA_SHARP: s = " sharp-1" ;
726
+ break ;
727
+ case AccidentalType::TWO_COMMA_SHARP: s = " sharp-2" ;
728
+ break ;
729
+ case AccidentalType::THREE_COMMA_SHARP: s = " sharp-3" ;
730
+ break ;
731
+ case AccidentalType::FIVE_COMMA_SHARP: s = " sharp-5" ;
732
+ break ;
733
+ case AccidentalType::ONE_COMMA_FLAT: s = " flat-1" ;
734
+ break ;
735
+ case AccidentalType::TWO_COMMA_FLAT: s = " flat-2" ;
736
+ break ;
737
+ case AccidentalType::THREE_COMMA_FLAT: s = " flat-3" ;
738
+ break ;
739
+ case AccidentalType::FOUR_COMMA_FLAT: s = " flat-4" ;
740
+ break ;
665
741
666
742
case AccidentalType::SORI: s = " sori" ;
667
743
break ;
668
744
case AccidentalType::KORON: s = " koron" ;
669
745
break ;
670
746
default :
671
- // s = "other"; // actually pick up the SMuFL name or SymId
672
- LOGD (" accidentalType2MxmlString: unknown accidental %d" , static_cast <int >(type));
747
+ s = " other" ;
673
748
}
674
749
return s;
675
750
}
676
751
752
+ // ---------------------------------------------------------
753
+ // accidentalType2SmuflMxmlString
754
+ // ---------------------------------------------------------
755
+
756
+ QString accidentalType2SmuflMxmlString (const AccidentalType type)
757
+ {
758
+ return smuflAccidentalTypes.key (type);
759
+ }
760
+
677
761
// ---------------------------------------------------------
678
762
// mxmlString2accidentalType
679
763
// ---------------------------------------------------------
@@ -683,7 +767,7 @@ QString accidentalType2MxmlString(const AccidentalType type)
683
767
see https://github.com/w3c/musicxml/blob/6e3a667b85855b04d7e4548ea508b537bc29fc52/schema/musicxml.xsd#L1392-L1439
684
768
*/
685
769
686
- AccidentalType mxmlString2accidentalType (const QString mxmlName)
770
+ AccidentalType mxmlString2accidentalType (const QString mxmlName, const QString smufl )
687
771
{
688
772
QMap<QString, AccidentalType> map; // map MusicXML accidental name to MuseScore enum AccidentalType
689
773
map[" sharp" ] = AccidentalType::SHARP;
@@ -723,22 +807,22 @@ AccidentalType mxmlString2accidentalType(const QString mxmlName)
723
807
map[" slash-flat" ] = AccidentalType::FLAT_SLASH;
724
808
map[" double-slash-flat" ] = AccidentalType::FLAT_SLASH2;
725
809
726
- // map["sharp1 "] = AccidentalType::NONE ;
727
- // map["sharp2 "] = AccidentalType::NONE ;
728
- // map["sharp3 "] = AccidentalType::NONE ;
729
- // map["sharp4 "] = AccidentalType::NONE ;
730
- // map["flat1 "] = AccidentalType::NONE ;
731
- // map["flat2 "] = AccidentalType::NONE ;
732
- // map["flat3 "] = AccidentalType::NONE ;
733
- // map["flat4 "] = AccidentalType::NONE ;
810
+ map[" sharp-1 " ] = AccidentalType::ONE_COMMA_SHARP ;
811
+ map[" sharp-2 " ] = AccidentalType::TWO_COMMA_SHARP ;
812
+ map[" sharp-3 " ] = AccidentalType::THREE_COMMA_SHARP ;
813
+ map[" sharp-5 " ] = AccidentalType::FIVE_COMMA_SHARP ;
814
+ map[" flat-1 " ] = AccidentalType::ONE_COMMA_FLAT ;
815
+ map[" flat-2 " ] = AccidentalType::TWO_COMMA_FLAT ;
816
+ map[" flat-3 " ] = AccidentalType::THREE_COMMA_FLAT ;
817
+ map[" flat-4 " ] = AccidentalType::FOUR_COMMA_FLAT ;
734
818
735
819
map[" sori" ] = AccidentalType::SORI;
736
820
map[" koron" ] = AccidentalType::KORON;
737
821
738
- // map["other"] = AccidentalType::NONE; // actually pick up the SMuFL name or SymId
739
-
740
822
if (map.contains (mxmlName)) {
741
823
return map.value (mxmlName);
824
+ } else if (mxmlName == " other" && smuflAccidentalTypes.contains (smufl)) {
825
+ return smuflAccidentalTypes.value (smufl);
742
826
} else {
743
827
LOGD (" mxmlString2accidentalType: unknown accidental '%s'" , qPrintable (mxmlName));
744
828
}
0 commit comments