diff --git a/libmei/dist/attclasses.h b/libmei/dist/attclasses.h index 114d32e45e..ffe525c300 100644 --- a/libmei/dist/attclasses.h +++ b/libmei/dist/attclasses.h @@ -141,6 +141,7 @@ enum AttClassId { ATT_CURVATURE, ATT_CUSTOSLOG, ATT_DATAPOINTING, + ATT_DATASELECTING, ATT_DATABLE, ATT_DISTANCES, ATT_DOTLOG, @@ -242,6 +243,7 @@ enum AttClassId { ATT_TIMESTAMP2LOG, ATT_TRANSPOSITION, ATT_TUNING, + ATT_TUNINGLOG, ATT_TUPLETPRESENT, ATT_TYPED, ATT_TYPOGRAPHY, diff --git a/libmei/dist/attconverter.cpp b/libmei/dist/attconverter.cpp index 513853fcca..4ff7e95d45 100644 --- a/libmei/dist/attconverter.cpp +++ b/libmei/dist/attconverter.cpp @@ -1739,6 +1739,31 @@ data_GRACE AttConverterBase::StrToGrace(const std::string &value, bool logWarnin return GRACE_NONE; } +std::string AttConverterBase::HarppedalpositionToStr(data_HARPPEDALPOSITION data) const +{ + std::string value; + switch (data) { + case HARPPEDALPOSITION_f: value = "f"; break; + case HARPPEDALPOSITION_n: value = "n"; break; + case HARPPEDALPOSITION_s: value = "s"; break; + default: + LogWarning("Unknown value '%d' for data.HARPPEDALPOSITION", data); + value = ""; + break; + } + return value; +} + +data_HARPPEDALPOSITION AttConverterBase::StrToHarppedalposition(const std::string &value, bool logWarning) const +{ + if (value == "f") return HARPPEDALPOSITION_f; + if (value == "n") return HARPPEDALPOSITION_n; + if (value == "s") return HARPPEDALPOSITION_s; + if (logWarning && !value.empty()) + LogWarning("Unsupported value '%s' for data.HARPPEDALPOSITION", value.c_str()); + return HARPPEDALPOSITION_NONE; +} + std::string AttConverterBase::HeadshapeToStr(data_HEADSHAPE data) const { std::string value; @@ -2856,12 +2881,12 @@ std::string AttConverterBase::NotationtypeToStr(data_NOTATIONTYPE data) const case NOTATIONTYPE_mensural: value = "mensural"; break; case NOTATIONTYPE_mensural_black: value = "mensural.black"; break; case NOTATIONTYPE_mensural_white: value = "mensural.white"; break; + case NOTATIONTYPE_neume: value = "neume"; break; + case NOTATIONTYPE_tab: value = "tab"; break; + case NOTATIONTYPE_tab_guitar: value = "tab.guitar"; break; case NOTATIONTYPE_tab_lute_french: value = "tab.lute.french"; break; case NOTATIONTYPE_tab_lute_italian: value = "tab.lute.italian"; break; case NOTATIONTYPE_tab_lute_german: value = "tab.lute.german"; break; - case NOTATIONTYPE_tab_guitar: value = "tab.guitar"; break; - case NOTATIONTYPE_neume: value = "neume"; break; - case NOTATIONTYPE_tab: value = "tab"; break; default: LogWarning("Unknown value '%d' for data.NOTATIONTYPE", data); value = ""; @@ -2876,12 +2901,12 @@ data_NOTATIONTYPE AttConverterBase::StrToNotationtype(const std::string &value, if (value == "mensural") return NOTATIONTYPE_mensural; if (value == "mensural.black") return NOTATIONTYPE_mensural_black; if (value == "mensural.white") return NOTATIONTYPE_mensural_white; + if (value == "neume") return NOTATIONTYPE_neume; + if (value == "tab") return NOTATIONTYPE_tab; + if (value == "tab.guitar") return NOTATIONTYPE_tab_guitar; if (value == "tab.lute.french") return NOTATIONTYPE_tab_lute_french; if (value == "tab.lute.italian") return NOTATIONTYPE_tab_lute_italian; if (value == "tab.lute.german") return NOTATIONTYPE_tab_lute_german; - if (value == "tab.guitar") return NOTATIONTYPE_tab_guitar; - if (value == "neume") return NOTATIONTYPE_neume; - if (value == "tab") return NOTATIONTYPE_tab; if (logWarning && !value.empty()) LogWarning("Unsupported value '%s' for data.NOTATIONTYPE", value.c_str()); return NOTATIONTYPE_NONE; @@ -4448,181 +4473,6 @@ harmVis_RENDGRID AttConverterBase::StrToHarmVisRendgrid(const std::string &value return harmVis_RENDGRID_NONE; } -std::string AttConverterBase::HarpPedalLogAToStr(harpPedalLog_A data) const -{ - std::string value; - switch (data) { - case harpPedalLog_A_f: value = "f"; break; - case harpPedalLog_A_n: value = "n"; break; - case harpPedalLog_A_s: value = "s"; break; - default: - LogWarning("Unknown value '%d' for att.harpPedal.log@a", data); - value = ""; - break; - } - return value; -} - -harpPedalLog_A AttConverterBase::StrToHarpPedalLogA(const std::string &value, bool logWarning) const -{ - if (value == "f") return harpPedalLog_A_f; - if (value == "n") return harpPedalLog_A_n; - if (value == "s") return harpPedalLog_A_s; - if (logWarning && !value.empty()) - LogWarning("Unsupported value '%s' for att.harpPedal.log@a", value.c_str()); - return harpPedalLog_A_NONE; -} - -std::string AttConverterBase::HarpPedalLogBToStr(harpPedalLog_B data) const -{ - std::string value; - switch (data) { - case harpPedalLog_B_f: value = "f"; break; - case harpPedalLog_B_n: value = "n"; break; - case harpPedalLog_B_s: value = "s"; break; - default: - LogWarning("Unknown value '%d' for att.harpPedal.log@b", data); - value = ""; - break; - } - return value; -} - -harpPedalLog_B AttConverterBase::StrToHarpPedalLogB(const std::string &value, bool logWarning) const -{ - if (value == "f") return harpPedalLog_B_f; - if (value == "n") return harpPedalLog_B_n; - if (value == "s") return harpPedalLog_B_s; - if (logWarning && !value.empty()) - LogWarning("Unsupported value '%s' for att.harpPedal.log@b", value.c_str()); - return harpPedalLog_B_NONE; -} - -std::string AttConverterBase::HarpPedalLogCToStr(harpPedalLog_C data) const -{ - std::string value; - switch (data) { - case harpPedalLog_C_f: value = "f"; break; - case harpPedalLog_C_n: value = "n"; break; - case harpPedalLog_C_s: value = "s"; break; - default: - LogWarning("Unknown value '%d' for att.harpPedal.log@c", data); - value = ""; - break; - } - return value; -} - -harpPedalLog_C AttConverterBase::StrToHarpPedalLogC(const std::string &value, bool logWarning) const -{ - if (value == "f") return harpPedalLog_C_f; - if (value == "n") return harpPedalLog_C_n; - if (value == "s") return harpPedalLog_C_s; - if (logWarning && !value.empty()) - LogWarning("Unsupported value '%s' for att.harpPedal.log@c", value.c_str()); - return harpPedalLog_C_NONE; -} - -std::string AttConverterBase::HarpPedalLogDToStr(harpPedalLog_D data) const -{ - std::string value; - switch (data) { - case harpPedalLog_D_f: value = "f"; break; - case harpPedalLog_D_n: value = "n"; break; - case harpPedalLog_D_s: value = "s"; break; - default: - LogWarning("Unknown value '%d' for att.harpPedal.log@d", data); - value = ""; - break; - } - return value; -} - -harpPedalLog_D AttConverterBase::StrToHarpPedalLogD(const std::string &value, bool logWarning) const -{ - if (value == "f") return harpPedalLog_D_f; - if (value == "n") return harpPedalLog_D_n; - if (value == "s") return harpPedalLog_D_s; - if (logWarning && !value.empty()) - LogWarning("Unsupported value '%s' for att.harpPedal.log@d", value.c_str()); - return harpPedalLog_D_NONE; -} - -std::string AttConverterBase::HarpPedalLogEToStr(harpPedalLog_E data) const -{ - std::string value; - switch (data) { - case harpPedalLog_E_f: value = "f"; break; - case harpPedalLog_E_n: value = "n"; break; - case harpPedalLog_E_s: value = "s"; break; - default: - LogWarning("Unknown value '%d' for att.harpPedal.log@e", data); - value = ""; - break; - } - return value; -} - -harpPedalLog_E AttConverterBase::StrToHarpPedalLogE(const std::string &value, bool logWarning) const -{ - if (value == "f") return harpPedalLog_E_f; - if (value == "n") return harpPedalLog_E_n; - if (value == "s") return harpPedalLog_E_s; - if (logWarning && !value.empty()) - LogWarning("Unsupported value '%s' for att.harpPedal.log@e", value.c_str()); - return harpPedalLog_E_NONE; -} - -std::string AttConverterBase::HarpPedalLogFToStr(harpPedalLog_F data) const -{ - std::string value; - switch (data) { - case harpPedalLog_F_f: value = "f"; break; - case harpPedalLog_F_n: value = "n"; break; - case harpPedalLog_F_s: value = "s"; break; - default: - LogWarning("Unknown value '%d' for att.harpPedal.log@f", data); - value = ""; - break; - } - return value; -} - -harpPedalLog_F AttConverterBase::StrToHarpPedalLogF(const std::string &value, bool logWarning) const -{ - if (value == "f") return harpPedalLog_F_f; - if (value == "n") return harpPedalLog_F_n; - if (value == "s") return harpPedalLog_F_s; - if (logWarning && !value.empty()) - LogWarning("Unsupported value '%s' for att.harpPedal.log@f", value.c_str()); - return harpPedalLog_F_NONE; -} - -std::string AttConverterBase::HarpPedalLogGToStr(harpPedalLog_G data) const -{ - std::string value; - switch (data) { - case harpPedalLog_G_f: value = "f"; break; - case harpPedalLog_G_n: value = "n"; break; - case harpPedalLog_G_s: value = "s"; break; - default: - LogWarning("Unknown value '%d' for att.harpPedal.log@g", data); - value = ""; - break; - } - return value; -} - -harpPedalLog_G AttConverterBase::StrToHarpPedalLogG(const std::string &value, bool logWarning) const -{ - if (value == "f") return harpPedalLog_G_f; - if (value == "n") return harpPedalLog_G_n; - if (value == "s") return harpPedalLog_G_s; - if (logWarning && !value.empty()) - LogWarning("Unsupported value '%s' for att.harpPedal.log@g", value.c_str()); - return harpPedalLog_G_NONE; -} - std::string AttConverterBase::LineLogFuncToStr(lineLog_FUNC data) const { std::string value; diff --git a/libmei/dist/attconverter.h b/libmei/dist/attconverter.h index 5d158e7556..fd7931e80b 100644 --- a/libmei/dist/attconverter.h +++ b/libmei/dist/attconverter.h @@ -150,6 +150,9 @@ class AttConverterBase { std::string GraceToStr(data_GRACE data) const; data_GRACE StrToGrace(const std::string &value, bool logWarning = true) const; + std::string HarppedalpositionToStr(data_HARPPEDALPOSITION data) const; + data_HARPPEDALPOSITION StrToHarppedalposition(const std::string &value, bool logWarning = true) const; + std::string HeadshapeToStr(data_HEADSHAPE data) const; data_HEADSHAPE StrToHeadshape(const std::string &value, bool logWarning = true) const; @@ -363,27 +366,6 @@ class AttConverterBase { std::string HarmVisRendgridToStr(harmVis_RENDGRID data) const; harmVis_RENDGRID StrToHarmVisRendgrid(const std::string &value, bool logWarning = true) const; - std::string HarpPedalLogAToStr(harpPedalLog_A data) const; - harpPedalLog_A StrToHarpPedalLogA(const std::string &value, bool logWarning = true) const; - - std::string HarpPedalLogBToStr(harpPedalLog_B data) const; - harpPedalLog_B StrToHarpPedalLogB(const std::string &value, bool logWarning = true) const; - - std::string HarpPedalLogCToStr(harpPedalLog_C data) const; - harpPedalLog_C StrToHarpPedalLogC(const std::string &value, bool logWarning = true) const; - - std::string HarpPedalLogDToStr(harpPedalLog_D data) const; - harpPedalLog_D StrToHarpPedalLogD(const std::string &value, bool logWarning = true) const; - - std::string HarpPedalLogEToStr(harpPedalLog_E data) const; - harpPedalLog_E StrToHarpPedalLogE(const std::string &value, bool logWarning = true) const; - - std::string HarpPedalLogFToStr(harpPedalLog_F data) const; - harpPedalLog_F StrToHarpPedalLogF(const std::string &value, bool logWarning = true) const; - - std::string HarpPedalLogGToStr(harpPedalLog_G data) const; - harpPedalLog_G StrToHarpPedalLogG(const std::string &value, bool logWarning = true) const; - std::string LineLogFuncToStr(lineLog_FUNC data) const; lineLog_FUNC StrToLineLogFunc(const std::string &value, bool logWarning = true) const; diff --git a/libmei/dist/attmodule.cpp b/libmei/dist/attmodule.cpp index b4dd982efb..fde8630a54 100644 --- a/libmei/dist/attmodule.cpp +++ b/libmei/dist/attmodule.cpp @@ -442,31 +442,31 @@ bool AttModule::SetCmn(Object *element, const std::string &attrType, const std:: AttHarpPedalLog *att = dynamic_cast(element); assert(att); if (attrType == "c") { - att->SetC(att->StrToHarpPedalLogC(attrValue)); + att->SetC(att->StrToHarppedalposition(attrValue)); return true; } if (attrType == "d") { - att->SetD(att->StrToHarpPedalLogD(attrValue)); + att->SetD(att->StrToHarppedalposition(attrValue)); return true; } if (attrType == "e") { - att->SetE(att->StrToHarpPedalLogE(attrValue)); + att->SetE(att->StrToHarppedalposition(attrValue)); return true; } if (attrType == "f") { - att->SetF(att->StrToHarpPedalLogF(attrValue)); + att->SetF(att->StrToHarppedalposition(attrValue)); return true; } if (attrType == "g") { - att->SetG(att->StrToHarpPedalLogG(attrValue)); + att->SetG(att->StrToHarppedalposition(attrValue)); return true; } if (attrType == "a") { - att->SetA(att->StrToHarpPedalLogA(attrValue)); + att->SetA(att->StrToHarppedalposition(attrValue)); return true; } if (attrType == "b") { - att->SetB(att->StrToHarpPedalLogB(attrValue)); + att->SetB(att->StrToHarppedalposition(attrValue)); return true; } } @@ -728,25 +728,25 @@ void AttModule::GetCmn(const Object *element, ArrayOfStrAttr *attributes) const AttHarpPedalLog *att = dynamic_cast(element); assert(att); if (att->HasC()) { - attributes->push_back({ "c", att->HarpPedalLogCToStr(att->GetC()) }); + attributes->push_back({ "c", att->HarppedalpositionToStr(att->GetC()) }); } if (att->HasD()) { - attributes->push_back({ "d", att->HarpPedalLogDToStr(att->GetD()) }); + attributes->push_back({ "d", att->HarppedalpositionToStr(att->GetD()) }); } if (att->HasE()) { - attributes->push_back({ "e", att->HarpPedalLogEToStr(att->GetE()) }); + attributes->push_back({ "e", att->HarppedalpositionToStr(att->GetE()) }); } if (att->HasF()) { - attributes->push_back({ "f", att->HarpPedalLogFToStr(att->GetF()) }); + attributes->push_back({ "f", att->HarppedalpositionToStr(att->GetF()) }); } if (att->HasG()) { - attributes->push_back({ "g", att->HarpPedalLogGToStr(att->GetG()) }); + attributes->push_back({ "g", att->HarppedalpositionToStr(att->GetG()) }); } if (att->HasA()) { - attributes->push_back({ "a", att->HarpPedalLogAToStr(att->GetA()) }); + attributes->push_back({ "a", att->HarppedalpositionToStr(att->GetA()) }); } if (att->HasB()) { - attributes->push_back({ "b", att->HarpPedalLogBToStr(att->GetB()) }); + attributes->push_back({ "b", att->HarppedalpositionToStr(att->GetB()) }); } } if (element->HasAttClass(ATT_LVPRESENT)) { @@ -3308,6 +3308,14 @@ bool AttModule::SetShared(Object *element, const std::string &attrType, const st return true; } } + if (element->HasAttClass(ATT_DATASELECTING)) { + AttDataSelecting *att = dynamic_cast(element); + assert(att); + if (attrType == "select") { + att->SetSelect(att->StrToStr(attrValue)); + return true; + } + } if (element->HasAttClass(ATT_DATABLE)) { AttDatable *att = dynamic_cast(element); assert(att); @@ -4488,6 +4496,14 @@ bool AttModule::SetShared(Object *element, const std::string &attrType, const st return true; } } + if (element->HasAttClass(ATT_TUNINGLOG)) { + AttTuningLog *att = dynamic_cast(element); + assert(att); + if (attrType == "tuning.standard") { + att->SetTuningStandard(att->StrToCoursetuning(attrValue)); + return true; + } + } if (element->HasAttClass(ATT_TUPLETPRESENT)) { AttTupletPresent *att = dynamic_cast(element); assert(att); @@ -4903,6 +4919,13 @@ void AttModule::GetShared(const Object *element, ArrayOfStrAttr *attributes) attributes->push_back({ "data", att->StrToStr(att->GetData()) }); } } + if (element->HasAttClass(ATT_DATASELECTING)) { + const AttDataSelecting *att = dynamic_cast(element); + assert(att); + if (att->HasSelect()) { + attributes->push_back({ "select", att->StrToStr(att->GetSelect()) }); + } + } if (element->HasAttClass(ATT_DATABLE)) { const AttDatable *att = dynamic_cast(element); assert(att); @@ -5889,6 +5912,13 @@ void AttModule::GetShared(const Object *element, ArrayOfStrAttr *attributes) attributes->push_back({ "tune.temper", att->TemperamentToStr(att->GetTuneTemper()) }); } } + if (element->HasAttClass(ATT_TUNINGLOG)) { + const AttTuningLog *att = dynamic_cast(element); + assert(att); + if (att->HasTuningStandard()) { + attributes->push_back({ "tuning.standard", att->CoursetuningToStr(att->GetTuningStandard()) }); + } + } if (element->HasAttClass(ATT_TUPLETPRESENT)) { const AttTupletPresent *att = dynamic_cast(element); assert(att); @@ -6252,6 +6282,13 @@ void AttModule::CopyShared(const Object *element, Object *target) assert(attTarget); attTarget->SetData(att->GetData()); } + if (element->HasAttClass(ATT_DATASELECTING)) { + const AttDataSelecting *att = dynamic_cast(element); + assert(att); + AttDataSelecting *attTarget = dynamic_cast(target); + assert(attTarget); + attTarget->SetSelect(att->GetSelect()); + } if (element->HasAttClass(ATT_DATABLE)) { const AttDatable *att = dynamic_cast(element); assert(att); @@ -7052,6 +7089,13 @@ void AttModule::CopyShared(const Object *element, Object *target) attTarget->SetTunePname(att->GetTunePname()); attTarget->SetTuneTemper(att->GetTuneTemper()); } + if (element->HasAttClass(ATT_TUNINGLOG)) { + const AttTuningLog *att = dynamic_cast(element); + assert(att); + AttTuningLog *attTarget = dynamic_cast(target); + assert(attTarget); + attTarget->SetTuningStandard(att->GetTuningStandard()); + } if (element->HasAttClass(ATT_TUPLETPRESENT)) { const AttTupletPresent *att = dynamic_cast(element); assert(att); diff --git a/libmei/dist/atts_cmn.cpp b/libmei/dist/atts_cmn.cpp index 003e64fa6f..e8f81e8c18 100644 --- a/libmei/dist/atts_cmn.cpp +++ b/libmei/dist/atts_cmn.cpp @@ -683,50 +683,50 @@ AttHarpPedalLog::AttHarpPedalLog() : Att() void AttHarpPedalLog::ResetHarpPedalLog() { - m_c = harpPedalLog_C_NONE; - m_d = harpPedalLog_D_NONE; - m_e = harpPedalLog_E_NONE; - m_f = harpPedalLog_F_NONE; - m_g = harpPedalLog_G_NONE; - m_a = harpPedalLog_A_NONE; - m_b = harpPedalLog_B_NONE; + m_c = HARPPEDALPOSITION_NONE; + m_d = HARPPEDALPOSITION_NONE; + m_e = HARPPEDALPOSITION_NONE; + m_f = HARPPEDALPOSITION_NONE; + m_g = HARPPEDALPOSITION_NONE; + m_a = HARPPEDALPOSITION_NONE; + m_b = HARPPEDALPOSITION_NONE; } bool AttHarpPedalLog::ReadHarpPedalLog(pugi::xml_node element, bool removeAttr) { bool hasAttribute = false; if (element.attribute("c")) { - this->SetC(StrToHarpPedalLogC(element.attribute("c").value())); + this->SetC(StrToHarppedalposition(element.attribute("c").value())); if (removeAttr) element.remove_attribute("c"); hasAttribute = true; } if (element.attribute("d")) { - this->SetD(StrToHarpPedalLogD(element.attribute("d").value())); + this->SetD(StrToHarppedalposition(element.attribute("d").value())); if (removeAttr) element.remove_attribute("d"); hasAttribute = true; } if (element.attribute("e")) { - this->SetE(StrToHarpPedalLogE(element.attribute("e").value())); + this->SetE(StrToHarppedalposition(element.attribute("e").value())); if (removeAttr) element.remove_attribute("e"); hasAttribute = true; } if (element.attribute("f")) { - this->SetF(StrToHarpPedalLogF(element.attribute("f").value())); + this->SetF(StrToHarppedalposition(element.attribute("f").value())); if (removeAttr) element.remove_attribute("f"); hasAttribute = true; } if (element.attribute("g")) { - this->SetG(StrToHarpPedalLogG(element.attribute("g").value())); + this->SetG(StrToHarppedalposition(element.attribute("g").value())); if (removeAttr) element.remove_attribute("g"); hasAttribute = true; } if (element.attribute("a")) { - this->SetA(StrToHarpPedalLogA(element.attribute("a").value())); + this->SetA(StrToHarppedalposition(element.attribute("a").value())); if (removeAttr) element.remove_attribute("a"); hasAttribute = true; } if (element.attribute("b")) { - this->SetB(StrToHarpPedalLogB(element.attribute("b").value())); + this->SetB(StrToHarppedalposition(element.attribute("b").value())); if (removeAttr) element.remove_attribute("b"); hasAttribute = true; } @@ -737,31 +737,31 @@ bool AttHarpPedalLog::WriteHarpPedalLog(pugi::xml_node element) { bool wroteAttribute = false; if (this->HasC()) { - element.append_attribute("c") = HarpPedalLogCToStr(this->GetC()).c_str(); + element.append_attribute("c") = HarppedalpositionToStr(this->GetC()).c_str(); wroteAttribute = true; } if (this->HasD()) { - element.append_attribute("d") = HarpPedalLogDToStr(this->GetD()).c_str(); + element.append_attribute("d") = HarppedalpositionToStr(this->GetD()).c_str(); wroteAttribute = true; } if (this->HasE()) { - element.append_attribute("e") = HarpPedalLogEToStr(this->GetE()).c_str(); + element.append_attribute("e") = HarppedalpositionToStr(this->GetE()).c_str(); wroteAttribute = true; } if (this->HasF()) { - element.append_attribute("f") = HarpPedalLogFToStr(this->GetF()).c_str(); + element.append_attribute("f") = HarppedalpositionToStr(this->GetF()).c_str(); wroteAttribute = true; } if (this->HasG()) { - element.append_attribute("g") = HarpPedalLogGToStr(this->GetG()).c_str(); + element.append_attribute("g") = HarppedalpositionToStr(this->GetG()).c_str(); wroteAttribute = true; } if (this->HasA()) { - element.append_attribute("a") = HarpPedalLogAToStr(this->GetA()).c_str(); + element.append_attribute("a") = HarppedalpositionToStr(this->GetA()).c_str(); wroteAttribute = true; } if (this->HasB()) { - element.append_attribute("b") = HarpPedalLogBToStr(this->GetB()).c_str(); + element.append_attribute("b") = HarppedalpositionToStr(this->GetB()).c_str(); wroteAttribute = true; } return wroteAttribute; @@ -769,37 +769,37 @@ bool AttHarpPedalLog::WriteHarpPedalLog(pugi::xml_node element) bool AttHarpPedalLog::HasC() const { - return (m_c != harpPedalLog_C_NONE); + return (m_c != HARPPEDALPOSITION_NONE); } bool AttHarpPedalLog::HasD() const { - return (m_d != harpPedalLog_D_NONE); + return (m_d != HARPPEDALPOSITION_NONE); } bool AttHarpPedalLog::HasE() const { - return (m_e != harpPedalLog_E_NONE); + return (m_e != HARPPEDALPOSITION_NONE); } bool AttHarpPedalLog::HasF() const { - return (m_f != harpPedalLog_F_NONE); + return (m_f != HARPPEDALPOSITION_NONE); } bool AttHarpPedalLog::HasG() const { - return (m_g != harpPedalLog_G_NONE); + return (m_g != HARPPEDALPOSITION_NONE); } bool AttHarpPedalLog::HasA() const { - return (m_a != harpPedalLog_A_NONE); + return (m_a != HARPPEDALPOSITION_NONE); } bool AttHarpPedalLog::HasB() const { - return (m_b != harpPedalLog_B_NONE); + return (m_b != HARPPEDALPOSITION_NONE); } //---------------------------------------------------------------------------- diff --git a/libmei/dist/atts_cmn.h b/libmei/dist/atts_cmn.h index 6399e3a03e..90ad6705e9 100644 --- a/libmei/dist/atts_cmn.h +++ b/libmei/dist/atts_cmn.h @@ -810,50 +810,50 @@ class AttHarpPedalLog : public Att { * to the default value) **/ ///@{ - void SetC(harpPedalLog_C c_) { m_c = c_; } - harpPedalLog_C GetC() const { return m_c; } + void SetC(data_HARPPEDALPOSITION c_) { m_c = c_; } + data_HARPPEDALPOSITION GetC() const { return m_c; } bool HasC() const; // - void SetD(harpPedalLog_D d_) { m_d = d_; } - harpPedalLog_D GetD() const { return m_d; } + void SetD(data_HARPPEDALPOSITION d_) { m_d = d_; } + data_HARPPEDALPOSITION GetD() const { return m_d; } bool HasD() const; // - void SetE(harpPedalLog_E e_) { m_e = e_; } - harpPedalLog_E GetE() const { return m_e; } + void SetE(data_HARPPEDALPOSITION e_) { m_e = e_; } + data_HARPPEDALPOSITION GetE() const { return m_e; } bool HasE() const; // - void SetF(harpPedalLog_F f_) { m_f = f_; } - harpPedalLog_F GetF() const { return m_f; } + void SetF(data_HARPPEDALPOSITION f_) { m_f = f_; } + data_HARPPEDALPOSITION GetF() const { return m_f; } bool HasF() const; // - void SetG(harpPedalLog_G g_) { m_g = g_; } - harpPedalLog_G GetG() const { return m_g; } + void SetG(data_HARPPEDALPOSITION g_) { m_g = g_; } + data_HARPPEDALPOSITION GetG() const { return m_g; } bool HasG() const; // - void SetA(harpPedalLog_A a_) { m_a = a_; } - harpPedalLog_A GetA() const { return m_a; } + void SetA(data_HARPPEDALPOSITION a_) { m_a = a_; } + data_HARPPEDALPOSITION GetA() const { return m_a; } bool HasA() const; // - void SetB(harpPedalLog_B b_) { m_b = b_; } - harpPedalLog_B GetB() const { return m_b; } + void SetB(data_HARPPEDALPOSITION b_) { m_b = b_; } + data_HARPPEDALPOSITION GetB() const { return m_b; } bool HasB() const; ///@} private: /** Indicates the pedal setting for the harp’s C strings. **/ - harpPedalLog_C m_c; + data_HARPPEDALPOSITION m_c; /** Indicates the pedal setting for the harp’s D strings. **/ - harpPedalLog_D m_d; + data_HARPPEDALPOSITION m_d; /** Indicates the pedal setting for the harp’s E strings. **/ - harpPedalLog_E m_e; + data_HARPPEDALPOSITION m_e; /** Indicates the pedal setting for the harp’s F strings. **/ - harpPedalLog_F m_f; + data_HARPPEDALPOSITION m_f; /** Indicates the pedal setting for the harp’s G strings. **/ - harpPedalLog_G m_g; + data_HARPPEDALPOSITION m_g; /** Indicates the pedal setting for the harp’s A strings. **/ - harpPedalLog_A m_a; + data_HARPPEDALPOSITION m_a; /** Indicates the pedal setting for the harp’s B strings. **/ - harpPedalLog_B m_b; + data_HARPPEDALPOSITION m_b; }; //---------------------------------------------------------------------------- diff --git a/libmei/dist/atts_frettab.h b/libmei/dist/atts_frettab.h index 8eb6e24929..369dd05db9 100644 --- a/libmei/dist/atts_frettab.h +++ b/libmei/dist/atts_frettab.h @@ -56,7 +56,7 @@ class AttCourseLog : public Att { ///@} private: - /** Indicates a tuning standard for the course. **/ + /** Describes the tuning standard used. **/ data_COURSETUNING m_tuningStandard; }; diff --git a/libmei/dist/atts_midi.h b/libmei/dist/atts_midi.h index 71708a8805..c7a6b8bcc3 100644 --- a/libmei/dist/atts_midi.h +++ b/libmei/dist/atts_midi.h @@ -197,8 +197,7 @@ class AttMidiInstrument : public Att { private: /** * Captures the General MIDI instrument number. - * Use an integer for a 0-based value. An integer preceded by "in" indicates a - * 1-based value. + * Use an integer for a 0-based value. **/ data_MIDIVALUE m_midiInstrnum; /** Provides a General MIDI label for the MIDI instrument. **/ diff --git a/libmei/dist/atts_shared.cpp b/libmei/dist/atts_shared.cpp index 3636cd2dfc..32521cac35 100644 --- a/libmei/dist/atts_shared.cpp +++ b/libmei/dist/atts_shared.cpp @@ -1307,6 +1307,46 @@ bool AttDataPointing::HasData() const return (m_data != ""); } +//---------------------------------------------------------------------------- +// AttDataSelecting +//---------------------------------------------------------------------------- + +AttDataSelecting::AttDataSelecting() : Att() +{ + ResetDataSelecting(); +} + +void AttDataSelecting::ResetDataSelecting() +{ + m_select = ""; +} + +bool AttDataSelecting::ReadDataSelecting(pugi::xml_node element, bool removeAttr) +{ + bool hasAttribute = false; + if (element.attribute("select")) { + this->SetSelect(StrToStr(element.attribute("select").value())); + if (removeAttr) element.remove_attribute("select"); + hasAttribute = true; + } + return hasAttribute; +} + +bool AttDataSelecting::WriteDataSelecting(pugi::xml_node element) +{ + bool wroteAttribute = false; + if (this->HasSelect()) { + element.append_attribute("select") = StrToStr(this->GetSelect()).c_str(); + wroteAttribute = true; + } + return wroteAttribute; +} + +bool AttDataSelecting::HasSelect() const +{ + return (m_select != ""); +} + //---------------------------------------------------------------------------- // AttDatable //---------------------------------------------------------------------------- @@ -6742,6 +6782,46 @@ bool AttTuning::HasTuneTemper() const return (m_tuneTemper != TEMPERAMENT_NONE); } +//---------------------------------------------------------------------------- +// AttTuningLog +//---------------------------------------------------------------------------- + +AttTuningLog::AttTuningLog() : Att() +{ + ResetTuningLog(); +} + +void AttTuningLog::ResetTuningLog() +{ + m_tuningStandard = COURSETUNING_NONE; +} + +bool AttTuningLog::ReadTuningLog(pugi::xml_node element, bool removeAttr) +{ + bool hasAttribute = false; + if (element.attribute("tuning.standard")) { + this->SetTuningStandard(StrToCoursetuning(element.attribute("tuning.standard").value())); + if (removeAttr) element.remove_attribute("tuning.standard"); + hasAttribute = true; + } + return hasAttribute; +} + +bool AttTuningLog::WriteTuningLog(pugi::xml_node element) +{ + bool wroteAttribute = false; + if (this->HasTuningStandard()) { + element.append_attribute("tuning.standard") = CoursetuningToStr(this->GetTuningStandard()).c_str(); + wroteAttribute = true; + } + return wroteAttribute; +} + +bool AttTuningLog::HasTuningStandard() const +{ + return (m_tuningStandard != COURSETUNING_NONE); +} + //---------------------------------------------------------------------------- // AttTupletPresent //---------------------------------------------------------------------------- diff --git a/libmei/dist/atts_shared.h b/libmei/dist/atts_shared.h index 69f913a1ed..9acbf08d9b 100644 --- a/libmei/dist/atts_shared.h +++ b/libmei/dist/atts_shared.h @@ -1231,7 +1231,7 @@ class AttCoordinated : public Att { private: /** Indicates the lower-right corner x coordinate. **/ int m_lrx; - /** Indicates the lower-left corner x coordinate. **/ + /** Indicates the lower-right corner y coordinate. **/ int m_lry; /** * Indicates the amount by which the contents of this element have been rotated @@ -1531,6 +1531,55 @@ class InstDataPointing : public AttDataPointing { virtual ~InstDataPointing() = default; }; +//---------------------------------------------------------------------------- +// AttDataSelecting +//---------------------------------------------------------------------------- + +class AttDataSelecting : public Att { +protected: + AttDataSelecting(); + ~AttDataSelecting() = default; + +public: + /** Reset the default values for the attribute class **/ + void ResetDataSelecting(); + + /** Read the values for the attribute class **/ + bool ReadDataSelecting(pugi::xml_node element, bool removeAttr = true); + + /** Write the values for the attribute class **/ + bool WriteDataSelecting(pugi::xml_node element); + + /** + * @name Setters, getters and presence checker for class members. + * The checker returns true if the attribute class is set (e.g., not equal + * to the default value) + **/ + ///@{ + void SetSelect(std::string select_) { m_select = select_; } + std::string GetSelect() const { return m_select; } + bool HasSelect() const; + ///@} + +private: + /** XPath used to select data to which an element or a property applies. **/ + std::string m_select; +}; + +//---------------------------------------------------------------------------- +// InstDataSelecting +//---------------------------------------------------------------------------- + +/** + * Instantiable version of AttDataSelecting + */ + +class InstDataSelecting : public AttDataSelecting { +public: + InstDataSelecting() = default; + virtual ~InstDataSelecting() = default; +}; + //---------------------------------------------------------------------------- // AttDatable //---------------------------------------------------------------------------- @@ -4681,7 +4730,7 @@ class AttOneLineStaff : public Att { private: /** * Determines the placement of notes on a 1-line staff. - * A value of 'true' places all notes on the line, while a value of 'false' places + * A value of true places all notes on the line, while a value of false places * stems-up notes above the line and stems-down notes below the line. **/ data_BOOLEAN m_ontheline; @@ -4734,7 +4783,7 @@ class AttOptimization : public Att { private: /** * Indicates whether staves without notes, rests, etc. - * should be displayed. When the value is 'true', empty staves are displayed. + * should be displayed. When the value is 'true', empty staves are not displayed. **/ data_BOOLEAN m_optimize; }; @@ -5211,7 +5260,7 @@ class AttPlacementOnStaff : public Att { private: /** * Indicates the placement of the item within the staff. - * A value of 'true' means on the staff, and 'false' off the staff. + * A value of true means on the staff, and false off the staff. **/ data_BOOLEAN m_onstaff; }; @@ -7372,6 +7421,55 @@ class InstTuning : public AttTuning { virtual ~InstTuning() = default; }; +//---------------------------------------------------------------------------- +// AttTuningLog +//---------------------------------------------------------------------------- + +class AttTuningLog : public Att { +protected: + AttTuningLog(); + ~AttTuningLog() = default; + +public: + /** Reset the default values for the attribute class **/ + void ResetTuningLog(); + + /** Read the values for the attribute class **/ + bool ReadTuningLog(pugi::xml_node element, bool removeAttr = true); + + /** Write the values for the attribute class **/ + bool WriteTuningLog(pugi::xml_node element); + + /** + * @name Setters, getters and presence checker for class members. + * The checker returns true if the attribute class is set (e.g., not equal + * to the default value) + **/ + ///@{ + void SetTuningStandard(data_COURSETUNING tuningStandard_) { m_tuningStandard = tuningStandard_; } + data_COURSETUNING GetTuningStandard() const { return m_tuningStandard; } + bool HasTuningStandard() const; + ///@} + +private: + /** Describes the tuning standard used. **/ + data_COURSETUNING m_tuningStandard; +}; + +//---------------------------------------------------------------------------- +// InstTuningLog +//---------------------------------------------------------------------------- + +/** + * Instantiable version of AttTuningLog + */ + +class InstTuningLog : public AttTuningLog { +public: + InstTuningLog() = default; + virtual ~InstTuningLog() = default; +}; + //---------------------------------------------------------------------------- // AttTupletPresent //---------------------------------------------------------------------------- diff --git a/libmei/dist/atttypes.h b/libmei/dist/atttypes.h index 89c73a8369..b96d41ef3c 100644 --- a/libmei/dist/atttypes.h +++ b/libmei/dist/atttypes.h @@ -818,6 +818,17 @@ enum data_GRACE : int8_t { GRACE_MAX }; +/** + * MEI data.HARPPEDALPOSITION + */ +enum data_HARPPEDALPOSITION : int8_t { + HARPPEDALPOSITION_NONE = 0, + HARPPEDALPOSITION_f, + HARPPEDALPOSITION_n, + HARPPEDALPOSITION_s, + HARPPEDALPOSITION_MAX +}; + /** * MEI data.HEADSHAPE */ @@ -1350,12 +1361,12 @@ enum data_NOTATIONTYPE : int8_t { NOTATIONTYPE_mensural, NOTATIONTYPE_mensural_black, NOTATIONTYPE_mensural_white, + NOTATIONTYPE_neume, + NOTATIONTYPE_tab, + NOTATIONTYPE_tab_guitar, NOTATIONTYPE_tab_lute_french, NOTATIONTYPE_tab_lute_italian, NOTATIONTYPE_tab_lute_german, - NOTATIONTYPE_tab_guitar, - NOTATIONTYPE_neume, - NOTATIONTYPE_tab, NOTATIONTYPE_MAX }; @@ -2066,83 +2077,6 @@ enum harmVis_RENDGRID : int8_t { harmVis_RENDGRID_MAX }; -/** - * MEI att.harpPedal.log\@a - */ -enum harpPedalLog_A : int8_t { - harpPedalLog_A_NONE = 0, - harpPedalLog_A_f, - harpPedalLog_A_n, - harpPedalLog_A_s, - harpPedalLog_A_MAX -}; - -/** - * MEI att.harpPedal.log\@b - */ -enum harpPedalLog_B : int8_t { - harpPedalLog_B_NONE = 0, - harpPedalLog_B_f, - harpPedalLog_B_n, - harpPedalLog_B_s, - harpPedalLog_B_MAX -}; - -/** - * MEI att.harpPedal.log\@c - */ -enum harpPedalLog_C : int8_t { - harpPedalLog_C_NONE = 0, - harpPedalLog_C_f, - harpPedalLog_C_n, - harpPedalLog_C_s, - harpPedalLog_C_MAX -}; - -/** - * MEI att.harpPedal.log\@d - */ -enum harpPedalLog_D : int8_t { - harpPedalLog_D_NONE = 0, - harpPedalLog_D_f, - harpPedalLog_D_n, - harpPedalLog_D_s, - harpPedalLog_D_MAX -}; - -/** - * MEI att.harpPedal.log\@e - */ -enum harpPedalLog_E : int8_t { - harpPedalLog_E_NONE = 0, - harpPedalLog_E_f, - harpPedalLog_E_n, - harpPedalLog_E_s, - harpPedalLog_E_MAX -}; - -/** - * MEI att.harpPedal.log\@f - */ -enum harpPedalLog_F : int8_t { - harpPedalLog_F_NONE = 0, - harpPedalLog_F_f, - harpPedalLog_F_n, - harpPedalLog_F_s, - harpPedalLog_F_MAX -}; - -/** - * MEI att.harpPedal.log\@g - */ -enum harpPedalLog_G : int8_t { - harpPedalLog_G_NONE = 0, - harpPedalLog_G_f, - harpPedalLog_G_n, - harpPedalLog_G_s, - harpPedalLog_G_MAX -}; - /** * MEI att.line.log\@func */ diff --git a/libmei/dist/meibasic.h b/libmei/dist/meibasic.h index ef66762c8a..bed68650aa 100644 --- a/libmei/dist/meibasic.h +++ b/libmei/dist/meibasic.h @@ -12,7 +12,7 @@ class MEIBasic { // clang-format off inline static std::map> map = { - {"arpeg", {"label", "type", "order", "layer", "plist", "staff", "tstamp", "startid", "arrow", "arrow.shape", "arrow.size", "arrow.color", "arrow.fillcolor", "color", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "lform", "lwidth", "lsegs", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight", "ho", "vo"}}, + {"arpeg", {"label", "type", "order", "layer", "plist", "staff", "tstamp", "startid", "arrow", "arrow.shape", "arrow.size", "arrow.color", "arrow.fillcolor", "color", "enclose", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "lform", "lwidth", "lsegs", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight", "ho", "vo"}}, {"beam", {"label", "type", "layer", "staff", "color", "cue"}}, {"beatRpt", {"label", "type", "beatdef", "layer", "staff", "slash", "color", "expand", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "plist"}}, {"breath", {"label", "type", "layer", "staff", "startid", "tstamp", "color", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "ho", "vo"}}, @@ -27,26 +27,26 @@ class MEIBasic { {"lv", {"label", "type", "layer", "plist", "staff", "tstamp", "endid", "startid", "tstamp2", "color", "curvedir", "lform", "lwidth", "lsegs", "ho", "vo", "startho", "endho", "startvo", "endvo"}}, {"measure", {"label", "type", "left", "right", "metcon", "n"}}, {"mNum", {"label", "type", "xml:lang", "color", "place", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight", "ho", "vo"}}, - {"mRest", {"label", "type", "cue", "dur", "layer", "staff", "color", "cutout", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight", "ho", "vo"}}, + {"mRest", {"label", "type", "cue", "dur", "layer", "staff", "color", "cutout", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "ploc", "oloc", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight", "ho", "vo"}}, {"mRpt", {"label", "type", "layer", "staff", "num", "color", "expand", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "num.place", "num.visible", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight"}}, - {"multiRest", {"label", "type", "layer", "staff", "num", "block", "color", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "num.place", "num.visible", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight", "width"}}, + {"multiRest", {"label", "type", "layer", "staff", "num", "block", "color", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "num.place", "num.visible", "ploc", "oloc", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight", "width"}}, {"multiRpt", {"label", "type", "layer", "staff", "num", "color", "expand", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight"}}, {"octave", {"label", "type", "coll", "layer", "plist", "staff", "tstamp", "dur", "dis", "dis.place", "endid", "startid", "tstamp2", "color", "extender", "lendsym", "lendsym.size", "lstartsym", "lstartsym.size", "lform", "lwidth", "lsegs", "ho", "vo", "startho", "endho"}}, {"pedal", {"label", "type", "dir", "func", "layer", "plist", "staff", "tstamp", "endid", "startid", "tstamp2", "form", "color", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "lendsym", "lendsym.size", "lstartsym", "lstartsym.size", "lform", "lwidth", "lsegs", "place", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight", "ho", "vo"}}, {"reh", {"label", "type", "xml:lang", "staff", "startid", "tstamp", "color", "place", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight", "ho", "vo"}}, - {"repeatMark", {"label", "type", "xml:lang", "func", "layer", "plist", "staff", "tstamp", "dur", "endid", "startid", "tstamp2", "extender", "lendsym", "lendsym.size", "lstartsym", "lstartsym.size", "lform", "lwidth", "lsegs", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "place", "ho", "vo", "startho", "endho"}}, + {"repeatMark", {"label", "type", "xml:lang", "func", "layer", "plist", "staff", "tstamp", "dur", "endid", "startid", "tstamp2", "color", "extender", "lendsym", "lendsym.size", "lstartsym", "lstartsym.size", "lform", "lwidth", "lsegs", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "place", "ho", "vo", "startho", "endho"}}, {"slur", {"label", "type", "layer", "plist", "staff", "tstamp", "dur", "endid", "startid", "tstamp2", "color", "curvedir", "lform", "lwidth", "lsegs", "ho", "vo", "startho", "endho", "startvo", "endvo"}}, {"tie", {"label", "type", "layer", "plist", "staff", "tstamp", "endid", "startid", "tstamp2", "color", "curvedir", "lform", "lwidth", "lsegs", "ho", "vo", "startho", "endho", "startvo", "endvo"}}, {"tuplet", {"label", "type", "dur", "num", "numbase", "layer", "staff", "endid", "startid", "bracket.place", "bracket.visible", "dur.visible", "num.format", "color", "num.place", "num.visible"}}, - {"mordent", {"label", "type", "form", "long", "layer", "plist", "staff", "tstamp", "endid", "startid", "accidupper", "accidlower", "accidupper.ges", "accidlower.ges", "color", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "place", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight", "ho", "vo"}}, - {"trill", {"label", "type", "layer", "plist", "staff", "tstamp", "dur", "accidupper", "accidlower", "accidupper.ges", "accidlower.ges", "endid", "startid", "tstamp2", "color", "extender", "lendsym", "lendsym.size", "lstartsym", "lstartsym.size", "lform", "lwidth", "lsegs", "place", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight", "ho", "vo", "startho", "endho"}}, - {"turn", {"label", "type", "delayed", "form", "layer", "plist", "staff", "tstamp", "accidupper", "accidlower", "accidupper.ges", "accidlower.ges", "startid", "color", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "place", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight", "ho", "vo"}}, - {"fing", {"label", "type", "layer", "plist", "staff", "tstamp", "dur", "endid", "startid", "tstamp2", "extender", "lendsym", "lendsym.size", "lstartsym", "lstartsym.size", "lform", "lwidth", "lsegs", "place", "ho", "vo"}}, + {"mordent", {"label", "type", "form", "long", "layer", "plist", "staff", "tstamp", "endid", "startid", "accidupper", "accidlower", "accidupper.ges", "accidlower.ges", "color", "enclose", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "place", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight", "ho", "vo"}}, + {"trill", {"label", "type", "layer", "plist", "staff", "tstamp", "dur", "accidupper", "accidlower", "accidupper.ges", "accidlower.ges", "endid", "startid", "tstamp2", "color", "enclose", "extender", "lendsym", "lendsym.size", "lstartsym", "lstartsym.size", "lform", "lwidth", "lsegs", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "place", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight", "ho", "vo", "startho", "endho"}}, + {"turn", {"label", "type", "delayed", "form", "layer", "plist", "staff", "tstamp", "accidupper", "accidlower", "accidupper.ges", "accidlower.ges", "startid", "color", "enclose", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "place", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight", "ho", "vo"}}, + {"fing", {"label", "type", "layer", "plist", "staff", "tstamp", "dur", "endid", "startid", "tstamp2", "color", "extender", "lendsym", "lendsym.size", "lstartsym", "lstartsym.size", "lform", "lwidth", "lsegs", "place", "ho", "vo"}}, {"fingGrp", {"label", "type", "form", "layer", "plist", "staff", "tstamp", "dur", "endid", "startid", "tstamp2"}}, - {"chordDef", {"label", "type", "tab.pos", "tab.strings"}}, - {"chordMember", {"label", "type", "accid.ges", "pname", "oct", "tab.fing", "tab.fret", "tab.string"}}, + {"chordDef", {"label", "type", "tab.pos", "tab.strings", "tab.courses"}}, + {"chordMember", {"label", "type", "accid.ges", "pname", "oct", "tab.fing", "tab.fret", "tab.line", "tab.string", "tab.course"}}, {"chordTable", {"label", "type"}}, - {"f", {"label", "type", "layer", "plist", "staff", "tstamp", "dur", "endid", "startid", "tstamp2", "extender", "lendsym", "lendsym.size", "lstartsym", "lstartsym.size", "lform", "lwidth", "lsegs", "place", "ho", "vo"}}, + {"f", {"label", "type", "layer", "plist", "staff", "tstamp", "dur", "endid", "startid", "tstamp2", "color", "extender", "lendsym", "lendsym.size", "lstartsym", "lstartsym.size", "lform", "lwidth", "lsegs", "place", "ho", "vo"}}, {"fb", {"label", "type"}}, {"harm", {"label", "type", "chordref", "layer", "plist", "staff", "tstamp", "dur", "endid", "startid", "tstamp2", "rendgrid", "extender", "lendsym", "lendsym.size", "lstartsym", "lstartsym.size", "lform", "lwidth", "lsegs", "place", "ho", "vo", "startho", "endho"}}, {"availability", {"label", "type", "data"}}, @@ -59,18 +59,18 @@ class MEIBasic { {"volta", {"label", "type", "xml:lang", "color", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight", "vo"}}, {"instrDef", {"label", "n", "type", "midi.channel", "midi.duty", "midi.port", "midi.track", "midi.instrnum", "midi.instrname", "midi.pan", "midi.patchname", "midi.patchnum", "midi.volume", "azimuth", "elevation"}}, {"persName", {"label", "type", "xml:lang", "nymref", "role", "enddate", "isodate", "notafter", "notbefore", "startdate"}}, - {"accid", {"label", "type", "func", "accid", "layer", "plist", "staff", "tstamp", "color", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "ho", "vo", "accid.ges"}}, + {"accid", {"label", "type", "accid.ges", "func", "accid", "layer", "plist", "staff", "tstamp", "color", "enclose", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "ho", "vo"}}, {"arranger", {"label", "type", "xml:lang"}}, - {"artic", {"label", "type", "artic", "layer", "plist", "staff", "tstamp", "color", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "place", "ho", "vo"}}, + {"artic", {"label", "type", "artic", "layer", "plist", "staff", "tstamp", "color", "enclose", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "place", "ho", "vo"}}, {"body", {"label", "type"}}, {"caesura", {"label", "type", "layer", "staff", "startid", "tstamp", "color", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "ho", "vo"}}, - {"chord", {"label", "type", "dots", "grace", "grace.time", "cue", "dur", "layer", "staff", "cluster", "color", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "stem.dir", "stem.len", "stem.mod", "ho", "breaksec", "instr"}}, - {"clef", {"label", "type", "layer", "staff", "cautionary", "shape", "line", "oct", "dis", "dis.place", "color", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight", "ho", "vo"}}, + {"chord", {"label", "type", "instr", "dots", "grace", "grace.time", "cue", "dur", "layer", "staff", "cluster", "color", "enclose", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "stem.dir", "stem.len", "stem.mod", "ho", "breaksec"}}, + {"clef", {"label", "type", "layer", "staff", "cautionary", "shape", "line", "oct", "dis", "dis.place", "color", "enclose", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight", "ho", "vo"}}, {"clefGrp", {"label", "type", "layer", "staff"}}, {"composer", {"label", "type", "xml:lang"}}, {"date", {"label", "type", "calendar", "enddate", "isodate", "notafter", "notbefore", "startdate", "xml:lang"}}, - {"dir", {"label", "type", "xml:lang", "layer", "plist", "staff", "tstamp", "dur", "endid", "startid", "tstamp2", "extender", "lendsym", "lendsym.size", "lstartsym", "lstartsym.size", "lform", "lwidth", "lsegs", "place", "ho", "vo", "startho", "endho"}}, - {"dynam", {"label", "type", "layer", "plist", "staff", "tstamp", "dur", "endid", "startid", "tstamp2", "extender", "lendsym", "lendsym.size", "lstartsym", "lstartsym.size", "lform", "lwidth", "lsegs", "place", "ho", "vo", "startho", "endho", "xml:lang"}}, + {"dir", {"label", "type", "xml:lang", "layer", "plist", "staff", "tstamp", "dur", "endid", "startid", "tstamp2", "color", "extender", "lendsym", "lendsym.size", "lstartsym", "lstartsym.size", "lform", "lwidth", "lsegs", "place", "ho", "vo", "startho", "endho"}}, + {"dynam", {"label", "type", "xml:lang", "layer", "plist", "staff", "tstamp", "dur", "endid", "startid", "tstamp2", "color", "extender", "lendsym", "lendsym.size", "lstartsym", "lstartsym.size", "lform", "lwidth", "lsegs", "place", "ho", "vo", "startho", "endho"}}, {"ending", {"label", "type", "lendsym", "lendsym.size", "lstartsym", "lstartsym.size", "lform", "lwidth", "lsegs"}}, {"label", {"label", "type", "xml:lang"}}, {"labelAbbr", {"label", "type", "xml:lang"}}, @@ -80,28 +80,32 @@ class MEIBasic { {"mdiv", {"label", "type", "attacca", "n"}}, {"mei", {"meiversion"}}, {"music", {"label", "type"}}, - {"note", {"label", "type", "dots", "cue", "dur", "layer", "staff", "grace", "grace.time", "pname", "oct", "color", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "stem.dir", "stem.len", "stem.mod", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight", "ho", "breaksec", "oct.ges", "pname.ges", "instr", "vel", "tab.fing", "tab.fret", "tab.string"}}, - {"ornam", {"label", "type", "layer", "plist", "staff", "tstamp", "dur", "accidupper", "accidlower", "accidupper.ges", "accidlower.ges", "endid", "startid", "tstamp2", "color", "place", "ho", "vo", "startho", "endho"}}, + {"note", {"label", "type", "oct.ges", "pname.ges", "instr", "vel", "tab.fing", "tab.fret", "tab.line", "tab.string", "tab.course", "dots", "cue", "dur", "layer", "staff", "grace", "grace.time", "pname", "oct", "color", "enclose", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "stem.dir", "stem.len", "stem.mod", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight", "ho", "breaksec"}}, + {"ornam", {"label", "type", "layer", "plist", "staff", "tstamp", "dur", "accidupper", "accidlower", "accidupper.ges", "accidlower.ges", "endid", "startid", "tstamp2", "color", "enclose", "place", "ho", "vo", "startho", "endho"}}, {"pb", {"label", "type", "folium"}}, {"pgFoot", {"label", "type", "func", "halign", "xml:lang"}}, {"pgHead", {"label", "type", "func", "halign", "xml:lang"}}, {"pubPlace", {"label", "type", "xml:lang"}}, {"rend", {"color", "label", "type", "glyph.auth", "glyph.uri", "halign", "xml:lang", "altrend", "rend", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight", "valign", "xml:space", "rotation"}}, {"respStmt", {"label", "type"}}, - {"rest", {"label", "type", "dots", "cue", "dur", "layer", "staff", "color", "breaksec", "ho", "vo", "instr"}}, + {"rest", {"label", "type", "instr", "dots", "cue", "dur", "layer", "staff", "color", "enclose", "breaksec", "ploc", "oloc", "ho", "vo"}}, {"sb", {"label", "type", "form", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight"}}, {"score", {"label", "type"}}, {"scoreDef", {"label", "type", "keysig", "meter.count", "meter.unit", "meter.sym"}}, {"section", {"label", "type", "attacca", "restart"}}, {"space", {"label", "type", "dots", "dur", "layer", "staff", "compressable", "cutout"}}, {"staff", {"label", "n", "type"}}, - {"staffDef", {"label", "n", "type", "lines", "clef.shape", "clef.line", "clef.dis", "clef.dis.place", "keysig", "meter.count", "meter.unit", "meter.sym", "trans.diat", "trans.semi", "instr", "tab.strings", "ppq", "tune.Hz", "tune.pname", "tune.temper"}}, + {"staffDef", {"label", "n", "type", "instr", "tab.strings", "tab.courses", "ppq", "tune.Hz", "tune.pname", "tune.temper", "lines", "clef.shape", "clef.line", "clef.dis", "clef.dis.place", "keysig", "meter.count", "meter.unit", "meter.sym", "trans.diat", "trans.semi", "lines.color", "lines.visible", "scale"}}, {"staffGrp", {"label", "type", "bar.thru", "symbol", "instr"}}, {"syl", {"label", "type", "xml:lang", "con", "wordpos", "place", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight", "ho", "vo", "halign"}}, {"symbol", {"label", "type", "color", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "scale", "ho", "vo"}}, - {"tempo", {"label", "type", "xml:lang", "func", "layer", "plist", "staff", "tstamp", "mm", "mm.unit", "mm.dots", "endid", "startid", "tstamp2", "extender", "lendsym", "lendsym.size", "lstartsym", "lstartsym.size", "lform", "lwidth", "lsegs", "place", "ho", "vo", "startho", "endho", "midi.bpm", "midi.mspb"}}, + {"tempo", {"label", "type", "xml:lang", "midi.bpm", "midi.mspb", "func", "layer", "plist", "staff", "tstamp", "mm", "mm.unit", "mm.dots", "endid", "startid", "tstamp2", "color", "extender", "lendsym", "lendsym.size", "lstartsym", "lstartsym.size", "lform", "lwidth", "lsegs", "place", "ho", "vo", "startho", "endho"}}, {"title", {"label", "xml:lang", "n", "level", "type"}}, {"barre", {"label", "type", "endid", "startid", "fret"}}, + {"course", {"label", "type", "accid", "pname", "oct"}}, + {"string", {"label", "type", "accid", "pname", "oct"}}, + {"tabDurSym", {"label", "type", "tab.fing", "tab.fret", "tab.line", "tab.string", "tab.course", "layer", "color", "glyph.auth", "glyph.uri", "glyph.name", "glyph.num", "place", "fontfam", "fontname", "fontsize", "fontstyle", "fontweight", "letterspacing", "lineheight", "ho", "vo"}}, + {"tabGrp", {"label", "type", "dots", "dur", "layer", "staff", "ho"}}, }; // clang-format on