Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/engraving/api/v1/apitypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -1070,6 +1070,13 @@ enum class ClefType {
TAB4_SERIF = int(mu::engraving::ClefType::TAB4_SERIF),
C4_8VB = int(mu::engraving::ClefType::C4_8VB),
G8_VB_C = int(mu::engraving::ClefType::G8_VB_C),
G_R = int(mu::engraving::ClefType::G_R),
C1_R = int(mu::engraving::ClefType::C1_R),
C2_R = int(mu::engraving::ClefType::C2_R),
C3_R = int(mu::engraving::ClefType::C3_R),
C4_R = int(mu::engraving::ClefType::C4_R),
C5_R = int(mu::engraving::ClefType::C4_R),
F_R = int(mu::engraving::ClefType::F_R),
MAX = int(mu::engraving::ClefType::MAX),
};
Q_ENUM_NS(ClefType);
Expand Down
14 changes: 14 additions & 0 deletions src/engraving/dom/clef.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,20 @@ const ClefInfo ClefInfo::clefTable[] = {

{ ClefType::C4_8VB, 4, 30, { 6, 2, 5, 1, 4, 0, 3, 3, 0, 4, 1, 5, 2, 6 }, SymId::cClef8vb, StaffGroup::STANDARD },
{ ClefType::G8_VB_C, 2, 38, { 0, 3, -1, 2, 5, 1, 4, 4, 1, 5, 2, 6, 3, 7 }, SymId::gClef8vbCClef, StaffGroup::STANDARD },
{ ClefType::G_R, 2, 45, { 0, 3, -1, 2, 5, 1, 4, 4, 1, 5, 2, 6, 3, 7 }, SymId::mensuralGclefPetrucci,
StaffGroup::STANDARD },
{ ClefType::C1_R, 1, 43, { 5, 1, 4, 0, 3, -1, 2, 2, 6, 3, 7, 4, 8, 5 }, SymId::mensuralCclefPetrucciPosLowest,
StaffGroup::STANDARD },
{ ClefType::C2_R, 2, 41, { 3, 6, 2, 5, 1, 4, 0, 0, 4, 1, 5, 2, 6, 3 }, SymId::mensuralCclefPetrucciPosLow,
StaffGroup::STANDARD },
{ ClefType::C3_R, 3, 39, { 1, 4, 0, 3, 6, 2, 5, 5, 2, 6, 3, 7, 4, 8 }, SymId::mensuralCclefPetrucciPosMiddle,
StaffGroup::STANDARD },
{ ClefType::C4_R, 4, 37, { 6, 2, 5, 1, 4, 0, 3, 3, 0, 4, 1, 5, 2, 6 }, SymId::mensuralCclefPetrucciPosHigh,
StaffGroup::STANDARD },
{ ClefType::C5_R, 5, 35, { 4, 0, 3, -1, 2, 5, 1, 1, 5, 2, 6, 3, 7, 4 }, SymId::mensuralCclefPetrucciPosHighest,
StaffGroup::STANDARD },
{ ClefType::F_R, 4, 33, { 2, 5, 1, 4, 7, 3, 6, 6, 3, 7, 4, 8, 5, 9 }, SymId::mensuralFclefPetrucci,
StaffGroup::STANDARD },
};

//---------------------------------------------------------
Expand Down
7 changes: 7 additions & 0 deletions src/engraving/types/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -596,6 +596,13 @@ enum class ClefType : signed char {
// new clefs to be added between here
C4_8VB,
G8_VB_C,
G_R,
C1_R,
C2_R,
C3_R,
C4_R,
C5_R,
F_R,
// and here in oder to not break TAB clef style
MAX
};
Expand Down
7 changes: 7 additions & 0 deletions src/engraving/types/typesconv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1308,6 +1308,13 @@ static const std::vector<Item<ClefType> > CLEF_TYPES = {

{ ClefType::C4_8VB, "C4_8VB", muse::TranslatableString("engraving/cleftype", "Tenor clef 8va bassa") },
{ ClefType::G8_VB_C, "G8vbc", muse::TranslatableString("engraving/cleftype", "G clef ottava bassa with C clef") },
{ ClefType::G_R, "G_R", muse::TranslatableString("engraving/cleftype", "Treble clef (Renaissance)") },
{ ClefType::C1_R, "C1_R", muse::TranslatableString("engraving/cleftype", "Soprano clef (Renaissance)") },
{ ClefType::C2_R, "C2_R", muse::TranslatableString("engraving/cleftype", "Mezzo-soprano clef (Renaissance)") },
{ ClefType::C3_R, "C3_R", muse::TranslatableString("engraving/cleftype", "Alto clef (Renaissance)") },
{ ClefType::C4_R, "C4_R", muse::TranslatableString("engraving/cleftype", "Tenor clef (Renaissance)") },
{ ClefType::C5_R, "C5_R", muse::TranslatableString("engraving/cleftype", "Baritone clef (Renaissance)") },
{ ClefType::F_R, "F_R", muse::TranslatableString("engraving/cleftype", "Bass clef (Renaissance)") },
};

const muse::TranslatableString& TConv::userName(ClefType v)
Expand Down
59 changes: 54 additions & 5 deletions src/importexport/mei/internal/meiconverter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -797,6 +797,48 @@ engraving::ClefType Convert::clefFromMEI(const libmei::Clef& meiClef, bool& warn
default:
break;
}
} else if (meiClef.GetGlyphName() == "mensuralGclefPetrucci") {
switch (meiClef.GetLine()) {
case 2: return engraving::ClefType::G_R;
default:
break;
}
} else if (meiClef.GetGlyphName() == "mensuralCclefPetrucciPosLowest") {
switch (meiClef.GetLine()) {
case 1: return engraving::ClefType::C1_R;
default:
break;
}
} else if (meiClef.GetGlyphName() == "mensuralCclefPetrucciPosLow") {
switch (meiClef.GetLine()) {
case 2: return engraving::ClefType::C2_R;
default:
break;
}
} else if (meiClef.GetGlyphName() == "mensuralCclefPetrucciPosMiddle") {
switch (meiClef.GetLine()) {
case 3: return engraving::ClefType::C3_R;
default:
break;
}
} else if (meiClef.GetGlyphName() == "mensuralCclefPetrucciPosHigh") {
switch (meiClef.GetLine()) {
case 4: return engraving::ClefType::C4_R;
default:
break;
}
} else if (meiClef.GetGlyphName() == "mensuralCclefPetrucciPosHigest") {
switch (meiClef.GetLine()) {
case 5: return engraving::ClefType::C5_R;
default:
break;
}
} else if (meiClef.GetGlyphName() == "mensuralFclefPetrucci") {
switch (meiClef.GetLine()) {
case 4: return engraving::ClefType::F_R;
default:
break;
}
} else {
LOGD() << "Unsupported [email protected]";
// try to find a proper replacement from other attributes
Expand Down Expand Up @@ -910,16 +952,23 @@ libmei::Clef Convert::clefToMEI(engraving::ClefType clef)
break;
default:
AsciiStringView glyphName = engraving::SymNames::nameForSymId(engraving::ClefInfo::symId(clef));
meiClef.SetGlyphName(glyphName.ascii());
const char* glyphNameAscii = glyphName.ascii();
meiClef.SetGlyphName(glyphNameAscii);
meiClef.SetGlyphAuth(SMUFL_AUTH);
switch (glyphName.at(0).unicode()) {
case 'c':
char16_t clefType = glyphName.at(0).unicode();
if (!strncmp(glyphNameAscii, "mensural", 8)) { // "mensural[CGF]clefPetrucciPos..." and "mensural[CGF]clef"
clefType = tolower(glyphName.at(8).unicode());
} else if (!strncmp(glyphNameAscii, "chant", 5)) { // "chant[CF]clef"
clefType = tolower(glyphName.at(5).unicode());
}
switch (clefType) {
case u'c':
meiClef.SetShape(libmei::CLEFSHAPE_C);
break;
case 'f':
case u'f':
meiClef.SetShape(libmei::CLEFSHAPE_F);
break;
case 'g':
case u'g':
meiClef.SetShape(libmei::CLEFSHAPE_G);
break;
default:
Expand Down
7 changes: 7 additions & 0 deletions src/importexport/musicxml/internal/export/exportmusicxml.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2639,6 +2639,13 @@ static const std::vector<MusicXmlClefInfo> CLEF_INFOS = {

{ ClefType::C4_8VB, "C", -1 },
{ ClefType::G8_VB_C, "G", -1 },
{ ClefType::G_R, "G", -1 },
{ ClefType::C1_R, "C", -1 },
{ ClefType::C2_R, "C", -1 },
{ ClefType::C3_R, "C", -1 },
{ ClefType::C4_R, "C", -1 },
{ ClefType::C5_R, "C", -1 },
{ ClefType::F_R, "F", -1 },
};

static const MusicXmlClefInfo findClefInfoByType(const ClefType& v)
Expand Down
4 changes: 2 additions & 2 deletions src/palette/internal/palettecreator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1074,8 +1074,8 @@ PalettePtr PaletteCreator::newClefsPalette(bool defaultPalette)
ClefType::C1_F20C, ClefType::C3_F20C, ClefType::C4_F20C,
ClefType::F, ClefType::F_8VA, ClefType::F_15MA,
ClefType::F8_VB, ClefType::F15_MB, ClefType::F_B, ClefType::F_C, ClefType::F_F18C, ClefType::F_19C,
ClefType::PERC,
ClefType::PERC2, ClefType::TAB, ClefType::TAB4, ClefType::TAB_SERIF, ClefType::TAB4_SERIF
ClefType::G_R, ClefType::C1_R, ClefType::C2_R, ClefType::C3_R, ClefType::C4_R, ClefType::C5_R, ClefType::F_R,
ClefType::PERC, ClefType::PERC2, ClefType::TAB, ClefType::TAB4, ClefType::TAB_SERIF, ClefType::TAB4_SERIF
};

for (ClefType clefType : defaultPalette ? clefsDefault : clefsMaster) {
Expand Down
Loading