Skip to content

Commit 235e020

Browse files
authored
Merge pull request #28381 from rettinghaus/mei/grpsym
[MEI] improve import of brackets
2 parents b50b002 + 4516e11 commit 235e020

File tree

4 files changed

+71
-55
lines changed

4 files changed

+71
-55
lines changed

src/importexport/mei/internal/meiconverter.cpp

Lines changed: 57 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -571,56 +571,6 @@ int Convert::breaksecToMEI(engraving::BeamMode beamMode)
571571
return breaksec;
572572
}
573573

574-
Convert::BracketStruct Convert::bracketFromMEI(const libmei::StaffGrp& meiStaffGrp)
575-
{
576-
Convert::BracketStruct bracketSt;
577-
578-
switch (meiStaffGrp.GetSymbol()) {
579-
case (libmei::staffGroupingSym_SYMBOL_bracket): bracketSt.bracketType = engraving::BracketType::NORMAL;
580-
break;
581-
case (libmei::staffGroupingSym_SYMBOL_brace): bracketSt.bracketType = engraving::BracketType::BRACE;
582-
break;
583-
case (libmei::staffGroupingSym_SYMBOL_bracketsq): bracketSt.bracketType = engraving::BracketType::SQUARE;
584-
break;
585-
case (libmei::staffGroupingSym_SYMBOL_line): bracketSt.bracketType = engraving::BracketType::LINE;
586-
break;
587-
case (libmei::staffGroupingSym_SYMBOL_none): bracketSt.bracketType = engraving::BracketType::NO_BRACKET;
588-
break;
589-
default: break;
590-
}
591-
592-
if (meiStaffGrp.HasBarThru() && meiStaffGrp.GetBarThru() == libmei::BOOLEAN_true) {
593-
bracketSt.barLineSpan = 1;
594-
}
595-
596-
return bracketSt;
597-
}
598-
599-
libmei::StaffGrp Convert::bracketToMEI(const engraving::BracketType bracket, int barLineSpan)
600-
{
601-
libmei::StaffGrp meiStaffGrp;
602-
// @symbol
603-
switch (bracket) {
604-
case (engraving::BracketType::NORMAL): meiStaffGrp.SetSymbol(libmei::staffGroupingSym_SYMBOL_bracket);
605-
break;
606-
case (engraving::BracketType::BRACE): meiStaffGrp.SetSymbol(libmei::staffGroupingSym_SYMBOL_brace);
607-
break;
608-
case (engraving::BracketType::SQUARE): meiStaffGrp.SetSymbol(libmei::staffGroupingSym_SYMBOL_bracketsq);
609-
break;
610-
case (engraving::BracketType::LINE): meiStaffGrp.SetSymbol(libmei::staffGroupingSym_SYMBOL_line);
611-
break;
612-
case (engraving::BracketType::NO_BRACKET): meiStaffGrp.SetSymbol(libmei::staffGroupingSym_SYMBOL_none);
613-
break;
614-
default: break;
615-
}
616-
// @bar.thru
617-
if (barLineSpan > 0) {
618-
meiStaffGrp.SetBarThru(libmei::BOOLEAN_true);
619-
}
620-
621-
return meiStaffGrp;
622-
}
623-
624574
void Convert::breathFromMEI(engraving::Breath* breath, const libmei::Breath& meiBreath, bool& warning)
625575
{
626576
warning = false;
@@ -2936,6 +2886,34 @@ libmei::StaffDef Convert::staffToMEI(const engraving::Staff* staff)
29362886
return meiStaffDef;
29372887
}
29382888

2889+
Convert::BracketStruct Convert::staffGrpFromMEI(const libmei::StaffGrp& meiStaffGrp)
2890+
{
2891+
Convert::BracketStruct bracketSt;
2892+
2893+
bracketSt.bracketType = symbolFromMEI(meiStaffGrp.GetSymbol());
2894+
2895+
if (meiStaffGrp.HasBarThru() && meiStaffGrp.GetBarThru() == libmei::BOOLEAN_true) {
2896+
bracketSt.barLineSpan = 1;
2897+
}
2898+
2899+
return bracketSt;
2900+
}
2901+
2902+
libmei::StaffGrp Convert::staffGrpToMEI(const engraving::BracketType bracket, int barLineSpan)
2903+
{
2904+
libmei::StaffGrp meiStaffGrp;
2905+
2906+
// @symbol
2907+
meiStaffGrp.SetSymbol(symbolToMEI(bracket));
2908+
2909+
// @bar.thru
2910+
if (barLineSpan > 0) {
2911+
meiStaffGrp.SetBarThru(libmei::BOOLEAN_true);
2912+
}
2913+
2914+
return meiStaffGrp;
2915+
}
2916+
29392917
std::pair<engraving::DirectionV, bool> Convert::stemFromMEI(const libmei::AttStems& meiStemsAtt, bool& warning)
29402918
{
29412919
warning = false;
@@ -3084,6 +3062,35 @@ libmei::Syl Convert::sylToMEI(const engraving::Lyrics* lyrics, ElisionType elisi
30843062
return meiSyl;
30853063
}
30863064

3065+
engraving::BracketType Convert::symbolFromMEI(const libmei::staffGroupingSym_SYMBOL meiGrpSym)
3066+
{
3067+
switch (meiGrpSym) {
3068+
case (libmei::staffGroupingSym_SYMBOL_bracket): return engraving::BracketType::NORMAL;
3069+
case (libmei::staffGroupingSym_SYMBOL_brace): return engraving::BracketType::BRACE;
3070+
case (libmei::staffGroupingSym_SYMBOL_bracketsq): return engraving::BracketType::SQUARE;
3071+
case (libmei::staffGroupingSym_SYMBOL_line): return engraving::BracketType::LINE;
3072+
case (libmei::staffGroupingSym_SYMBOL_none): return engraving::BracketType::NO_BRACKET;
3073+
default: return engraving::BracketType::NO_BRACKET;
3074+
}
3075+
}
3076+
3077+
libmei::staffGroupingSym_SYMBOL Convert::symbolToMEI(const engraving::BracketType bracket)
3078+
{
3079+
switch (bracket) {
3080+
case (engraving::BracketType::NORMAL): return libmei::staffGroupingSym_SYMBOL_bracket;
3081+
break;
3082+
case (engraving::BracketType::BRACE): return libmei::staffGroupingSym_SYMBOL_brace;
3083+
break;
3084+
case (engraving::BracketType::SQUARE): return libmei::staffGroupingSym_SYMBOL_bracketsq;
3085+
break;
3086+
case (engraving::BracketType::LINE): return libmei::staffGroupingSym_SYMBOL_line;
3087+
break;
3088+
case (engraving::BracketType::NO_BRACKET): return libmei::staffGroupingSym_SYMBOL_none;
3089+
break;
3090+
default: return libmei::staffGroupingSym_SYMBOL_NONE;
3091+
}
3092+
}
3093+
30873094
void Convert::tempoFromMEI(engraving::TempoText* tempoText, const StringList& meiLines, const libmei::Tempo& meiTempo, bool& warning)
30883095
{
30893096
IF_ASSERT_FAILED(tempoText) {

src/importexport/mei/internal/meiconverter.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -170,9 +170,6 @@ class Convert
170170
static engraving::BeamMode breaksecFromMEI(int breaksec, bool& warning);
171171
static int breaksecToMEI(engraving::BeamMode beamMode);
172172

173-
static BracketStruct bracketFromMEI(const libmei::StaffGrp& meiStaffGrp);
174-
static libmei::StaffGrp bracketToMEI(const engraving::BracketType, int barLineSpan);
175-
176173
static void breathFromMEI(engraving::Breath* breath, const libmei::Breath& meiBreath, bool& warning);
177174
static libmei::Breath breathToMEI(const engraving::Breath* breath);
178175

@@ -297,6 +294,9 @@ class Convert
297294
static StaffStruct staffFromMEI(const libmei::StaffDef& meiStaffDef, bool& warning);
298295
static libmei::StaffDef staffToMEI(const engraving::Staff* staff);
299296

297+
static BracketStruct staffGrpFromMEI(const libmei::StaffGrp& meiStaffGrp);
298+
static libmei::StaffGrp staffGrpToMEI(const engraving::BracketType, int barLineSpan);
299+
300300
static void staffIdentToMEI(const engraving::EngravingItem* item, libmei::Element& meiElement);
301301

302302
static std::pair<engraving::DirectionV, bool> stemFromMEI(const libmei::AttStems& meiStemsAtt, bool& warning);
@@ -308,6 +308,9 @@ class Convert
308308
static void sylFromMEI(engraving::Lyrics* lyrics, const libmei::Syl& meiSyl, ElisionType elision, bool& warning);
309309
static libmei::Syl sylToMEI(const engraving::Lyrics* lyrics, ElisionType elision);
310310

311+
static engraving::BracketType symbolFromMEI(const libmei::staffGroupingSym_SYMBOL meiGrpSym);
312+
static libmei::staffGroupingSym_SYMBOL symbolToMEI(const engraving::BracketType bracket);
313+
311314
static void tempoFromMEI(engraving::TempoText* tempo, const muse::StringList& meiLines, const libmei::Tempo& meiTempo, bool& warning);
312315
static libmei::Tempo tempoToMEI(const engraving::TempoText* tempoText, muse::StringList& meiLines);
313316

src/importexport/mei/internal/meiexporter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -614,7 +614,7 @@ bool MeiExporter::writeStaffGrpStart(const Staff* staff, std::vector<int>& ends,
614614

615615
for (size_t j = 0; j < staff->bracketLevels() + 1; j++) {
616616
if (staff->bracketType(j) != BracketType::NO_BRACKET) {
617-
libmei::StaffGrp meiStaffGrp = Convert::bracketToMEI(staff->bracketType(j), staff->barLineSpan());
617+
libmei::StaffGrp meiStaffGrp = Convert::staffGrpToMEI(staff->bracketType(j), staff->barLineSpan());
618618
// mark at which staff we will need to close the staffGrp
619619
int end = static_cast<int>(staff->idx() + staff->bracketSpan(j)) - 1;
620620
// Something is wrong, maybe a staff was delete in the MuseScore file?

src/importexport/mei/internal/meiimporter.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1283,7 +1283,13 @@ bool MeiImporter::readStaffGrps(pugi::xml_node parentNode, int& staffSpan, int c
12831283
Staff* staff = m_score->staff(idx);
12841284
libmei::StaffGrp meiStaffGrp;
12851285
meiStaffGrp.Read(child.node());
1286-
Convert::BracketStruct bracketSt = Convert::bracketFromMEI(meiStaffGrp);
1286+
Convert::BracketStruct bracketSt = Convert::staffGrpFromMEI(meiStaffGrp);
1287+
if (!meiStaffGrp.HasSymbol()) {
1288+
bracketSt.bracketType = Convert::symbolFromMEI(
1289+
meiStaffGrp.AttStaffGroupingSym::StrToStaffGroupingSymSymbol(
1290+
child.node().child("grpSym").attribute("symbol").value()));
1291+
}
1292+
12871293
staff->setBracketType(column, bracketSt.bracketType);
12881294

12891295
int childStaffSpan = 0;

0 commit comments

Comments
 (0)